/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/

var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __commonJS = (cb, mod) => function __require() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __publicField = (obj, key, value) => {
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  return value;
};
var __toBinary = /* @__PURE__ */ (() => {
  var table = new Uint8Array(128);
  for (var i = 0; i < 64; i++)
    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
  return (base64) => {
    var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0);
    for (var i2 = 0, j = 0; i2 < n; ) {
      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];
      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];
      bytes[j++] = c0 << 2 | c1 >> 4;
      bytes[j++] = c1 << 4 | c2 >> 2;
      bytes[j++] = c2 << 6 | c3;
    }
    return bytes;
  };
})();

// node_modules/upath/build/code/upath.js
var require_upath = __commonJS({
  "node_modules/upath/build/code/upath.js"(exports) {
    var VERSION = "2.0.1";
    var extraFn;
    var extraFunctions;
    var isFunction;
    var isString;
    var isValidExt;
    var name;
    var path;
    var propName;
    var propValue;
    var toUnix;
    var upath;
    var slice = [].slice;
    var indexOf = [].indexOf || function(item) {
      for (var i = 0, l = this.length; i < l; i++) {
        if (i in this && this[i] === item)
          return i;
      }
      return -1;
    };
    var hasProp = {}.hasOwnProperty;
    path = require("path");
    isFunction = function(val) {
      return typeof val === "function";
    };
    isString = function(val) {
      return typeof val === "string" || !!val && typeof val === "object" && Object.prototype.toString.call(val) === "[object String]";
    };
    upath = exports;
    upath.VERSION = typeof VERSION !== "undefined" && VERSION !== null ? VERSION : "NO-VERSION";
    toUnix = function(p) {
      p = p.replace(/\\/g, "/");
      p = p.replace(/(?<!^)\/+/g, "/");
      return p;
    };
    for (propName in path) {
      propValue = path[propName];
      if (isFunction(propValue)) {
        upath[propName] = function(propName2) {
          return function() {
            var args, result;
            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
            args = args.map(function(p) {
              if (isString(p)) {
                return toUnix(p);
              } else {
                return p;
              }
            });
            result = path[propName2].apply(path, args);
            if (isString(result)) {
              return toUnix(result);
            } else {
              return result;
            }
          };
        }(propName);
      } else {
        upath[propName] = propValue;
      }
    }
    upath.sep = "/";
    extraFunctions = {
      toUnix,
      normalizeSafe: function(p) {
        var result;
        p = toUnix(p);
        result = upath.normalize(p);
        if (p.startsWith("./") && !result.startsWith("./") && !result.startsWith("..")) {
          result = "./" + result;
        } else if (p.startsWith("//") && !result.startsWith("//")) {
          if (p.startsWith("//./")) {
            result = "//." + result;
          } else {
            result = "/" + result;
          }
        }
        return result;
      },
      normalizeTrim: function(p) {
        p = upath.normalizeSafe(p);
        if (p.endsWith("/")) {
          return p.slice(0, +(p.length - 2) + 1 || 9e9);
        } else {
          return p;
        }
      },
      joinSafe: function() {
        var p, p0, result;
        p = 1 <= arguments.length ? slice.call(arguments, 0) : [];
        result = upath.join.apply(null, p);
        if (p.length > 0) {
          p0 = toUnix(p[0]);
          if (p0.startsWith("./") && !result.startsWith("./") && !result.startsWith("..")) {
            result = "./" + result;
          } else if (p0.startsWith("//") && !result.startsWith("//")) {
            if (p0.startsWith("//./")) {
              result = "//." + result;
            } else {
              result = "/" + result;
            }
          }
        }
        return result;
      },
      addExt: function(file, ext) {
        if (!ext) {
          return file;
        } else {
          if (ext[0] !== ".") {
            ext = "." + ext;
          }
          return file + (file.endsWith(ext) ? "" : ext);
        }
      },
      trimExt: function(filename, ignoreExts, maxSize) {
        var oldExt;
        if (maxSize == null) {
          maxSize = 7;
        }
        oldExt = upath.extname(filename);
        if (isValidExt(oldExt, ignoreExts, maxSize)) {
          return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9e9);
        } else {
          return filename;
        }
      },
      removeExt: function(filename, ext) {
        if (!ext) {
          return filename;
        } else {
          ext = ext[0] === "." ? ext : "." + ext;
          if (upath.extname(filename) === ext) {
            return upath.trimExt(filename, [], ext.length);
          } else {
            return filename;
          }
        }
      },
      changeExt: function(filename, ext, ignoreExts, maxSize) {
        if (maxSize == null) {
          maxSize = 7;
        }
        return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? "" : ext[0] === "." ? ext : "." + ext);
      },
      defaultExt: function(filename, ext, ignoreExts, maxSize) {
        var oldExt;
        if (maxSize == null) {
          maxSize = 7;
        }
        oldExt = upath.extname(filename);
        if (isValidExt(oldExt, ignoreExts, maxSize)) {
          return filename;
        } else {
          return upath.addExt(filename, ext);
        }
      }
    };
    isValidExt = function(ext, ignoreExts, maxSize) {
      if (ignoreExts == null) {
        ignoreExts = [];
      }
      return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function(e) {
        return (e && e[0] !== "." ? "." : "") + e;
      }), ext) < 0;
    };
    for (name in extraFunctions) {
      if (!hasProp.call(extraFunctions, name))
        continue;
      extraFn = extraFunctions[name];
      if (upath[name] !== void 0) {
        throw new Error("path." + name + " already exists.");
      } else {
        upath[name] = extraFn;
      }
    }
  }
});

// node_modules/mime/Mime.js
var require_Mime = __commonJS({
  "node_modules/mime/Mime.js"(exports, module2) {
    "use strict";
    function Mime() {
      this._types = /* @__PURE__ */ Object.create(null);
      this._extensions = /* @__PURE__ */ Object.create(null);
      for (let i = 0; i < arguments.length; i++) {
        this.define(arguments[i]);
      }
      this.define = this.define.bind(this);
      this.getType = this.getType.bind(this);
      this.getExtension = this.getExtension.bind(this);
    }
    Mime.prototype.define = function(typeMap, force) {
      for (let type in typeMap) {
        let extensions2 = typeMap[type].map(function(t) {
          return t.toLowerCase();
        });
        type = type.toLowerCase();
        for (let i = 0; i < extensions2.length; i++) {
          const ext = extensions2[i];
          if (ext[0] === "*") {
            continue;
          }
          if (!force && ext in this._types) {
            throw new Error('Attempt to change mapping for "' + ext + '" extension from "' + this._types[ext] + '" to "' + type + '". Pass `force=true` to allow this, otherwise remove "' + ext + '" from the list of extensions for "' + type + '".');
          }
          this._types[ext] = type;
        }
        if (force || !this._extensions[type]) {
          const ext = extensions2[0];
          this._extensions[type] = ext[0] !== "*" ? ext : ext.substr(1);
        }
      }
    };
    Mime.prototype.getType = function(path) {
      path = String(path);
      let last2 = path.replace(/^.*[/\\]/, "").toLowerCase();
      let ext = last2.replace(/^.*\./, "").toLowerCase();
      let hasPath = last2.length < path.length;
      let hasDot = ext.length < last2.length - 1;
      return (hasDot || !hasPath) && this._types[ext] || null;
    };
    Mime.prototype.getExtension = function(type) {
      type = /^\s*([^;\s]*)/.test(type) && RegExp.$1;
      return type && this._extensions[type.toLowerCase()] || null;
    };
    module2.exports = Mime;
  }
});

// node_modules/mime/types/standard.js
var require_standard = __commonJS({
  "node_modules/mime/types/standard.js"(exports, module2) {
    module2.exports = { "application/andrew-inset": ["ez"], "application/applixware": ["aw"], "application/atom+xml": ["atom"], "application/atomcat+xml": ["atomcat"], "application/atomdeleted+xml": ["atomdeleted"], "application/atomsvc+xml": ["atomsvc"], "application/atsc-dwd+xml": ["dwd"], "application/atsc-held+xml": ["held"], "application/atsc-rsat+xml": ["rsat"], "application/bdoc": ["bdoc"], "application/calendar+xml": ["xcs"], "application/ccxml+xml": ["ccxml"], "application/cdfx+xml": ["cdfx"], "application/cdmi-capability": ["cdmia"], "application/cdmi-container": ["cdmic"], "application/cdmi-domain": ["cdmid"], "application/cdmi-object": ["cdmio"], "application/cdmi-queue": ["cdmiq"], "application/cu-seeme": ["cu"], "application/dash+xml": ["mpd"], "application/davmount+xml": ["davmount"], "application/docbook+xml": ["dbk"], "application/dssc+der": ["dssc"], "application/dssc+xml": ["xdssc"], "application/ecmascript": ["es", "ecma"], "application/emma+xml": ["emma"], "application/emotionml+xml": ["emotionml"], "application/epub+zip": ["epub"], "application/exi": ["exi"], "application/express": ["exp"], "application/fdt+xml": ["fdt"], "application/font-tdpfr": ["pfr"], "application/geo+json": ["geojson"], "application/gml+xml": ["gml"], "application/gpx+xml": ["gpx"], "application/gxf": ["gxf"], "application/gzip": ["gz"], "application/hjson": ["hjson"], "application/hyperstudio": ["stk"], "application/inkml+xml": ["ink", "inkml"], "application/ipfix": ["ipfix"], "application/its+xml": ["its"], "application/java-archive": ["jar", "war", "ear"], "application/java-serialized-object": ["ser"], "application/java-vm": ["class"], "application/javascript": ["js", "mjs"], "application/json": ["json", "map"], "application/json5": ["json5"], "application/jsonml+json": ["jsonml"], "application/ld+json": ["jsonld"], "application/lgr+xml": ["lgr"], "application/lost+xml": ["lostxml"], "application/mac-binhex40": ["hqx"], "application/mac-compactpro": ["cpt"], "application/mads+xml": ["mads"], "application/manifest+json": ["webmanifest"], "application/marc": ["mrc"], "application/marcxml+xml": ["mrcx"], "application/mathematica": ["ma", "nb", "mb"], "application/mathml+xml": ["mathml"], "application/mbox": ["mbox"], "application/mediaservercontrol+xml": ["mscml"], "application/metalink+xml": ["metalink"], "application/metalink4+xml": ["meta4"], "application/mets+xml": ["mets"], "application/mmt-aei+xml": ["maei"], "application/mmt-usd+xml": ["musd"], "application/mods+xml": ["mods"], "application/mp21": ["m21", "mp21"], "application/mp4": ["mp4s", "m4p"], "application/msword": ["doc", "dot"], "application/mxf": ["mxf"], "application/n-quads": ["nq"], "application/n-triples": ["nt"], "application/node": ["cjs"], "application/octet-stream": ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"], "application/oda": ["oda"], "application/oebps-package+xml": ["opf"], "application/ogg": ["ogx"], "application/omdoc+xml": ["omdoc"], "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"], "application/oxps": ["oxps"], "application/p2p-overlay+xml": ["relo"], "application/patch-ops-error+xml": ["xer"], "application/pdf": ["pdf"], "application/pgp-encrypted": ["pgp"], "application/pgp-signature": ["asc", "sig"], "application/pics-rules": ["prf"], "application/pkcs10": ["p10"], "application/pkcs7-mime": ["p7m", "p7c"], "application/pkcs7-signature": ["p7s"], "application/pkcs8": ["p8"], "application/pkix-attr-cert": ["ac"], "application/pkix-cert": ["cer"], "application/pkix-crl": ["crl"], "application/pkix-pkipath": ["pkipath"], "application/pkixcmp": ["pki"], "application/pls+xml": ["pls"], "application/postscript": ["ai", "eps", "ps"], "application/provenance+xml": ["provx"], "application/pskc+xml": ["pskcxml"], "application/raml+yaml": ["raml"], "application/rdf+xml": ["rdf", "owl"], "application/reginfo+xml": ["rif"], "application/relax-ng-compact-syntax": ["rnc"], "application/resource-lists+xml": ["rl"], "application/resource-lists-diff+xml": ["rld"], "application/rls-services+xml": ["rs"], "application/route-apd+xml": ["rapd"], "application/route-s-tsid+xml": ["sls"], "application/route-usd+xml": ["rusd"], "application/rpki-ghostbusters": ["gbr"], "application/rpki-manifest": ["mft"], "application/rpki-roa": ["roa"], "application/rsd+xml": ["rsd"], "application/rss+xml": ["rss"], "application/rtf": ["rtf"], "application/sbml+xml": ["sbml"], "application/scvp-cv-request": ["scq"], "application/scvp-cv-response": ["scs"], "application/scvp-vp-request": ["spq"], "application/scvp-vp-response": ["spp"], "application/sdp": ["sdp"], "application/senml+xml": ["senmlx"], "application/sensml+xml": ["sensmlx"], "application/set-payment-initiation": ["setpay"], "application/set-registration-initiation": ["setreg"], "application/shf+xml": ["shf"], "application/sieve": ["siv", "sieve"], "application/smil+xml": ["smi", "smil"], "application/sparql-query": ["rq"], "application/sparql-results+xml": ["srx"], "application/srgs": ["gram"], "application/srgs+xml": ["grxml"], "application/sru+xml": ["sru"], "application/ssdl+xml": ["ssdl"], "application/ssml+xml": ["ssml"], "application/swid+xml": ["swidtag"], "application/tei+xml": ["tei", "teicorpus"], "application/thraud+xml": ["tfi"], "application/timestamped-data": ["tsd"], "application/toml": ["toml"], "application/trig": ["trig"], "application/ttml+xml": ["ttml"], "application/ubjson": ["ubj"], "application/urc-ressheet+xml": ["rsheet"], "application/urc-targetdesc+xml": ["td"], "application/voicexml+xml": ["vxml"], "application/wasm": ["wasm"], "application/widget": ["wgt"], "application/winhlp": ["hlp"], "application/wsdl+xml": ["wsdl"], "application/wspolicy+xml": ["wspolicy"], "application/xaml+xml": ["xaml"], "application/xcap-att+xml": ["xav"], "application/xcap-caps+xml": ["xca"], "application/xcap-diff+xml": ["xdf"], "application/xcap-el+xml": ["xel"], "application/xcap-ns+xml": ["xns"], "application/xenc+xml": ["xenc"], "application/xhtml+xml": ["xhtml", "xht"], "application/xliff+xml": ["xlf"], "application/xml": ["xml", "xsl", "xsd", "rng"], "application/xml-dtd": ["dtd"], "application/xop+xml": ["xop"], "application/xproc+xml": ["xpl"], "application/xslt+xml": ["*xsl", "xslt"], "application/xspf+xml": ["xspf"], "application/xv+xml": ["mxml", "xhvml", "xvml", "xvm"], "application/yang": ["yang"], "application/yin+xml": ["yin"], "application/zip": ["zip"], "audio/3gpp": ["*3gpp"], "audio/adpcm": ["adp"], "audio/amr": ["amr"], "audio/basic": ["au", "snd"], "audio/midi": ["mid", "midi", "kar", "rmi"], "audio/mobile-xmf": ["mxmf"], "audio/mp3": ["*mp3"], "audio/mp4": ["m4a", "mp4a"], "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"], "audio/ogg": ["oga", "ogg", "spx", "opus"], "audio/s3m": ["s3m"], "audio/silk": ["sil"], "audio/wav": ["wav"], "audio/wave": ["*wav"], "audio/webm": ["weba"], "audio/xm": ["xm"], "font/collection": ["ttc"], "font/otf": ["otf"], "font/ttf": ["ttf"], "font/woff": ["woff"], "font/woff2": ["woff2"], "image/aces": ["exr"], "image/apng": ["apng"], "image/avif": ["avif"], "image/bmp": ["bmp"], "image/cgm": ["cgm"], "image/dicom-rle": ["drle"], "image/emf": ["emf"], "image/fits": ["fits"], "image/g3fax": ["g3"], "image/gif": ["gif"], "image/heic": ["heic"], "image/heic-sequence": ["heics"], "image/heif": ["heif"], "image/heif-sequence": ["heifs"], "image/hej2k": ["hej2"], "image/hsj2": ["hsj2"], "image/ief": ["ief"], "image/jls": ["jls"], "image/jp2": ["jp2", "jpg2"], "image/jpeg": ["jpeg", "jpg", "jpe"], "image/jph": ["jph"], "image/jphc": ["jhc"], "image/jpm": ["jpm"], "image/jpx": ["jpx", "jpf"], "image/jxr": ["jxr"], "image/jxra": ["jxra"], "image/jxrs": ["jxrs"], "image/jxs": ["jxs"], "image/jxsc": ["jxsc"], "image/jxsi": ["jxsi"], "image/jxss": ["jxss"], "image/ktx": ["ktx"], "image/ktx2": ["ktx2"], "image/png": ["png"], "image/sgi": ["sgi"], "image/svg+xml": ["svg", "svgz"], "image/t38": ["t38"], "image/tiff": ["tif", "tiff"], "image/tiff-fx": ["tfx"], "image/webp": ["webp"], "image/wmf": ["wmf"], "message/disposition-notification": ["disposition-notification"], "message/global": ["u8msg"], "message/global-delivery-status": ["u8dsn"], "message/global-disposition-notification": ["u8mdn"], "message/global-headers": ["u8hdr"], "message/rfc822": ["eml", "mime"], "model/3mf": ["3mf"], "model/gltf+json": ["gltf"], "model/gltf-binary": ["glb"], "model/iges": ["igs", "iges"], "model/mesh": ["msh", "mesh", "silo"], "model/mtl": ["mtl"], "model/obj": ["obj"], "model/step+xml": ["stpx"], "model/step+zip": ["stpz"], "model/step-xml+zip": ["stpxz"], "model/stl": ["stl"], "model/vrml": ["wrl", "vrml"], "model/x3d+binary": ["*x3db", "x3dbz"], "model/x3d+fastinfoset": ["x3db"], "model/x3d+vrml": ["*x3dv", "x3dvz"], "model/x3d+xml": ["x3d", "x3dz"], "model/x3d-vrml": ["x3dv"], "text/cache-manifest": ["appcache", "manifest"], "text/calendar": ["ics", "ifb"], "text/coffeescript": ["coffee", "litcoffee"], "text/css": ["css"], "text/csv": ["csv"], "text/html": ["html", "htm", "shtml"], "text/jade": ["jade"], "text/jsx": ["jsx"], "text/less": ["less"], "text/markdown": ["markdown", "md"], "text/mathml": ["mml"], "text/mdx": ["mdx"], "text/n3": ["n3"], "text/plain": ["txt", "text", "conf", "def", "list", "log", "in", "ini"], "text/richtext": ["rtx"], "text/rtf": ["*rtf"], "text/sgml": ["sgml", "sgm"], "text/shex": ["shex"], "text/slim": ["slim", "slm"], "text/spdx": ["spdx"], "text/stylus": ["stylus", "styl"], "text/tab-separated-values": ["tsv"], "text/troff": ["t", "tr", "roff", "man", "me", "ms"], "text/turtle": ["ttl"], "text/uri-list": ["uri", "uris", "urls"], "text/vcard": ["vcard"], "text/vtt": ["vtt"], "text/xml": ["*xml"], "text/yaml": ["yaml", "yml"], "video/3gpp": ["3gp", "3gpp"], "video/3gpp2": ["3g2"], "video/h261": ["h261"], "video/h263": ["h263"], "video/h264": ["h264"], "video/iso.segment": ["m4s"], "video/jpeg": ["jpgv"], "video/jpm": ["*jpm", "jpgm"], "video/mj2": ["mj2", "mjp2"], "video/mp2t": ["ts"], "video/mp4": ["mp4", "mp4v", "mpg4"], "video/mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v"], "video/ogg": ["ogv"], "video/quicktime": ["qt", "mov"], "video/webm": ["webm"] };
  }
});

// node_modules/mime/types/other.js
var require_other = __commonJS({
  "node_modules/mime/types/other.js"(exports, module2) {
    module2.exports = { "application/prs.cww": ["cww"], "application/vnd.1000minds.decision-model+xml": ["1km"], "application/vnd.3gpp.pic-bw-large": ["plb"], "application/vnd.3gpp.pic-bw-small": ["psb"], "application/vnd.3gpp.pic-bw-var": ["pvb"], "application/vnd.3gpp2.tcap": ["tcap"], "application/vnd.3m.post-it-notes": ["pwn"], "application/vnd.accpac.simply.aso": ["aso"], "application/vnd.accpac.simply.imp": ["imp"], "application/vnd.acucobol": ["acu"], "application/vnd.acucorp": ["atc", "acutc"], "application/vnd.adobe.air-application-installer-package+zip": ["air"], "application/vnd.adobe.formscentral.fcdt": ["fcdt"], "application/vnd.adobe.fxp": ["fxp", "fxpl"], "application/vnd.adobe.xdp+xml": ["xdp"], "application/vnd.adobe.xfdf": ["xfdf"], "application/vnd.ahead.space": ["ahead"], "application/vnd.airzip.filesecure.azf": ["azf"], "application/vnd.airzip.filesecure.azs": ["azs"], "application/vnd.amazon.ebook": ["azw"], "application/vnd.americandynamics.acc": ["acc"], "application/vnd.amiga.ami": ["ami"], "application/vnd.android.package-archive": ["apk"], "application/vnd.anser-web-certificate-issue-initiation": ["cii"], "application/vnd.anser-web-funds-transfer-initiation": ["fti"], "application/vnd.antix.game-component": ["atx"], "application/vnd.apple.installer+xml": ["mpkg"], "application/vnd.apple.keynote": ["key"], "application/vnd.apple.mpegurl": ["m3u8"], "application/vnd.apple.numbers": ["numbers"], "application/vnd.apple.pages": ["pages"], "application/vnd.apple.pkpass": ["pkpass"], "application/vnd.aristanetworks.swi": ["swi"], "application/vnd.astraea-software.iota": ["iota"], "application/vnd.audiograph": ["aep"], "application/vnd.balsamiq.bmml+xml": ["bmml"], "application/vnd.blueice.multipass": ["mpm"], "application/vnd.bmi": ["bmi"], "application/vnd.businessobjects": ["rep"], "application/vnd.chemdraw+xml": ["cdxml"], "application/vnd.chipnuts.karaoke-mmd": ["mmd"], "application/vnd.cinderella": ["cdy"], "application/vnd.citationstyles.style+xml": ["csl"], "application/vnd.claymore": ["cla"], "application/vnd.cloanto.rp9": ["rp9"], "application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"], "application/vnd.cluetrust.cartomobile-config": ["c11amc"], "application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"], "application/vnd.commonspace": ["csp"], "application/vnd.contact.cmsg": ["cdbcmsg"], "application/vnd.cosmocaller": ["cmc"], "application/vnd.crick.clicker": ["clkx"], "application/vnd.crick.clicker.keyboard": ["clkk"], "application/vnd.crick.clicker.palette": ["clkp"], "application/vnd.crick.clicker.template": ["clkt"], "application/vnd.crick.clicker.wordbank": ["clkw"], "application/vnd.criticaltools.wbs+xml": ["wbs"], "application/vnd.ctc-posml": ["pml"], "application/vnd.cups-ppd": ["ppd"], "application/vnd.curl.car": ["car"], "application/vnd.curl.pcurl": ["pcurl"], "application/vnd.dart": ["dart"], "application/vnd.data-vision.rdz": ["rdz"], "application/vnd.dbf": ["dbf"], "application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"], "application/vnd.dece.ttml+xml": ["uvt", "uvvt"], "application/vnd.dece.unspecified": ["uvx", "uvvx"], "application/vnd.dece.zip": ["uvz", "uvvz"], "application/vnd.denovo.fcselayout-link": ["fe_launch"], "application/vnd.dna": ["dna"], "application/vnd.dolby.mlp": ["mlp"], "application/vnd.dpgraph": ["dpg"], "application/vnd.dreamfactory": ["dfac"], "application/vnd.ds-keypoint": ["kpxx"], "application/vnd.dvb.ait": ["ait"], "application/vnd.dvb.service": ["svc"], "application/vnd.dynageo": ["geo"], "application/vnd.ecowin.chart": ["mag"], "application/vnd.enliven": ["nml"], "application/vnd.epson.esf": ["esf"], "application/vnd.epson.msf": ["msf"], "application/vnd.epson.quickanime": ["qam"], "application/vnd.epson.salt": ["slt"], "application/vnd.epson.ssf": ["ssf"], "application/vnd.eszigno3+xml": ["es3", "et3"], "application/vnd.ezpix-album": ["ez2"], "application/vnd.ezpix-package": ["ez3"], "application/vnd.fdf": ["fdf"], "application/vnd.fdsn.mseed": ["mseed"], "application/vnd.fdsn.seed": ["seed", "dataless"], "application/vnd.flographit": ["gph"], "application/vnd.fluxtime.clip": ["ftc"], "application/vnd.framemaker": ["fm", "frame", "maker", "book"], "application/vnd.frogans.fnc": ["fnc"], "application/vnd.frogans.ltf": ["ltf"], "application/vnd.fsc.weblaunch": ["fsc"], "application/vnd.fujitsu.oasys": ["oas"], "application/vnd.fujitsu.oasys2": ["oa2"], "application/vnd.fujitsu.oasys3": ["oa3"], "application/vnd.fujitsu.oasysgp": ["fg5"], "application/vnd.fujitsu.oasysprs": ["bh2"], "application/vnd.fujixerox.ddd": ["ddd"], "application/vnd.fujixerox.docuworks": ["xdw"], "application/vnd.fujixerox.docuworks.binder": ["xbd"], "application/vnd.fuzzysheet": ["fzs"], "application/vnd.genomatix.tuxedo": ["txd"], "application/vnd.geogebra.file": ["ggb"], "application/vnd.geogebra.tool": ["ggt"], "application/vnd.geometry-explorer": ["gex", "gre"], "application/vnd.geonext": ["gxt"], "application/vnd.geoplan": ["g2w"], "application/vnd.geospace": ["g3w"], "application/vnd.gmx": ["gmx"], "application/vnd.google-apps.document": ["gdoc"], "application/vnd.google-apps.presentation": ["gslides"], "application/vnd.google-apps.spreadsheet": ["gsheet"], "application/vnd.google-earth.kml+xml": ["kml"], "application/vnd.google-earth.kmz": ["kmz"], "application/vnd.grafeq": ["gqf", "gqs"], "application/vnd.groove-account": ["gac"], "application/vnd.groove-help": ["ghf"], "application/vnd.groove-identity-message": ["gim"], "application/vnd.groove-injector": ["grv"], "application/vnd.groove-tool-message": ["gtm"], "application/vnd.groove-tool-template": ["tpl"], "application/vnd.groove-vcard": ["vcg"], "application/vnd.hal+xml": ["hal"], "application/vnd.handheld-entertainment+xml": ["zmm"], "application/vnd.hbci": ["hbci"], "application/vnd.hhe.lesson-player": ["les"], "application/vnd.hp-hpgl": ["hpgl"], "application/vnd.hp-hpid": ["hpid"], "application/vnd.hp-hps": ["hps"], "application/vnd.hp-jlyt": ["jlt"], "application/vnd.hp-pcl": ["pcl"], "application/vnd.hp-pclxl": ["pclxl"], "application/vnd.hydrostatix.sof-data": ["sfd-hdstx"], "application/vnd.ibm.minipay": ["mpy"], "application/vnd.ibm.modcap": ["afp", "listafp", "list3820"], "application/vnd.ibm.rights-management": ["irm"], "application/vnd.ibm.secure-container": ["sc"], "application/vnd.iccprofile": ["icc", "icm"], "application/vnd.igloader": ["igl"], "application/vnd.immervision-ivp": ["ivp"], "application/vnd.immervision-ivu": ["ivu"], "application/vnd.insors.igm": ["igm"], "application/vnd.intercon.formnet": ["xpw", "xpx"], "application/vnd.intergeo": ["i2g"], "application/vnd.intu.qbo": ["qbo"], "application/vnd.intu.qfx": ["qfx"], "application/vnd.ipunplugged.rcprofile": ["rcprofile"], "application/vnd.irepository.package+xml": ["irp"], "application/vnd.is-xpr": ["xpr"], "application/vnd.isac.fcs": ["fcs"], "application/vnd.jam": ["jam"], "application/vnd.jcp.javame.midlet-rms": ["rms"], "application/vnd.jisp": ["jisp"], "application/vnd.joost.joda-archive": ["joda"], "application/vnd.kahootz": ["ktz", "ktr"], "application/vnd.kde.karbon": ["karbon"], "application/vnd.kde.kchart": ["chrt"], "application/vnd.kde.kformula": ["kfo"], "application/vnd.kde.kivio": ["flw"], "application/vnd.kde.kontour": ["kon"], "application/vnd.kde.kpresenter": ["kpr", "kpt"], "application/vnd.kde.kspread": ["ksp"], "application/vnd.kde.kword": ["kwd", "kwt"], "application/vnd.kenameaapp": ["htke"], "application/vnd.kidspiration": ["kia"], "application/vnd.kinar": ["kne", "knp"], "application/vnd.koan": ["skp", "skd", "skt", "skm"], "application/vnd.kodak-descriptor": ["sse"], "application/vnd.las.las+xml": ["lasxml"], "application/vnd.llamagraphics.life-balance.desktop": ["lbd"], "application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"], "application/vnd.lotus-1-2-3": ["123"], "application/vnd.lotus-approach": ["apr"], "application/vnd.lotus-freelance": ["pre"], "application/vnd.lotus-notes": ["nsf"], "application/vnd.lotus-organizer": ["org"], "application/vnd.lotus-screencam": ["scm"], "application/vnd.lotus-wordpro": ["lwp"], "application/vnd.macports.portpkg": ["portpkg"], "application/vnd.mapbox-vector-tile": ["mvt"], "application/vnd.mcd": ["mcd"], "application/vnd.medcalcdata": ["mc1"], "application/vnd.mediastation.cdkey": ["cdkey"], "application/vnd.mfer": ["mwf"], "application/vnd.mfmp": ["mfm"], "application/vnd.micrografx.flo": ["flo"], "application/vnd.micrografx.igx": ["igx"], "application/vnd.mif": ["mif"], "application/vnd.mobius.daf": ["daf"], "application/vnd.mobius.dis": ["dis"], "application/vnd.mobius.mbk": ["mbk"], "application/vnd.mobius.mqy": ["mqy"], "application/vnd.mobius.msl": ["msl"], "application/vnd.mobius.plc": ["plc"], "application/vnd.mobius.txf": ["txf"], "application/vnd.mophun.application": ["mpn"], "application/vnd.mophun.certificate": ["mpc"], "application/vnd.mozilla.xul+xml": ["xul"], "application/vnd.ms-artgalry": ["cil"], "application/vnd.ms-cab-compressed": ["cab"], "application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], "application/vnd.ms-excel.addin.macroenabled.12": ["xlam"], "application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"], "application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"], "application/vnd.ms-excel.template.macroenabled.12": ["xltm"], "application/vnd.ms-fontobject": ["eot"], "application/vnd.ms-htmlhelp": ["chm"], "application/vnd.ms-ims": ["ims"], "application/vnd.ms-lrm": ["lrm"], "application/vnd.ms-officetheme": ["thmx"], "application/vnd.ms-outlook": ["msg"], "application/vnd.ms-pki.seccat": ["cat"], "application/vnd.ms-pki.stl": ["*stl"], "application/vnd.ms-powerpoint": ["ppt", "pps", "pot"], "application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"], "application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"], "application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"], "application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"], "application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"], "application/vnd.ms-project": ["mpp", "mpt"], "application/vnd.ms-word.document.macroenabled.12": ["docm"], "application/vnd.ms-word.template.macroenabled.12": ["dotm"], "application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"], "application/vnd.ms-wpl": ["wpl"], "application/vnd.ms-xpsdocument": ["xps"], "application/vnd.mseq": ["mseq"], "application/vnd.musician": ["mus"], "application/vnd.muvee.style": ["msty"], "application/vnd.mynfc": ["taglet"], "application/vnd.neurolanguage.nlu": ["nlu"], "application/vnd.nitf": ["ntf", "nitf"], "application/vnd.noblenet-directory": ["nnd"], "application/vnd.noblenet-sealer": ["nns"], "application/vnd.noblenet-web": ["nnw"], "application/vnd.nokia.n-gage.ac+xml": ["*ac"], "application/vnd.nokia.n-gage.data": ["ngdat"], "application/vnd.nokia.n-gage.symbian.install": ["n-gage"], "application/vnd.nokia.radio-preset": ["rpst"], "application/vnd.nokia.radio-presets": ["rpss"], "application/vnd.novadigm.edm": ["edm"], "application/vnd.novadigm.edx": ["edx"], "application/vnd.novadigm.ext": ["ext"], "application/vnd.oasis.opendocument.chart": ["odc"], "application/vnd.oasis.opendocument.chart-template": ["otc"], "application/vnd.oasis.opendocument.database": ["odb"], "application/vnd.oasis.opendocument.formula": ["odf"], "application/vnd.oasis.opendocument.formula-template": ["odft"], "application/vnd.oasis.opendocument.graphics": ["odg"], "application/vnd.oasis.opendocument.graphics-template": ["otg"], "application/vnd.oasis.opendocument.image": ["odi"], "application/vnd.oasis.opendocument.image-template": ["oti"], "application/vnd.oasis.opendocument.presentation": ["odp"], "application/vnd.oasis.opendocument.presentation-template": ["otp"], "application/vnd.oasis.opendocument.spreadsheet": ["ods"], "application/vnd.oasis.opendocument.spreadsheet-template": ["ots"], "application/vnd.oasis.opendocument.text": ["odt"], "application/vnd.oasis.opendocument.text-master": ["odm"], "application/vnd.oasis.opendocument.text-template": ["ott"], "application/vnd.oasis.opendocument.text-web": ["oth"], "application/vnd.olpc-sugar": ["xo"], "application/vnd.oma.dd2+xml": ["dd2"], "application/vnd.openblox.game+xml": ["obgx"], "application/vnd.openofficeorg.extension": ["oxt"], "application/vnd.openstreetmap.data+xml": ["osm"], "application/vnd.openxmlformats-officedocument.presentationml.presentation": ["pptx"], "application/vnd.openxmlformats-officedocument.presentationml.slide": ["sldx"], "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ["ppsx"], "application/vnd.openxmlformats-officedocument.presentationml.template": ["potx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.template": ["xltx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ["docx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.template": ["dotx"], "application/vnd.osgeo.mapguide.package": ["mgp"], "application/vnd.osgi.dp": ["dp"], "application/vnd.osgi.subsystem": ["esa"], "application/vnd.palm": ["pdb", "pqa", "oprc"], "application/vnd.pawaafile": ["paw"], "application/vnd.pg.format": ["str"], "application/vnd.pg.osasli": ["ei6"], "application/vnd.picsel": ["efif"], "application/vnd.pmi.widget": ["wg"], "application/vnd.pocketlearn": ["plf"], "application/vnd.powerbuilder6": ["pbd"], "application/vnd.previewsystems.box": ["box"], "application/vnd.proteus.magazine": ["mgz"], "application/vnd.publishare-delta-tree": ["qps"], "application/vnd.pvi.ptid1": ["ptid"], "application/vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], "application/vnd.rar": ["rar"], "application/vnd.realvnc.bed": ["bed"], "application/vnd.recordare.musicxml": ["mxl"], "application/vnd.recordare.musicxml+xml": ["musicxml"], "application/vnd.rig.cryptonote": ["cryptonote"], "application/vnd.rim.cod": ["cod"], "application/vnd.rn-realmedia": ["rm"], "application/vnd.rn-realmedia-vbr": ["rmvb"], "application/vnd.route66.link66+xml": ["link66"], "application/vnd.sailingtracker.track": ["st"], "application/vnd.seemail": ["see"], "application/vnd.sema": ["sema"], "application/vnd.semd": ["semd"], "application/vnd.semf": ["semf"], "application/vnd.shana.informed.formdata": ["ifm"], "application/vnd.shana.informed.formtemplate": ["itp"], "application/vnd.shana.informed.interchange": ["iif"], "application/vnd.shana.informed.package": ["ipk"], "application/vnd.simtech-mindmapper": ["twd", "twds"], "application/vnd.smaf": ["mmf"], "application/vnd.smart.teacher": ["teacher"], "application/vnd.software602.filler.form+xml": ["fo"], "application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"], "application/vnd.spotfire.dxp": ["dxp"], "application/vnd.spotfire.sfs": ["sfs"], "application/vnd.stardivision.calc": ["sdc"], "application/vnd.stardivision.draw": ["sda"], "application/vnd.stardivision.impress": ["sdd"], "application/vnd.stardivision.math": ["smf"], "application/vnd.stardivision.writer": ["sdw", "vor"], "application/vnd.stardivision.writer-global": ["sgl"], "application/vnd.stepmania.package": ["smzip"], "application/vnd.stepmania.stepchart": ["sm"], "application/vnd.sun.wadl+xml": ["wadl"], "application/vnd.sun.xml.calc": ["sxc"], "application/vnd.sun.xml.calc.template": ["stc"], "application/vnd.sun.xml.draw": ["sxd"], "application/vnd.sun.xml.draw.template": ["std"], "application/vnd.sun.xml.impress": ["sxi"], "application/vnd.sun.xml.impress.template": ["sti"], "application/vnd.sun.xml.math": ["sxm"], "application/vnd.sun.xml.writer": ["sxw"], "application/vnd.sun.xml.writer.global": ["sxg"], "application/vnd.sun.xml.writer.template": ["stw"], "application/vnd.sus-calendar": ["sus", "susp"], "application/vnd.svd": ["svd"], "application/vnd.symbian.install": ["sis", "sisx"], "application/vnd.syncml+xml": ["xsm"], "application/vnd.syncml.dm+wbxml": ["bdm"], "application/vnd.syncml.dm+xml": ["xdm"], "application/vnd.syncml.dmddf+xml": ["ddf"], "application/vnd.tao.intent-module-archive": ["tao"], "application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"], "application/vnd.tmobile-livetv": ["tmo"], "application/vnd.trid.tpt": ["tpt"], "application/vnd.triscape.mxs": ["mxs"], "application/vnd.trueapp": ["tra"], "application/vnd.ufdl": ["ufd", "ufdl"], "application/vnd.uiq.theme": ["utz"], "application/vnd.umajin": ["umj"], "application/vnd.unity": ["unityweb"], "application/vnd.uoml+xml": ["uoml"], "application/vnd.vcx": ["vcx"], "application/vnd.visio": ["vsd", "vst", "vss", "vsw"], "application/vnd.visionary": ["vis"], "application/vnd.vsf": ["vsf"], "application/vnd.wap.wbxml": ["wbxml"], "application/vnd.wap.wmlc": ["wmlc"], "application/vnd.wap.wmlscriptc": ["wmlsc"], "application/vnd.webturbo": ["wtb"], "application/vnd.wolfram.player": ["nbp"], "application/vnd.wordperfect": ["wpd"], "application/vnd.wqd": ["wqd"], "application/vnd.wt.stf": ["stf"], "application/vnd.xara": ["xar"], "application/vnd.xfdl": ["xfdl"], "application/vnd.yamaha.hv-dic": ["hvd"], "application/vnd.yamaha.hv-script": ["hvs"], "application/vnd.yamaha.hv-voice": ["hvp"], "application/vnd.yamaha.openscoreformat": ["osf"], "application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"], "application/vnd.yamaha.smaf-audio": ["saf"], "application/vnd.yamaha.smaf-phrase": ["spf"], "application/vnd.yellowriver-custom-menu": ["cmp"], "application/vnd.zul": ["zir", "zirz"], "application/vnd.zzazz.deck+xml": ["zaz"], "application/x-7z-compressed": ["7z"], "application/x-abiword": ["abw"], "application/x-ace-compressed": ["ace"], "application/x-apple-diskimage": ["*dmg"], "application/x-arj": ["arj"], "application/x-authorware-bin": ["aab", "x32", "u32", "vox"], "application/x-authorware-map": ["aam"], "application/x-authorware-seg": ["aas"], "application/x-bcpio": ["bcpio"], "application/x-bdoc": ["*bdoc"], "application/x-bittorrent": ["torrent"], "application/x-blorb": ["blb", "blorb"], "application/x-bzip": ["bz"], "application/x-bzip2": ["bz2", "boz"], "application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"], "application/x-cdlink": ["vcd"], "application/x-cfs-compressed": ["cfs"], "application/x-chat": ["chat"], "application/x-chess-pgn": ["pgn"], "application/x-chrome-extension": ["crx"], "application/x-cocoa": ["cco"], "application/x-conference": ["nsc"], "application/x-cpio": ["cpio"], "application/x-csh": ["csh"], "application/x-debian-package": ["*deb", "udeb"], "application/x-dgc-compressed": ["dgc"], "application/x-director": ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"], "application/x-doom": ["wad"], "application/x-dtbncx+xml": ["ncx"], "application/x-dtbook+xml": ["dtb"], "application/x-dtbresource+xml": ["res"], "application/x-dvi": ["dvi"], "application/x-envoy": ["evy"], "application/x-eva": ["eva"], "application/x-font-bdf": ["bdf"], "application/x-font-ghostscript": ["gsf"], "application/x-font-linux-psf": ["psf"], "application/x-font-pcf": ["pcf"], "application/x-font-snf": ["snf"], "application/x-font-type1": ["pfa", "pfb", "pfm", "afm"], "application/x-freearc": ["arc"], "application/x-futuresplash": ["spl"], "application/x-gca-compressed": ["gca"], "application/x-glulx": ["ulx"], "application/x-gnumeric": ["gnumeric"], "application/x-gramps-xml": ["gramps"], "application/x-gtar": ["gtar"], "application/x-hdf": ["hdf"], "application/x-httpd-php": ["php"], "application/x-install-instructions": ["install"], "application/x-iso9660-image": ["*iso"], "application/x-iwork-keynote-sffkey": ["*key"], "application/x-iwork-numbers-sffnumbers": ["*numbers"], "application/x-iwork-pages-sffpages": ["*pages"], "application/x-java-archive-diff": ["jardiff"], "application/x-java-jnlp-file": ["jnlp"], "application/x-keepass2": ["kdbx"], "application/x-latex": ["latex"], "application/x-lua-bytecode": ["luac"], "application/x-lzh-compressed": ["lzh", "lha"], "application/x-makeself": ["run"], "application/x-mie": ["mie"], "application/x-mobipocket-ebook": ["prc", "mobi"], "application/x-ms-application": ["application"], "application/x-ms-shortcut": ["lnk"], "application/x-ms-wmd": ["wmd"], "application/x-ms-wmz": ["wmz"], "application/x-ms-xbap": ["xbap"], "application/x-msaccess": ["mdb"], "application/x-msbinder": ["obd"], "application/x-mscardfile": ["crd"], "application/x-msclip": ["clp"], "application/x-msdos-program": ["*exe"], "application/x-msdownload": ["*exe", "*dll", "com", "bat", "*msi"], "application/x-msmediaview": ["mvb", "m13", "m14"], "application/x-msmetafile": ["*wmf", "*wmz", "*emf", "emz"], "application/x-msmoney": ["mny"], "application/x-mspublisher": ["pub"], "application/x-msschedule": ["scd"], "application/x-msterminal": ["trm"], "application/x-mswrite": ["wri"], "application/x-netcdf": ["nc", "cdf"], "application/x-ns-proxy-autoconfig": ["pac"], "application/x-nzb": ["nzb"], "application/x-perl": ["pl", "pm"], "application/x-pilot": ["*prc", "*pdb"], "application/x-pkcs12": ["p12", "pfx"], "application/x-pkcs7-certificates": ["p7b", "spc"], "application/x-pkcs7-certreqresp": ["p7r"], "application/x-rar-compressed": ["*rar"], "application/x-redhat-package-manager": ["rpm"], "application/x-research-info-systems": ["ris"], "application/x-sea": ["sea"], "application/x-sh": ["sh"], "application/x-shar": ["shar"], "application/x-shockwave-flash": ["swf"], "application/x-silverlight-app": ["xap"], "application/x-sql": ["sql"], "application/x-stuffit": ["sit"], "application/x-stuffitx": ["sitx"], "application/x-subrip": ["srt"], "application/x-sv4cpio": ["sv4cpio"], "application/x-sv4crc": ["sv4crc"], "application/x-t3vm-image": ["t3"], "application/x-tads": ["gam"], "application/x-tar": ["tar"], "application/x-tcl": ["tcl", "tk"], "application/x-tex": ["tex"], "application/x-tex-tfm": ["tfm"], "application/x-texinfo": ["texinfo", "texi"], "application/x-tgif": ["*obj"], "application/x-ustar": ["ustar"], "application/x-virtualbox-hdd": ["hdd"], "application/x-virtualbox-ova": ["ova"], "application/x-virtualbox-ovf": ["ovf"], "application/x-virtualbox-vbox": ["vbox"], "application/x-virtualbox-vbox-extpack": ["vbox-extpack"], "application/x-virtualbox-vdi": ["vdi"], "application/x-virtualbox-vhd": ["vhd"], "application/x-virtualbox-vmdk": ["vmdk"], "application/x-wais-source": ["src"], "application/x-web-app-manifest+json": ["webapp"], "application/x-x509-ca-cert": ["der", "crt", "pem"], "application/x-xfig": ["fig"], "application/x-xliff+xml": ["*xlf"], "application/x-xpinstall": ["xpi"], "application/x-xz": ["xz"], "application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], "audio/vnd.dece.audio": ["uva", "uvva"], "audio/vnd.digital-winds": ["eol"], "audio/vnd.dra": ["dra"], "audio/vnd.dts": ["dts"], "audio/vnd.dts.hd": ["dtshd"], "audio/vnd.lucent.voice": ["lvp"], "audio/vnd.ms-playready.media.pya": ["pya"], "audio/vnd.nuera.ecelp4800": ["ecelp4800"], "audio/vnd.nuera.ecelp7470": ["ecelp7470"], "audio/vnd.nuera.ecelp9600": ["ecelp9600"], "audio/vnd.rip": ["rip"], "audio/x-aac": ["aac"], "audio/x-aiff": ["aif", "aiff", "aifc"], "audio/x-caf": ["caf"], "audio/x-flac": ["flac"], "audio/x-m4a": ["*m4a"], "audio/x-matroska": ["mka"], "audio/x-mpegurl": ["m3u"], "audio/x-ms-wax": ["wax"], "audio/x-ms-wma": ["wma"], "audio/x-pn-realaudio": ["ram", "ra"], "audio/x-pn-realaudio-plugin": ["rmp"], "audio/x-realaudio": ["*ra"], "audio/x-wav": ["*wav"], "chemical/x-cdx": ["cdx"], "chemical/x-cif": ["cif"], "chemical/x-cmdf": ["cmdf"], "chemical/x-cml": ["cml"], "chemical/x-csml": ["csml"], "chemical/x-xyz": ["xyz"], "image/prs.btif": ["btif"], "image/prs.pti": ["pti"], "image/vnd.adobe.photoshop": ["psd"], "image/vnd.airzip.accelerator.azv": ["azv"], "image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"], "image/vnd.djvu": ["djvu", "djv"], "image/vnd.dvb.subtitle": ["*sub"], "image/vnd.dwg": ["dwg"], "image/vnd.dxf": ["dxf"], "image/vnd.fastbidsheet": ["fbs"], "image/vnd.fpx": ["fpx"], "image/vnd.fst": ["fst"], "image/vnd.fujixerox.edmics-mmr": ["mmr"], "image/vnd.fujixerox.edmics-rlc": ["rlc"], "image/vnd.microsoft.icon": ["ico"], "image/vnd.ms-dds": ["dds"], "image/vnd.ms-modi": ["mdi"], "image/vnd.ms-photo": ["wdp"], "image/vnd.net-fpx": ["npx"], "image/vnd.pco.b16": ["b16"], "image/vnd.tencent.tap": ["tap"], "image/vnd.valve.source.texture": ["vtf"], "image/vnd.wap.wbmp": ["wbmp"], "image/vnd.xiff": ["xif"], "image/vnd.zbrush.pcx": ["pcx"], "image/x-3ds": ["3ds"], "image/x-cmu-raster": ["ras"], "image/x-cmx": ["cmx"], "image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"], "image/x-icon": ["*ico"], "image/x-jng": ["jng"], "image/x-mrsid-image": ["sid"], "image/x-ms-bmp": ["*bmp"], "image/x-pcx": ["*pcx"], "image/x-pict": ["pic", "pct"], "image/x-portable-anymap": ["pnm"], "image/x-portable-bitmap": ["pbm"], "image/x-portable-graymap": ["pgm"], "image/x-portable-pixmap": ["ppm"], "image/x-rgb": ["rgb"], "image/x-tga": ["tga"], "image/x-xbitmap": ["xbm"], "image/x-xpixmap": ["xpm"], "image/x-xwindowdump": ["xwd"], "message/vnd.wfa.wsc": ["wsc"], "model/vnd.collada+xml": ["dae"], "model/vnd.dwf": ["dwf"], "model/vnd.gdl": ["gdl"], "model/vnd.gtw": ["gtw"], "model/vnd.mts": ["mts"], "model/vnd.opengex": ["ogex"], "model/vnd.parasolid.transmit.binary": ["x_b"], "model/vnd.parasolid.transmit.text": ["x_t"], "model/vnd.sap.vds": ["vds"], "model/vnd.usdz+zip": ["usdz"], "model/vnd.valve.source.compiled-map": ["bsp"], "model/vnd.vtu": ["vtu"], "text/prs.lines.tag": ["dsc"], "text/vnd.curl": ["curl"], "text/vnd.curl.dcurl": ["dcurl"], "text/vnd.curl.mcurl": ["mcurl"], "text/vnd.curl.scurl": ["scurl"], "text/vnd.dvb.subtitle": ["sub"], "text/vnd.fly": ["fly"], "text/vnd.fmi.flexstor": ["flx"], "text/vnd.graphviz": ["gv"], "text/vnd.in3d.3dml": ["3dml"], "text/vnd.in3d.spot": ["spot"], "text/vnd.sun.j2me.app-descriptor": ["jad"], "text/vnd.wap.wml": ["wml"], "text/vnd.wap.wmlscript": ["wmls"], "text/x-asm": ["s", "asm"], "text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], "text/x-component": ["htc"], "text/x-fortran": ["f", "for", "f77", "f90"], "text/x-handlebars-template": ["hbs"], "text/x-java-source": ["java"], "text/x-lua": ["lua"], "text/x-markdown": ["mkd"], "text/x-nfo": ["nfo"], "text/x-opml": ["opml"], "text/x-org": ["*org"], "text/x-pascal": ["p", "pas"], "text/x-processing": ["pde"], "text/x-sass": ["sass"], "text/x-scss": ["scss"], "text/x-setext": ["etx"], "text/x-sfv": ["sfv"], "text/x-suse-ymp": ["ymp"], "text/x-uuencode": ["uu"], "text/x-vcalendar": ["vcs"], "text/x-vcard": ["vcf"], "video/vnd.dece.hd": ["uvh", "uvvh"], "video/vnd.dece.mobile": ["uvm", "uvvm"], "video/vnd.dece.pd": ["uvp", "uvvp"], "video/vnd.dece.sd": ["uvs", "uvvs"], "video/vnd.dece.video": ["uvv", "uvvv"], "video/vnd.dvb.file": ["dvb"], "video/vnd.fvt": ["fvt"], "video/vnd.mpegurl": ["mxu", "m4u"], "video/vnd.ms-playready.media.pyv": ["pyv"], "video/vnd.uvvu.mp4": ["uvu", "uvvu"], "video/vnd.vivo": ["viv"], "video/x-f4v": ["f4v"], "video/x-fli": ["fli"], "video/x-flv": ["flv"], "video/x-m4v": ["m4v"], "video/x-matroska": ["mkv", "mk3d", "mks"], "video/x-mng": ["mng"], "video/x-ms-asf": ["asf", "asx"], "video/x-ms-vob": ["vob"], "video/x-ms-wm": ["wm"], "video/x-ms-wmv": ["wmv"], "video/x-ms-wmx": ["wmx"], "video/x-ms-wvx": ["wvx"], "video/x-msvideo": ["avi"], "video/x-sgi-movie": ["movie"], "video/x-smv": ["smv"], "x-conference/x-cooltalk": ["ice"] };
  }
});

// node_modules/mime/index.js
var require_mime = __commonJS({
  "node_modules/mime/index.js"(exports, module2) {
    "use strict";
    var Mime = require_Mime();
    module2.exports = new Mime(require_standard(), require_other());
  }
});

// node_modules/obsidian-dataview/lib/index.js
var require_lib = __commonJS({
  "node_modules/obsidian-dataview/lib/index.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    require("obsidian");
    var LuxonError = class extends Error {
    };
    var InvalidDateTimeError = class extends LuxonError {
      constructor(reason) {
        super(`Invalid DateTime: ${reason.toMessage()}`);
      }
    };
    var InvalidIntervalError = class extends LuxonError {
      constructor(reason) {
        super(`Invalid Interval: ${reason.toMessage()}`);
      }
    };
    var InvalidDurationError = class extends LuxonError {
      constructor(reason) {
        super(`Invalid Duration: ${reason.toMessage()}`);
      }
    };
    var ConflictingSpecificationError = class extends LuxonError {
    };
    var InvalidUnitError = class extends LuxonError {
      constructor(unit) {
        super(`Invalid unit ${unit}`);
      }
    };
    var InvalidArgumentError = class extends LuxonError {
    };
    var ZoneIsAbstractError = class extends LuxonError {
      constructor() {
        super("Zone is an abstract class");
      }
    };
    var n = "numeric";
    var s = "short";
    var l = "long";
    var DATE_SHORT = {
      year: n,
      month: n,
      day: n
    };
    var DATE_MED = {
      year: n,
      month: s,
      day: n
    };
    var DATE_MED_WITH_WEEKDAY = {
      year: n,
      month: s,
      day: n,
      weekday: s
    };
    var DATE_FULL = {
      year: n,
      month: l,
      day: n
    };
    var DATE_HUGE = {
      year: n,
      month: l,
      day: n,
      weekday: l
    };
    var TIME_SIMPLE = {
      hour: n,
      minute: n
    };
    var TIME_WITH_SECONDS = {
      hour: n,
      minute: n,
      second: n
    };
    var TIME_WITH_SHORT_OFFSET = {
      hour: n,
      minute: n,
      second: n,
      timeZoneName: s
    };
    var TIME_WITH_LONG_OFFSET = {
      hour: n,
      minute: n,
      second: n,
      timeZoneName: l
    };
    var TIME_24_SIMPLE = {
      hour: n,
      minute: n,
      hourCycle: "h23"
    };
    var TIME_24_WITH_SECONDS = {
      hour: n,
      minute: n,
      second: n,
      hourCycle: "h23"
    };
    var TIME_24_WITH_SHORT_OFFSET = {
      hour: n,
      minute: n,
      second: n,
      hourCycle: "h23",
      timeZoneName: s
    };
    var TIME_24_WITH_LONG_OFFSET = {
      hour: n,
      minute: n,
      second: n,
      hourCycle: "h23",
      timeZoneName: l
    };
    var DATETIME_SHORT = {
      year: n,
      month: n,
      day: n,
      hour: n,
      minute: n
    };
    var DATETIME_SHORT_WITH_SECONDS = {
      year: n,
      month: n,
      day: n,
      hour: n,
      minute: n,
      second: n
    };
    var DATETIME_MED = {
      year: n,
      month: s,
      day: n,
      hour: n,
      minute: n
    };
    var DATETIME_MED_WITH_SECONDS = {
      year: n,
      month: s,
      day: n,
      hour: n,
      minute: n,
      second: n
    };
    var DATETIME_MED_WITH_WEEKDAY = {
      year: n,
      month: s,
      day: n,
      weekday: s,
      hour: n,
      minute: n
    };
    var DATETIME_FULL = {
      year: n,
      month: l,
      day: n,
      hour: n,
      minute: n,
      timeZoneName: s
    };
    var DATETIME_FULL_WITH_SECONDS = {
      year: n,
      month: l,
      day: n,
      hour: n,
      minute: n,
      second: n,
      timeZoneName: s
    };
    var DATETIME_HUGE = {
      year: n,
      month: l,
      day: n,
      weekday: l,
      hour: n,
      minute: n,
      timeZoneName: l
    };
    var DATETIME_HUGE_WITH_SECONDS = {
      year: n,
      month: l,
      day: n,
      weekday: l,
      hour: n,
      minute: n,
      second: n,
      timeZoneName: l
    };
    var Zone = class {
      get type() {
        throw new ZoneIsAbstractError();
      }
      get name() {
        throw new ZoneIsAbstractError();
      }
      get ianaName() {
        return this.name;
      }
      get isUniversal() {
        throw new ZoneIsAbstractError();
      }
      offsetName(ts, opts) {
        throw new ZoneIsAbstractError();
      }
      formatOffset(ts, format) {
        throw new ZoneIsAbstractError();
      }
      offset(ts) {
        throw new ZoneIsAbstractError();
      }
      equals(otherZone) {
        throw new ZoneIsAbstractError();
      }
      get isValid() {
        throw new ZoneIsAbstractError();
      }
    };
    var singleton$1 = null;
    var SystemZone = class extends Zone {
      static get instance() {
        if (singleton$1 === null) {
          singleton$1 = new SystemZone();
        }
        return singleton$1;
      }
      get type() {
        return "system";
      }
      get name() {
        return new Intl.DateTimeFormat().resolvedOptions().timeZone;
      }
      get isUniversal() {
        return false;
      }
      offsetName(ts, { format, locale }) {
        return parseZoneInfo(ts, format, locale);
      }
      formatOffset(ts, format) {
        return formatOffset(this.offset(ts), format);
      }
      offset(ts) {
        return -new Date(ts).getTimezoneOffset();
      }
      equals(otherZone) {
        return otherZone.type === "system";
      }
      get isValid() {
        return true;
      }
    };
    var dtfCache = {};
    function makeDTF(zone) {
      if (!dtfCache[zone]) {
        dtfCache[zone] = new Intl.DateTimeFormat("en-US", {
          hour12: false,
          timeZone: zone,
          year: "numeric",
          month: "2-digit",
          day: "2-digit",
          hour: "2-digit",
          minute: "2-digit",
          second: "2-digit",
          era: "short"
        });
      }
      return dtfCache[zone];
    }
    var typeToPos = {
      year: 0,
      month: 1,
      day: 2,
      era: 3,
      hour: 4,
      minute: 5,
      second: 6
    };
    function hackyOffset(dtf, date) {
      const formatted = dtf.format(date).replace(/\u200E/g, ""), parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;
      return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];
    }
    function partsOffset(dtf, date) {
      const formatted = dtf.formatToParts(date);
      const filled = [];
      for (let i = 0; i < formatted.length; i++) {
        const { type, value } = formatted[i];
        const pos = typeToPos[type];
        if (type === "era") {
          filled[pos] = value;
        } else if (!isUndefined(pos)) {
          filled[pos] = parseInt(value, 10);
        }
      }
      return filled;
    }
    var ianaZoneCache = {};
    var IANAZone = class extends Zone {
      static create(name) {
        if (!ianaZoneCache[name]) {
          ianaZoneCache[name] = new IANAZone(name);
        }
        return ianaZoneCache[name];
      }
      static resetCache() {
        ianaZoneCache = {};
        dtfCache = {};
      }
      static isValidSpecifier(s2) {
        return this.isValidZone(s2);
      }
      static isValidZone(zone) {
        if (!zone) {
          return false;
        }
        try {
          new Intl.DateTimeFormat("en-US", { timeZone: zone }).format();
          return true;
        } catch (e) {
          return false;
        }
      }
      constructor(name) {
        super();
        this.zoneName = name;
        this.valid = IANAZone.isValidZone(name);
      }
      get type() {
        return "iana";
      }
      get name() {
        return this.zoneName;
      }
      get isUniversal() {
        return false;
      }
      offsetName(ts, { format, locale }) {
        return parseZoneInfo(ts, format, locale, this.name);
      }
      formatOffset(ts, format) {
        return formatOffset(this.offset(ts), format);
      }
      offset(ts) {
        const date = new Date(ts);
        if (isNaN(date))
          return NaN;
        const dtf = makeDTF(this.name);
        let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date);
        if (adOrBc === "BC") {
          year = -Math.abs(year) + 1;
        }
        const adjustedHour = hour === 24 ? 0 : hour;
        const asUTC = objToLocalTS({
          year,
          month,
          day,
          hour: adjustedHour,
          minute,
          second,
          millisecond: 0
        });
        let asTS = +date;
        const over = asTS % 1e3;
        asTS -= over >= 0 ? over : 1e3 + over;
        return (asUTC - asTS) / (60 * 1e3);
      }
      equals(otherZone) {
        return otherZone.type === "iana" && otherZone.name === this.name;
      }
      get isValid() {
        return this.valid;
      }
    };
    var intlLFCache = {};
    function getCachedLF(locString, opts = {}) {
      const key = JSON.stringify([locString, opts]);
      let dtf = intlLFCache[key];
      if (!dtf) {
        dtf = new Intl.ListFormat(locString, opts);
        intlLFCache[key] = dtf;
      }
      return dtf;
    }
    var intlDTCache = {};
    function getCachedDTF(locString, opts = {}) {
      const key = JSON.stringify([locString, opts]);
      let dtf = intlDTCache[key];
      if (!dtf) {
        dtf = new Intl.DateTimeFormat(locString, opts);
        intlDTCache[key] = dtf;
      }
      return dtf;
    }
    var intlNumCache = {};
    function getCachedINF(locString, opts = {}) {
      const key = JSON.stringify([locString, opts]);
      let inf = intlNumCache[key];
      if (!inf) {
        inf = new Intl.NumberFormat(locString, opts);
        intlNumCache[key] = inf;
      }
      return inf;
    }
    var intlRelCache = {};
    function getCachedRTF(locString, opts = {}) {
      const { base, ...cacheKeyOpts } = opts;
      const key = JSON.stringify([locString, cacheKeyOpts]);
      let inf = intlRelCache[key];
      if (!inf) {
        inf = new Intl.RelativeTimeFormat(locString, opts);
        intlRelCache[key] = inf;
      }
      return inf;
    }
    var sysLocaleCache = null;
    function systemLocale() {
      if (sysLocaleCache) {
        return sysLocaleCache;
      } else {
        sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;
        return sysLocaleCache;
      }
    }
    function parseLocaleString(localeStr) {
      const xIndex = localeStr.indexOf("-x-");
      if (xIndex !== -1) {
        localeStr = localeStr.substring(0, xIndex);
      }
      const uIndex = localeStr.indexOf("-u-");
      if (uIndex === -1) {
        return [localeStr];
      } else {
        let options;
        let selectedStr;
        try {
          options = getCachedDTF(localeStr).resolvedOptions();
          selectedStr = localeStr;
        } catch (e) {
          const smaller = localeStr.substring(0, uIndex);
          options = getCachedDTF(smaller).resolvedOptions();
          selectedStr = smaller;
        }
        const { numberingSystem, calendar } = options;
        return [selectedStr, numberingSystem, calendar];
      }
    }
    function intlConfigString(localeStr, numberingSystem, outputCalendar) {
      if (outputCalendar || numberingSystem) {
        if (!localeStr.includes("-u-")) {
          localeStr += "-u";
        }
        if (outputCalendar) {
          localeStr += `-ca-${outputCalendar}`;
        }
        if (numberingSystem) {
          localeStr += `-nu-${numberingSystem}`;
        }
        return localeStr;
      } else {
        return localeStr;
      }
    }
    function mapMonths(f) {
      const ms = [];
      for (let i = 1; i <= 12; i++) {
        const dt = DateTime.utc(2009, i, 1);
        ms.push(f(dt));
      }
      return ms;
    }
    function mapWeekdays(f) {
      const ms = [];
      for (let i = 1; i <= 7; i++) {
        const dt = DateTime.utc(2016, 11, 13 + i);
        ms.push(f(dt));
      }
      return ms;
    }
    function listStuff(loc, length, englishFn, intlFn) {
      const mode = loc.listingMode();
      if (mode === "error") {
        return null;
      } else if (mode === "en") {
        return englishFn(length);
      } else {
        return intlFn(length);
      }
    }
    function supportsFastNumbers(loc) {
      if (loc.numberingSystem && loc.numberingSystem !== "latn") {
        return false;
      } else {
        return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn";
      }
    }
    var PolyNumberFormatter = class {
      constructor(intl, forceSimple, opts) {
        this.padTo = opts.padTo || 0;
        this.floor = opts.floor || false;
        const { padTo, floor, ...otherOpts } = opts;
        if (!forceSimple || Object.keys(otherOpts).length > 0) {
          const intlOpts = { useGrouping: false, ...opts };
          if (opts.padTo > 0)
            intlOpts.minimumIntegerDigits = opts.padTo;
          this.inf = getCachedINF(intl, intlOpts);
        }
      }
      format(i) {
        if (this.inf) {
          const fixed = this.floor ? Math.floor(i) : i;
          return this.inf.format(fixed);
        } else {
          const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);
          return padStart(fixed, this.padTo);
        }
      }
    };
    var PolyDateFormatter = class {
      constructor(dt, intl, opts) {
        this.opts = opts;
        this.originalZone = void 0;
        let z = void 0;
        if (this.opts.timeZone) {
          this.dt = dt;
        } else if (dt.zone.type === "fixed") {
          const gmtOffset = -1 * (dt.offset / 60);
          const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;
          if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {
            z = offsetZ;
            this.dt = dt;
          } else {
            z = "UTC";
            this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset });
            this.originalZone = dt.zone;
          }
        } else if (dt.zone.type === "system") {
          this.dt = dt;
        } else if (dt.zone.type === "iana") {
          this.dt = dt;
          z = dt.zone.name;
        } else {
          z = "UTC";
          this.dt = dt.setZone("UTC").plus({ minutes: dt.offset });
          this.originalZone = dt.zone;
        }
        const intlOpts = { ...this.opts };
        intlOpts.timeZone = intlOpts.timeZone || z;
        this.dtf = getCachedDTF(intl, intlOpts);
      }
      format() {
        if (this.originalZone) {
          return this.formatToParts().map(({ value }) => value).join("");
        }
        return this.dtf.format(this.dt.toJSDate());
      }
      formatToParts() {
        const parts = this.dtf.formatToParts(this.dt.toJSDate());
        if (this.originalZone) {
          return parts.map((part) => {
            if (part.type === "timeZoneName") {
              const offsetName = this.originalZone.offsetName(this.dt.ts, {
                locale: this.dt.locale,
                format: this.opts.timeZoneName
              });
              return {
                ...part,
                value: offsetName
              };
            } else {
              return part;
            }
          });
        }
        return parts;
      }
      resolvedOptions() {
        return this.dtf.resolvedOptions();
      }
    };
    var PolyRelFormatter = class {
      constructor(intl, isEnglish, opts) {
        this.opts = { style: "long", ...opts };
        if (!isEnglish && hasRelative()) {
          this.rtf = getCachedRTF(intl, opts);
        }
      }
      format(count, unit) {
        if (this.rtf) {
          return this.rtf.format(count, unit);
        } else {
          return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long");
        }
      }
      formatToParts(count, unit) {
        if (this.rtf) {
          return this.rtf.formatToParts(count, unit);
        } else {
          return [];
        }
      }
    };
    var Locale = class {
      static fromOpts(opts) {
        return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);
      }
      static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {
        const specifiedLocale = locale || Settings2.defaultLocale;
        const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale());
        const numberingSystemR = numberingSystem || Settings2.defaultNumberingSystem;
        const outputCalendarR = outputCalendar || Settings2.defaultOutputCalendar;
        return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);
      }
      static resetCache() {
        sysLocaleCache = null;
        intlDTCache = {};
        intlNumCache = {};
        intlRelCache = {};
      }
      static fromObject({ locale, numberingSystem, outputCalendar } = {}) {
        return Locale.create(locale, numberingSystem, outputCalendar);
      }
      constructor(locale, numbering, outputCalendar, specifiedLocale) {
        const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);
        this.locale = parsedLocale;
        this.numberingSystem = numbering || parsedNumberingSystem || null;
        this.outputCalendar = outputCalendar || parsedOutputCalendar || null;
        this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);
        this.weekdaysCache = { format: {}, standalone: {} };
        this.monthsCache = { format: {}, standalone: {} };
        this.meridiemCache = null;
        this.eraCache = {};
        this.specifiedLocale = specifiedLocale;
        this.fastNumbersCached = null;
      }
      get fastNumbers() {
        if (this.fastNumbersCached == null) {
          this.fastNumbersCached = supportsFastNumbers(this);
        }
        return this.fastNumbersCached;
      }
      listingMode() {
        const isActuallyEn = this.isEnglish();
        const hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory");
        return isActuallyEn && hasNoWeirdness ? "en" : "intl";
      }
      clone(alts) {
        if (!alts || Object.getOwnPropertyNames(alts).length === 0) {
          return this;
        } else {
          return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false);
        }
      }
      redefaultToEN(alts = {}) {
        return this.clone({ ...alts, defaultToEN: true });
      }
      redefaultToSystem(alts = {}) {
        return this.clone({ ...alts, defaultToEN: false });
      }
      months(length, format = false) {
        return listStuff(this, length, months, () => {
          const intl = format ? { month: length, day: "numeric" } : { month: length }, formatStr = format ? "format" : "standalone";
          if (!this.monthsCache[formatStr][length]) {
            this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, "month"));
          }
          return this.monthsCache[formatStr][length];
        });
      }
      weekdays(length, format = false) {
        return listStuff(this, length, weekdays, () => {
          const intl = format ? { weekday: length, year: "numeric", month: "long", day: "numeric" } : { weekday: length }, formatStr = format ? "format" : "standalone";
          if (!this.weekdaysCache[formatStr][length]) {
            this.weekdaysCache[formatStr][length] = mapWeekdays((dt) => this.extract(dt, intl, "weekday"));
          }
          return this.weekdaysCache[formatStr][length];
        });
      }
      meridiems() {
        return listStuff(this, void 0, () => meridiems, () => {
          if (!this.meridiemCache) {
            const intl = { hour: "numeric", hourCycle: "h12" };
            this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map((dt) => this.extract(dt, intl, "dayperiod"));
          }
          return this.meridiemCache;
        });
      }
      eras(length) {
        return listStuff(this, length, eras, () => {
          const intl = { era: length };
          if (!this.eraCache[length]) {
            this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) => this.extract(dt, intl, "era"));
          }
          return this.eraCache[length];
        });
      }
      extract(dt, intlOpts, field) {
        const df = this.dtFormatter(dt, intlOpts), results = df.formatToParts(), matching = results.find((m) => m.type.toLowerCase() === field);
        return matching ? matching.value : null;
      }
      numberFormatter(opts = {}) {
        return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);
      }
      dtFormatter(dt, intlOpts = {}) {
        return new PolyDateFormatter(dt, this.intl, intlOpts);
      }
      relFormatter(opts = {}) {
        return new PolyRelFormatter(this.intl, this.isEnglish(), opts);
      }
      listFormatter(opts = {}) {
        return getCachedLF(this.intl, opts);
      }
      isEnglish() {
        return this.locale === "en" || this.locale.toLowerCase() === "en-us" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us");
      }
      equals(other) {
        return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;
      }
    };
    var singleton = null;
    var FixedOffsetZone = class extends Zone {
      static get utcInstance() {
        if (singleton === null) {
          singleton = new FixedOffsetZone(0);
        }
        return singleton;
      }
      static instance(offset2) {
        return offset2 === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset2);
      }
      static parseSpecifier(s2) {
        if (s2) {
          const r = s2.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);
          if (r) {
            return new FixedOffsetZone(signedOffset(r[1], r[2]));
          }
        }
        return null;
      }
      constructor(offset2) {
        super();
        this.fixed = offset2;
      }
      get type() {
        return "fixed";
      }
      get name() {
        return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`;
      }
      get ianaName() {
        if (this.fixed === 0) {
          return "Etc/UTC";
        } else {
          return `Etc/GMT${formatOffset(-this.fixed, "narrow")}`;
        }
      }
      offsetName() {
        return this.name;
      }
      formatOffset(ts, format) {
        return formatOffset(this.fixed, format);
      }
      get isUniversal() {
        return true;
      }
      offset() {
        return this.fixed;
      }
      equals(otherZone) {
        return otherZone.type === "fixed" && otherZone.fixed === this.fixed;
      }
      get isValid() {
        return true;
      }
    };
    var InvalidZone = class extends Zone {
      constructor(zoneName) {
        super();
        this.zoneName = zoneName;
      }
      get type() {
        return "invalid";
      }
      get name() {
        return this.zoneName;
      }
      get isUniversal() {
        return false;
      }
      offsetName() {
        return null;
      }
      formatOffset() {
        return "";
      }
      offset() {
        return NaN;
      }
      equals() {
        return false;
      }
      get isValid() {
        return false;
      }
    };
    function normalizeZone(input, defaultZone2) {
      if (isUndefined(input) || input === null) {
        return defaultZone2;
      } else if (input instanceof Zone) {
        return input;
      } else if (isString(input)) {
        const lowered = input.toLowerCase();
        if (lowered === "default")
          return defaultZone2;
        else if (lowered === "local" || lowered === "system")
          return SystemZone.instance;
        else if (lowered === "utc" || lowered === "gmt")
          return FixedOffsetZone.utcInstance;
        else
          return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);
      } else if (isNumber(input)) {
        return FixedOffsetZone.instance(input);
      } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") {
        return input;
      } else {
        return new InvalidZone(input);
      }
    }
    var now = () => Date.now();
    var defaultZone = "system";
    var defaultLocale = null;
    var defaultNumberingSystem = null;
    var defaultOutputCalendar = null;
    var twoDigitCutoffYear = 60;
    var throwOnInvalid;
    var Settings2 = class {
      static get now() {
        return now;
      }
      static set now(n2) {
        now = n2;
      }
      static set defaultZone(zone) {
        defaultZone = zone;
      }
      static get defaultZone() {
        return normalizeZone(defaultZone, SystemZone.instance);
      }
      static get defaultLocale() {
        return defaultLocale;
      }
      static set defaultLocale(locale) {
        defaultLocale = locale;
      }
      static get defaultNumberingSystem() {
        return defaultNumberingSystem;
      }
      static set defaultNumberingSystem(numberingSystem) {
        defaultNumberingSystem = numberingSystem;
      }
      static get defaultOutputCalendar() {
        return defaultOutputCalendar;
      }
      static set defaultOutputCalendar(outputCalendar) {
        defaultOutputCalendar = outputCalendar;
      }
      static get twoDigitCutoffYear() {
        return twoDigitCutoffYear;
      }
      static set twoDigitCutoffYear(cutoffYear) {
        twoDigitCutoffYear = cutoffYear % 100;
      }
      static get throwOnInvalid() {
        return throwOnInvalid;
      }
      static set throwOnInvalid(t) {
        throwOnInvalid = t;
      }
      static resetCaches() {
        Locale.resetCache();
        IANAZone.resetCache();
      }
    };
    function isUndefined(o) {
      return typeof o === "undefined";
    }
    function isNumber(o) {
      return typeof o === "number";
    }
    function isInteger(o) {
      return typeof o === "number" && o % 1 === 0;
    }
    function isString(o) {
      return typeof o === "string";
    }
    function isDate(o) {
      return Object.prototype.toString.call(o) === "[object Date]";
    }
    function hasRelative() {
      try {
        return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat;
      } catch (e) {
        return false;
      }
    }
    function maybeArray(thing) {
      return Array.isArray(thing) ? thing : [thing];
    }
    function bestBy(arr, by, compare) {
      if (arr.length === 0) {
        return void 0;
      }
      return arr.reduce((best, next) => {
        const pair = [by(next), next];
        if (!best) {
          return pair;
        } else if (compare(best[0], pair[0]) === best[0]) {
          return best;
        } else {
          return pair;
        }
      }, null)[1];
    }
    function pick(obj, keys) {
      return keys.reduce((a, k) => {
        a[k] = obj[k];
        return a;
      }, {});
    }
    function hasOwnProperty(obj, prop) {
      return Object.prototype.hasOwnProperty.call(obj, prop);
    }
    function integerBetween(thing, bottom, top) {
      return isInteger(thing) && thing >= bottom && thing <= top;
    }
    function floorMod(x, n2) {
      return x - n2 * Math.floor(x / n2);
    }
    function padStart(input, n2 = 2) {
      const isNeg = input < 0;
      let padded;
      if (isNeg) {
        padded = "-" + ("" + -input).padStart(n2, "0");
      } else {
        padded = ("" + input).padStart(n2, "0");
      }
      return padded;
    }
    function parseInteger(string) {
      if (isUndefined(string) || string === null || string === "") {
        return void 0;
      } else {
        return parseInt(string, 10);
      }
    }
    function parseFloating(string) {
      if (isUndefined(string) || string === null || string === "") {
        return void 0;
      } else {
        return parseFloat(string);
      }
    }
    function parseMillis(fraction) {
      if (isUndefined(fraction) || fraction === null || fraction === "") {
        return void 0;
      } else {
        const f = parseFloat("0." + fraction) * 1e3;
        return Math.floor(f);
      }
    }
    function roundTo(number, digits, towardZero = false) {
      const factor = 10 ** digits, rounder = towardZero ? Math.trunc : Math.round;
      return rounder(number * factor) / factor;
    }
    function isLeapYear(year) {
      return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
    }
    function daysInYear(year) {
      return isLeapYear(year) ? 366 : 365;
    }
    function daysInMonth(year, month) {
      const modMonth = floorMod(month - 1, 12) + 1, modYear = year + (month - modMonth) / 12;
      if (modMonth === 2) {
        return isLeapYear(modYear) ? 29 : 28;
      } else {
        return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];
      }
    }
    function objToLocalTS(obj) {
      let d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond);
      if (obj.year < 100 && obj.year >= 0) {
        d = new Date(d);
        d.setUTCFullYear(obj.year, obj.month - 1, obj.day);
      }
      return +d;
    }
    function weeksInWeekYear(weekYear) {
      const p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, last2 = weekYear - 1, p2 = (last2 + Math.floor(last2 / 4) - Math.floor(last2 / 100) + Math.floor(last2 / 400)) % 7;
      return p1 === 4 || p2 === 3 ? 53 : 52;
    }
    function untruncateYear(year) {
      if (year > 99) {
        return year;
      } else
        return year > Settings2.twoDigitCutoffYear ? 1900 + year : 2e3 + year;
    }
    function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {
      const date = new Date(ts), intlOpts = {
        hourCycle: "h23",
        year: "numeric",
        month: "2-digit",
        day: "2-digit",
        hour: "2-digit",
        minute: "2-digit"
      };
      if (timeZone) {
        intlOpts.timeZone = timeZone;
      }
      const modified = { timeZoneName: offsetFormat, ...intlOpts };
      const parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find((m) => m.type.toLowerCase() === "timezonename");
      return parsed ? parsed.value : null;
    }
    function signedOffset(offHourStr, offMinuteStr) {
      let offHour = parseInt(offHourStr, 10);
      if (Number.isNaN(offHour)) {
        offHour = 0;
      }
      const offMin = parseInt(offMinuteStr, 10) || 0, offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;
      return offHour * 60 + offMinSigned;
    }
    function asNumber(value) {
      const numericValue = Number(value);
      if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue))
        throw new InvalidArgumentError(`Invalid unit value ${value}`);
      return numericValue;
    }
    function normalizeObject(obj, normalizer) {
      const normalized = {};
      for (const u in obj) {
        if (hasOwnProperty(obj, u)) {
          const v = obj[u];
          if (v === void 0 || v === null)
            continue;
          normalized[normalizer(u)] = asNumber(v);
        }
      }
      return normalized;
    }
    function formatOffset(offset2, format) {
      const hours = Math.trunc(Math.abs(offset2 / 60)), minutes = Math.trunc(Math.abs(offset2 % 60)), sign = offset2 >= 0 ? "+" : "-";
      switch (format) {
        case "short":
          return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;
        case "narrow":
          return `${sign}${hours}${minutes > 0 ? `:${minutes}` : ""}`;
        case "techie":
          return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;
        default:
          throw new RangeError(`Value format ${format} is out of range for property format`);
      }
    }
    function timeObject(obj) {
      return pick(obj, ["hour", "minute", "second", "millisecond"]);
    }
    var monthsLong = [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ];
    var monthsShort = [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ];
    var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"];
    function months(length) {
      switch (length) {
        case "narrow":
          return [...monthsNarrow];
        case "short":
          return [...monthsShort];
        case "long":
          return [...monthsLong];
        case "numeric":
          return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
        case "2-digit":
          return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
        default:
          return null;
      }
    }
    var weekdaysLong = [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ];
    var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
    var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"];
    function weekdays(length) {
      switch (length) {
        case "narrow":
          return [...weekdaysNarrow];
        case "short":
          return [...weekdaysShort];
        case "long":
          return [...weekdaysLong];
        case "numeric":
          return ["1", "2", "3", "4", "5", "6", "7"];
        default:
          return null;
      }
    }
    var meridiems = ["AM", "PM"];
    var erasLong = ["Before Christ", "Anno Domini"];
    var erasShort = ["BC", "AD"];
    var erasNarrow = ["B", "A"];
    function eras(length) {
      switch (length) {
        case "narrow":
          return [...erasNarrow];
        case "short":
          return [...erasShort];
        case "long":
          return [...erasLong];
        default:
          return null;
      }
    }
    function meridiemForDateTime(dt) {
      return meridiems[dt.hour < 12 ? 0 : 1];
    }
    function weekdayForDateTime(dt, length) {
      return weekdays(length)[dt.weekday - 1];
    }
    function monthForDateTime(dt, length) {
      return months(length)[dt.month - 1];
    }
    function eraForDateTime(dt, length) {
      return eras(length)[dt.year < 0 ? 0 : 1];
    }
    function formatRelativeTime(unit, count, numeric = "always", narrow = false) {
      const units = {
        years: ["year", "yr."],
        quarters: ["quarter", "qtr."],
        months: ["month", "mo."],
        weeks: ["week", "wk."],
        days: ["day", "day", "days"],
        hours: ["hour", "hr."],
        minutes: ["minute", "min."],
        seconds: ["second", "sec."]
      };
      const lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1;
      if (numeric === "auto" && lastable) {
        const isDay = unit === "days";
        switch (count) {
          case 1:
            return isDay ? "tomorrow" : `next ${units[unit][0]}`;
          case -1:
            return isDay ? "yesterday" : `last ${units[unit][0]}`;
          case 0:
            return isDay ? "today" : `this ${units[unit][0]}`;
        }
      }
      const isInPast = Object.is(count, -0) || count < 0, fmtValue = Math.abs(count), singular = fmtValue === 1, lilUnits = units[unit], fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;
      return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;
    }
    function stringifyTokens(splits, tokenToString) {
      let s2 = "";
      for (const token of splits) {
        if (token.literal) {
          s2 += token.val;
        } else {
          s2 += tokenToString(token.val);
        }
      }
      return s2;
    }
    var macroTokenToFormatOpts = {
      D: DATE_SHORT,
      DD: DATE_MED,
      DDD: DATE_FULL,
      DDDD: DATE_HUGE,
      t: TIME_SIMPLE,
      tt: TIME_WITH_SECONDS,
      ttt: TIME_WITH_SHORT_OFFSET,
      tttt: TIME_WITH_LONG_OFFSET,
      T: TIME_24_SIMPLE,
      TT: TIME_24_WITH_SECONDS,
      TTT: TIME_24_WITH_SHORT_OFFSET,
      TTTT: TIME_24_WITH_LONG_OFFSET,
      f: DATETIME_SHORT,
      ff: DATETIME_MED,
      fff: DATETIME_FULL,
      ffff: DATETIME_HUGE,
      F: DATETIME_SHORT_WITH_SECONDS,
      FF: DATETIME_MED_WITH_SECONDS,
      FFF: DATETIME_FULL_WITH_SECONDS,
      FFFF: DATETIME_HUGE_WITH_SECONDS
    };
    var Formatter = class {
      static create(locale, opts = {}) {
        return new Formatter(locale, opts);
      }
      static parseFormat(fmt) {
        let current = null, currentFull = "", bracketed = false;
        const splits = [];
        for (let i = 0; i < fmt.length; i++) {
          const c = fmt.charAt(i);
          if (c === "'") {
            if (currentFull.length > 0) {
              splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull });
            }
            current = null;
            currentFull = "";
            bracketed = !bracketed;
          } else if (bracketed) {
            currentFull += c;
          } else if (c === current) {
            currentFull += c;
          } else {
            if (currentFull.length > 0) {
              splits.push({ literal: /^\s+$/.test(currentFull), val: currentFull });
            }
            currentFull = c;
            current = c;
          }
        }
        if (currentFull.length > 0) {
          splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull });
        }
        return splits;
      }
      static macroTokenToFormatOpts(token) {
        return macroTokenToFormatOpts[token];
      }
      constructor(locale, formatOpts) {
        this.opts = formatOpts;
        this.loc = locale;
        this.systemLoc = null;
      }
      formatWithSystemDefault(dt, opts) {
        if (this.systemLoc === null) {
          this.systemLoc = this.loc.redefaultToSystem();
        }
        const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });
        return df.format();
      }
      dtFormatter(dt, opts = {}) {
        return this.loc.dtFormatter(dt, { ...this.opts, ...opts });
      }
      formatDateTime(dt, opts) {
        return this.dtFormatter(dt, opts).format();
      }
      formatDateTimeParts(dt, opts) {
        return this.dtFormatter(dt, opts).formatToParts();
      }
      formatInterval(interval, opts) {
        const df = this.dtFormatter(interval.start, opts);
        return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());
      }
      resolvedOptions(dt, opts) {
        return this.dtFormatter(dt, opts).resolvedOptions();
      }
      num(n2, p = 0) {
        if (this.opts.forceSimple) {
          return padStart(n2, p);
        }
        const opts = { ...this.opts };
        if (p > 0) {
          opts.padTo = p;
        }
        return this.loc.numberFormatter(opts).format(n2);
      }
      formatDateTimeFromString(dt, fmt) {
        const knownEnglish = this.loc.listingMode() === "en", useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", string = (opts, extract) => this.loc.extract(dt, opts, extract), formatOffset2 = (opts) => {
          if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {
            return "Z";
          }
          return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : "";
        }, meridiem = () => knownEnglish ? meridiemForDateTime(dt) : string({ hour: "numeric", hourCycle: "h12" }, "dayperiod"), month = (length, standalone) => knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { month: length } : { month: length, day: "numeric" }, "month"), weekday = (length, standalone) => knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { weekday: length } : { weekday: length, month: "long", day: "numeric" }, "weekday"), maybeMacro = (token) => {
          const formatOpts = Formatter.macroTokenToFormatOpts(token);
          if (formatOpts) {
            return this.formatWithSystemDefault(dt, formatOpts);
          } else {
            return token;
          }
        }, era = (length) => knownEnglish ? eraForDateTime(dt, length) : string({ era: length }, "era"), tokenToString = (token) => {
          switch (token) {
            case "S":
              return this.num(dt.millisecond);
            case "u":
            case "SSS":
              return this.num(dt.millisecond, 3);
            case "s":
              return this.num(dt.second);
            case "ss":
              return this.num(dt.second, 2);
            case "uu":
              return this.num(Math.floor(dt.millisecond / 10), 2);
            case "uuu":
              return this.num(Math.floor(dt.millisecond / 100));
            case "m":
              return this.num(dt.minute);
            case "mm":
              return this.num(dt.minute, 2);
            case "h":
              return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);
            case "hh":
              return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);
            case "H":
              return this.num(dt.hour);
            case "HH":
              return this.num(dt.hour, 2);
            case "Z":
              return formatOffset2({ format: "narrow", allowZ: this.opts.allowZ });
            case "ZZ":
              return formatOffset2({ format: "short", allowZ: this.opts.allowZ });
            case "ZZZ":
              return formatOffset2({ format: "techie", allowZ: this.opts.allowZ });
            case "ZZZZ":
              return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale });
            case "ZZZZZ":
              return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale });
            case "z":
              return dt.zoneName;
            case "a":
              return meridiem();
            case "d":
              return useDateTimeFormatter ? string({ day: "numeric" }, "day") : this.num(dt.day);
            case "dd":
              return useDateTimeFormatter ? string({ day: "2-digit" }, "day") : this.num(dt.day, 2);
            case "c":
              return this.num(dt.weekday);
            case "ccc":
              return weekday("short", true);
            case "cccc":
              return weekday("long", true);
            case "ccccc":
              return weekday("narrow", true);
            case "E":
              return this.num(dt.weekday);
            case "EEE":
              return weekday("short", false);
            case "EEEE":
              return weekday("long", false);
            case "EEEEE":
              return weekday("narrow", false);
            case "L":
              return useDateTimeFormatter ? string({ month: "numeric", day: "numeric" }, "month") : this.num(dt.month);
            case "LL":
              return useDateTimeFormatter ? string({ month: "2-digit", day: "numeric" }, "month") : this.num(dt.month, 2);
            case "LLL":
              return month("short", true);
            case "LLLL":
              return month("long", true);
            case "LLLLL":
              return month("narrow", true);
            case "M":
              return useDateTimeFormatter ? string({ month: "numeric" }, "month") : this.num(dt.month);
            case "MM":
              return useDateTimeFormatter ? string({ month: "2-digit" }, "month") : this.num(dt.month, 2);
            case "MMM":
              return month("short", false);
            case "MMMM":
              return month("long", false);
            case "MMMMM":
              return month("narrow", false);
            case "y":
              return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year);
            case "yy":
              return useDateTimeFormatter ? string({ year: "2-digit" }, "year") : this.num(dt.year.toString().slice(-2), 2);
            case "yyyy":
              return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year, 4);
            case "yyyyyy":
              return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year, 6);
            case "G":
              return era("short");
            case "GG":
              return era("long");
            case "GGGGG":
              return era("narrow");
            case "kk":
              return this.num(dt.weekYear.toString().slice(-2), 2);
            case "kkkk":
              return this.num(dt.weekYear, 4);
            case "W":
              return this.num(dt.weekNumber);
            case "WW":
              return this.num(dt.weekNumber, 2);
            case "o":
              return this.num(dt.ordinal);
            case "ooo":
              return this.num(dt.ordinal, 3);
            case "q":
              return this.num(dt.quarter);
            case "qq":
              return this.num(dt.quarter, 2);
            case "X":
              return this.num(Math.floor(dt.ts / 1e3));
            case "x":
              return this.num(dt.ts);
            default:
              return maybeMacro(token);
          }
        };
        return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);
      }
      formatDurationFromString(dur, fmt) {
        const tokenToField = (token) => {
          switch (token[0]) {
            case "S":
              return "millisecond";
            case "s":
              return "second";
            case "m":
              return "minute";
            case "h":
              return "hour";
            case "d":
              return "day";
            case "w":
              return "week";
            case "M":
              return "month";
            case "y":
              return "year";
            default:
              return null;
          }
        }, tokenToString = (lildur) => (token) => {
          const mapped = tokenToField(token);
          if (mapped) {
            return this.num(lildur.get(mapped), token.length);
          } else {
            return token;
          }
        }, tokens = Formatter.parseFormat(fmt), realTokens = tokens.reduce((found, { literal, val }) => literal ? found : found.concat(val), []), collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));
        return stringifyTokens(tokens, tokenToString(collapsed));
      }
    };
    var Invalid = class {
      constructor(reason, explanation) {
        this.reason = reason;
        this.explanation = explanation;
      }
      toMessage() {
        if (this.explanation) {
          return `${this.reason}: ${this.explanation}`;
        } else {
          return this.reason;
        }
      }
    };
    var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;
    function combineRegexes(...regexes) {
      const full = regexes.reduce((f, r) => f + r.source, "");
      return RegExp(`^${full}$`);
    }
    function combineExtractors(...extractors) {
      return (m) => extractors.reduce(([mergedVals, mergedZone, cursor], ex) => {
        const [val, zone, next] = ex(m, cursor);
        return [{ ...mergedVals, ...val }, zone || mergedZone, next];
      }, [{}, null, 1]).slice(0, 2);
    }
    function parse2(s2, ...patterns) {
      if (s2 == null) {
        return [null, null];
      }
      for (const [regex, extractor] of patterns) {
        const m = regex.exec(s2);
        if (m) {
          return extractor(m);
        }
      }
      return [null, null];
    }
    function simpleParse(...keys) {
      return (match2, cursor) => {
        const ret = {};
        let i;
        for (i = 0; i < keys.length; i++) {
          ret[keys[i]] = parseInteger(match2[cursor + i]);
        }
        return [ret, null, cursor + i];
      };
    }
    var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/;
    var isoExtendedZone = `(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`;
    var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/;
    var isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);
    var isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);
    var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/;
    var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/;
    var isoOrdinalRegex = /(\d{4})-?(\d{3})/;
    var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay");
    var extractISOOrdinalData = simpleParse("year", "ordinal");
    var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/;
    var sqlTimeRegex = RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`);
    var sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);
    function int(match2, pos, fallback) {
      const m = match2[pos];
      return isUndefined(m) ? fallback : parseInteger(m);
    }
    function extractISOYmd(match2, cursor) {
      const item = {
        year: int(match2, cursor),
        month: int(match2, cursor + 1, 1),
        day: int(match2, cursor + 2, 1)
      };
      return [item, null, cursor + 3];
    }
    function extractISOTime(match2, cursor) {
      const item = {
        hours: int(match2, cursor, 0),
        minutes: int(match2, cursor + 1, 0),
        seconds: int(match2, cursor + 2, 0),
        milliseconds: parseMillis(match2[cursor + 3])
      };
      return [item, null, cursor + 4];
    }
    function extractISOOffset(match2, cursor) {
      const local = !match2[cursor] && !match2[cursor + 1], fullOffset = signedOffset(match2[cursor + 1], match2[cursor + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset);
      return [{}, zone, cursor + 3];
    }
    function extractIANAZone(match2, cursor) {
      const zone = match2[cursor] ? IANAZone.create(match2[cursor]) : null;
      return [{}, zone, cursor + 1];
    }
    var isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);
    var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;
    function extractISODuration(match2) {
      const [s2, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match2;
      const hasNegativePrefix = s2[0] === "-";
      const negativeSeconds = secondStr && secondStr[0] === "-";
      const maybeNegate = (num, force = false) => num !== void 0 && (force || num && hasNegativePrefix) ? -num : num;
      return [
        {
          years: maybeNegate(parseFloating(yearStr)),
          months: maybeNegate(parseFloating(monthStr)),
          weeks: maybeNegate(parseFloating(weekStr)),
          days: maybeNegate(parseFloating(dayStr)),
          hours: maybeNegate(parseFloating(hourStr)),
          minutes: maybeNegate(parseFloating(minuteStr)),
          seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"),
          milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)
        }
      ];
    }
    var obsOffsets = {
      GMT: 0,
      EDT: -4 * 60,
      EST: -5 * 60,
      CDT: -5 * 60,
      CST: -6 * 60,
      MDT: -6 * 60,
      MST: -7 * 60,
      PDT: -7 * 60,
      PST: -8 * 60
    };
    function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
      const result = {
        year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),
        month: monthsShort.indexOf(monthStr) + 1,
        day: parseInteger(dayStr),
        hour: parseInteger(hourStr),
        minute: parseInteger(minuteStr)
      };
      if (secondStr)
        result.second = parseInteger(secondStr);
      if (weekdayStr) {
        result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;
      }
      return result;
    }
    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;
    function extractRFC2822(match2) {
      const [
        ,
        weekdayStr,
        dayStr,
        monthStr,
        yearStr,
        hourStr,
        minuteStr,
        secondStr,
        obsOffset,
        milOffset,
        offHourStr,
        offMinuteStr
      ] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
      let offset2;
      if (obsOffset) {
        offset2 = obsOffsets[obsOffset];
      } else if (milOffset) {
        offset2 = 0;
      } else {
        offset2 = signedOffset(offHourStr, offMinuteStr);
      }
      return [result, new FixedOffsetZone(offset2)];
    }
    function preprocessRFC2822(s2) {
      return s2.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim();
    }
    var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/;
    var rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/;
    var ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;
    function extractRFC1123Or850(match2) {
      const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
      return [result, FixedOffsetZone.utcInstance];
    }
    function extractASCII(match2) {
      const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
      return [result, FixedOffsetZone.utcInstance];
    }
    var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);
    var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);
    var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);
    var isoTimeCombinedRegex = combineRegexes(isoTimeRegex);
    var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);
    var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone);
    var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone);
    var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);
    function parseISODate(s2) {
      return parse2(s2, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);
    }
    function parseRFC2822Date(s2) {
      return parse2(preprocessRFC2822(s2), [rfc2822, extractRFC2822]);
    }
    function parseHTTPDate(s2) {
      return parse2(s2, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);
    }
    function parseISODuration(s2) {
      return parse2(s2, [isoDuration, extractISODuration]);
    }
    var extractISOTimeOnly = combineExtractors(extractISOTime);
    function parseISOTimeOnly(s2) {
      return parse2(s2, [isoTimeOnly, extractISOTimeOnly]);
    }
    var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);
    var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);
    var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);
    function parseSQL(s2) {
      return parse2(s2, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);
    }
    var INVALID$2 = "Invalid Duration";
    var lowOrderMatrix = {
      weeks: {
        days: 7,
        hours: 7 * 24,
        minutes: 7 * 24 * 60,
        seconds: 7 * 24 * 60 * 60,
        milliseconds: 7 * 24 * 60 * 60 * 1e3
      },
      days: {
        hours: 24,
        minutes: 24 * 60,
        seconds: 24 * 60 * 60,
        milliseconds: 24 * 60 * 60 * 1e3
      },
      hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1e3 },
      minutes: { seconds: 60, milliseconds: 60 * 1e3 },
      seconds: { milliseconds: 1e3 }
    };
    var casualMatrix = {
      years: {
        quarters: 4,
        months: 12,
        weeks: 52,
        days: 365,
        hours: 365 * 24,
        minutes: 365 * 24 * 60,
        seconds: 365 * 24 * 60 * 60,
        milliseconds: 365 * 24 * 60 * 60 * 1e3
      },
      quarters: {
        months: 3,
        weeks: 13,
        days: 91,
        hours: 91 * 24,
        minutes: 91 * 24 * 60,
        seconds: 91 * 24 * 60 * 60,
        milliseconds: 91 * 24 * 60 * 60 * 1e3
      },
      months: {
        weeks: 4,
        days: 30,
        hours: 30 * 24,
        minutes: 30 * 24 * 60,
        seconds: 30 * 24 * 60 * 60,
        milliseconds: 30 * 24 * 60 * 60 * 1e3
      },
      ...lowOrderMatrix
    };
    var daysInYearAccurate = 146097 / 400;
    var daysInMonthAccurate = 146097 / 4800;
    var accurateMatrix = {
      years: {
        quarters: 4,
        months: 12,
        weeks: daysInYearAccurate / 7,
        days: daysInYearAccurate,
        hours: daysInYearAccurate * 24,
        minutes: daysInYearAccurate * 24 * 60,
        seconds: daysInYearAccurate * 24 * 60 * 60,
        milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1e3
      },
      quarters: {
        months: 3,
        weeks: daysInYearAccurate / 28,
        days: daysInYearAccurate / 4,
        hours: daysInYearAccurate * 24 / 4,
        minutes: daysInYearAccurate * 24 * 60 / 4,
        seconds: daysInYearAccurate * 24 * 60 * 60 / 4,
        milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1e3 / 4
      },
      months: {
        weeks: daysInMonthAccurate / 7,
        days: daysInMonthAccurate,
        hours: daysInMonthAccurate * 24,
        minutes: daysInMonthAccurate * 24 * 60,
        seconds: daysInMonthAccurate * 24 * 60 * 60,
        milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1e3
      },
      ...lowOrderMatrix
    };
    var orderedUnits$1 = [
      "years",
      "quarters",
      "months",
      "weeks",
      "days",
      "hours",
      "minutes",
      "seconds",
      "milliseconds"
    ];
    var reverseUnits = orderedUnits$1.slice(0).reverse();
    function clone$1(dur, alts, clear = false) {
      const conf = {
        values: clear ? alts.values : { ...dur.values, ...alts.values || {} },
        loc: dur.loc.clone(alts.loc),
        conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,
        matrix: alts.matrix || dur.matrix
      };
      return new Duration(conf);
    }
    function durationToMillis(matrix, vals) {
      var _a3;
      let sum = (_a3 = vals.milliseconds) != null ? _a3 : 0;
      for (const unit of reverseUnits.slice(1)) {
        if (vals[unit]) {
          sum += vals[unit] * matrix[unit]["milliseconds"];
        }
      }
      return sum;
    }
    function normalizeValues(matrix, vals) {
      const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;
      orderedUnits$1.reduceRight((previous, current) => {
        if (!isUndefined(vals[current])) {
          if (previous) {
            const previousVal = vals[previous] * factor;
            const conv = matrix[current][previous];
            const rollUp = Math.floor(previousVal / conv);
            vals[current] += rollUp * factor;
            vals[previous] -= rollUp * conv * factor;
          }
          return current;
        } else {
          return previous;
        }
      }, null);
      orderedUnits$1.reduce((previous, current) => {
        if (!isUndefined(vals[current])) {
          if (previous) {
            const fraction = vals[previous] % 1;
            vals[previous] -= fraction;
            vals[current] += fraction * matrix[previous][current];
          }
          return current;
        } else {
          return previous;
        }
      }, null);
    }
    function removeZeroes(vals) {
      const newVals = {};
      for (const [key, value] of Object.entries(vals)) {
        if (value !== 0) {
          newVals[key] = value;
        }
      }
      return newVals;
    }
    var Duration = class {
      constructor(config) {
        const accurate = config.conversionAccuracy === "longterm" || false;
        let matrix = accurate ? accurateMatrix : casualMatrix;
        if (config.matrix) {
          matrix = config.matrix;
        }
        this.values = config.values;
        this.loc = config.loc || Locale.create();
        this.conversionAccuracy = accurate ? "longterm" : "casual";
        this.invalid = config.invalid || null;
        this.matrix = matrix;
        this.isLuxonDuration = true;
      }
      static fromMillis(count, opts) {
        return Duration.fromObject({ milliseconds: count }, opts);
      }
      static fromObject(obj, opts = {}) {
        if (obj == null || typeof obj !== "object") {
          throw new InvalidArgumentError(`Duration.fromObject: argument expected to be an object, got ${obj === null ? "null" : typeof obj}`);
        }
        return new Duration({
          values: normalizeObject(obj, Duration.normalizeUnit),
          loc: Locale.fromObject(opts),
          conversionAccuracy: opts.conversionAccuracy,
          matrix: opts.matrix
        });
      }
      static fromDurationLike(durationLike) {
        if (isNumber(durationLike)) {
          return Duration.fromMillis(durationLike);
        } else if (Duration.isDuration(durationLike)) {
          return durationLike;
        } else if (typeof durationLike === "object") {
          return Duration.fromObject(durationLike);
        } else {
          throw new InvalidArgumentError(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`);
        }
      }
      static fromISO(text, opts) {
        const [parsed] = parseISODuration(text);
        if (parsed) {
          return Duration.fromObject(parsed, opts);
        } else {
          return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`);
        }
      }
      static fromISOTime(text, opts) {
        const [parsed] = parseISOTimeOnly(text);
        if (parsed) {
          return Duration.fromObject(parsed, opts);
        } else {
          return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`);
        }
      }
      static invalid(reason, explanation = null) {
        if (!reason) {
          throw new InvalidArgumentError("need to specify a reason the Duration is invalid");
        }
        const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
        if (Settings2.throwOnInvalid) {
          throw new InvalidDurationError(invalid);
        } else {
          return new Duration({ invalid });
        }
      }
      static normalizeUnit(unit) {
        const normalized = {
          year: "years",
          years: "years",
          quarter: "quarters",
          quarters: "quarters",
          month: "months",
          months: "months",
          week: "weeks",
          weeks: "weeks",
          day: "days",
          days: "days",
          hour: "hours",
          hours: "hours",
          minute: "minutes",
          minutes: "minutes",
          second: "seconds",
          seconds: "seconds",
          millisecond: "milliseconds",
          milliseconds: "milliseconds"
        }[unit ? unit.toLowerCase() : unit];
        if (!normalized)
          throw new InvalidUnitError(unit);
        return normalized;
      }
      static isDuration(o) {
        return o && o.isLuxonDuration || false;
      }
      get locale() {
        return this.isValid ? this.loc.locale : null;
      }
      get numberingSystem() {
        return this.isValid ? this.loc.numberingSystem : null;
      }
      toFormat(fmt, opts = {}) {
        const fmtOpts = {
          ...opts,
          floor: opts.round !== false && opts.floor !== false
        };
        return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2;
      }
      toHuman(opts = {}) {
        if (!this.isValid)
          return INVALID$2;
        const l2 = orderedUnits$1.map((unit) => {
          const val = this.values[unit];
          if (isUndefined(val)) {
            return null;
          }
          return this.loc.numberFormatter({ style: "unit", unitDisplay: "long", ...opts, unit: unit.slice(0, -1) }).format(val);
        }).filter((n2) => n2);
        return this.loc.listFormatter({ type: "conjunction", style: opts.listStyle || "narrow", ...opts }).format(l2);
      }
      toObject() {
        if (!this.isValid)
          return {};
        return { ...this.values };
      }
      toISO() {
        if (!this.isValid)
          return null;
        let s2 = "P";
        if (this.years !== 0)
          s2 += this.years + "Y";
        if (this.months !== 0 || this.quarters !== 0)
          s2 += this.months + this.quarters * 3 + "M";
        if (this.weeks !== 0)
          s2 += this.weeks + "W";
        if (this.days !== 0)
          s2 += this.days + "D";
        if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)
          s2 += "T";
        if (this.hours !== 0)
          s2 += this.hours + "H";
        if (this.minutes !== 0)
          s2 += this.minutes + "M";
        if (this.seconds !== 0 || this.milliseconds !== 0)
          s2 += roundTo(this.seconds + this.milliseconds / 1e3, 3) + "S";
        if (s2 === "P")
          s2 += "T0S";
        return s2;
      }
      toISOTime(opts = {}) {
        if (!this.isValid)
          return null;
        const millis = this.toMillis();
        if (millis < 0 || millis >= 864e5)
          return null;
        opts = {
          suppressMilliseconds: false,
          suppressSeconds: false,
          includePrefix: false,
          format: "extended",
          ...opts,
          includeOffset: false
        };
        const dateTime = DateTime.fromMillis(millis, { zone: "UTC" });
        return dateTime.toISOTime(opts);
      }
      toJSON() {
        return this.toISO();
      }
      toString() {
        return this.toISO();
      }
      toMillis() {
        if (!this.isValid)
          return NaN;
        return durationToMillis(this.matrix, this.values);
      }
      valueOf() {
        return this.toMillis();
      }
      plus(duration) {
        if (!this.isValid)
          return this;
        const dur = Duration.fromDurationLike(duration), result = {};
        for (const k of orderedUnits$1) {
          if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {
            result[k] = dur.get(k) + this.get(k);
          }
        }
        return clone$1(this, { values: result }, true);
      }
      minus(duration) {
        if (!this.isValid)
          return this;
        const dur = Duration.fromDurationLike(duration);
        return this.plus(dur.negate());
      }
      mapUnits(fn) {
        if (!this.isValid)
          return this;
        const result = {};
        for (const k of Object.keys(this.values)) {
          result[k] = asNumber(fn(this.values[k], k));
        }
        return clone$1(this, { values: result }, true);
      }
      get(unit) {
        return this[Duration.normalizeUnit(unit)];
      }
      set(values) {
        if (!this.isValid)
          return this;
        const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };
        return clone$1(this, { values: mixed });
      }
      reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {
        const loc = this.loc.clone({ locale, numberingSystem });
        const opts = { loc, matrix, conversionAccuracy };
        return clone$1(this, opts);
      }
      as(unit) {
        return this.isValid ? this.shiftTo(unit).get(unit) : NaN;
      }
      normalize() {
        if (!this.isValid)
          return this;
        const vals = this.toObject();
        normalizeValues(this.matrix, vals);
        return clone$1(this, { values: vals }, true);
      }
      rescale() {
        if (!this.isValid)
          return this;
        const vals = removeZeroes(this.normalize().shiftToAll().toObject());
        return clone$1(this, { values: vals }, true);
      }
      shiftTo(...units) {
        if (!this.isValid)
          return this;
        if (units.length === 0) {
          return this;
        }
        units = units.map((u) => Duration.normalizeUnit(u));
        const built = {}, accumulated = {}, vals = this.toObject();
        let lastUnit;
        for (const k of orderedUnits$1) {
          if (units.indexOf(k) >= 0) {
            lastUnit = k;
            let own = 0;
            for (const ak in accumulated) {
              own += this.matrix[ak][k] * accumulated[ak];
              accumulated[ak] = 0;
            }
            if (isNumber(vals[k])) {
              own += vals[k];
            }
            const i = Math.trunc(own);
            built[k] = i;
            accumulated[k] = (own * 1e3 - i * 1e3) / 1e3;
          } else if (isNumber(vals[k])) {
            accumulated[k] = vals[k];
          }
        }
        for (const key in accumulated) {
          if (accumulated[key] !== 0) {
            built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];
          }
        }
        normalizeValues(this.matrix, built);
        return clone$1(this, { values: built }, true);
      }
      shiftToAll() {
        if (!this.isValid)
          return this;
        return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds");
      }
      negate() {
        if (!this.isValid)
          return this;
        const negated = {};
        for (const k of Object.keys(this.values)) {
          negated[k] = this.values[k] === 0 ? 0 : -this.values[k];
        }
        return clone$1(this, { values: negated }, true);
      }
      get years() {
        return this.isValid ? this.values.years || 0 : NaN;
      }
      get quarters() {
        return this.isValid ? this.values.quarters || 0 : NaN;
      }
      get months() {
        return this.isValid ? this.values.months || 0 : NaN;
      }
      get weeks() {
        return this.isValid ? this.values.weeks || 0 : NaN;
      }
      get days() {
        return this.isValid ? this.values.days || 0 : NaN;
      }
      get hours() {
        return this.isValid ? this.values.hours || 0 : NaN;
      }
      get minutes() {
        return this.isValid ? this.values.minutes || 0 : NaN;
      }
      get seconds() {
        return this.isValid ? this.values.seconds || 0 : NaN;
      }
      get milliseconds() {
        return this.isValid ? this.values.milliseconds || 0 : NaN;
      }
      get isValid() {
        return this.invalid === null;
      }
      get invalidReason() {
        return this.invalid ? this.invalid.reason : null;
      }
      get invalidExplanation() {
        return this.invalid ? this.invalid.explanation : null;
      }
      equals(other) {
        if (!this.isValid || !other.isValid) {
          return false;
        }
        if (!this.loc.equals(other.loc)) {
          return false;
        }
        function eq(v1, v2) {
          if (v1 === void 0 || v1 === 0)
            return v2 === void 0 || v2 === 0;
          return v1 === v2;
        }
        for (const u of orderedUnits$1) {
          if (!eq(this.values[u], other.values[u])) {
            return false;
          }
        }
        return true;
      }
    };
    var INVALID$1 = "Invalid Interval";
    function validateStartEnd(start, end) {
      if (!start || !start.isValid) {
        return Interval.invalid("missing or invalid start");
      } else if (!end || !end.isValid) {
        return Interval.invalid("missing or invalid end");
      } else if (end < start) {
        return Interval.invalid("end before start", `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`);
      } else {
        return null;
      }
    }
    var Interval = class {
      constructor(config) {
        this.s = config.start;
        this.e = config.end;
        this.invalid = config.invalid || null;
        this.isLuxonInterval = true;
      }
      static invalid(reason, explanation = null) {
        if (!reason) {
          throw new InvalidArgumentError("need to specify a reason the Interval is invalid");
        }
        const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
        if (Settings2.throwOnInvalid) {
          throw new InvalidIntervalError(invalid);
        } else {
          return new Interval({ invalid });
        }
      }
      static fromDateTimes(start, end) {
        const builtStart = friendlyDateTime(start), builtEnd = friendlyDateTime(end);
        const validateError = validateStartEnd(builtStart, builtEnd);
        if (validateError == null) {
          return new Interval({
            start: builtStart,
            end: builtEnd
          });
        } else {
          return validateError;
        }
      }
      static after(start, duration) {
        const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(start);
        return Interval.fromDateTimes(dt, dt.plus(dur));
      }
      static before(end, duration) {
        const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(end);
        return Interval.fromDateTimes(dt.minus(dur), dt);
      }
      static fromISO(text, opts) {
        const [s2, e] = (text || "").split("/", 2);
        if (s2 && e) {
          let start, startIsValid;
          try {
            start = DateTime.fromISO(s2, opts);
            startIsValid = start.isValid;
          } catch (e2) {
            startIsValid = false;
          }
          let end, endIsValid;
          try {
            end = DateTime.fromISO(e, opts);
            endIsValid = end.isValid;
          } catch (e2) {
            endIsValid = false;
          }
          if (startIsValid && endIsValid) {
            return Interval.fromDateTimes(start, end);
          }
          if (startIsValid) {
            const dur = Duration.fromISO(e, opts);
            if (dur.isValid) {
              return Interval.after(start, dur);
            }
          } else if (endIsValid) {
            const dur = Duration.fromISO(s2, opts);
            if (dur.isValid) {
              return Interval.before(end, dur);
            }
          }
        }
        return Interval.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`);
      }
      static isInterval(o) {
        return o && o.isLuxonInterval || false;
      }
      get start() {
        return this.isValid ? this.s : null;
      }
      get end() {
        return this.isValid ? this.e : null;
      }
      get isValid() {
        return this.invalidReason === null;
      }
      get invalidReason() {
        return this.invalid ? this.invalid.reason : null;
      }
      get invalidExplanation() {
        return this.invalid ? this.invalid.explanation : null;
      }
      length(unit = "milliseconds") {
        return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;
      }
      count(unit = "milliseconds") {
        if (!this.isValid)
          return NaN;
        const start = this.start.startOf(unit), end = this.end.startOf(unit);
        return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());
      }
      hasSame(unit) {
        return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;
      }
      isEmpty() {
        return this.s.valueOf() === this.e.valueOf();
      }
      isAfter(dateTime) {
        if (!this.isValid)
          return false;
        return this.s > dateTime;
      }
      isBefore(dateTime) {
        if (!this.isValid)
          return false;
        return this.e <= dateTime;
      }
      contains(dateTime) {
        if (!this.isValid)
          return false;
        return this.s <= dateTime && this.e > dateTime;
      }
      set({ start, end } = {}) {
        if (!this.isValid)
          return this;
        return Interval.fromDateTimes(start || this.s, end || this.e);
      }
      splitAt(...dateTimes) {
        if (!this.isValid)
          return [];
        const sorted = dateTimes.map(friendlyDateTime).filter((d) => this.contains(d)).sort(), results = [];
        let { s: s2 } = this, i = 0;
        while (s2 < this.e) {
          const added = sorted[i] || this.e, next = +added > +this.e ? this.e : added;
          results.push(Interval.fromDateTimes(s2, next));
          s2 = next;
          i += 1;
        }
        return results;
      }
      splitBy(duration) {
        const dur = Duration.fromDurationLike(duration);
        if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) {
          return [];
        }
        let { s: s2 } = this, idx = 1, next;
        const results = [];
        while (s2 < this.e) {
          const added = this.start.plus(dur.mapUnits((x) => x * idx));
          next = +added > +this.e ? this.e : added;
          results.push(Interval.fromDateTimes(s2, next));
          s2 = next;
          idx += 1;
        }
        return results;
      }
      divideEqually(numberOfParts) {
        if (!this.isValid)
          return [];
        return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);
      }
      overlaps(other) {
        return this.e > other.s && this.s < other.e;
      }
      abutsStart(other) {
        if (!this.isValid)
          return false;
        return +this.e === +other.s;
      }
      abutsEnd(other) {
        if (!this.isValid)
          return false;
        return +other.e === +this.s;
      }
      engulfs(other) {
        if (!this.isValid)
          return false;
        return this.s <= other.s && this.e >= other.e;
      }
      equals(other) {
        if (!this.isValid || !other.isValid) {
          return false;
        }
        return this.s.equals(other.s) && this.e.equals(other.e);
      }
      intersection(other) {
        if (!this.isValid)
          return this;
        const s2 = this.s > other.s ? this.s : other.s, e = this.e < other.e ? this.e : other.e;
        if (s2 >= e) {
          return null;
        } else {
          return Interval.fromDateTimes(s2, e);
        }
      }
      union(other) {
        if (!this.isValid)
          return this;
        const s2 = this.s < other.s ? this.s : other.s, e = this.e > other.e ? this.e : other.e;
        return Interval.fromDateTimes(s2, e);
      }
      static merge(intervals) {
        const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(([sofar, current], item) => {
          if (!current) {
            return [sofar, item];
          } else if (current.overlaps(item) || current.abutsStart(item)) {
            return [sofar, current.union(item)];
          } else {
            return [sofar.concat([current]), item];
          }
        }, [[], null]);
        if (final) {
          found.push(final);
        }
        return found;
      }
      static xor(intervals) {
        let start = null, currentCount = 0;
        const results = [], ends = intervals.map((i) => [
          { time: i.s, type: "s" },
          { time: i.e, type: "e" }
        ]), flattened = Array.prototype.concat(...ends), arr = flattened.sort((a, b) => a.time - b.time);
        for (const i of arr) {
          currentCount += i.type === "s" ? 1 : -1;
          if (currentCount === 1) {
            start = i.time;
          } else {
            if (start && +start !== +i.time) {
              results.push(Interval.fromDateTimes(start, i.time));
            }
            start = null;
          }
        }
        return Interval.merge(results);
      }
      difference(...intervals) {
        return Interval.xor([this].concat(intervals)).map((i) => this.intersection(i)).filter((i) => i && !i.isEmpty());
      }
      toString() {
        if (!this.isValid)
          return INVALID$1;
        return `[${this.s.toISO()} \u2013 ${this.e.toISO()})`;
      }
      toLocaleString(formatOpts = DATE_SHORT, opts = {}) {
        return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1;
      }
      toISO(opts) {
        if (!this.isValid)
          return INVALID$1;
        return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;
      }
      toISODate() {
        if (!this.isValid)
          return INVALID$1;
        return `${this.s.toISODate()}/${this.e.toISODate()}`;
      }
      toISOTime(opts) {
        if (!this.isValid)
          return INVALID$1;
        return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;
      }
      toFormat(dateFormat, { separator = " \u2013 " } = {}) {
        if (!this.isValid)
          return INVALID$1;
        return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;
      }
      toDuration(unit, opts) {
        if (!this.isValid) {
          return Duration.invalid(this.invalidReason);
        }
        return this.e.diff(this.s, unit, opts);
      }
      mapEndpoints(mapFn) {
        return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));
      }
    };
    var Info = class {
      static hasDST(zone = Settings2.defaultZone) {
        const proto = DateTime.now().setZone(zone).set({ month: 12 });
        return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;
      }
      static isValidIANAZone(zone) {
        return IANAZone.isValidZone(zone);
      }
      static normalizeZone(input) {
        return normalizeZone(input, Settings2.defaultZone);
      }
      static months(length = "long", { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {}) {
        return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);
      }
      static monthsFormat(length = "long", { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {}) {
        return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);
      }
      static weekdays(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) {
        return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);
      }
      static weekdaysFormat(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) {
        return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);
      }
      static meridiems({ locale = null } = {}) {
        return Locale.create(locale).meridiems();
      }
      static eras(length = "short", { locale = null } = {}) {
        return Locale.create(locale, null, "gregory").eras(length);
      }
      static features() {
        return { relative: hasRelative() };
      }
    };
    function dayDiff(earlier, later) {
      const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf("day").valueOf(), ms = utcDayStart(later) - utcDayStart(earlier);
      return Math.floor(Duration.fromMillis(ms).as("days"));
    }
    function highOrderDiffs(cursor, later, units) {
      const differs = [
        ["years", (a, b) => b.year - a.year],
        ["quarters", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],
        ["months", (a, b) => b.month - a.month + (b.year - a.year) * 12],
        [
          "weeks",
          (a, b) => {
            const days = dayDiff(a, b);
            return (days - days % 7) / 7;
          }
        ],
        ["days", dayDiff]
      ];
      const results = {};
      const earlier = cursor;
      let lowestOrder, highWater;
      for (const [unit, differ] of differs) {
        if (units.indexOf(unit) >= 0) {
          lowestOrder = unit;
          results[unit] = differ(cursor, later);
          highWater = earlier.plus(results);
          if (highWater > later) {
            results[unit]--;
            cursor = earlier.plus(results);
            if (cursor > later) {
              highWater = cursor;
              results[unit]--;
              cursor = earlier.plus(results);
            }
          } else {
            cursor = highWater;
          }
        }
      }
      return [cursor, results, highWater, lowestOrder];
    }
    function diff(earlier, later, units, opts) {
      let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);
      const remainingMillis = later - cursor;
      const lowerOrderUnits = units.filter((u) => ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0);
      if (lowerOrderUnits.length === 0) {
        if (highWater < later) {
          highWater = cursor.plus({ [lowestOrder]: 1 });
        }
        if (highWater !== cursor) {
          results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);
        }
      }
      const duration = Duration.fromObject(results, opts);
      if (lowerOrderUnits.length > 0) {
        return Duration.fromMillis(remainingMillis, opts).shiftTo(...lowerOrderUnits).plus(duration);
      } else {
        return duration;
      }
    }
    var numberingSystems = {
      arab: "[\u0660-\u0669]",
      arabext: "[\u06F0-\u06F9]",
      bali: "[\u1B50-\u1B59]",
      beng: "[\u09E6-\u09EF]",
      deva: "[\u0966-\u096F]",
      fullwide: "[\uFF10-\uFF19]",
      gujr: "[\u0AE6-\u0AEF]",
      hanidec: "[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",
      khmr: "[\u17E0-\u17E9]",
      knda: "[\u0CE6-\u0CEF]",
      laoo: "[\u0ED0-\u0ED9]",
      limb: "[\u1946-\u194F]",
      mlym: "[\u0D66-\u0D6F]",
      mong: "[\u1810-\u1819]",
      mymr: "[\u1040-\u1049]",
      orya: "[\u0B66-\u0B6F]",
      tamldec: "[\u0BE6-\u0BEF]",
      telu: "[\u0C66-\u0C6F]",
      thai: "[\u0E50-\u0E59]",
      tibt: "[\u0F20-\u0F29]",
      latn: "\\d"
    };
    var numberingSystemsUTF16 = {
      arab: [1632, 1641],
      arabext: [1776, 1785],
      bali: [6992, 7001],
      beng: [2534, 2543],
      deva: [2406, 2415],
      fullwide: [65296, 65303],
      gujr: [2790, 2799],
      khmr: [6112, 6121],
      knda: [3302, 3311],
      laoo: [3792, 3801],
      limb: [6470, 6479],
      mlym: [3430, 3439],
      mong: [6160, 6169],
      mymr: [4160, 4169],
      orya: [2918, 2927],
      tamldec: [3046, 3055],
      telu: [3174, 3183],
      thai: [3664, 3673],
      tibt: [3872, 3881]
    };
    var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split("");
    function parseDigits(str) {
      let value = parseInt(str, 10);
      if (isNaN(value)) {
        value = "";
        for (let i = 0; i < str.length; i++) {
          const code = str.charCodeAt(i);
          if (str[i].search(numberingSystems.hanidec) !== -1) {
            value += hanidecChars.indexOf(str[i]);
          } else {
            for (const key in numberingSystemsUTF16) {
              const [min, max] = numberingSystemsUTF16[key];
              if (code >= min && code <= max) {
                value += code - min;
              }
            }
          }
        }
        return parseInt(value, 10);
      } else {
        return value;
      }
    }
    function digitRegex({ numberingSystem }, append = "") {
      return new RegExp(`${numberingSystems[numberingSystem || "latn"]}${append}`);
    }
    var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support";
    function intUnit(regex, post = (i) => i) {
      return { regex, deser: ([s2]) => post(parseDigits(s2)) };
    }
    var NBSP = String.fromCharCode(160);
    var spaceOrNBSP = `[ ${NBSP}]`;
    var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g");
    function fixListRegex(s2) {
      return s2.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP);
    }
    function stripInsensitivities(s2) {
      return s2.replace(/\./g, "").replace(spaceOrNBSPRegExp, " ").toLowerCase();
    }
    function oneOf(strings, startIndex) {
      if (strings === null) {
        return null;
      } else {
        return {
          regex: RegExp(strings.map(fixListRegex).join("|")),
          deser: ([s2]) => strings.findIndex((i) => stripInsensitivities(s2) === stripInsensitivities(i)) + startIndex
        };
      }
    }
    function offset(regex, groups) {
      return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };
    }
    function simple(regex) {
      return { regex, deser: ([s2]) => s2 };
    }
    function escapeToken(value) {
      return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
    }
    function unitForToken(token, loc) {
      const one = digitRegex(loc), two = digitRegex(loc, "{2}"), three = digitRegex(loc, "{3}"), four = digitRegex(loc, "{4}"), six = digitRegex(loc, "{6}"), oneOrTwo = digitRegex(loc, "{1,2}"), oneToThree = digitRegex(loc, "{1,3}"), oneToSix = digitRegex(loc, "{1,6}"), oneToNine = digitRegex(loc, "{1,9}"), twoToFour = digitRegex(loc, "{2,4}"), fourToSix = digitRegex(loc, "{4,6}"), literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s2]) => s2, literal: true }), unitate = (t) => {
        if (token.literal) {
          return literal(t);
        }
        switch (t.val) {
          case "G":
            return oneOf(loc.eras("short"), 0);
          case "GG":
            return oneOf(loc.eras("long"), 0);
          case "y":
            return intUnit(oneToSix);
          case "yy":
            return intUnit(twoToFour, untruncateYear);
          case "yyyy":
            return intUnit(four);
          case "yyyyy":
            return intUnit(fourToSix);
          case "yyyyyy":
            return intUnit(six);
          case "M":
            return intUnit(oneOrTwo);
          case "MM":
            return intUnit(two);
          case "MMM":
            return oneOf(loc.months("short", true), 1);
          case "MMMM":
            return oneOf(loc.months("long", true), 1);
          case "L":
            return intUnit(oneOrTwo);
          case "LL":
            return intUnit(two);
          case "LLL":
            return oneOf(loc.months("short", false), 1);
          case "LLLL":
            return oneOf(loc.months("long", false), 1);
          case "d":
            return intUnit(oneOrTwo);
          case "dd":
            return intUnit(two);
          case "o":
            return intUnit(oneToThree);
          case "ooo":
            return intUnit(three);
          case "HH":
            return intUnit(two);
          case "H":
            return intUnit(oneOrTwo);
          case "hh":
            return intUnit(two);
          case "h":
            return intUnit(oneOrTwo);
          case "mm":
            return intUnit(two);
          case "m":
            return intUnit(oneOrTwo);
          case "q":
            return intUnit(oneOrTwo);
          case "qq":
            return intUnit(two);
          case "s":
            return intUnit(oneOrTwo);
          case "ss":
            return intUnit(two);
          case "S":
            return intUnit(oneToThree);
          case "SSS":
            return intUnit(three);
          case "u":
            return simple(oneToNine);
          case "uu":
            return simple(oneOrTwo);
          case "uuu":
            return intUnit(one);
          case "a":
            return oneOf(loc.meridiems(), 0);
          case "kkkk":
            return intUnit(four);
          case "kk":
            return intUnit(twoToFour, untruncateYear);
          case "W":
            return intUnit(oneOrTwo);
          case "WW":
            return intUnit(two);
          case "E":
          case "c":
            return intUnit(one);
          case "EEE":
            return oneOf(loc.weekdays("short", false), 1);
          case "EEEE":
            return oneOf(loc.weekdays("long", false), 1);
          case "ccc":
            return oneOf(loc.weekdays("short", true), 1);
          case "cccc":
            return oneOf(loc.weekdays("long", true), 1);
          case "Z":
          case "ZZ":
            return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);
          case "ZZZ":
            return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);
          case "z":
            return simple(/[a-z_+-/]{1,256}?/i);
          case " ":
            return simple(/[^\S\n\r]/);
          default:
            return literal(t);
        }
      };
      const unit = unitate(token) || {
        invalidReason: MISSING_FTP
      };
      unit.token = token;
      return unit;
    }
    var partTypeStyleToTokenVal = {
      year: {
        "2-digit": "yy",
        numeric: "yyyyy"
      },
      month: {
        numeric: "M",
        "2-digit": "MM",
        short: "MMM",
        long: "MMMM"
      },
      day: {
        numeric: "d",
        "2-digit": "dd"
      },
      weekday: {
        short: "EEE",
        long: "EEEE"
      },
      dayperiod: "a",
      dayPeriod: "a",
      hour12: {
        numeric: "h",
        "2-digit": "hh"
      },
      hour24: {
        numeric: "H",
        "2-digit": "HH"
      },
      minute: {
        numeric: "m",
        "2-digit": "mm"
      },
      second: {
        numeric: "s",
        "2-digit": "ss"
      },
      timeZoneName: {
        long: "ZZZZZ",
        short: "ZZZ"
      }
    };
    function tokenForPart(part, formatOpts, resolvedOpts) {
      const { type, value } = part;
      if (type === "literal") {
        const isSpace = /^\s+$/.test(value);
        return {
          literal: !isSpace,
          val: isSpace ? " " : value
        };
      }
      const style = formatOpts[type];
      let actualType = type;
      if (type === "hour") {
        if (formatOpts.hour12 != null) {
          actualType = formatOpts.hour12 ? "hour12" : "hour24";
        } else if (formatOpts.hourCycle != null) {
          if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") {
            actualType = "hour12";
          } else {
            actualType = "hour24";
          }
        } else {
          actualType = resolvedOpts.hour12 ? "hour12" : "hour24";
        }
      }
      let val = partTypeStyleToTokenVal[actualType];
      if (typeof val === "object") {
        val = val[style];
      }
      if (val) {
        return {
          literal: false,
          val
        };
      }
      return void 0;
    }
    function buildRegex(units) {
      const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, "");
      return [`^${re}$`, units];
    }
    function match(input, regex, handlers) {
      const matches = input.match(regex);
      if (matches) {
        const all = {};
        let matchIndex = 1;
        for (const i in handlers) {
          if (hasOwnProperty(handlers, i)) {
            const h = handlers[i], groups = h.groups ? h.groups + 1 : 1;
            if (!h.literal && h.token) {
              all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));
            }
            matchIndex += groups;
          }
        }
        return [matches, all];
      } else {
        return [matches, {}];
      }
    }
    function dateTimeFromMatches(matches) {
      const toField = (token) => {
        switch (token) {
          case "S":
            return "millisecond";
          case "s":
            return "second";
          case "m":
            return "minute";
          case "h":
          case "H":
            return "hour";
          case "d":
            return "day";
          case "o":
            return "ordinal";
          case "L":
          case "M":
            return "month";
          case "y":
            return "year";
          case "E":
          case "c":
            return "weekday";
          case "W":
            return "weekNumber";
          case "k":
            return "weekYear";
          case "q":
            return "quarter";
          default:
            return null;
        }
      };
      let zone = null;
      let specificOffset;
      if (!isUndefined(matches.z)) {
        zone = IANAZone.create(matches.z);
      }
      if (!isUndefined(matches.Z)) {
        if (!zone) {
          zone = new FixedOffsetZone(matches.Z);
        }
        specificOffset = matches.Z;
      }
      if (!isUndefined(matches.q)) {
        matches.M = (matches.q - 1) * 3 + 1;
      }
      if (!isUndefined(matches.h)) {
        if (matches.h < 12 && matches.a === 1) {
          matches.h += 12;
        } else if (matches.h === 12 && matches.a === 0) {
          matches.h = 0;
        }
      }
      if (matches.G === 0 && matches.y) {
        matches.y = -matches.y;
      }
      if (!isUndefined(matches.u)) {
        matches.S = parseMillis(matches.u);
      }
      const vals = Object.keys(matches).reduce((r, k) => {
        const f = toField(k);
        if (f) {
          r[f] = matches[k];
        }
        return r;
      }, {});
      return [vals, zone, specificOffset];
    }
    var dummyDateTimeCache = null;
    function getDummyDateTime() {
      if (!dummyDateTimeCache) {
        dummyDateTimeCache = DateTime.fromMillis(1555555555555);
      }
      return dummyDateTimeCache;
    }
    function maybeExpandMacroToken(token, locale) {
      if (token.literal) {
        return token;
      }
      const formatOpts = Formatter.macroTokenToFormatOpts(token.val);
      const tokens = formatOptsToTokens(formatOpts, locale);
      if (tokens == null || tokens.includes(void 0)) {
        return token;
      }
      return tokens;
    }
    function expandMacroTokens(tokens, locale) {
      return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));
    }
    function explainFromTokens(locale, input, format) {
      const tokens = expandMacroTokens(Formatter.parseFormat(format), locale), units = tokens.map((t) => unitForToken(t, locale)), disqualifyingUnit = units.find((t) => t.invalidReason);
      if (disqualifyingUnit) {
        return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };
      } else {
        const [regexString, handlers] = buildRegex(units), regex = RegExp(regexString, "i"), [rawMatches, matches] = match(input, regex, handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0];
        if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) {
          throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");
        }
        return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };
      }
    }
    function parseFromTokens(locale, input, format) {
      const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);
      return [result, zone, specificOffset, invalidReason];
    }
    function formatOptsToTokens(formatOpts, locale) {
      if (!formatOpts) {
        return null;
      }
      const formatter = Formatter.create(locale, formatOpts);
      const df = formatter.dtFormatter(getDummyDateTime());
      const parts = df.formatToParts();
      const resolvedOpts = df.resolvedOptions();
      return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));
    }
    var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
    var leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
    function unitOutOfRange(unit, value) {
      return new Invalid("unit out of range", `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`);
    }
    function dayOfWeek(year, month, day) {
      const d = new Date(Date.UTC(year, month - 1, day));
      if (year < 100 && year >= 0) {
        d.setUTCFullYear(d.getUTCFullYear() - 1900);
      }
      const js = d.getUTCDay();
      return js === 0 ? 7 : js;
    }
    function computeOrdinal(year, month, day) {
      return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];
    }
    function uncomputeOrdinal(year, ordinal) {
      const table = isLeapYear(year) ? leapLadder : nonLeapLadder, month0 = table.findIndex((i) => i < ordinal), day = ordinal - table[month0];
      return { month: month0 + 1, day };
    }
    function gregorianToWeek(gregObj) {
      const { year, month, day } = gregObj, ordinal = computeOrdinal(year, month, day), weekday = dayOfWeek(year, month, day);
      let weekNumber = Math.floor((ordinal - weekday + 10) / 7), weekYear;
      if (weekNumber < 1) {
        weekYear = year - 1;
        weekNumber = weeksInWeekYear(weekYear);
      } else if (weekNumber > weeksInWeekYear(year)) {
        weekYear = year + 1;
        weekNumber = 1;
      } else {
        weekYear = year;
      }
      return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };
    }
    function weekToGregorian(weekData) {
      const { weekYear, weekNumber, weekday } = weekData, weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), yearInDays = daysInYear(weekYear);
      let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, year;
      if (ordinal < 1) {
        year = weekYear - 1;
        ordinal += daysInYear(year);
      } else if (ordinal > yearInDays) {
        year = weekYear + 1;
        ordinal -= daysInYear(weekYear);
      } else {
        year = weekYear;
      }
      const { month, day } = uncomputeOrdinal(year, ordinal);
      return { year, month, day, ...timeObject(weekData) };
    }
    function gregorianToOrdinal(gregData) {
      const { year, month, day } = gregData;
      const ordinal = computeOrdinal(year, month, day);
      return { year, ordinal, ...timeObject(gregData) };
    }
    function ordinalToGregorian(ordinalData) {
      const { year, ordinal } = ordinalData;
      const { month, day } = uncomputeOrdinal(year, ordinal);
      return { year, month, day, ...timeObject(ordinalData) };
    }
    function hasInvalidWeekData(obj) {
      const validYear = isInteger(obj.weekYear), validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), validWeekday = integerBetween(obj.weekday, 1, 7);
      if (!validYear) {
        return unitOutOfRange("weekYear", obj.weekYear);
      } else if (!validWeek) {
        return unitOutOfRange("week", obj.week);
      } else if (!validWeekday) {
        return unitOutOfRange("weekday", obj.weekday);
      } else
        return false;
    }
    function hasInvalidOrdinalData(obj) {
      const validYear = isInteger(obj.year), validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));
      if (!validYear) {
        return unitOutOfRange("year", obj.year);
      } else if (!validOrdinal) {
        return unitOutOfRange("ordinal", obj.ordinal);
      } else
        return false;
    }
    function hasInvalidGregorianData(obj) {
      const validYear = isInteger(obj.year), validMonth = integerBetween(obj.month, 1, 12), validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));
      if (!validYear) {
        return unitOutOfRange("year", obj.year);
      } else if (!validMonth) {
        return unitOutOfRange("month", obj.month);
      } else if (!validDay) {
        return unitOutOfRange("day", obj.day);
      } else
        return false;
    }
    function hasInvalidTimeData(obj) {
      const { hour, minute, second, millisecond } = obj;
      const validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, validMinute = integerBetween(minute, 0, 59), validSecond = integerBetween(second, 0, 59), validMillisecond = integerBetween(millisecond, 0, 999);
      if (!validHour) {
        return unitOutOfRange("hour", hour);
      } else if (!validMinute) {
        return unitOutOfRange("minute", minute);
      } else if (!validSecond) {
        return unitOutOfRange("second", second);
      } else if (!validMillisecond) {
        return unitOutOfRange("millisecond", millisecond);
      } else
        return false;
    }
    var INVALID = "Invalid DateTime";
    var MAX_DATE = 864e13;
    function unsupportedZone(zone) {
      return new Invalid("unsupported zone", `the zone "${zone.name}" is not supported`);
    }
    function possiblyCachedWeekData(dt) {
      if (dt.weekData === null) {
        dt.weekData = gregorianToWeek(dt.c);
      }
      return dt.weekData;
    }
    function clone(inst, alts) {
      const current = {
        ts: inst.ts,
        zone: inst.zone,
        c: inst.c,
        o: inst.o,
        loc: inst.loc,
        invalid: inst.invalid
      };
      return new DateTime({ ...current, ...alts, old: current });
    }
    function fixOffset(localTS, o, tz) {
      let utcGuess = localTS - o * 60 * 1e3;
      const o2 = tz.offset(utcGuess);
      if (o === o2) {
        return [utcGuess, o];
      }
      utcGuess -= (o2 - o) * 60 * 1e3;
      const o3 = tz.offset(utcGuess);
      if (o2 === o3) {
        return [utcGuess, o2];
      }
      return [localTS - Math.min(o2, o3) * 60 * 1e3, Math.max(o2, o3)];
    }
    function tsToObj(ts, offset2) {
      ts += offset2 * 60 * 1e3;
      const d = new Date(ts);
      return {
        year: d.getUTCFullYear(),
        month: d.getUTCMonth() + 1,
        day: d.getUTCDate(),
        hour: d.getUTCHours(),
        minute: d.getUTCMinutes(),
        second: d.getUTCSeconds(),
        millisecond: d.getUTCMilliseconds()
      };
    }
    function objToTS(obj, offset2, zone) {
      return fixOffset(objToLocalTS(obj), offset2, zone);
    }
    function adjustTime(inst, dur) {
      const oPre = inst.o, year = inst.c.year + Math.trunc(dur.years), month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, c = {
        ...inst.c,
        year,
        month,
        day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7
      }, millisToAdd = Duration.fromObject({
        years: dur.years - Math.trunc(dur.years),
        quarters: dur.quarters - Math.trunc(dur.quarters),
        months: dur.months - Math.trunc(dur.months),
        weeks: dur.weeks - Math.trunc(dur.weeks),
        days: dur.days - Math.trunc(dur.days),
        hours: dur.hours,
        minutes: dur.minutes,
        seconds: dur.seconds,
        milliseconds: dur.milliseconds
      }).as("milliseconds"), localTS = objToLocalTS(c);
      let [ts, o] = fixOffset(localTS, oPre, inst.zone);
      if (millisToAdd !== 0) {
        ts += millisToAdd;
        o = inst.zone.offset(ts);
      }
      return { ts, o };
    }
    function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {
      const { setZone, zone } = opts;
      if (parsed && Object.keys(parsed).length !== 0 || parsedZone) {
        const interpretationZone = parsedZone || zone, inst = DateTime.fromObject(parsed, {
          ...opts,
          zone: interpretationZone,
          specificOffset
        });
        return setZone ? inst : inst.setZone(zone);
      } else {
        return DateTime.invalid(new Invalid("unparsable", `the input "${text}" can't be parsed as ${format}`));
      }
    }
    function toTechFormat(dt, format, allowZ = true) {
      return dt.isValid ? Formatter.create(Locale.create("en-US"), {
        allowZ,
        forceSimple: true
      }).formatDateTimeFromString(dt, format) : null;
    }
    function toISODate(o, extended) {
      const longFormat = o.c.year > 9999 || o.c.year < 0;
      let c = "";
      if (longFormat && o.c.year >= 0)
        c += "+";
      c += padStart(o.c.year, longFormat ? 6 : 4);
      if (extended) {
        c += "-";
        c += padStart(o.c.month);
        c += "-";
        c += padStart(o.c.day);
      } else {
        c += padStart(o.c.month);
        c += padStart(o.c.day);
      }
      return c;
    }
    function toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) {
      let c = padStart(o.c.hour);
      if (extended) {
        c += ":";
        c += padStart(o.c.minute);
        if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {
          c += ":";
        }
      } else {
        c += padStart(o.c.minute);
      }
      if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {
        c += padStart(o.c.second);
        if (o.c.millisecond !== 0 || !suppressMilliseconds) {
          c += ".";
          c += padStart(o.c.millisecond, 3);
        }
      }
      if (includeOffset) {
        if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {
          c += "Z";
        } else if (o.o < 0) {
          c += "-";
          c += padStart(Math.trunc(-o.o / 60));
          c += ":";
          c += padStart(Math.trunc(-o.o % 60));
        } else {
          c += "+";
          c += padStart(Math.trunc(o.o / 60));
          c += ":";
          c += padStart(Math.trunc(o.o % 60));
        }
      }
      if (extendedZone) {
        c += "[" + o.zone.ianaName + "]";
      }
      return c;
    }
    var defaultUnitValues = {
      month: 1,
      day: 1,
      hour: 0,
      minute: 0,
      second: 0,
      millisecond: 0
    };
    var defaultWeekUnitValues = {
      weekNumber: 1,
      weekday: 1,
      hour: 0,
      minute: 0,
      second: 0,
      millisecond: 0
    };
    var defaultOrdinalUnitValues = {
      ordinal: 1,
      hour: 0,
      minute: 0,
      second: 0,
      millisecond: 0
    };
    var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"];
    var orderedWeekUnits = [
      "weekYear",
      "weekNumber",
      "weekday",
      "hour",
      "minute",
      "second",
      "millisecond"
    ];
    var orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"];
    function normalizeUnit(unit) {
      const normalized = {
        year: "year",
        years: "year",
        month: "month",
        months: "month",
        day: "day",
        days: "day",
        hour: "hour",
        hours: "hour",
        minute: "minute",
        minutes: "minute",
        quarter: "quarter",
        quarters: "quarter",
        second: "second",
        seconds: "second",
        millisecond: "millisecond",
        milliseconds: "millisecond",
        weekday: "weekday",
        weekdays: "weekday",
        weeknumber: "weekNumber",
        weeksnumber: "weekNumber",
        weeknumbers: "weekNumber",
        weekyear: "weekYear",
        weekyears: "weekYear",
        ordinal: "ordinal"
      }[unit.toLowerCase()];
      if (!normalized)
        throw new InvalidUnitError(unit);
      return normalized;
    }
    function quickDT(obj, opts) {
      const zone = normalizeZone(opts.zone, Settings2.defaultZone), loc = Locale.fromObject(opts), tsNow = Settings2.now();
      let ts, o;
      if (!isUndefined(obj.year)) {
        for (const u of orderedUnits) {
          if (isUndefined(obj[u])) {
            obj[u] = defaultUnitValues[u];
          }
        }
        const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);
        if (invalid) {
          return DateTime.invalid(invalid);
        }
        const offsetProvis = zone.offset(tsNow);
        [ts, o] = objToTS(obj, offsetProvis, zone);
      } else {
        ts = tsNow;
      }
      return new DateTime({ ts, zone, loc, o });
    }
    function diffRelative(start, end, opts) {
      const round = isUndefined(opts.round) ? true : opts.round, format = (c, unit) => {
        c = roundTo(c, round || opts.calendary ? 0 : 2, true);
        const formatter = end.loc.clone(opts).relFormatter(opts);
        return formatter.format(c, unit);
      }, differ = (unit) => {
        if (opts.calendary) {
          if (!end.hasSame(start, unit)) {
            return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);
          } else
            return 0;
        } else {
          return end.diff(start, unit).get(unit);
        }
      };
      if (opts.unit) {
        return format(differ(opts.unit), opts.unit);
      }
      for (const unit of opts.units) {
        const count = differ(unit);
        if (Math.abs(count) >= 1) {
          return format(count, unit);
        }
      }
      return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);
    }
    function lastOpts(argList) {
      let opts = {}, args;
      if (argList.length > 0 && typeof argList[argList.length - 1] === "object") {
        opts = argList[argList.length - 1];
        args = Array.from(argList).slice(0, argList.length - 1);
      } else {
        args = Array.from(argList);
      }
      return [opts, args];
    }
    var DateTime = class {
      constructor(config) {
        const zone = config.zone || Settings2.defaultZone;
        let invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null);
        this.ts = isUndefined(config.ts) ? Settings2.now() : config.ts;
        let c = null, o = null;
        if (!invalid) {
          const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);
          if (unchanged) {
            [c, o] = [config.old.c, config.old.o];
          } else {
            const ot = zone.offset(this.ts);
            c = tsToObj(this.ts, ot);
            invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null;
            c = invalid ? null : c;
            o = invalid ? null : ot;
          }
        }
        this._zone = zone;
        this.loc = config.loc || Locale.create();
        this.invalid = invalid;
        this.weekData = null;
        this.c = c;
        this.o = o;
        this.isLuxonDateTime = true;
      }
      static now() {
        return new DateTime({});
      }
      static local() {
        const [opts, args] = lastOpts(arguments), [year, month, day, hour, minute, second, millisecond] = args;
        return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);
      }
      static utc() {
        const [opts, args] = lastOpts(arguments), [year, month, day, hour, minute, second, millisecond] = args;
        opts.zone = FixedOffsetZone.utcInstance;
        return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);
      }
      static fromJSDate(date, options = {}) {
        const ts = isDate(date) ? date.valueOf() : NaN;
        if (Number.isNaN(ts)) {
          return DateTime.invalid("invalid input");
        }
        const zoneToUse = normalizeZone(options.zone, Settings2.defaultZone);
        if (!zoneToUse.isValid) {
          return DateTime.invalid(unsupportedZone(zoneToUse));
        }
        return new DateTime({
          ts,
          zone: zoneToUse,
          loc: Locale.fromObject(options)
        });
      }
      static fromMillis(milliseconds, options = {}) {
        if (!isNumber(milliseconds)) {
          throw new InvalidArgumentError(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`);
        } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {
          return DateTime.invalid("Timestamp out of range");
        } else {
          return new DateTime({
            ts: milliseconds,
            zone: normalizeZone(options.zone, Settings2.defaultZone),
            loc: Locale.fromObject(options)
          });
        }
      }
      static fromSeconds(seconds, options = {}) {
        if (!isNumber(seconds)) {
          throw new InvalidArgumentError("fromSeconds requires a numerical input");
        } else {
          return new DateTime({
            ts: seconds * 1e3,
            zone: normalizeZone(options.zone, Settings2.defaultZone),
            loc: Locale.fromObject(options)
          });
        }
      }
      static fromObject(obj, opts = {}) {
        obj = obj || {};
        const zoneToUse = normalizeZone(opts.zone, Settings2.defaultZone);
        if (!zoneToUse.isValid) {
          return DateTime.invalid(unsupportedZone(zoneToUse));
        }
        const tsNow = Settings2.now(), offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), normalized = normalizeObject(obj, normalizeUnit), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber, loc = Locale.fromObject(opts);
        if ((containsGregor || containsOrdinal) && definiteWeekDef) {
          throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");
        }
        if (containsGregorMD && containsOrdinal) {
          throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");
        }
        const useWeekData = definiteWeekDef || normalized.weekday && !containsGregor;
        let units, defaultValues, objNow = tsToObj(tsNow, offsetProvis);
        if (useWeekData) {
          units = orderedWeekUnits;
          defaultValues = defaultWeekUnitValues;
          objNow = gregorianToWeek(objNow);
        } else if (containsOrdinal) {
          units = orderedOrdinalUnits;
          defaultValues = defaultOrdinalUnitValues;
          objNow = gregorianToOrdinal(objNow);
        } else {
          units = orderedUnits;
          defaultValues = defaultUnitValues;
        }
        let foundFirst = false;
        for (const u of units) {
          const v = normalized[u];
          if (!isUndefined(v)) {
            foundFirst = true;
          } else if (foundFirst) {
            normalized[u] = defaultValues[u];
          } else {
            normalized[u] = objNow[u];
          }
        }
        const higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), invalid = higherOrderInvalid || hasInvalidTimeData(normalized);
        if (invalid) {
          return DateTime.invalid(invalid);
        }
        const gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), inst = new DateTime({
          ts: tsFinal,
          zone: zoneToUse,
          o: offsetFinal,
          loc
        });
        if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {
          return DateTime.invalid("mismatched weekday", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`);
        }
        return inst;
      }
      static fromISO(text, opts = {}) {
        const [vals, parsedZone] = parseISODate(text);
        return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text);
      }
      static fromRFC2822(text, opts = {}) {
        const [vals, parsedZone] = parseRFC2822Date(text);
        return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text);
      }
      static fromHTTP(text, opts = {}) {
        const [vals, parsedZone] = parseHTTPDate(text);
        return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts);
      }
      static fromFormat(text, fmt, opts = {}) {
        if (isUndefined(text) || isUndefined(fmt)) {
          throw new InvalidArgumentError("fromFormat requires an input string and a format");
        }
        const { locale = null, numberingSystem = null } = opts, localeToUse = Locale.fromOpts({
          locale,
          numberingSystem,
          defaultToEN: true
        }), [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);
        if (invalid) {
          return DateTime.invalid(invalid);
        } else {
          return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);
        }
      }
      static fromString(text, fmt, opts = {}) {
        return DateTime.fromFormat(text, fmt, opts);
      }
      static fromSQL(text, opts = {}) {
        const [vals, parsedZone] = parseSQL(text);
        return parseDataToDateTime(vals, parsedZone, opts, "SQL", text);
      }
      static invalid(reason, explanation = null) {
        if (!reason) {
          throw new InvalidArgumentError("need to specify a reason the DateTime is invalid");
        }
        const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
        if (Settings2.throwOnInvalid) {
          throw new InvalidDateTimeError(invalid);
        } else {
          return new DateTime({ invalid });
        }
      }
      static isDateTime(o) {
        return o && o.isLuxonDateTime || false;
      }
      static parseFormatForOpts(formatOpts, localeOpts = {}) {
        const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));
        return !tokenList ? null : tokenList.map((t) => t ? t.val : null).join("");
      }
      static expandFormat(fmt, localeOpts = {}) {
        const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));
        return expanded.map((t) => t.val).join("");
      }
      get(unit) {
        return this[unit];
      }
      get isValid() {
        return this.invalid === null;
      }
      get invalidReason() {
        return this.invalid ? this.invalid.reason : null;
      }
      get invalidExplanation() {
        return this.invalid ? this.invalid.explanation : null;
      }
      get locale() {
        return this.isValid ? this.loc.locale : null;
      }
      get numberingSystem() {
        return this.isValid ? this.loc.numberingSystem : null;
      }
      get outputCalendar() {
        return this.isValid ? this.loc.outputCalendar : null;
      }
      get zone() {
        return this._zone;
      }
      get zoneName() {
        return this.isValid ? this.zone.name : null;
      }
      get year() {
        return this.isValid ? this.c.year : NaN;
      }
      get quarter() {
        return this.isValid ? Math.ceil(this.c.month / 3) : NaN;
      }
      get month() {
        return this.isValid ? this.c.month : NaN;
      }
      get day() {
        return this.isValid ? this.c.day : NaN;
      }
      get hour() {
        return this.isValid ? this.c.hour : NaN;
      }
      get minute() {
        return this.isValid ? this.c.minute : NaN;
      }
      get second() {
        return this.isValid ? this.c.second : NaN;
      }
      get millisecond() {
        return this.isValid ? this.c.millisecond : NaN;
      }
      get weekYear() {
        return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;
      }
      get weekNumber() {
        return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;
      }
      get weekday() {
        return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;
      }
      get ordinal() {
        return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;
      }
      get monthShort() {
        return this.isValid ? Info.months("short", { locObj: this.loc })[this.month - 1] : null;
      }
      get monthLong() {
        return this.isValid ? Info.months("long", { locObj: this.loc })[this.month - 1] : null;
      }
      get weekdayShort() {
        return this.isValid ? Info.weekdays("short", { locObj: this.loc })[this.weekday - 1] : null;
      }
      get weekdayLong() {
        return this.isValid ? Info.weekdays("long", { locObj: this.loc })[this.weekday - 1] : null;
      }
      get offset() {
        return this.isValid ? +this.o : NaN;
      }
      get offsetNameShort() {
        if (this.isValid) {
          return this.zone.offsetName(this.ts, {
            format: "short",
            locale: this.locale
          });
        } else {
          return null;
        }
      }
      get offsetNameLong() {
        if (this.isValid) {
          return this.zone.offsetName(this.ts, {
            format: "long",
            locale: this.locale
          });
        } else {
          return null;
        }
      }
      get isOffsetFixed() {
        return this.isValid ? this.zone.isUniversal : null;
      }
      get isInDST() {
        if (this.isOffsetFixed) {
          return false;
        } else {
          return this.offset > this.set({ month: 1, day: 1 }).offset || this.offset > this.set({ month: 5 }).offset;
        }
      }
      getPossibleOffsets() {
        if (!this.isValid || this.isOffsetFixed) {
          return [this];
        }
        const dayMs = 864e5;
        const minuteMs = 6e4;
        const localTS = objToLocalTS(this.c);
        const oEarlier = this.zone.offset(localTS - dayMs);
        const oLater = this.zone.offset(localTS + dayMs);
        const o1 = this.zone.offset(localTS - oEarlier * minuteMs);
        const o2 = this.zone.offset(localTS - oLater * minuteMs);
        if (o1 === o2) {
          return [this];
        }
        const ts1 = localTS - o1 * minuteMs;
        const ts2 = localTS - o2 * minuteMs;
        const c1 = tsToObj(ts1, o1);
        const c2 = tsToObj(ts2, o2);
        if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) {
          return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];
        }
        return [this];
      }
      get isInLeapYear() {
        return isLeapYear(this.year);
      }
      get daysInMonth() {
        return daysInMonth(this.year, this.month);
      }
      get daysInYear() {
        return this.isValid ? daysInYear(this.year) : NaN;
      }
      get weeksInWeekYear() {
        return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;
      }
      resolvedLocaleOptions(opts = {}) {
        const { locale, numberingSystem, calendar } = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this);
        return { locale, numberingSystem, outputCalendar: calendar };
      }
      toUTC(offset2 = 0, opts = {}) {
        return this.setZone(FixedOffsetZone.instance(offset2), opts);
      }
      toLocal() {
        return this.setZone(Settings2.defaultZone);
      }
      setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {
        zone = normalizeZone(zone, Settings2.defaultZone);
        if (zone.equals(this.zone)) {
          return this;
        } else if (!zone.isValid) {
          return DateTime.invalid(unsupportedZone(zone));
        } else {
          let newTS = this.ts;
          if (keepLocalTime || keepCalendarTime) {
            const offsetGuess = zone.offset(this.ts);
            const asObj = this.toObject();
            [newTS] = objToTS(asObj, offsetGuess, zone);
          }
          return clone(this, { ts: newTS, zone });
        }
      }
      reconfigure({ locale, numberingSystem, outputCalendar } = {}) {
        const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });
        return clone(this, { loc });
      }
      setLocale(locale) {
        return this.reconfigure({ locale });
      }
      set(values) {
        if (!this.isValid)
          return this;
        const normalized = normalizeObject(values, normalizeUnit), settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber;
        if ((containsGregor || containsOrdinal) && definiteWeekDef) {
          throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");
        }
        if (containsGregorMD && containsOrdinal) {
          throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");
        }
        let mixed;
        if (settingWeekStuff) {
          mixed = weekToGregorian({ ...gregorianToWeek(this.c), ...normalized });
        } else if (!isUndefined(normalized.ordinal)) {
          mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });
        } else {
          mixed = { ...this.toObject(), ...normalized };
          if (isUndefined(normalized.day)) {
            mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);
          }
        }
        const [ts, o] = objToTS(mixed, this.o, this.zone);
        return clone(this, { ts, o });
      }
      plus(duration) {
        if (!this.isValid)
          return this;
        const dur = Duration.fromDurationLike(duration);
        return clone(this, adjustTime(this, dur));
      }
      minus(duration) {
        if (!this.isValid)
          return this;
        const dur = Duration.fromDurationLike(duration).negate();
        return clone(this, adjustTime(this, dur));
      }
      startOf(unit) {
        if (!this.isValid)
          return this;
        const o = {}, normalizedUnit = Duration.normalizeUnit(unit);
        switch (normalizedUnit) {
          case "years":
            o.month = 1;
          case "quarters":
          case "months":
            o.day = 1;
          case "weeks":
          case "days":
            o.hour = 0;
          case "hours":
            o.minute = 0;
          case "minutes":
            o.second = 0;
          case "seconds":
            o.millisecond = 0;
            break;
        }
        if (normalizedUnit === "weeks") {
          o.weekday = 1;
        }
        if (normalizedUnit === "quarters") {
          const q = Math.ceil(this.month / 3);
          o.month = (q - 1) * 3 + 1;
        }
        return this.set(o);
      }
      endOf(unit) {
        return this.isValid ? this.plus({ [unit]: 1 }).startOf(unit).minus(1) : this;
      }
      toFormat(fmt, opts = {}) {
        return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID;
      }
      toLocaleString(formatOpts = DATE_SHORT, opts = {}) {
        return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID;
      }
      toLocaleParts(opts = {}) {
        return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];
      }
      toISO({
        format = "extended",
        suppressSeconds = false,
        suppressMilliseconds = false,
        includeOffset = true,
        extendedZone = false
      } = {}) {
        if (!this.isValid) {
          return null;
        }
        const ext = format === "extended";
        let c = toISODate(this, ext);
        c += "T";
        c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);
        return c;
      }
      toISODate({ format = "extended" } = {}) {
        if (!this.isValid) {
          return null;
        }
        return toISODate(this, format === "extended");
      }
      toISOWeekDate() {
        return toTechFormat(this, "kkkk-'W'WW-c");
      }
      toISOTime({
        suppressMilliseconds = false,
        suppressSeconds = false,
        includeOffset = true,
        includePrefix = false,
        extendedZone = false,
        format = "extended"
      } = {}) {
        if (!this.isValid) {
          return null;
        }
        let c = includePrefix ? "T" : "";
        return c + toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);
      }
      toRFC2822() {
        return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false);
      }
      toHTTP() {
        return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'");
      }
      toSQLDate() {
        if (!this.isValid) {
          return null;
        }
        return toISODate(this, true);
      }
      toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {
        let fmt = "HH:mm:ss.SSS";
        if (includeZone || includeOffset) {
          if (includeOffsetSpace) {
            fmt += " ";
          }
          if (includeZone) {
            fmt += "z";
          } else if (includeOffset) {
            fmt += "ZZ";
          }
        }
        return toTechFormat(this, fmt, true);
      }
      toSQL(opts = {}) {
        if (!this.isValid) {
          return null;
        }
        return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;
      }
      toString() {
        return this.isValid ? this.toISO() : INVALID;
      }
      valueOf() {
        return this.toMillis();
      }
      toMillis() {
        return this.isValid ? this.ts : NaN;
      }
      toSeconds() {
        return this.isValid ? this.ts / 1e3 : NaN;
      }
      toUnixInteger() {
        return this.isValid ? Math.floor(this.ts / 1e3) : NaN;
      }
      toJSON() {
        return this.toISO();
      }
      toBSON() {
        return this.toJSDate();
      }
      toObject(opts = {}) {
        if (!this.isValid)
          return {};
        const base = { ...this.c };
        if (opts.includeConfig) {
          base.outputCalendar = this.outputCalendar;
          base.numberingSystem = this.loc.numberingSystem;
          base.locale = this.loc.locale;
        }
        return base;
      }
      toJSDate() {
        return new Date(this.isValid ? this.ts : NaN);
      }
      diff(otherDateTime, unit = "milliseconds", opts = {}) {
        if (!this.isValid || !otherDateTime.isValid) {
          return Duration.invalid("created by diffing an invalid DateTime");
        }
        const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };
        const units = maybeArray(unit).map(Duration.normalizeUnit), otherIsLater = otherDateTime.valueOf() > this.valueOf(), earlier = otherIsLater ? this : otherDateTime, later = otherIsLater ? otherDateTime : this, diffed = diff(earlier, later, units, durOpts);
        return otherIsLater ? diffed.negate() : diffed;
      }
      diffNow(unit = "milliseconds", opts = {}) {
        return this.diff(DateTime.now(), unit, opts);
      }
      until(otherDateTime) {
        return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;
      }
      hasSame(otherDateTime, unit) {
        if (!this.isValid)
          return false;
        const inputMs = otherDateTime.valueOf();
        const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });
        return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit);
      }
      equals(other) {
        return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);
      }
      toRelative(options = {}) {
        if (!this.isValid)
          return null;
        const base = options.base || DateTime.fromObject({}, { zone: this.zone }), padding = options.padding ? this < base ? -options.padding : options.padding : 0;
        let units = ["years", "months", "days", "hours", "minutes", "seconds"];
        let unit = options.unit;
        if (Array.isArray(options.unit)) {
          units = options.unit;
          unit = void 0;
        }
        return diffRelative(base, this.plus(padding), {
          ...options,
          numeric: "always",
          units,
          unit
        });
      }
      toRelativeCalendar(options = {}) {
        if (!this.isValid)
          return null;
        return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {
          ...options,
          numeric: "auto",
          units: ["years", "months", "days"],
          calendary: true
        });
      }
      static min(...dateTimes) {
        if (!dateTimes.every(DateTime.isDateTime)) {
          throw new InvalidArgumentError("min requires all arguments be DateTimes");
        }
        return bestBy(dateTimes, (i) => i.valueOf(), Math.min);
      }
      static max(...dateTimes) {
        if (!dateTimes.every(DateTime.isDateTime)) {
          throw new InvalidArgumentError("max requires all arguments be DateTimes");
        }
        return bestBy(dateTimes, (i) => i.valueOf(), Math.max);
      }
      static fromFormatExplain(text, fmt, options = {}) {
        const { locale = null, numberingSystem = null } = options, localeToUse = Locale.fromOpts({
          locale,
          numberingSystem,
          defaultToEN: true
        });
        return explainFromTokens(localeToUse, text, fmt);
      }
      static fromStringExplain(text, fmt, options = {}) {
        return DateTime.fromFormatExplain(text, fmt, options);
      }
      static get DATE_SHORT() {
        return DATE_SHORT;
      }
      static get DATE_MED() {
        return DATE_MED;
      }
      static get DATE_MED_WITH_WEEKDAY() {
        return DATE_MED_WITH_WEEKDAY;
      }
      static get DATE_FULL() {
        return DATE_FULL;
      }
      static get DATE_HUGE() {
        return DATE_HUGE;
      }
      static get TIME_SIMPLE() {
        return TIME_SIMPLE;
      }
      static get TIME_WITH_SECONDS() {
        return TIME_WITH_SECONDS;
      }
      static get TIME_WITH_SHORT_OFFSET() {
        return TIME_WITH_SHORT_OFFSET;
      }
      static get TIME_WITH_LONG_OFFSET() {
        return TIME_WITH_LONG_OFFSET;
      }
      static get TIME_24_SIMPLE() {
        return TIME_24_SIMPLE;
      }
      static get TIME_24_WITH_SECONDS() {
        return TIME_24_WITH_SECONDS;
      }
      static get TIME_24_WITH_SHORT_OFFSET() {
        return TIME_24_WITH_SHORT_OFFSET;
      }
      static get TIME_24_WITH_LONG_OFFSET() {
        return TIME_24_WITH_LONG_OFFSET;
      }
      static get DATETIME_SHORT() {
        return DATETIME_SHORT;
      }
      static get DATETIME_SHORT_WITH_SECONDS() {
        return DATETIME_SHORT_WITH_SECONDS;
      }
      static get DATETIME_MED() {
        return DATETIME_MED;
      }
      static get DATETIME_MED_WITH_SECONDS() {
        return DATETIME_MED_WITH_SECONDS;
      }
      static get DATETIME_MED_WITH_WEEKDAY() {
        return DATETIME_MED_WITH_WEEKDAY;
      }
      static get DATETIME_FULL() {
        return DATETIME_FULL;
      }
      static get DATETIME_FULL_WITH_SECONDS() {
        return DATETIME_FULL_WITH_SECONDS;
      }
      static get DATETIME_HUGE() {
        return DATETIME_HUGE;
      }
      static get DATETIME_HUGE_WITH_SECONDS() {
        return DATETIME_HUGE_WITH_SECONDS;
      }
    };
    function friendlyDateTime(dateTimeish) {
      if (DateTime.isDateTime(dateTimeish)) {
        return dateTimeish;
      } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {
        return DateTime.fromJSDate(dateTimeish);
      } else if (dateTimeish && typeof dateTimeish === "object") {
        return DateTime.fromObject(dateTimeish);
      } else {
        throw new InvalidArgumentError(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`);
      }
    }
    var DEFAULT_QUERY_SETTINGS = {
      renderNullAs: "\\-",
      taskCompletionTracking: false,
      taskCompletionUseEmojiShorthand: false,
      taskCompletionText: "completion",
      taskCompletionDateFormat: "yyyy-MM-dd",
      recursiveSubTaskCompletion: false,
      warnOnEmptyResult: true,
      refreshEnabled: true,
      refreshInterval: 2500,
      defaultDateFormat: "MMMM dd, yyyy",
      defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy",
      maxRecursiveRenderDepth: 4,
      tableIdColumnName: "File",
      tableGroupColumnName: "Group",
      showResultCount: true
    };
    var DEFAULT_EXPORT_SETTINGS = {
      allowHtml: true
    };
    ({
      ...DEFAULT_QUERY_SETTINGS,
      ...DEFAULT_EXPORT_SETTINGS,
      ...{
        inlineQueryPrefix: "=",
        inlineJsQueryPrefix: "$=",
        inlineQueriesInCodeblocks: true,
        enableInlineDataview: true,
        enableDataviewJs: false,
        enableInlineDataviewJs: false,
        prettyRenderInlineFields: true,
        prettyRenderInlineFieldsInLivePreview: true,
        dataviewJsKeyword: "dataviewjs"
      }
    });
    var Success = class {
      constructor(value) {
        __publicField(this, "value");
        __publicField(this, "successful");
        this.value = value;
        this.successful = true;
      }
      map(f) {
        return new Success(f(this.value));
      }
      flatMap(f) {
        return f(this.value);
      }
      mapErr(f) {
        return this;
      }
      bimap(succ, _fail) {
        return this.map(succ);
      }
      orElse(_value) {
        return this.value;
      }
      cast() {
        return this;
      }
      orElseThrow(_message) {
        return this.value;
      }
    };
    var Failure = class {
      constructor(error) {
        __publicField(this, "error");
        __publicField(this, "successful");
        this.error = error;
        this.successful = false;
      }
      map(_f) {
        return this;
      }
      flatMap(_f) {
        return this;
      }
      mapErr(f) {
        return new Failure(f(this.error));
      }
      bimap(_succ, fail) {
        return this.mapErr(fail);
      }
      orElse(value) {
        return value;
      }
      cast() {
        return this;
      }
      orElseThrow(message) {
        if (message)
          throw new Error(message(this.error));
        else
          throw new Error("" + this.error);
      }
    };
    var Result2;
    (function(Result3) {
      function success(value) {
        return new Success(value);
      }
      Result3.success = success;
      function failure(error) {
        return new Failure(error);
      }
      Result3.failure = failure;
      function flatMap2(first, second, f) {
        if (first.successful) {
          if (second.successful)
            return f(first.value, second.value);
          else
            return failure(second.error);
        } else {
          return failure(first.error);
        }
      }
      Result3.flatMap2 = flatMap2;
      function map2(first, second, f) {
        return flatMap2(first, second, (a, b) => success(f(a, b)));
      }
      Result3.map2 = map2;
    })(Result2 || (Result2 = {}));
    var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
    var parsimmon_umd_min = { exports: {} };
    parsimmon_umd_min.exports;
    (function(module3, exports2) {
      !function(n2, t) {
        module3.exports = t();
      }(typeof self != "undefined" ? self : commonjsGlobal, function() {
        return function(n2) {
          var t = {};
          function r(e) {
            if (t[e])
              return t[e].exports;
            var u = t[e] = { i: e, l: false, exports: {} };
            return n2[e].call(u.exports, u, u.exports, r), u.l = true, u.exports;
          }
          return r.m = n2, r.c = t, r.d = function(n3, t2, e) {
            r.o(n3, t2) || Object.defineProperty(n3, t2, { configurable: false, enumerable: true, get: e });
          }, r.r = function(n3) {
            Object.defineProperty(n3, "__esModule", { value: true });
          }, r.n = function(n3) {
            var t2 = n3 && n3.__esModule ? function() {
              return n3.default;
            } : function() {
              return n3;
            };
            return r.d(t2, "a", t2), t2;
          }, r.o = function(n3, t2) {
            return Object.prototype.hasOwnProperty.call(n3, t2);
          }, r.p = "", r(r.s = 0);
        }([function(n2, t, r) {
          function e(n3) {
            if (!(this instanceof e))
              return new e(n3);
            this._ = n3;
          }
          var u = e.prototype;
          function o(n3, t2) {
            for (var r2 = 0; r2 < n3; r2++)
              t2(r2);
          }
          function i(n3, t2, r2) {
            return function(n4, t3) {
              o(t3.length, function(r3) {
                n4(t3[r3], r3, t3);
              });
            }(function(r3, e2, u2) {
              t2 = n3(t2, r3, e2, u2);
            }, r2), t2;
          }
          function a(n3, t2) {
            return i(function(t3, r2, e2, u2) {
              return t3.concat([n3(r2, e2, u2)]);
            }, [], t2);
          }
          function f(n3, t2) {
            var r2 = { v: 0, buf: t2 };
            return o(n3, function() {
              var n4;
              r2 = { v: r2.v << 1 | (n4 = r2.buf, n4[0] >> 7), buf: function(n5) {
                var t3 = i(function(n6, t4, r3, e2) {
                  return n6.concat(r3 === e2.length - 1 ? Buffer.from([t4, 0]).readUInt16BE(0) : e2.readUInt16BE(r3));
                }, [], n5);
                return Buffer.from(a(function(n6) {
                  return (n6 << 1 & 65535) >> 8;
                }, t3));
              }(r2.buf) };
            }), r2;
          }
          function c() {
            return typeof Buffer != "undefined";
          }
          function s2() {
            if (!c())
              throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.");
          }
          function l2(n3) {
            s2();
            var t2 = i(function(n4, t3) {
              return n4 + t3;
            }, 0, n3);
            if (t2 % 8 != 0)
              throw new Error("The bits [" + n3.join(", ") + "] add up to " + t2 + " which is not an even number of bytes; the total should be divisible by 8");
            var r2, u2 = t2 / 8, o2 = (r2 = function(n4) {
              return n4 > 48;
            }, i(function(n4, t3) {
              return n4 || (r2(t3) ? t3 : n4);
            }, null, n3));
            if (o2)
              throw new Error(o2 + " bit range requested exceeds 48 bit (6 byte) Number max.");
            return new e(function(t3, r3) {
              var e2 = u2 + r3;
              return e2 > t3.length ? x(r3, u2.toString() + " bytes") : b(e2, i(function(n4, t4) {
                var r4 = f(t4, n4.buf);
                return { coll: n4.coll.concat(r4.v), buf: r4.buf };
              }, { coll: [], buf: t3.slice(r3, e2) }, n3).coll);
            });
          }
          function h(n3, t2) {
            return new e(function(r2, e2) {
              return s2(), e2 + t2 > r2.length ? x(e2, t2 + " bytes for " + n3) : b(e2 + t2, r2.slice(e2, e2 + t2));
            });
          }
          function p(n3, t2) {
            if (typeof (r2 = t2) != "number" || Math.floor(r2) !== r2 || t2 < 0 || t2 > 6)
              throw new Error(n3 + " requires integer length in range [0, 6].");
            var r2;
          }
          function d(n3) {
            return p("uintBE", n3), h("uintBE(" + n3 + ")", n3).map(function(t2) {
              return t2.readUIntBE(0, n3);
            });
          }
          function v(n3) {
            return p("uintLE", n3), h("uintLE(" + n3 + ")", n3).map(function(t2) {
              return t2.readUIntLE(0, n3);
            });
          }
          function g(n3) {
            return p("intBE", n3), h("intBE(" + n3 + ")", n3).map(function(t2) {
              return t2.readIntBE(0, n3);
            });
          }
          function m(n3) {
            return p("intLE", n3), h("intLE(" + n3 + ")", n3).map(function(t2) {
              return t2.readIntLE(0, n3);
            });
          }
          function y(n3) {
            return n3 instanceof e;
          }
          function E(n3) {
            return {}.toString.call(n3) === "[object Array]";
          }
          function w(n3) {
            return c() && Buffer.isBuffer(n3);
          }
          function b(n3, t2) {
            return { status: true, index: n3, value: t2, furthest: -1, expected: [] };
          }
          function x(n3, t2) {
            return E(t2) || (t2 = [t2]), { status: false, index: -1, value: null, furthest: n3, expected: t2 };
          }
          function B(n3, t2) {
            if (!t2)
              return n3;
            if (n3.furthest > t2.furthest)
              return n3;
            var r2 = n3.furthest === t2.furthest ? function(n4, t3) {
              if (function() {
                if (e._supportsSet !== void 0)
                  return e._supportsSet;
                var n5 = typeof Set != "undefined";
                return e._supportsSet = n5, n5;
              }() && Array.from) {
                for (var r3 = new Set(n4), u2 = 0; u2 < t3.length; u2++)
                  r3.add(t3[u2]);
                var o2 = Array.from(r3);
                return o2.sort(), o2;
              }
              for (var i2 = {}, a2 = 0; a2 < n4.length; a2++)
                i2[n4[a2]] = true;
              for (var f2 = 0; f2 < t3.length; f2++)
                i2[t3[f2]] = true;
              var c2 = [];
              for (var s3 in i2)
                ({}).hasOwnProperty.call(i2, s3) && c2.push(s3);
              return c2.sort(), c2;
            }(n3.expected, t2.expected) : t2.expected;
            return { status: n3.status, index: n3.index, value: n3.value, furthest: t2.furthest, expected: r2 };
          }
          var j = {};
          function S(n3, t2) {
            if (w(n3))
              return { offset: t2, line: -1, column: -1 };
            n3 in j || (j[n3] = {});
            for (var r2 = j[n3], e2 = 0, u2 = 0, o2 = 0, i2 = t2; i2 >= 0; ) {
              if (i2 in r2) {
                e2 = r2[i2].line, o2 === 0 && (o2 = r2[i2].lineStart);
                break;
              }
              (n3.charAt(i2) === "\n" || n3.charAt(i2) === "\r" && n3.charAt(i2 + 1) !== "\n") && (u2++, o2 === 0 && (o2 = i2 + 1)), i2--;
            }
            var a2 = e2 + u2, f2 = t2 - o2;
            return r2[t2] = { line: a2, lineStart: o2 }, { offset: t2, line: a2 + 1, column: f2 + 1 };
          }
          function _(n3) {
            if (!y(n3))
              throw new Error("not a parser: " + n3);
          }
          function L(n3, t2) {
            return typeof n3 == "string" ? n3.charAt(t2) : n3[t2];
          }
          function O(n3) {
            if (typeof n3 != "number")
              throw new Error("not a number: " + n3);
          }
          function k(n3) {
            if (typeof n3 != "function")
              throw new Error("not a function: " + n3);
          }
          function P(n3) {
            if (typeof n3 != "string")
              throw new Error("not a string: " + n3);
          }
          var q = 2, A = 3, I = 8, F = 5 * I, M = 4 * I, z = "  ";
          function R(n3, t2) {
            return new Array(t2 + 1).join(n3);
          }
          function U(n3, t2, r2) {
            var e2 = t2 - n3.length;
            return e2 <= 0 ? n3 : R(r2, e2) + n3;
          }
          function W(n3, t2, r2, e2) {
            return { from: n3 - t2 > 0 ? n3 - t2 : 0, to: n3 + r2 > e2 ? e2 : n3 + r2 };
          }
          function D(n3, t2) {
            var r2, e2, u2, o2, f2, c2 = t2.index, s3 = c2.offset, l3 = 1;
            if (s3 === n3.length)
              return "Got the end of the input";
            if (w(n3)) {
              var h2 = s3 - s3 % I, p2 = s3 - h2, d2 = W(h2, F, M + I, n3.length), v2 = a(function(n4) {
                return a(function(n5) {
                  return U(n5.toString(16), 2, "0");
                }, n4);
              }, function(n4, t3) {
                var r3 = n4.length, e3 = [], u3 = 0;
                if (r3 <= t3)
                  return [n4.slice()];
                for (var o3 = 0; o3 < r3; o3++)
                  e3[u3] || e3.push([]), e3[u3].push(n4[o3]), (o3 + 1) % t3 == 0 && u3++;
                return e3;
              }(n3.slice(d2.from, d2.to).toJSON().data, I));
              o2 = function(n4) {
                return n4.from === 0 && n4.to === 1 ? { from: n4.from, to: n4.to } : { from: n4.from / I, to: Math.floor(n4.to / I) };
              }(d2), e2 = h2 / I, r2 = 3 * p2, p2 >= 4 && (r2 += 1), l3 = 2, u2 = a(function(n4) {
                return n4.length <= 4 ? n4.join(" ") : n4.slice(0, 4).join(" ") + "  " + n4.slice(4).join(" ");
              }, v2), (f2 = (8 * (o2.to > 0 ? o2.to - 1 : o2.to)).toString(16).length) < 2 && (f2 = 2);
            } else {
              var g2 = n3.split(/\r\n|[\n\r\u2028\u2029]/);
              r2 = c2.column - 1, e2 = c2.line - 1, o2 = W(e2, q, A, g2.length), u2 = g2.slice(o2.from, o2.to), f2 = o2.to.toString().length;
            }
            var m2 = e2 - o2.from;
            return w(n3) && (f2 = (8 * (o2.to > 0 ? o2.to - 1 : o2.to)).toString(16).length) < 2 && (f2 = 2), i(function(t3, e3, u3) {
              var i2, a2 = u3 === m2, c3 = a2 ? "> " : z;
              return i2 = w(n3) ? U((8 * (o2.from + u3)).toString(16), f2, "0") : U((o2.from + u3 + 1).toString(), f2, " "), [].concat(t3, [c3 + i2 + " | " + e3], a2 ? [z + R(" ", f2) + " | " + U("", r2, " ") + R("^", l3)] : []);
            }, [], u2).join("\n");
          }
          function N(n3, t2) {
            return ["\n", "-- PARSING FAILED " + R("-", 50), "\n\n", D(n3, t2), "\n\n", (r2 = t2.expected, r2.length === 1 ? "Expected:\n\n" + r2[0] : "Expected one of the following: \n\n" + r2.join(", ")), "\n"].join("");
            var r2;
          }
          function G(n3) {
            return n3.flags !== void 0 ? n3.flags : [n3.global ? "g" : "", n3.ignoreCase ? "i" : "", n3.multiline ? "m" : "", n3.unicode ? "u" : "", n3.sticky ? "y" : ""].join("");
          }
          function C() {
            for (var n3 = [].slice.call(arguments), t2 = n3.length, r2 = 0; r2 < t2; r2 += 1)
              _(n3[r2]);
            return e(function(r3, e2) {
              for (var u2, o2 = new Array(t2), i2 = 0; i2 < t2; i2 += 1) {
                if (!(u2 = B(n3[i2]._(r3, e2), u2)).status)
                  return u2;
                o2[i2] = u2.value, e2 = u2.index;
              }
              return B(b(e2, o2), u2);
            });
          }
          function J() {
            var n3 = [].slice.call(arguments);
            if (n3.length === 0)
              throw new Error("seqMap needs at least one argument");
            var t2 = n3.pop();
            return k(t2), C.apply(null, n3).map(function(n4) {
              return t2.apply(null, n4);
            });
          }
          function T() {
            var n3 = [].slice.call(arguments), t2 = n3.length;
            if (t2 === 0)
              return Y("zero alternates");
            for (var r2 = 0; r2 < t2; r2 += 1)
              _(n3[r2]);
            return e(function(t3, r3) {
              for (var e2, u2 = 0; u2 < n3.length; u2 += 1)
                if ((e2 = B(n3[u2]._(t3, r3), e2)).status)
                  return e2;
              return e2;
            });
          }
          function V(n3, t2) {
            return H(n3, t2).or(X([]));
          }
          function H(n3, t2) {
            return _(n3), _(t2), J(n3, t2.then(n3).many(), function(n4, t3) {
              return [n4].concat(t3);
            });
          }
          function K(n3) {
            P(n3);
            var t2 = "'" + n3 + "'";
            return e(function(r2, e2) {
              var u2 = e2 + n3.length, o2 = r2.slice(e2, u2);
              return o2 === n3 ? b(u2, o2) : x(e2, t2);
            });
          }
          function Q(n3, t2) {
            !function(n4) {
              if (!(n4 instanceof RegExp))
                throw new Error("not a regexp: " + n4);
              for (var t3 = G(n4), r3 = 0; r3 < t3.length; r3++) {
                var e2 = t3.charAt(r3);
                if (e2 !== "i" && e2 !== "m" && e2 !== "u" && e2 !== "s")
                  throw new Error('unsupported regexp flag "' + e2 + '": ' + n4);
              }
            }(n3), arguments.length >= 2 ? O(t2) : t2 = 0;
            var r2 = function(n4) {
              return RegExp("^(?:" + n4.source + ")", G(n4));
            }(n3), u2 = "" + n3;
            return e(function(n4, e2) {
              var o2 = r2.exec(n4.slice(e2));
              if (o2) {
                if (0 <= t2 && t2 <= o2.length) {
                  var i2 = o2[0], a2 = o2[t2];
                  return b(e2 + i2.length, a2);
                }
                return x(e2, "valid match group (0 to " + o2.length + ") in " + u2);
              }
              return x(e2, u2);
            });
          }
          function X(n3) {
            return e(function(t2, r2) {
              return b(r2, n3);
            });
          }
          function Y(n3) {
            return e(function(t2, r2) {
              return x(r2, n3);
            });
          }
          function Z(n3) {
            if (y(n3))
              return e(function(t2, r2) {
                var e2 = n3._(t2, r2);
                return e2.index = r2, e2.value = "", e2;
              });
            if (typeof n3 == "string")
              return Z(K(n3));
            if (n3 instanceof RegExp)
              return Z(Q(n3));
            throw new Error("not a string, regexp, or parser: " + n3);
          }
          function $(n3) {
            return _(n3), e(function(t2, r2) {
              var e2 = n3._(t2, r2), u2 = t2.slice(r2, e2.index);
              return e2.status ? x(r2, 'not "' + u2 + '"') : b(r2, null);
            });
          }
          function nn(n3) {
            return k(n3), e(function(t2, r2) {
              var e2 = L(t2, r2);
              return r2 < t2.length && n3(e2) ? b(r2 + 1, e2) : x(r2, "a character/byte matching " + n3);
            });
          }
          function tn(n3, t2) {
            arguments.length < 2 && (t2 = n3, n3 = void 0);
            var r2 = e(function(n4, e2) {
              return r2._ = t2()._, r2._(n4, e2);
            });
            return n3 ? r2.desc(n3) : r2;
          }
          function rn() {
            return Y("fantasy-land/empty");
          }
          u.parse = function(n3) {
            if (typeof n3 != "string" && !w(n3))
              throw new Error(".parse must be called with a string or Buffer as its argument");
            var t2, r2 = this.skip(an)._(n3, 0);
            return t2 = r2.status ? { status: true, value: r2.value } : { status: false, index: S(n3, r2.furthest), expected: r2.expected }, delete j[n3], t2;
          }, u.tryParse = function(n3) {
            var t2 = this.parse(n3);
            if (t2.status)
              return t2.value;
            var r2 = N(n3, t2), e2 = new Error(r2);
            throw e2.type = "ParsimmonError", e2.result = t2, e2;
          }, u.assert = function(n3, t2) {
            return this.chain(function(r2) {
              return n3(r2) ? X(r2) : Y(t2);
            });
          }, u.or = function(n3) {
            return T(this, n3);
          }, u.trim = function(n3) {
            return this.wrap(n3, n3);
          }, u.wrap = function(n3, t2) {
            return J(n3, this, t2, function(n4, t3) {
              return t3;
            });
          }, u.thru = function(n3) {
            return n3(this);
          }, u.then = function(n3) {
            return _(n3), C(this, n3).map(function(n4) {
              return n4[1];
            });
          }, u.many = function() {
            var n3 = this;
            return e(function(t2, r2) {
              for (var e2 = [], u2 = void 0; ; ) {
                if (!(u2 = B(n3._(t2, r2), u2)).status)
                  return B(b(r2, e2), u2);
                if (r2 === u2.index)
                  throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");
                r2 = u2.index, e2.push(u2.value);
              }
            });
          }, u.tieWith = function(n3) {
            return P(n3), this.map(function(t2) {
              if (function(n4) {
                if (!E(n4))
                  throw new Error("not an array: " + n4);
              }(t2), t2.length) {
                P(t2[0]);
                for (var r2 = t2[0], e2 = 1; e2 < t2.length; e2++)
                  P(t2[e2]), r2 += n3 + t2[e2];
                return r2;
              }
              return "";
            });
          }, u.tie = function() {
            return this.tieWith("");
          }, u.times = function(n3, t2) {
            var r2 = this;
            return arguments.length < 2 && (t2 = n3), O(n3), O(t2), e(function(e2, u2) {
              for (var o2 = [], i2 = void 0, a2 = void 0, f2 = 0; f2 < n3; f2 += 1) {
                if (a2 = B(i2 = r2._(e2, u2), a2), !i2.status)
                  return a2;
                u2 = i2.index, o2.push(i2.value);
              }
              for (; f2 < t2 && (a2 = B(i2 = r2._(e2, u2), a2), i2.status); f2 += 1)
                u2 = i2.index, o2.push(i2.value);
              return B(b(u2, o2), a2);
            });
          }, u.result = function(n3) {
            return this.map(function() {
              return n3;
            });
          }, u.atMost = function(n3) {
            return this.times(0, n3);
          }, u.atLeast = function(n3) {
            return J(this.times(n3), this.many(), function(n4, t2) {
              return n4.concat(t2);
            });
          }, u.map = function(n3) {
            k(n3);
            var t2 = this;
            return e(function(r2, e2) {
              var u2 = t2._(r2, e2);
              return u2.status ? B(b(u2.index, n3(u2.value)), u2) : u2;
            });
          }, u.contramap = function(n3) {
            k(n3);
            var t2 = this;
            return e(function(r2, e2) {
              var u2 = t2.parse(n3(r2.slice(e2)));
              return u2.status ? b(e2 + r2.length, u2.value) : u2;
            });
          }, u.promap = function(n3, t2) {
            return k(n3), k(t2), this.contramap(n3).map(t2);
          }, u.skip = function(n3) {
            return C(this, n3).map(function(n4) {
              return n4[0];
            });
          }, u.mark = function() {
            return J(en, this, en, function(n3, t2, r2) {
              return { start: n3, value: t2, end: r2 };
            });
          }, u.node = function(n3) {
            return J(en, this, en, function(t2, r2, e2) {
              return { name: n3, value: r2, start: t2, end: e2 };
            });
          }, u.sepBy = function(n3) {
            return V(this, n3);
          }, u.sepBy1 = function(n3) {
            return H(this, n3);
          }, u.lookahead = function(n3) {
            return this.skip(Z(n3));
          }, u.notFollowedBy = function(n3) {
            return this.skip($(n3));
          }, u.desc = function(n3) {
            E(n3) || (n3 = [n3]);
            var t2 = this;
            return e(function(r2, e2) {
              var u2 = t2._(r2, e2);
              return u2.status || (u2.expected = n3), u2;
            });
          }, u.fallback = function(n3) {
            return this.or(X(n3));
          }, u.ap = function(n3) {
            return J(n3, this, function(n4, t2) {
              return n4(t2);
            });
          }, u.chain = function(n3) {
            var t2 = this;
            return e(function(r2, e2) {
              var u2 = t2._(r2, e2);
              return u2.status ? B(n3(u2.value)._(r2, u2.index), u2) : u2;
            });
          }, u.concat = u.or, u.empty = rn, u.of = X, u["fantasy-land/ap"] = u.ap, u["fantasy-land/chain"] = u.chain, u["fantasy-land/concat"] = u.concat, u["fantasy-land/empty"] = u.empty, u["fantasy-land/of"] = u.of, u["fantasy-land/map"] = u.map;
          var en = e(function(n3, t2) {
            return b(t2, S(n3, t2));
          }), un = e(function(n3, t2) {
            return t2 >= n3.length ? x(t2, "any character/byte") : b(t2 + 1, L(n3, t2));
          }), on = e(function(n3, t2) {
            return b(n3.length, n3.slice(t2));
          }), an = e(function(n3, t2) {
            return t2 < n3.length ? x(t2, "EOF") : b(t2, null);
          }), fn = Q(/[0-9]/).desc("a digit"), cn = Q(/[0-9]*/).desc("optional digits"), sn = Q(/[a-z]/i).desc("a letter"), ln = Q(/[a-z]*/i).desc("optional letters"), hn = Q(/\s*/).desc("optional whitespace"), pn = Q(/\s+/).desc("whitespace"), dn = K("\r"), vn = K("\n"), gn = K("\r\n"), mn = T(gn, vn, dn).desc("newline"), yn = T(mn, an);
          e.all = on, e.alt = T, e.any = un, e.cr = dn, e.createLanguage = function(n3) {
            var t2 = {};
            for (var r2 in n3)
              ({}).hasOwnProperty.call(n3, r2) && function(r3) {
                t2[r3] = tn(function() {
                  return n3[r3](t2);
                });
              }(r2);
            return t2;
          }, e.crlf = gn, e.custom = function(n3) {
            return e(n3(b, x));
          }, e.digit = fn, e.digits = cn, e.empty = rn, e.end = yn, e.eof = an, e.fail = Y, e.formatError = N, e.index = en, e.isParser = y, e.lazy = tn, e.letter = sn, e.letters = ln, e.lf = vn, e.lookahead = Z, e.makeFailure = x, e.makeSuccess = b, e.newline = mn, e.noneOf = function(n3) {
            return nn(function(t2) {
              return n3.indexOf(t2) < 0;
            }).desc("none of '" + n3 + "'");
          }, e.notFollowedBy = $, e.of = X, e.oneOf = function(n3) {
            for (var t2 = n3.split(""), r2 = 0; r2 < t2.length; r2++)
              t2[r2] = "'" + t2[r2] + "'";
            return nn(function(t3) {
              return n3.indexOf(t3) >= 0;
            }).desc(t2);
          }, e.optWhitespace = hn, e.Parser = e, e.range = function(n3, t2) {
            return nn(function(r2) {
              return n3 <= r2 && r2 <= t2;
            }).desc(n3 + "-" + t2);
          }, e.regex = Q, e.regexp = Q, e.sepBy = V, e.sepBy1 = H, e.seq = C, e.seqMap = J, e.seqObj = function() {
            for (var n3, t2 = {}, r2 = 0, u2 = (n3 = arguments, Array.prototype.slice.call(n3)), o2 = u2.length, i2 = 0; i2 < o2; i2 += 1) {
              var a2 = u2[i2];
              if (!y(a2)) {
                if (E(a2) && a2.length === 2 && typeof a2[0] == "string" && y(a2[1])) {
                  var f2 = a2[0];
                  if (Object.prototype.hasOwnProperty.call(t2, f2))
                    throw new Error("seqObj: duplicate key " + f2);
                  t2[f2] = true, r2++;
                  continue;
                }
                throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.");
              }
            }
            if (r2 === 0)
              throw new Error("seqObj expects at least one named parser, found zero");
            return e(function(n4, t3) {
              for (var r3, e2 = {}, i3 = 0; i3 < o2; i3 += 1) {
                var a3, f3;
                if (E(u2[i3]) ? (a3 = u2[i3][0], f3 = u2[i3][1]) : (a3 = null, f3 = u2[i3]), !(r3 = B(f3._(n4, t3), r3)).status)
                  return r3;
                a3 && (e2[a3] = r3.value), t3 = r3.index;
              }
              return B(b(t3, e2), r3);
            });
          }, e.string = K, e.succeed = X, e.takeWhile = function(n3) {
            return k(n3), e(function(t2, r2) {
              for (var e2 = r2; e2 < t2.length && n3(L(t2, e2)); )
                e2++;
              return b(e2, t2.slice(r2, e2));
            });
          }, e.test = nn, e.whitespace = pn, e["fantasy-land/empty"] = rn, e["fantasy-land/of"] = X, e.Binary = { bitSeq: l2, bitSeqObj: function(n3) {
            s2();
            var t2 = {}, r2 = 0, e2 = a(function(n4) {
              if (E(n4)) {
                var e3 = n4;
                if (e3.length !== 2)
                  throw new Error("[" + e3.join(", ") + "] should be length 2, got length " + e3.length);
                if (P(e3[0]), O(e3[1]), Object.prototype.hasOwnProperty.call(t2, e3[0]))
                  throw new Error("duplicate key in bitSeqObj: " + e3[0]);
                return t2[e3[0]] = true, r2++, e3;
              }
              return O(n4), [null, n4];
            }, n3);
            if (r2 < 1)
              throw new Error("bitSeqObj expects at least one named pair, got [" + n3.join(", ") + "]");
            var u2 = a(function(n4) {
              return n4[0];
            }, e2);
            return l2(a(function(n4) {
              return n4[1];
            }, e2)).map(function(n4) {
              return i(function(n5, t3) {
                return t3[0] !== null && (n5[t3[0]] = t3[1]), n5;
              }, {}, a(function(t3, r3) {
                return [t3, n4[r3]];
              }, u2));
            });
          }, byte: function(n3) {
            if (s2(), O(n3), n3 > 255)
              throw new Error("Value specified to byte constructor (" + n3 + "=0x" + n3.toString(16) + ") is larger in value than a single byte.");
            var t2 = (n3 > 15 ? "0x" : "0x0") + n3.toString(16);
            return e(function(r2, e2) {
              var u2 = L(r2, e2);
              return u2 === n3 ? b(e2 + 1, u2) : x(e2, t2);
            });
          }, buffer: function(n3) {
            return h("buffer", n3).map(function(n4) {
              return Buffer.from(n4);
            });
          }, encodedString: function(n3, t2) {
            return h("string", t2).map(function(t3) {
              return t3.toString(n3);
            });
          }, uintBE: d, uint8BE: d(1), uint16BE: d(2), uint32BE: d(4), uintLE: v, uint8LE: v(1), uint16LE: v(2), uint32LE: v(4), intBE: g, int8BE: g(1), int16BE: g(2), int32BE: g(4), intLE: m, int8LE: m(1), int16LE: m(2), int32LE: m(4), floatBE: h("floatBE", 4).map(function(n3) {
            return n3.readFloatBE(0);
          }), floatLE: h("floatLE", 4).map(function(n3) {
            return n3.readFloatLE(0);
          }), doubleBE: h("doubleBE", 8).map(function(n3) {
            return n3.readDoubleBE(0);
          }), doubleLE: h("doubleLE", 8).map(function(n3) {
            return n3.readDoubleLE(0);
          }) }, n2.exports = e;
        }]);
      });
    })(parsimmon_umd_min, parsimmon_umd_min.exports);
    var parsimmon_umd_minExports = parsimmon_umd_min.exports;
    var emojiRegex = () => {
      return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
    };
    function normalizeDuration(dur) {
      if (dur === void 0 || dur === null)
        return dur;
      return dur.shiftToAll().normalize();
    }
    function getFileTitle(path) {
      if (path.includes("/"))
        path = path.substring(path.lastIndexOf("/") + 1);
      if (path.endsWith(".md"))
        path = path.substring(0, path.length - 3);
      return path;
    }
    parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u).map((str) => str.toLocaleLowerCase()), parsimmon_umd_minExports.whitespace.map((_) => "-"), parsimmon_umd_minExports.any.map((_) => "")).many().map((result) => result.join(""));
    var HEADER_CANONICALIZER = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u), parsimmon_umd_minExports.whitespace.map((_) => " "), parsimmon_umd_minExports.any.map((_) => " ")).many().map((result) => {
      return result.join("").split(/\s+/).join(" ").trim();
    });
    function normalizeHeaderForLink(header) {
      return HEADER_CANONICALIZER.tryParse(header);
    }
    function renderMinimalDuration(dur) {
      dur = normalizeDuration(dur);
      dur = Duration.fromObject(Object.fromEntries(Object.entries(dur.toObject()).filter(([, quantity]) => quantity != 0)));
      return dur.toHuman();
    }
    var Values;
    (function(Values2) {
      function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) {
        let wrapped = wrapValue(field);
        if (!wrapped)
          return setting.renderNullAs;
        switch (wrapped.type) {
          case "null":
            return setting.renderNullAs;
          case "string":
            return wrapped.value;
          case "number":
          case "boolean":
            return "" + wrapped.value;
          case "html":
            return wrapped.value.outerHTML;
          case "widget":
            return wrapped.value.markdown();
          case "link":
            return wrapped.value.markdown();
          case "function":
            return "<function>";
          case "array":
            let result = "";
            if (recursive)
              result += "[";
            result += wrapped.value.map((f) => toString(f, setting, true)).join(", ");
            if (recursive)
              result += "]";
            return result;
          case "object":
            return "{ " + Object.entries(wrapped.value).map((e) => e[0] + ": " + toString(e[1], setting, true)).join(", ") + " }";
          case "date":
            if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) {
              return wrapped.value.toFormat(setting.defaultDateFormat);
            }
            return wrapped.value.toFormat(setting.defaultDateTimeFormat);
          case "duration":
            return renderMinimalDuration(wrapped.value);
        }
      }
      Values2.toString = toString;
      function wrapValue(val) {
        if (isNull(val))
          return { type: "null", value: val };
        else if (isNumber2(val))
          return { type: "number", value: val };
        else if (isString2(val))
          return { type: "string", value: val };
        else if (isBoolean(val))
          return { type: "boolean", value: val };
        else if (isDuration(val))
          return { type: "duration", value: val };
        else if (isDate2(val))
          return { type: "date", value: val };
        else if (isWidget(val))
          return { type: "widget", value: val };
        else if (isArray(val))
          return { type: "array", value: val };
        else if (isLink(val))
          return { type: "link", value: val };
        else if (isFunction(val))
          return { type: "function", value: val };
        else if (isHtml(val))
          return { type: "html", value: val };
        else if (isObject(val))
          return { type: "object", value: val };
        else
          return void 0;
      }
      Values2.wrapValue = wrapValue;
      function mapLeaves(val, func) {
        if (isObject(val)) {
          let result = {};
          for (let [key, value] of Object.entries(val))
            result[key] = mapLeaves(value, func);
          return result;
        } else if (isArray(val)) {
          let result = [];
          for (let value of val)
            result.push(mapLeaves(value, func));
          return result;
        } else {
          return func(val);
        }
      }
      Values2.mapLeaves = mapLeaves;
      function compareValue(val1, val2, linkNormalizer) {
        var _a3, _b3;
        if (val1 === void 0)
          val1 = null;
        if (val2 === void 0)
          val2 = null;
        if (val1 === null && val2 === null)
          return 0;
        else if (val1 === null)
          return -1;
        else if (val2 === null)
          return 1;
        let wrap1 = wrapValue(val1);
        let wrap2 = wrapValue(val2);
        if (wrap1 === void 0 && wrap2 === void 0)
          return 0;
        else if (wrap1 === void 0)
          return -1;
        else if (wrap2 === void 0)
          return 1;
        if (wrap1.type != wrap2.type)
          return wrap1.type.localeCompare(wrap2.type);
        if (wrap1.value === wrap2.value)
          return 0;
        switch (wrap1.type) {
          case "string":
            return wrap1.value.localeCompare(wrap2.value);
          case "number":
            if (wrap1.value < wrap2.value)
              return -1;
            else if (wrap1.value == wrap2.value)
              return 0;
            return 1;
          case "null":
            return 0;
          case "boolean":
            if (wrap1.value == wrap2.value)
              return 0;
            else
              return wrap1.value ? 1 : -1;
          case "link":
            let link1 = wrap1.value;
            let link2 = wrap2.value;
            let normalize = linkNormalizer != null ? linkNormalizer : (x) => x;
            let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path));
            if (pathCompare != 0)
              return pathCompare;
            let typeCompare = link1.type.localeCompare(link2.type);
            if (typeCompare != 0)
              return typeCompare;
            if (link1.subpath && !link2.subpath)
              return 1;
            if (!link1.subpath && link2.subpath)
              return -1;
            if (!link1.subpath && !link2.subpath)
              return 0;
            return ((_a3 = link1.subpath) != null ? _a3 : "").localeCompare((_b3 = link2.subpath) != null ? _b3 : "");
          case "date":
            return wrap1.value < wrap2.value ? -1 : wrap1.value.equals(wrap2.value) ? 0 : 1;
          case "duration":
            return wrap1.value < wrap2.value ? -1 : wrap1.value.equals(wrap2.value) ? 0 : 1;
          case "array":
            let f1 = wrap1.value;
            let f2 = wrap2.value;
            for (let index = 0; index < Math.min(f1.length, f2.length); index++) {
              let comp = compareValue(f1[index], f2[index]);
              if (comp != 0)
                return comp;
            }
            return f1.length - f2.length;
          case "object":
            let o1 = wrap1.value;
            let o2 = wrap2.value;
            let k1 = Array.from(Object.keys(o1));
            let k2 = Array.from(Object.keys(o2));
            k1.sort();
            k2.sort();
            let keyCompare = compareValue(k1, k2);
            if (keyCompare != 0)
              return keyCompare;
            for (let key of k1) {
              let comp = compareValue(o1[key], o2[key]);
              if (comp != 0)
                return comp;
            }
            return 0;
          case "widget":
          case "html":
          case "function":
            return 0;
        }
      }
      Values2.compareValue = compareValue;
      function typeOf(val) {
        var _a3;
        return (_a3 = wrapValue(val)) == null ? void 0 : _a3.type;
      }
      Values2.typeOf = typeOf;
      function isTruthy(field) {
        let wrapped = wrapValue(field);
        if (!wrapped)
          return false;
        switch (wrapped.type) {
          case "number":
            return wrapped.value != 0;
          case "string":
            return wrapped.value.length > 0;
          case "boolean":
            return wrapped.value;
          case "link":
            return !!wrapped.value.path;
          case "date":
            return wrapped.value.toMillis() != 0;
          case "duration":
            return wrapped.value.as("seconds") != 0;
          case "object":
            return Object.keys(wrapped.value).length > 0;
          case "array":
            return wrapped.value.length > 0;
          case "null":
            return false;
          case "html":
          case "widget":
          case "function":
            return true;
        }
      }
      Values2.isTruthy = isTruthy;
      function deepCopy(field) {
        if (field === null || field === void 0)
          return field;
        if (Values2.isArray(field)) {
          return [].concat(field.map((v) => deepCopy(v)));
        } else if (Values2.isObject(field)) {
          let result = {};
          for (let [key, value] of Object.entries(field))
            result[key] = deepCopy(value);
          return result;
        } else {
          return field;
        }
      }
      Values2.deepCopy = deepCopy;
      function isString2(val) {
        return typeof val == "string";
      }
      Values2.isString = isString2;
      function isNumber2(val) {
        return typeof val == "number";
      }
      Values2.isNumber = isNumber2;
      function isDate2(val) {
        return val instanceof DateTime;
      }
      Values2.isDate = isDate2;
      function isDuration(val) {
        return val instanceof Duration;
      }
      Values2.isDuration = isDuration;
      function isNull(val) {
        return val === null || val === void 0;
      }
      Values2.isNull = isNull;
      function isArray(val) {
        return Array.isArray(val);
      }
      Values2.isArray = isArray;
      function isBoolean(val) {
        return typeof val === "boolean";
      }
      Values2.isBoolean = isBoolean;
      function isLink(val) {
        return val instanceof Link;
      }
      Values2.isLink = isLink;
      function isWidget(val) {
        return val instanceof Widget;
      }
      Values2.isWidget = isWidget;
      function isHtml(val) {
        if (typeof HTMLElement !== "undefined") {
          return val instanceof HTMLElement;
        } else {
          return false;
        }
      }
      Values2.isHtml = isHtml;
      function isObject(val) {
        return typeof val == "object" && !isHtml(val) && !isWidget(val) && !isArray(val) && !isDuration(val) && !isDate2(val) && !isLink(val) && val !== void 0 && !isNull(val);
      }
      Values2.isObject = isObject;
      function isFunction(val) {
        return typeof val == "function";
      }
      Values2.isFunction = isFunction;
    })(Values || (Values = {}));
    var Groupings;
    (function(Groupings2) {
      function isElementGroup(entry) {
        return Values.isObject(entry) && Object.keys(entry).length == 2 && "key" in entry && "rows" in entry;
      }
      Groupings2.isElementGroup = isElementGroup;
      function isGrouping(entry) {
        for (let element of entry)
          if (!isElementGroup(element))
            return false;
        return true;
      }
      Groupings2.isGrouping = isGrouping;
      function count(elements) {
        if (isGrouping(elements)) {
          let result = 0;
          for (let subgroup of elements)
            result += count(subgroup.rows);
          return result;
        } else {
          return elements.length;
        }
      }
      Groupings2.count = count;
    })(Groupings || (Groupings = {}));
    var Link = class {
      constructor(fields) {
        __publicField(this, "path");
        __publicField(this, "display");
        __publicField(this, "subpath");
        __publicField(this, "embed");
        __publicField(this, "type");
        Object.assign(this, fields);
      }
      static file(path, embed = false, display) {
        return new Link({
          path,
          embed,
          display,
          subpath: void 0,
          type: "file"
        });
      }
      static infer(linkpath, embed = false, display) {
        if (linkpath.includes("#^")) {
          let split = linkpath.split("#^");
          return Link.block(split[0], split[1], embed, display);
        } else if (linkpath.includes("#")) {
          let split = linkpath.split("#");
          return Link.header(split[0], split[1], embed, display);
        } else
          return Link.file(linkpath, embed, display);
      }
      static header(path, header, embed, display) {
        return new Link({
          path,
          embed,
          display,
          subpath: normalizeHeaderForLink(header),
          type: "header"
        });
      }
      static block(path, blockId, embed, display) {
        return new Link({
          path,
          embed,
          display,
          subpath: blockId,
          type: "block"
        });
      }
      static fromObject(object) {
        return new Link(object);
      }
      equals(other) {
        if (other == void 0 || other == null)
          return false;
        return this.path == other.path && this.type == other.type && this.subpath == other.subpath;
      }
      toString() {
        return this.markdown();
      }
      toObject() {
        return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed };
      }
      withPath(path) {
        return new Link(Object.assign({}, this, { path }));
      }
      withDisplay(display) {
        return new Link(Object.assign({}, this, { display }));
      }
      withHeader(header) {
        return Link.header(this.path, header, this.embed, this.display);
      }
      toFile() {
        return Link.file(this.path, this.embed, this.display);
      }
      toEmbed() {
        if (this.embed) {
          return this;
        } else {
          let link = new Link(this);
          link.embed = true;
          return link;
        }
      }
      fromEmbed() {
        if (!this.embed) {
          return this;
        } else {
          let link = new Link(this);
          link.embed = false;
          return link;
        }
      }
      markdown() {
        let result = (this.embed ? "!" : "") + "[[" + this.obsidianLink();
        if (this.display) {
          result += "|" + this.display;
        } else {
          result += "|" + getFileTitle(this.path);
          if (this.type == "header" || this.type == "block")
            result += " > " + this.subpath;
        }
        result += "]]";
        return result;
      }
      obsidianLink() {
        var _a3, _b3;
        const escaped = this.path.replaceAll("|", "\\|");
        if (this.type == "header")
          return escaped + "#" + ((_a3 = this.subpath) == null ? void 0 : _a3.replaceAll("|", "\\|"));
        if (this.type == "block")
          return escaped + "#^" + ((_b3 = this.subpath) == null ? void 0 : _b3.replaceAll("|", "\\|"));
        else
          return escaped;
      }
      fileName() {
        return getFileTitle(this.path).replace(".md", "");
      }
    };
    var Widget = class {
      constructor($widget) {
        __publicField(this, "$widget");
        this.$widget = $widget;
      }
    };
    var ListPairWidget = class extends Widget {
      constructor(key, value) {
        super("dataview:list-pair");
        __publicField(this, "key");
        __publicField(this, "value");
        this.key = key;
        this.value = value;
      }
      markdown() {
        return `${Values.toString(this.key)}: ${Values.toString(this.value)}`;
      }
    };
    var ExternalLinkWidget = class extends Widget {
      constructor(url, display) {
        super("dataview:external-link");
        __publicField(this, "url");
        __publicField(this, "display");
        this.url = url;
        this.display = display;
      }
      markdown() {
        var _a3;
        return `[${(_a3 = this.display) != null ? _a3 : this.url}](${this.url})`;
      }
    };
    var Widgets;
    (function(Widgets2) {
      function listPair(key, value) {
        return new ListPairWidget(key, value);
      }
      Widgets2.listPair = listPair;
      function externalLink(url, display) {
        return new ExternalLinkWidget(url, display);
      }
      Widgets2.externalLink = externalLink;
      function isListPair(widget) {
        return widget.$widget === "dataview:list-pair";
      }
      Widgets2.isListPair = isListPair;
      function isExternalLink(widget) {
        return widget.$widget === "dataview:external-link";
      }
      Widgets2.isExternalLink = isExternalLink;
      function isBuiltin(widget) {
        return isListPair(widget) || isExternalLink(widget);
      }
      Widgets2.isBuiltin = isBuiltin;
    })(Widgets || (Widgets = {}));
    var Fields;
    (function(Fields2) {
      function variable(name) {
        return { type: "variable", name };
      }
      Fields2.variable = variable;
      function literal(value) {
        return { type: "literal", value };
      }
      Fields2.literal = literal;
      function binaryOp(left, op, right) {
        return { type: "binaryop", left, op, right };
      }
      Fields2.binaryOp = binaryOp;
      function index(obj, index2) {
        return { type: "index", object: obj, index: index2 };
      }
      Fields2.index = index;
      function indexVariable(name) {
        let parts = name.split(".");
        let result = Fields2.variable(parts[0]);
        for (let index2 = 1; index2 < parts.length; index2++) {
          result = Fields2.index(result, Fields2.literal(parts[index2]));
        }
        return result;
      }
      Fields2.indexVariable = indexVariable;
      function lambda(args, value) {
        return { type: "lambda", arguments: args, value };
      }
      Fields2.lambda = lambda;
      function func(func2, args) {
        return { type: "function", func: func2, arguments: args };
      }
      Fields2.func = func;
      function list2(values) {
        return { type: "list", values };
      }
      Fields2.list = list2;
      function object(values) {
        return { type: "object", values };
      }
      Fields2.object = object;
      function negate(child) {
        return { type: "negated", child };
      }
      Fields2.negate = negate;
      function isCompareOp(op) {
        return op == "<=" || op == "<" || op == ">" || op == ">=" || op == "!=" || op == "=";
      }
      Fields2.isCompareOp = isCompareOp;
      Fields2.NULL = Fields2.literal(null);
    })(Fields || (Fields = {}));
    var Sources;
    (function(Sources2) {
      function tag(tag2) {
        return { type: "tag", tag: tag2 };
      }
      Sources2.tag = tag;
      function csv(path) {
        return { type: "csv", path };
      }
      Sources2.csv = csv;
      function folder(prefix) {
        return { type: "folder", folder: prefix };
      }
      Sources2.folder = folder;
      function link(file, incoming) {
        return { type: "link", file, direction: incoming ? "incoming" : "outgoing" };
      }
      Sources2.link = link;
      function binaryOp(left, op, right) {
        return { type: "binaryop", left, op, right };
      }
      Sources2.binaryOp = binaryOp;
      function and(left, right) {
        return { type: "binaryop", left, op: "&", right };
      }
      Sources2.and = and;
      function or(left, right) {
        return { type: "binaryop", left, op: "|", right };
      }
      Sources2.or = or;
      function negate(child) {
        return { type: "negate", child };
      }
      Sources2.negate = negate;
      function empty() {
        return { type: "empty" };
      }
      Sources2.empty = empty;
    })(Sources || (Sources = {}));
    var EMOJI_REGEX = new RegExp(emojiRegex(), "");
    var DURATION_TYPES = {
      year: Duration.fromObject({ years: 1 }),
      years: Duration.fromObject({ years: 1 }),
      yr: Duration.fromObject({ years: 1 }),
      yrs: Duration.fromObject({ years: 1 }),
      month: Duration.fromObject({ months: 1 }),
      months: Duration.fromObject({ months: 1 }),
      mo: Duration.fromObject({ months: 1 }),
      mos: Duration.fromObject({ months: 1 }),
      week: Duration.fromObject({ weeks: 1 }),
      weeks: Duration.fromObject({ weeks: 1 }),
      wk: Duration.fromObject({ weeks: 1 }),
      wks: Duration.fromObject({ weeks: 1 }),
      w: Duration.fromObject({ weeks: 1 }),
      day: Duration.fromObject({ days: 1 }),
      days: Duration.fromObject({ days: 1 }),
      d: Duration.fromObject({ days: 1 }),
      hour: Duration.fromObject({ hours: 1 }),
      hours: Duration.fromObject({ hours: 1 }),
      hr: Duration.fromObject({ hours: 1 }),
      hrs: Duration.fromObject({ hours: 1 }),
      h: Duration.fromObject({ hours: 1 }),
      minute: Duration.fromObject({ minutes: 1 }),
      minutes: Duration.fromObject({ minutes: 1 }),
      min: Duration.fromObject({ minutes: 1 }),
      mins: Duration.fromObject({ minutes: 1 }),
      m: Duration.fromObject({ minutes: 1 }),
      second: Duration.fromObject({ seconds: 1 }),
      seconds: Duration.fromObject({ seconds: 1 }),
      sec: Duration.fromObject({ seconds: 1 }),
      secs: Duration.fromObject({ seconds: 1 }),
      s: Duration.fromObject({ seconds: 1 })
    };
    var DATE_SHORTHANDS = {
      now: () => DateTime.local(),
      today: () => DateTime.local().startOf("day"),
      yesterday: () => DateTime.local().startOf("day").minus(Duration.fromObject({ days: 1 })),
      tomorrow: () => DateTime.local().startOf("day").plus(Duration.fromObject({ days: 1 })),
      sow: () => DateTime.local().startOf("week"),
      "start-of-week": () => DateTime.local().startOf("week"),
      eow: () => DateTime.local().endOf("week"),
      "end-of-week": () => DateTime.local().endOf("week"),
      soy: () => DateTime.local().startOf("year"),
      "start-of-year": () => DateTime.local().startOf("year"),
      eoy: () => DateTime.local().endOf("year"),
      "end-of-year": () => DateTime.local().endOf("year"),
      som: () => DateTime.local().startOf("month"),
      "start-of-month": () => DateTime.local().startOf("month"),
      eom: () => DateTime.local().endOf("month"),
      "end-of-month": () => DateTime.local().endOf("month")
    };
    var KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"];
    function splitOnUnescapedPipe(link) {
      let pipe = -1;
      while ((pipe = link.indexOf("|", pipe + 1)) >= 0) {
        if (pipe > 0 && link[pipe - 1] == "\\")
          continue;
        return [link.substring(0, pipe).replace(/\\\|/g, "|"), link.substring(pipe + 1)];
      }
      return [link.replace(/\\\|/g, "|"), void 0];
    }
    function parseInnerLink(rawlink) {
      let [link, display] = splitOnUnescapedPipe(rawlink);
      return Link.infer(link, false, display);
    }
    function createBinaryParser(child, sep, combine) {
      return parsimmon_umd_minExports.seqMap(child, parsimmon_umd_minExports.seq(parsimmon_umd_minExports.optWhitespace, sep, parsimmon_umd_minExports.optWhitespace, child).many(), (first, rest) => {
        if (rest.length == 0)
          return first;
        let node = combine(first, rest[0][1], rest[0][3]);
        for (let index = 1; index < rest.length; index++) {
          node = combine(node, rest[index][1], rest[index][3]);
        }
        return node;
      });
    }
    function chainOpt(base, ...funcs) {
      return parsimmon_umd_minExports.custom((success, failure) => {
        return (input, i) => {
          let result = base._(input, i);
          if (!result.status)
            return result;
          for (let func of funcs) {
            let next = func(result.value)._(input, result.index);
            if (!next.status)
              return result;
            result = next;
          }
          return result;
        };
      });
    }
    var EXPRESSION = parsimmon_umd_minExports.createLanguage({
      number: (q) => parsimmon_umd_minExports.regexp(/-?[0-9]+(\.[0-9]+)?/).map((str) => Number.parseFloat(str)).desc("number"),
      string: (q) => parsimmon_umd_minExports.string('"').then(parsimmon_umd_minExports.alt(q.escapeCharacter, parsimmon_umd_minExports.noneOf('"\\')).atLeast(0).map((chars) => chars.join(""))).skip(parsimmon_umd_minExports.string('"')).desc("string"),
      escapeCharacter: (_) => parsimmon_umd_minExports.string("\\").then(parsimmon_umd_minExports.any).map((escaped) => {
        if (escaped === '"')
          return '"';
        if (escaped === "\\")
          return "\\";
        else
          return "\\" + escaped;
      }),
      bool: (_) => parsimmon_umd_minExports.regexp(/true|false|True|False/).map((str) => str.toLowerCase() == "true").desc("boolean ('true' or 'false')"),
      tag: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("#"), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]/).desc("text")).many(), (start, rest) => start + rest.join("")).desc("tag ('#hello/stuff')"),
      identifier: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/\p{Letter}/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[0-9\p{Letter}_-]/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")).many(), (first, rest) => first + rest.join("")).desc("variable identifier"),
      link: (_) => parsimmon_umd_minExports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1).map((linkInner) => parseInnerLink(linkInner)).desc("file link"),
      embedLink: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!").atMost(1), q.link, (p, l2) => {
        if (p.length > 0)
          l2.embed = true;
        return l2;
      }).desc("file link"),
      binaryPlusMinus: (_) => parsimmon_umd_minExports.regexp(/\+|-/).map((str) => str).desc("'+' or '-'"),
      binaryMulDiv: (_) => parsimmon_umd_minExports.regexp(/\*|\/|%/).map((str) => str).desc("'*' or '/' or '%'"),
      binaryCompareOp: (_) => parsimmon_umd_minExports.regexp(/>=|<=|!=|>|<|=/).map((str) => str).desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"),
      binaryBooleanOp: (_) => parsimmon_umd_minExports.regexp(/and|or|&|\|/i).map((str) => {
        if (str.toLowerCase() == "and")
          return "&";
        else if (str.toLowerCase() == "or")
          return "|";
        else
          return str;
      }).desc("'and' or 'or'"),
      rootDate: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/\d{4}/), parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (year, _2, month) => {
        return DateTime.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) });
      }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),
      dateShorthand: (_) => parsimmon_umd_minExports.alt(...Object.keys(DATE_SHORTHANDS).sort((a, b) => b.length - a.length).map(parsimmon_umd_minExports.string)),
      date: (q) => chainOpt(q.rootDate, (ym) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("T"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), parsimmon_umd_minExports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_minExports.succeed(ymdhms)), (dt) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("+").or(parsimmon_umd_minExports.string("-")), parsimmon_umd_minExports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr, { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("Z"), () => dt.setZone("utc", { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.regexp(/[0-9A-Za-z+-\/]+/u), parsimmon_umd_minExports.string("]"), (_a3, zone, _b3) => dt.setZone(zone, { keepLocalTime: true })))).assert((dt) => dt.isValid, "valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),
      datePlus: (q) => parsimmon_umd_minExports.alt(q.dateShorthand.map((d) => DATE_SHORTHANDS[d]()), q.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),
      durationType: (_) => parsimmon_umd_minExports.alt(...Object.keys(DURATION_TYPES).sort((a, b) => b.length - a.length).map(parsimmon_umd_minExports.string)),
      duration: (q) => parsimmon_umd_minExports.seqMap(q.number, parsimmon_umd_minExports.optWhitespace, q.durationType, (count, _, t) => DURATION_TYPES[t].mapUnits((x) => x * count)).sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).or(parsimmon_umd_minExports.optWhitespace)).map((durations) => durations.reduce((p, c) => p.plus(c))).desc("duration like 4hr2min"),
      rawNull: (_) => parsimmon_umd_minExports.string("null"),
      tagSource: (q) => q.tag.map((tag) => Sources.tag(tag)),
      csvSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("csv(").skip(parsimmon_umd_minExports.optWhitespace), q.string, parsimmon_umd_minExports.string(")"), (_1, path, _2) => Sources.csv(path)),
      linkIncomingSource: (q) => q.link.map((link) => Sources.link(link.path, true)),
      linkOutgoingSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("outgoing(").skip(parsimmon_umd_minExports.optWhitespace), q.link, parsimmon_umd_minExports.string(")"), (_1, link, _2) => Sources.link(link.path, false)),
      folderSource: (q) => q.string.map((str) => Sources.folder(str)),
      parensSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.source, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field),
      negateSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.string("!")), q.atomSource, (_, source) => Sources.negate(source)),
      atomSource: (q) => parsimmon_umd_minExports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource),
      binaryOpSource: (q) => createBinaryParser(q.atomSource, q.binaryBooleanOp.map((s2) => s2), Sources.binaryOp),
      source: (q) => q.binaryOpSource,
      variableField: (q) => q.identifier.chain((r) => {
        if (KEYWORDS.includes(r.toUpperCase())) {
          return parsimmon_umd_minExports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")");
        } else {
          return parsimmon_umd_minExports.succeed(Fields.variable(r));
        }
      }).desc("variable"),
      numberField: (q) => q.number.map((val) => Fields.literal(val)).desc("number"),
      stringField: (q) => q.string.map((val) => Fields.literal(val)).desc("string"),
      boolField: (q) => q.bool.map((val) => Fields.literal(val)).desc("boolean"),
      dateField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("date("), parsimmon_umd_minExports.optWhitespace, q.datePlus, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"),
      durationField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("dur("), parsimmon_umd_minExports.optWhitespace, q.duration, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"),
      nullField: (q) => q.rawNull.map((_) => Fields.NULL),
      linkField: (q) => q.link.map((f) => Fields.literal(f)),
      listField: (q) => q.field.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("[").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("]"))).map((l2) => Fields.list(l2)).desc("list ('[1, 2, 3]')"),
      objectField: (q) => parsimmon_umd_minExports.seqMap(q.identifier.or(q.string), parsimmon_umd_minExports.string(":").trim(parsimmon_umd_minExports.optWhitespace), q.field, (name, _sep, value) => {
        return { name, value };
      }).sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("{").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("}"))).map((vals) => {
        let res = {};
        for (let entry of vals)
          res[entry.name] = entry.value;
        return Fields.object(res);
      }).desc("object ('{ a: 1, b: 2 }')"),
      atomInlineField: (q) => parsimmon_umd_minExports.alt(q.date, q.duration.map((d) => normalizeDuration(d)), q.string, q.tag, q.embedLink, q.bool, q.number, q.rawNull),
      inlineFieldList: (q) => q.atomInlineField.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).lookahead(q.atomInlineField)),
      inlineField: (q) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(q.atomInlineField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace), q.inlineFieldList, (f, _s, l2) => [f].concat(l2)), q.atomInlineField),
      atomField: (q) => parsimmon_umd_minExports.alt(q.embedLink.map((l2) => Fields.literal(l2)), q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField),
      indexField: (q) => parsimmon_umd_minExports.seqMap(q.atomField, parsimmon_umd_minExports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => {
        let result = obj;
        for (let post of postfixes) {
          switch (post.type) {
            case "dot":
              result = Fields.index(result, Fields.literal(post.field));
              break;
            case "index":
              result = Fields.index(result, post.field);
              break;
            case "function":
              result = Fields.func(result, post.fields);
              break;
          }
        }
        return result;
      }),
      negatedField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"),
      parensField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field),
      lambdaField: (q) => parsimmon_umd_minExports.seqMap(q.identifier.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("(").trim(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.string(")").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.string("=>").trim(parsimmon_umd_minExports.optWhitespace), q.field, (ident, _ignore, value) => {
        return { type: "lambda", arguments: ident, value };
      }),
      dotPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), q.identifier, (_, field) => {
        return { type: "dot", field };
      }),
      indexPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string("]"), (_, _2, field, _3, _4) => {
        return { type: "index", field };
      }),
      functionPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_, _1, fields, _2, _3) => {
        return { type: "function", fields };
      }),
      binaryMulDivField: (q) => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp),
      binaryPlusMinusField: (q) => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp),
      binaryCompareField: (q) => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp),
      binaryBooleanField: (q) => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp),
      binaryOpField: (q) => q.binaryBooleanField,
      field: (q) => q.binaryOpField
    });
    function parseField(text) {
      try {
        return Result2.success(EXPRESSION.field.tryParse(text));
      } catch (error) {
        return Result2.failure("" + error);
      }
    }
    var QueryFields;
    (function(QueryFields2) {
      function named(name, field) {
        return { name, field };
      }
      QueryFields2.named = named;
      function sortBy(field, dir) {
        return { field, direction: dir };
      }
      QueryFields2.sortBy = sortBy;
    })(QueryFields || (QueryFields = {}));
    function captureRaw(base) {
      return parsimmon_umd_minExports.custom((success, failure) => {
        return (input, i) => {
          let result = base._(input, i);
          if (!result.status)
            return result;
          return Object.assign({}, result, { value: [result.value, input.substring(i, result.index)] });
        };
      });
    }
    function stripNewlines(text) {
      return text.split(/[\r\n]+/).map((t) => t.trim()).join("");
    }
    function precededByWhitespaceIfNotEof(if_eof, parser) {
      return parsimmon_umd_minExports.eof.map(if_eof).or(parsimmon_umd_minExports.whitespace.then(parser));
    }
    var QUERY_LANGUAGE = parsimmon_umd_minExports.createLanguage({
      queryType: (q) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/TABLE|LIST|TASK|CALENDAR/i)).map((str) => str.toLowerCase()).desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"),
      explicitNamedField: (q) => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.whitespace), parsimmon_umd_minExports.regexp(/AS/i).skip(parsimmon_umd_minExports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)),
      comment: () => parsimmon_umd_minExports.Parser((input, i) => {
        let line = input.substring(i);
        if (!line.startsWith("//"))
          return parsimmon_umd_minExports.makeFailure(i, "Not a comment");
        line = line.split("\n")[0];
        let comment2 = line.substring(2).trim();
        return parsimmon_umd_minExports.makeSuccess(i + line.length, comment2);
      }),
      namedField: (q) => parsimmon_umd_minExports.alt(q.explicitNamedField, captureRaw(EXPRESSION.field).map(([value, text]) => QueryFields.named(stripNewlines(text), value))),
      sortField: (q) => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => {
        let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase();
        if (direction == "desc")
          direction = "descending";
        if (direction == "asc")
          direction = "ascending";
        return {
          field,
          direction
        };
      }),
      headerClause: (q) => q.queryType.chain((type) => {
        switch (type) {
          case "table": {
            return precededByWhitespaceIfNotEof(() => ({ type, fields: [], showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i).skip(parsimmon_umd_minExports.optWhitespace).atMost(1), parsimmon_umd_minExports.sepBy(q.namedField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (withoutId, fields) => {
              return { type, fields, showId: withoutId.length == 0 };
            }));
          }
          case "list":
            return precededByWhitespaceIfNotEof(() => ({ type, format: void 0, showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i).skip(parsimmon_umd_minExports.optWhitespace).atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => {
              return {
                type,
                format: format.length == 1 ? format[0] : void 0,
                showId: withoutId.length == 0
              };
            }));
          case "task":
            return parsimmon_umd_minExports.succeed({ type });
          case "calendar":
            return parsimmon_umd_minExports.whitespace.then(parsimmon_umd_minExports.seqMap(q.namedField, (field) => {
              return {
                type,
                showId: true,
                field
              };
            }));
          default:
            return parsimmon_umd_minExports.fail(`Unrecognized query type '${type}'`);
        }
      }).desc("TABLE or LIST or TASK or CALENDAR"),
      fromClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FROM/i), parsimmon_umd_minExports.whitespace, EXPRESSION.source, (_1, _2, source) => source),
      whereClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WHERE/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (where, _, field) => {
        return { type: "where", clause: field };
      }).desc("WHERE <expression>"),
      sortByClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/SORT/i), parsimmon_umd_minExports.whitespace, q.sortField.sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (sort, _1, fields) => {
        return { type: "sort", fields };
      }).desc("SORT field [ASC/DESC]"),
      limitClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/LIMIT/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (limit, _1, field) => {
        return { type: "limit", amount: field };
      }).desc("LIMIT <value>"),
      flattenClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FLATTEN/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => {
        return { type: "flatten", field };
      }).desc("FLATTEN <value> [AS <name>]"),
      groupByClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/GROUP BY/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => {
        return { type: "group", field };
      }).desc("GROUP BY <value> [AS <name>]"),
      clause: (q) => parsimmon_umd_minExports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause),
      query: (q) => parsimmon_umd_minExports.seqMap(q.headerClause.trim(optionalWhitespaceOrComment), q.fromClause.trim(optionalWhitespaceOrComment).atMost(1), q.clause.trim(optionalWhitespaceOrComment).many(), (header, from, clauses) => {
        return {
          header,
          source: from.length == 0 ? Sources.folder("") : from[0],
          operations: clauses,
          settings: DEFAULT_QUERY_SETTINGS
        };
      })
    });
    var optionalWhitespaceOrComment = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.whitespace, QUERY_LANGUAGE.comment).many().map((arr) => arr.join(""));
    var getAPI2 = (app2) => {
      var _a3;
      if (app2)
        return (_a3 = app2.plugins.plugins.dataview) == null ? void 0 : _a3.api;
      else
        return window.DataviewAPI;
    };
    var isPluginEnabled = (app2) => app2.plugins.enabledPlugins.has("dataview");
    exports.DATE_SHORTHANDS = DATE_SHORTHANDS;
    exports.DURATION_TYPES = DURATION_TYPES;
    exports.EXPRESSION = EXPRESSION;
    exports.KEYWORDS = KEYWORDS;
    exports.QUERY_LANGUAGE = QUERY_LANGUAGE;
    exports.getAPI = getAPI2;
    exports.isPluginEnabled = isPluginEnabled;
    exports.parseField = parseField;
  }
});

// node_modules/picocolors/picocolors.browser.js
var require_picocolors_browser = __commonJS({
  "node_modules/picocolors/picocolors.browser.js"(exports, module2) {
    var x = String;
    var create = function() {
      return { isColorSupported: false, reset: x, bold: x, dim: x, italic: x, underline: x, inverse: x, hidden: x, strikethrough: x, black: x, red: x, green: x, yellow: x, blue: x, magenta: x, cyan: x, white: x, gray: x, bgBlack: x, bgRed: x, bgGreen: x, bgYellow: x, bgBlue: x, bgMagenta: x, bgCyan: x, bgWhite: x, blackBright: x, redBright: x, greenBright: x, yellowBright: x, blueBright: x, magentaBright: x, cyanBright: x, whiteBright: x, bgBlackBright: x, bgRedBright: x, bgGreenBright: x, bgYellowBright: x, bgBlueBright: x, bgMagentaBright: x, bgCyanBright: x, bgWhiteBright: x };
    };
    module2.exports = create();
    module2.exports.createColors = create;
  }
});

// (disabled):node_modules/postcss/lib/terminal-highlight
var require_terminal_highlight = __commonJS({
  "(disabled):node_modules/postcss/lib/terminal-highlight"() {
  }
});

// node_modules/postcss/lib/css-syntax-error.js
var require_css_syntax_error = __commonJS({
  "node_modules/postcss/lib/css-syntax-error.js"(exports, module2) {
    "use strict";
    var pico = require_picocolors_browser();
    var terminalHighlight = require_terminal_highlight();
    var CssSyntaxError2 = class extends Error {
      constructor(message, line, column, source, file, plugin2) {
        super(message);
        this.name = "CssSyntaxError";
        this.reason = message;
        if (file) {
          this.file = file;
        }
        if (source) {
          this.source = source;
        }
        if (plugin2) {
          this.plugin = plugin2;
        }
        if (typeof line !== "undefined" && typeof column !== "undefined") {
          if (typeof line === "number") {
            this.line = line;
            this.column = column;
          } else {
            this.line = line.line;
            this.column = line.column;
            this.endLine = column.line;
            this.endColumn = column.column;
          }
        }
        this.setMessage();
        if (Error.captureStackTrace) {
          Error.captureStackTrace(this, CssSyntaxError2);
        }
      }
      setMessage() {
        this.message = this.plugin ? this.plugin + ": " : "";
        this.message += this.file ? this.file : "<css input>";
        if (typeof this.line !== "undefined") {
          this.message += ":" + this.line + ":" + this.column;
        }
        this.message += ": " + this.reason;
      }
      showSourceCode(color) {
        if (!this.source)
          return "";
        let css = this.source;
        if (color == null)
          color = pico.isColorSupported;
        let aside = (text) => text;
        let mark = (text) => text;
        let highlight = (text) => text;
        if (color) {
          let { bold, gray, red } = pico.createColors(true);
          mark = (text) => bold(red(text));
          aside = (text) => gray(text);
          if (terminalHighlight) {
            highlight = (text) => terminalHighlight(text);
          }
        }
        let lines = css.split(/\r?\n/);
        let start = Math.max(this.line - 3, 0);
        let end = Math.min(this.line + 2, lines.length);
        let maxWidth = String(end).length;
        return lines.slice(start, end).map((line, index) => {
          let number = start + 1 + index;
          let gutter = " " + (" " + number).slice(-maxWidth) + " | ";
          if (number === this.line) {
            if (line.length > 160) {
              let padding = 20;
              let subLineStart = Math.max(0, this.column - padding);
              let subLineEnd = Math.max(this.column + padding, this.endColumn + padding);
              let subLine = line.slice(subLineStart, subLineEnd);
              let spacing2 = aside(gutter.replace(/\d/g, " ")) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\t]/g, " ");
              return mark(">") + aside(gutter) + highlight(subLine) + "\n " + spacing2 + mark("^");
            }
            let spacing = aside(gutter.replace(/\d/g, " ")) + line.slice(0, this.column - 1).replace(/[^\t]/g, " ");
            return mark(">") + aside(gutter) + highlight(line) + "\n " + spacing + mark("^");
          }
          return " " + aside(gutter) + highlight(line);
        }).join("\n");
      }
      toString() {
        let code = this.showSourceCode();
        if (code) {
          code = "\n\n" + code + "\n";
        }
        return this.name + ": " + this.message + code;
      }
    };
    module2.exports = CssSyntaxError2;
    CssSyntaxError2.default = CssSyntaxError2;
  }
});

// node_modules/postcss/lib/stringifier.js
var require_stringifier = __commonJS({
  "node_modules/postcss/lib/stringifier.js"(exports, module2) {
    "use strict";
    var DEFAULT_RAW = {
      after: "\n",
      beforeClose: "\n",
      beforeComment: "\n",
      beforeDecl: "\n",
      beforeOpen: " ",
      beforeRule: "\n",
      colon: ": ",
      commentLeft: " ",
      commentRight: " ",
      emptyBody: "",
      indent: "    ",
      semicolon: false
    };
    function capitalize(str) {
      return str[0].toUpperCase() + str.slice(1);
    }
    var Stringifier = class {
      constructor(builder) {
        this.builder = builder;
      }
      atrule(node, semicolon) {
        let name = "@" + node.name;
        let params = node.params ? this.rawValue(node, "params") : "";
        if (typeof node.raws.afterName !== "undefined") {
          name += node.raws.afterName;
        } else if (params) {
          name += " ";
        }
        if (node.nodes) {
          this.block(node, name + params);
        } else {
          let end = (node.raws.between || "") + (semicolon ? ";" : "");
          this.builder(name + params + end, node);
        }
      }
      beforeAfter(node, detect) {
        let value;
        if (node.type === "decl") {
          value = this.raw(node, null, "beforeDecl");
        } else if (node.type === "comment") {
          value = this.raw(node, null, "beforeComment");
        } else if (detect === "before") {
          value = this.raw(node, null, "beforeRule");
        } else {
          value = this.raw(node, null, "beforeClose");
        }
        let buf = node.parent;
        let depth = 0;
        while (buf && buf.type !== "root") {
          depth += 1;
          buf = buf.parent;
        }
        if (value.includes("\n")) {
          let indent = this.raw(node, null, "indent");
          if (indent.length) {
            for (let step = 0; step < depth; step++)
              value += indent;
          }
        }
        return value;
      }
      block(node, start) {
        let between = this.raw(node, "between", "beforeOpen");
        this.builder(start + between + "{", node, "start");
        let after;
        if (node.nodes && node.nodes.length) {
          this.body(node);
          after = this.raw(node, "after");
        } else {
          after = this.raw(node, "after", "emptyBody");
        }
        if (after)
          this.builder(after);
        this.builder("}", node, "end");
      }
      body(node) {
        let last2 = node.nodes.length - 1;
        while (last2 > 0) {
          if (node.nodes[last2].type !== "comment")
            break;
          last2 -= 1;
        }
        let semicolon = this.raw(node, "semicolon");
        for (let i = 0; i < node.nodes.length; i++) {
          let child = node.nodes[i];
          let before = this.raw(child, "before");
          if (before)
            this.builder(before);
          this.stringify(child, last2 !== i || semicolon);
        }
      }
      comment(node) {
        let left = this.raw(node, "left", "commentLeft");
        let right = this.raw(node, "right", "commentRight");
        this.builder("/*" + left + node.text + right + "*/", node);
      }
      decl(node, semicolon) {
        let between = this.raw(node, "between", "colon");
        let string = node.prop + between + this.rawValue(node, "value");
        if (node.important) {
          string += node.raws.important || " !important";
        }
        if (semicolon)
          string += ";";
        this.builder(string, node);
      }
      document(node) {
        this.body(node);
      }
      raw(node, own, detect) {
        let value;
        if (!detect)
          detect = own;
        if (own) {
          value = node.raws[own];
          if (typeof value !== "undefined")
            return value;
        }
        let parent = node.parent;
        if (detect === "before") {
          if (!parent || parent.type === "root" && parent.first === node) {
            return "";
          }
          if (parent && parent.type === "document") {
            return "";
          }
        }
        if (!parent)
          return DEFAULT_RAW[detect];
        let root2 = node.root();
        if (!root2.rawCache)
          root2.rawCache = {};
        if (typeof root2.rawCache[detect] !== "undefined") {
          return root2.rawCache[detect];
        }
        if (detect === "before" || detect === "after") {
          return this.beforeAfter(node, detect);
        } else {
          let method = "raw" + capitalize(detect);
          if (this[method]) {
            value = this[method](root2, node);
          } else {
            root2.walk((i) => {
              value = i.raws[own];
              if (typeof value !== "undefined")
                return false;
            });
          }
        }
        if (typeof value === "undefined")
          value = DEFAULT_RAW[detect];
        root2.rawCache[detect] = value;
        return value;
      }
      rawBeforeClose(root2) {
        let value;
        root2.walk((i) => {
          if (i.nodes && i.nodes.length > 0) {
            if (typeof i.raws.after !== "undefined") {
              value = i.raws.after;
              if (value.includes("\n")) {
                value = value.replace(/[^\n]+$/, "");
              }
              return false;
            }
          }
        });
        if (value)
          value = value.replace(/\S/g, "");
        return value;
      }
      rawBeforeComment(root2, node) {
        let value;
        root2.walkComments((i) => {
          if (typeof i.raws.before !== "undefined") {
            value = i.raws.before;
            if (value.includes("\n")) {
              value = value.replace(/[^\n]+$/, "");
            }
            return false;
          }
        });
        if (typeof value === "undefined") {
          value = this.raw(node, null, "beforeDecl");
        } else if (value) {
          value = value.replace(/\S/g, "");
        }
        return value;
      }
      rawBeforeDecl(root2, node) {
        let value;
        root2.walkDecls((i) => {
          if (typeof i.raws.before !== "undefined") {
            value = i.raws.before;
            if (value.includes("\n")) {
              value = value.replace(/[^\n]+$/, "");
            }
            return false;
          }
        });
        if (typeof value === "undefined") {
          value = this.raw(node, null, "beforeRule");
        } else if (value) {
          value = value.replace(/\S/g, "");
        }
        return value;
      }
      rawBeforeOpen(root2) {
        let value;
        root2.walk((i) => {
          if (i.type !== "decl") {
            value = i.raws.between;
            if (typeof value !== "undefined")
              return false;
          }
        });
        return value;
      }
      rawBeforeRule(root2) {
        let value;
        root2.walk((i) => {
          if (i.nodes && (i.parent !== root2 || root2.first !== i)) {
            if (typeof i.raws.before !== "undefined") {
              value = i.raws.before;
              if (value.includes("\n")) {
                value = value.replace(/[^\n]+$/, "");
              }
              return false;
            }
          }
        });
        if (value)
          value = value.replace(/\S/g, "");
        return value;
      }
      rawColon(root2) {
        let value;
        root2.walkDecls((i) => {
          if (typeof i.raws.between !== "undefined") {
            value = i.raws.between.replace(/[^\s:]/g, "");
            return false;
          }
        });
        return value;
      }
      rawEmptyBody(root2) {
        let value;
        root2.walk((i) => {
          if (i.nodes && i.nodes.length === 0) {
            value = i.raws.after;
            if (typeof value !== "undefined")
              return false;
          }
        });
        return value;
      }
      rawIndent(root2) {
        if (root2.raws.indent)
          return root2.raws.indent;
        let value;
        root2.walk((i) => {
          let p = i.parent;
          if (p && p !== root2 && p.parent && p.parent === root2) {
            if (typeof i.raws.before !== "undefined") {
              let parts = i.raws.before.split("\n");
              value = parts[parts.length - 1];
              value = value.replace(/\S/g, "");
              return false;
            }
          }
        });
        return value;
      }
      rawSemicolon(root2) {
        let value;
        root2.walk((i) => {
          if (i.nodes && i.nodes.length && i.last.type === "decl") {
            value = i.raws.semicolon;
            if (typeof value !== "undefined")
              return false;
          }
        });
        return value;
      }
      rawValue(node, prop) {
        let value = node[prop];
        let raw = node.raws[prop];
        if (raw && raw.value === value) {
          return raw.raw;
        }
        return value;
      }
      root(node) {
        this.body(node);
        if (node.raws.after)
          this.builder(node.raws.after);
      }
      rule(node) {
        this.block(node, this.rawValue(node, "selector"));
        if (node.raws.ownSemicolon) {
          this.builder(node.raws.ownSemicolon, node, "end");
        }
      }
      stringify(node, semicolon) {
        if (!this[node.type]) {
          throw new Error("Unknown AST node type " + node.type + ". Maybe you need to change PostCSS stringifier.");
        }
        this[node.type](node, semicolon);
      }
    };
    module2.exports = Stringifier;
    Stringifier.default = Stringifier;
  }
});

// node_modules/postcss/lib/stringify.js
var require_stringify = __commonJS({
  "node_modules/postcss/lib/stringify.js"(exports, module2) {
    "use strict";
    var Stringifier = require_stringifier();
    function stringify2(node, builder) {
      let str = new Stringifier(builder);
      str.stringify(node);
    }
    module2.exports = stringify2;
    stringify2.default = stringify2;
  }
});

// node_modules/postcss/lib/symbols.js
var require_symbols = __commonJS({
  "node_modules/postcss/lib/symbols.js"(exports, module2) {
    "use strict";
    module2.exports.isClean = Symbol("isClean");
    module2.exports.my = Symbol("my");
  }
});

// node_modules/postcss/lib/node.js
var require_node = __commonJS({
  "node_modules/postcss/lib/node.js"(exports, module2) {
    "use strict";
    var CssSyntaxError2 = require_css_syntax_error();
    var Stringifier = require_stringifier();
    var stringify2 = require_stringify();
    var { isClean, my } = require_symbols();
    function cloneNode(obj, parent) {
      let cloned = new obj.constructor();
      for (let i in obj) {
        if (!Object.prototype.hasOwnProperty.call(obj, i)) {
          continue;
        }
        if (i === "proxyCache")
          continue;
        let value = obj[i];
        let type = typeof value;
        if (i === "parent" && type === "object") {
          if (parent)
            cloned[i] = parent;
        } else if (i === "source") {
          cloned[i] = value;
        } else if (Array.isArray(value)) {
          cloned[i] = value.map((j) => cloneNode(j, cloned));
        } else {
          if (type === "object" && value !== null)
            value = cloneNode(value);
          cloned[i] = value;
        }
      }
      return cloned;
    }
    var Node3 = class {
      constructor(defaults = {}) {
        this.raws = {};
        this[isClean] = false;
        this[my] = true;
        for (let name in defaults) {
          if (name === "nodes") {
            this.nodes = [];
            for (let node of defaults[name]) {
              if (typeof node.clone === "function") {
                this.append(node.clone());
              } else {
                this.append(node);
              }
            }
          } else {
            this[name] = defaults[name];
          }
        }
      }
      addToError(error) {
        error.postcssNode = this;
        if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
          let s = this.source;
          error.stack = error.stack.replace(/\n\s{4}at /, `$&${s.input.from}:${s.start.line}:${s.start.column}$&`);
        }
        return error;
      }
      after(add) {
        this.parent.insertAfter(this, add);
        return this;
      }
      assign(overrides = {}) {
        for (let name in overrides) {
          this[name] = overrides[name];
        }
        return this;
      }
      before(add) {
        this.parent.insertBefore(this, add);
        return this;
      }
      cleanRaws(keepBetween) {
        delete this.raws.before;
        delete this.raws.after;
        if (!keepBetween)
          delete this.raws.between;
      }
      clone(overrides = {}) {
        let cloned = cloneNode(this);
        for (let name in overrides) {
          cloned[name] = overrides[name];
        }
        return cloned;
      }
      cloneAfter(overrides = {}) {
        let cloned = this.clone(overrides);
        this.parent.insertAfter(this, cloned);
        return cloned;
      }
      cloneBefore(overrides = {}) {
        let cloned = this.clone(overrides);
        this.parent.insertBefore(this, cloned);
        return cloned;
      }
      error(message, opts = {}) {
        if (this.source) {
          let { end, start } = this.rangeBy(opts);
          return this.source.input.error(message, { column: start.column, line: start.line }, { column: end.column, line: end.line }, opts);
        }
        return new CssSyntaxError2(message);
      }
      getProxyProcessor() {
        return {
          get(node, prop) {
            if (prop === "proxyOf") {
              return node;
            } else if (prop === "root") {
              return () => node.root().toProxy();
            } else {
              return node[prop];
            }
          },
          set(node, prop, value) {
            if (node[prop] === value)
              return true;
            node[prop] = value;
            if (prop === "prop" || prop === "value" || prop === "name" || prop === "params" || prop === "important" || prop === "text") {
              node.markDirty();
            }
            return true;
          }
        };
      }
      markClean() {
        this[isClean] = true;
      }
      markDirty() {
        if (this[isClean]) {
          this[isClean] = false;
          let next = this;
          while (next = next.parent) {
            next[isClean] = false;
          }
        }
      }
      next() {
        if (!this.parent)
          return void 0;
        let index = this.parent.index(this);
        return this.parent.nodes[index + 1];
      }
      positionBy(opts, stringRepresentation) {
        let pos = this.source.start;
        if (opts.index) {
          pos = this.positionInside(opts.index, stringRepresentation);
        } else if (opts.word) {
          stringRepresentation = this.toString();
          let index = stringRepresentation.indexOf(opts.word);
          if (index !== -1)
            pos = this.positionInside(index, stringRepresentation);
        }
        return pos;
      }
      positionInside(index, stringRepresentation) {
        let string = stringRepresentation || this.toString();
        let column = this.source.start.column;
        let line = this.source.start.line;
        for (let i = 0; i < index; i++) {
          if (string[i] === "\n") {
            column = 1;
            line += 1;
          } else {
            column += 1;
          }
        }
        return { column, line };
      }
      prev() {
        if (!this.parent)
          return void 0;
        let index = this.parent.index(this);
        return this.parent.nodes[index - 1];
      }
      rangeBy(opts) {
        let start = {
          column: this.source.start.column,
          line: this.source.start.line
        };
        let end = this.source.end ? {
          column: this.source.end.column + 1,
          line: this.source.end.line
        } : {
          column: start.column + 1,
          line: start.line
        };
        if (opts.word) {
          let stringRepresentation = this.toString();
          let index = stringRepresentation.indexOf(opts.word);
          if (index !== -1) {
            start = this.positionInside(index, stringRepresentation);
            end = this.positionInside(index + opts.word.length, stringRepresentation);
          }
        } else {
          if (opts.start) {
            start = {
              column: opts.start.column,
              line: opts.start.line
            };
          } else if (opts.index) {
            start = this.positionInside(opts.index);
          }
          if (opts.end) {
            end = {
              column: opts.end.column,
              line: opts.end.line
            };
          } else if (typeof opts.endIndex === "number") {
            end = this.positionInside(opts.endIndex);
          } else if (opts.index) {
            end = this.positionInside(opts.index + 1);
          }
        }
        if (end.line < start.line || end.line === start.line && end.column <= start.column) {
          end = { column: start.column + 1, line: start.line };
        }
        return { end, start };
      }
      raw(prop, defaultType) {
        let str = new Stringifier();
        return str.raw(this, prop, defaultType);
      }
      remove() {
        if (this.parent) {
          this.parent.removeChild(this);
        }
        this.parent = void 0;
        return this;
      }
      replaceWith(...nodes) {
        if (this.parent) {
          let bookmark = this;
          let foundSelf = false;
          for (let node of nodes) {
            if (node === this) {
              foundSelf = true;
            } else if (foundSelf) {
              this.parent.insertAfter(bookmark, node);
              bookmark = node;
            } else {
              this.parent.insertBefore(bookmark, node);
            }
          }
          if (!foundSelf) {
            this.remove();
          }
        }
        return this;
      }
      root() {
        let result = this;
        while (result.parent && result.parent.type !== "document") {
          result = result.parent;
        }
        return result;
      }
      toJSON(_, inputs) {
        let fixed = {};
        let emitInputs = inputs == null;
        inputs = inputs || /* @__PURE__ */ new Map();
        let inputsNextIndex = 0;
        for (let name in this) {
          if (!Object.prototype.hasOwnProperty.call(this, name)) {
            continue;
          }
          if (name === "parent" || name === "proxyCache")
            continue;
          let value = this[name];
          if (Array.isArray(value)) {
            fixed[name] = value.map((i) => {
              if (typeof i === "object" && i.toJSON) {
                return i.toJSON(null, inputs);
              } else {
                return i;
              }
            });
          } else if (typeof value === "object" && value.toJSON) {
            fixed[name] = value.toJSON(null, inputs);
          } else if (name === "source") {
            let inputId = inputs.get(value.input);
            if (inputId == null) {
              inputId = inputsNextIndex;
              inputs.set(value.input, inputsNextIndex);
              inputsNextIndex++;
            }
            fixed[name] = {
              end: value.end,
              inputId,
              start: value.start
            };
          } else {
            fixed[name] = value;
          }
        }
        if (emitInputs) {
          fixed.inputs = [...inputs.keys()].map((input) => input.toJSON());
        }
        return fixed;
      }
      toProxy() {
        if (!this.proxyCache) {
          this.proxyCache = new Proxy(this, this.getProxyProcessor());
        }
        return this.proxyCache;
      }
      toString(stringifier = stringify2) {
        if (stringifier.stringify)
          stringifier = stringifier.stringify;
        let result = "";
        stringifier(this, (i) => {
          result += i;
        });
        return result;
      }
      warn(result, text, opts) {
        let data = { node: this };
        for (let i in opts)
          data[i] = opts[i];
        return result.warn(text, data);
      }
      get proxyOf() {
        return this;
      }
    };
    module2.exports = Node3;
    Node3.default = Node3;
  }
});

// node_modules/postcss/lib/comment.js
var require_comment = __commonJS({
  "node_modules/postcss/lib/comment.js"(exports, module2) {
    "use strict";
    var Node3 = require_node();
    var Comment2 = class extends Node3 {
      constructor(defaults) {
        super(defaults);
        this.type = "comment";
      }
    };
    module2.exports = Comment2;
    Comment2.default = Comment2;
  }
});

// node_modules/postcss/lib/declaration.js
var require_declaration = __commonJS({
  "node_modules/postcss/lib/declaration.js"(exports, module2) {
    "use strict";
    var Node3 = require_node();
    var Declaration2 = class extends Node3 {
      constructor(defaults) {
        if (defaults && typeof defaults.value !== "undefined" && typeof defaults.value !== "string") {
          defaults = { ...defaults, value: String(defaults.value) };
        }
        super(defaults);
        this.type = "decl";
      }
      get variable() {
        return this.prop.startsWith("--") || this.prop[0] === "$";
      }
    };
    module2.exports = Declaration2;
    Declaration2.default = Declaration2;
  }
});

// node_modules/postcss/lib/container.js
var require_container = __commonJS({
  "node_modules/postcss/lib/container.js"(exports, module2) {
    "use strict";
    var Comment2 = require_comment();
    var Declaration2 = require_declaration();
    var Node3 = require_node();
    var { isClean, my } = require_symbols();
    var AtRule2;
    var parse2;
    var Root2;
    var Rule2;
    function cleanSource(nodes) {
      return nodes.map((i) => {
        if (i.nodes)
          i.nodes = cleanSource(i.nodes);
        delete i.source;
        return i;
      });
    }
    function markTreeDirty(node) {
      node[isClean] = false;
      if (node.proxyOf.nodes) {
        for (let i of node.proxyOf.nodes) {
          markTreeDirty(i);
        }
      }
    }
    var Container2 = class extends Node3 {
      append(...children) {
        for (let child of children) {
          let nodes = this.normalize(child, this.last);
          for (let node of nodes)
            this.proxyOf.nodes.push(node);
        }
        this.markDirty();
        return this;
      }
      cleanRaws(keepBetween) {
        super.cleanRaws(keepBetween);
        if (this.nodes) {
          for (let node of this.nodes)
            node.cleanRaws(keepBetween);
        }
      }
      each(callback) {
        if (!this.proxyOf.nodes)
          return void 0;
        let iterator = this.getIterator();
        let index, result;
        while (this.indexes[iterator] < this.proxyOf.nodes.length) {
          index = this.indexes[iterator];
          result = callback(this.proxyOf.nodes[index], index);
          if (result === false)
            break;
          this.indexes[iterator] += 1;
        }
        delete this.indexes[iterator];
        return result;
      }
      every(condition) {
        return this.nodes.every(condition);
      }
      getIterator() {
        if (!this.lastEach)
          this.lastEach = 0;
        if (!this.indexes)
          this.indexes = {};
        this.lastEach += 1;
        let iterator = this.lastEach;
        this.indexes[iterator] = 0;
        return iterator;
      }
      getProxyProcessor() {
        return {
          get(node, prop) {
            if (prop === "proxyOf") {
              return node;
            } else if (!node[prop]) {
              return node[prop];
            } else if (prop === "each" || typeof prop === "string" && prop.startsWith("walk")) {
              return (...args) => {
                return node[prop](...args.map((i) => {
                  if (typeof i === "function") {
                    return (child, index) => i(child.toProxy(), index);
                  } else {
                    return i;
                  }
                }));
              };
            } else if (prop === "every" || prop === "some") {
              return (cb) => {
                return node[prop]((child, ...other) => cb(child.toProxy(), ...other));
              };
            } else if (prop === "root") {
              return () => node.root().toProxy();
            } else if (prop === "nodes") {
              return node.nodes.map((i) => i.toProxy());
            } else if (prop === "first" || prop === "last") {
              return node[prop].toProxy();
            } else {
              return node[prop];
            }
          },
          set(node, prop, value) {
            if (node[prop] === value)
              return true;
            node[prop] = value;
            if (prop === "name" || prop === "params" || prop === "selector") {
              node.markDirty();
            }
            return true;
          }
        };
      }
      index(child) {
        if (typeof child === "number")
          return child;
        if (child.proxyOf)
          child = child.proxyOf;
        return this.proxyOf.nodes.indexOf(child);
      }
      insertAfter(exist, add) {
        let existIndex = this.index(exist);
        let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();
        existIndex = this.index(exist);
        for (let node of nodes)
          this.proxyOf.nodes.splice(existIndex + 1, 0, node);
        let index;
        for (let id in this.indexes) {
          index = this.indexes[id];
          if (existIndex < index) {
            this.indexes[id] = index + nodes.length;
          }
        }
        this.markDirty();
        return this;
      }
      insertBefore(exist, add) {
        let existIndex = this.index(exist);
        let type = existIndex === 0 ? "prepend" : false;
        let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();
        existIndex = this.index(exist);
        for (let node of nodes)
          this.proxyOf.nodes.splice(existIndex, 0, node);
        let index;
        for (let id in this.indexes) {
          index = this.indexes[id];
          if (existIndex <= index) {
            this.indexes[id] = index + nodes.length;
          }
        }
        this.markDirty();
        return this;
      }
      normalize(nodes, sample) {
        if (typeof nodes === "string") {
          nodes = cleanSource(parse2(nodes).nodes);
        } else if (typeof nodes === "undefined") {
          nodes = [];
        } else if (Array.isArray(nodes)) {
          nodes = nodes.slice(0);
          for (let i of nodes) {
            if (i.parent)
              i.parent.removeChild(i, "ignore");
          }
        } else if (nodes.type === "root" && this.type !== "document") {
          nodes = nodes.nodes.slice(0);
          for (let i of nodes) {
            if (i.parent)
              i.parent.removeChild(i, "ignore");
          }
        } else if (nodes.type) {
          nodes = [nodes];
        } else if (nodes.prop) {
          if (typeof nodes.value === "undefined") {
            throw new Error("Value field is missed in node creation");
          } else if (typeof nodes.value !== "string") {
            nodes.value = String(nodes.value);
          }
          nodes = [new Declaration2(nodes)];
        } else if (nodes.selector || nodes.selectors) {
          nodes = [new Rule2(nodes)];
        } else if (nodes.name) {
          nodes = [new AtRule2(nodes)];
        } else if (nodes.text) {
          nodes = [new Comment2(nodes)];
        } else {
          throw new Error("Unknown node type in node creation");
        }
        let processed = nodes.map((i) => {
          if (!i[my])
            Container2.rebuild(i);
          i = i.proxyOf;
          if (i.parent)
            i.parent.removeChild(i);
          if (i[isClean])
            markTreeDirty(i);
          if (!i.raws)
            i.raws = {};
          if (typeof i.raws.before === "undefined") {
            if (sample && typeof sample.raws.before !== "undefined") {
              i.raws.before = sample.raws.before.replace(/\S/g, "");
            }
          }
          i.parent = this.proxyOf;
          return i;
        });
        return processed;
      }
      prepend(...children) {
        children = children.reverse();
        for (let child of children) {
          let nodes = this.normalize(child, this.first, "prepend").reverse();
          for (let node of nodes)
            this.proxyOf.nodes.unshift(node);
          for (let id in this.indexes) {
            this.indexes[id] = this.indexes[id] + nodes.length;
          }
        }
        this.markDirty();
        return this;
      }
      push(child) {
        child.parent = this;
        this.proxyOf.nodes.push(child);
        return this;
      }
      removeAll() {
        for (let node of this.proxyOf.nodes)
          node.parent = void 0;
        this.proxyOf.nodes = [];
        this.markDirty();
        return this;
      }
      removeChild(child) {
        child = this.index(child);
        this.proxyOf.nodes[child].parent = void 0;
        this.proxyOf.nodes.splice(child, 1);
        let index;
        for (let id in this.indexes) {
          index = this.indexes[id];
          if (index >= child) {
            this.indexes[id] = index - 1;
          }
        }
        this.markDirty();
        return this;
      }
      replaceValues(pattern, opts, callback) {
        if (!callback) {
          callback = opts;
          opts = {};
        }
        this.walkDecls((decl2) => {
          if (opts.props && !opts.props.includes(decl2.prop))
            return;
          if (opts.fast && !decl2.value.includes(opts.fast))
            return;
          decl2.value = decl2.value.replace(pattern, callback);
        });
        this.markDirty();
        return this;
      }
      some(condition) {
        return this.nodes.some(condition);
      }
      walk(callback) {
        return this.each((child, i) => {
          let result;
          try {
            result = callback(child, i);
          } catch (e) {
            throw child.addToError(e);
          }
          if (result !== false && child.walk) {
            result = child.walk(callback);
          }
          return result;
        });
      }
      walkAtRules(name, callback) {
        if (!callback) {
          callback = name;
          return this.walk((child, i) => {
            if (child.type === "atrule") {
              return callback(child, i);
            }
          });
        }
        if (name instanceof RegExp) {
          return this.walk((child, i) => {
            if (child.type === "atrule" && name.test(child.name)) {
              return callback(child, i);
            }
          });
        }
        return this.walk((child, i) => {
          if (child.type === "atrule" && child.name === name) {
            return callback(child, i);
          }
        });
      }
      walkComments(callback) {
        return this.walk((child, i) => {
          if (child.type === "comment") {
            return callback(child, i);
          }
        });
      }
      walkDecls(prop, callback) {
        if (!callback) {
          callback = prop;
          return this.walk((child, i) => {
            if (child.type === "decl") {
              return callback(child, i);
            }
          });
        }
        if (prop instanceof RegExp) {
          return this.walk((child, i) => {
            if (child.type === "decl" && prop.test(child.prop)) {
              return callback(child, i);
            }
          });
        }
        return this.walk((child, i) => {
          if (child.type === "decl" && child.prop === prop) {
            return callback(child, i);
          }
        });
      }
      walkRules(selector, callback) {
        if (!callback) {
          callback = selector;
          return this.walk((child, i) => {
            if (child.type === "rule") {
              return callback(child, i);
            }
          });
        }
        if (selector instanceof RegExp) {
          return this.walk((child, i) => {
            if (child.type === "rule" && selector.test(child.selector)) {
              return callback(child, i);
            }
          });
        }
        return this.walk((child, i) => {
          if (child.type === "rule" && child.selector === selector) {
            return callback(child, i);
          }
        });
      }
      get first() {
        if (!this.proxyOf.nodes)
          return void 0;
        return this.proxyOf.nodes[0];
      }
      get last() {
        if (!this.proxyOf.nodes)
          return void 0;
        return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];
      }
    };
    Container2.registerParse = (dependant) => {
      parse2 = dependant;
    };
    Container2.registerRule = (dependant) => {
      Rule2 = dependant;
    };
    Container2.registerAtRule = (dependant) => {
      AtRule2 = dependant;
    };
    Container2.registerRoot = (dependant) => {
      Root2 = dependant;
    };
    module2.exports = Container2;
    Container2.default = Container2;
    Container2.rebuild = (node) => {
      if (node.type === "atrule") {
        Object.setPrototypeOf(node, AtRule2.prototype);
      } else if (node.type === "rule") {
        Object.setPrototypeOf(node, Rule2.prototype);
      } else if (node.type === "decl") {
        Object.setPrototypeOf(node, Declaration2.prototype);
      } else if (node.type === "comment") {
        Object.setPrototypeOf(node, Comment2.prototype);
      } else if (node.type === "root") {
        Object.setPrototypeOf(node, Root2.prototype);
      }
      node[my] = true;
      if (node.nodes) {
        node.nodes.forEach((child) => {
          Container2.rebuild(child);
        });
      }
    };
  }
});

// node_modules/postcss/lib/at-rule.js
var require_at_rule = __commonJS({
  "node_modules/postcss/lib/at-rule.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var AtRule2 = class extends Container2 {
      constructor(defaults) {
        super(defaults);
        this.type = "atrule";
      }
      append(...children) {
        if (!this.proxyOf.nodes)
          this.nodes = [];
        return super.append(...children);
      }
      prepend(...children) {
        if (!this.proxyOf.nodes)
          this.nodes = [];
        return super.prepend(...children);
      }
    };
    module2.exports = AtRule2;
    AtRule2.default = AtRule2;
    Container2.registerAtRule(AtRule2);
  }
});

// node_modules/postcss/lib/document.js
var require_document = __commonJS({
  "node_modules/postcss/lib/document.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var LazyResult;
    var Processor2;
    var Document2 = class extends Container2 {
      constructor(defaults) {
        super({ type: "document", ...defaults });
        if (!this.nodes) {
          this.nodes = [];
        }
      }
      toResult(opts = {}) {
        let lazy = new LazyResult(new Processor2(), this, opts);
        return lazy.stringify();
      }
    };
    Document2.registerLazyResult = (dependant) => {
      LazyResult = dependant;
    };
    Document2.registerProcessor = (dependant) => {
      Processor2 = dependant;
    };
    module2.exports = Document2;
    Document2.default = Document2;
  }
});

// node_modules/nanoid/non-secure/index.cjs
var require_non_secure = __commonJS({
  "node_modules/nanoid/non-secure/index.cjs"(exports, module2) {
    var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
    var customAlphabet = (alphabet, defaultSize = 21) => {
      return (size = defaultSize) => {
        let id = "";
        let i = size;
        while (i--) {
          id += alphabet[Math.random() * alphabet.length | 0];
        }
        return id;
      };
    };
    var nanoid = (size = 21) => {
      let id = "";
      let i = size;
      while (i--) {
        id += urlAlphabet[Math.random() * 64 | 0];
      }
      return id;
    };
    module2.exports = { nanoid, customAlphabet };
  }
});

// (disabled):node_modules/source-map-js/source-map.js
var require_source_map = __commonJS({
  "(disabled):node_modules/source-map-js/source-map.js"() {
  }
});

// node_modules/postcss/lib/previous-map.js
var require_previous_map = __commonJS({
  "node_modules/postcss/lib/previous-map.js"(exports, module2) {
    "use strict";
    var { existsSync: existsSync2, readFileSync } = require("fs");
    var { dirname, join } = require("path");
    var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
    function fromBase64(str) {
      if (Buffer) {
        return Buffer.from(str, "base64").toString();
      } else {
        return window.atob(str);
      }
    }
    var PreviousMap = class {
      constructor(css, opts) {
        if (opts.map === false)
          return;
        this.loadAnnotation(css);
        this.inline = this.startWith(this.annotation, "data:");
        let prev = opts.map ? opts.map.prev : void 0;
        let text = this.loadMap(opts.from, prev);
        if (!this.mapFile && opts.from) {
          this.mapFile = opts.from;
        }
        if (this.mapFile)
          this.root = dirname(this.mapFile);
        if (text)
          this.text = text;
      }
      consumer() {
        if (!this.consumerCache) {
          this.consumerCache = new SourceMapConsumer(this.text);
        }
        return this.consumerCache;
      }
      decodeInline(text) {
        let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
        let baseUri = /^data:application\/json;base64,/;
        let charsetUri = /^data:application\/json;charset=utf-?8,/;
        let uri = /^data:application\/json,/;
        let uriMatch = text.match(charsetUri) || text.match(uri);
        if (uriMatch) {
          return decodeURIComponent(text.substr(uriMatch[0].length));
        }
        let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri);
        if (baseUriMatch) {
          return fromBase64(text.substr(baseUriMatch[0].length));
        }
        let encoding = text.match(/data:application\/json;([^,]+),/)[1];
        throw new Error("Unsupported source map encoding " + encoding);
      }
      getAnnotationURL(sourceMapString) {
        return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, "").trim();
      }
      isMap(map) {
        if (typeof map !== "object")
          return false;
        return typeof map.mappings === "string" || typeof map._mappings === "string" || Array.isArray(map.sections);
      }
      loadAnnotation(css) {
        let comments = css.match(/\/\*\s*# sourceMappingURL=/g);
        if (!comments)
          return;
        let start = css.lastIndexOf(comments.pop());
        let end = css.indexOf("*/", start);
        if (start > -1 && end > -1) {
          this.annotation = this.getAnnotationURL(css.substring(start, end));
        }
      }
      loadFile(path) {
        this.root = dirname(path);
        if (existsSync2(path)) {
          this.mapFile = path;
          return readFileSync(path, "utf-8").toString().trim();
        }
      }
      loadMap(file, prev) {
        if (prev === false)
          return false;
        if (prev) {
          if (typeof prev === "string") {
            return prev;
          } else if (typeof prev === "function") {
            let prevPath = prev(file);
            if (prevPath) {
              let map = this.loadFile(prevPath);
              if (!map) {
                throw new Error("Unable to load previous source map: " + prevPath.toString());
              }
              return map;
            }
          } else if (prev instanceof SourceMapConsumer) {
            return SourceMapGenerator.fromSourceMap(prev).toString();
          } else if (prev instanceof SourceMapGenerator) {
            return prev.toString();
          } else if (this.isMap(prev)) {
            return JSON.stringify(prev);
          } else {
            throw new Error("Unsupported previous source map format: " + prev.toString());
          }
        } else if (this.inline) {
          return this.decodeInline(this.annotation);
        } else if (this.annotation) {
          let map = this.annotation;
          if (file)
            map = join(dirname(file), map);
          return this.loadFile(map);
        }
      }
      startWith(string, start) {
        if (!string)
          return false;
        return string.substr(0, start.length) === start;
      }
      withContent() {
        return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
      }
    };
    module2.exports = PreviousMap;
    PreviousMap.default = PreviousMap;
  }
});

// node_modules/postcss/lib/input.js
var require_input = __commonJS({
  "node_modules/postcss/lib/input.js"(exports, module2) {
    "use strict";
    var { nanoid } = require_non_secure();
    var { isAbsolute, resolve } = require("path");
    var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
    var { fileURLToPath, pathToFileURL } = require("url");
    var CssSyntaxError2 = require_css_syntax_error();
    var PreviousMap = require_previous_map();
    var terminalHighlight = require_terminal_highlight();
    var fromOffsetCache = Symbol("fromOffsetCache");
    var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
    var pathAvailable = Boolean(resolve && isAbsolute);
    var Input2 = class {
      constructor(css, opts = {}) {
        if (css === null || typeof css === "undefined" || typeof css === "object" && !css.toString) {
          throw new Error(`PostCSS received ${css} instead of CSS string`);
        }
        this.css = css.toString();
        if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
          this.hasBOM = true;
          this.css = this.css.slice(1);
        } else {
          this.hasBOM = false;
        }
        if (opts.from) {
          if (!pathAvailable || /^\w+:\/\//.test(opts.from) || isAbsolute(opts.from)) {
            this.file = opts.from;
          } else {
            this.file = resolve(opts.from);
          }
        }
        if (pathAvailable && sourceMapAvailable) {
          let map = new PreviousMap(this.css, opts);
          if (map.text) {
            this.map = map;
            let file = map.consumer().file;
            if (!this.file && file)
              this.file = this.mapResolve(file);
          }
        }
        if (!this.file) {
          this.id = "<input css " + nanoid(6) + ">";
        }
        if (this.map)
          this.map.file = this.from;
      }
      error(message, line, column, opts = {}) {
        let endColumn, endLine, result;
        if (line && typeof line === "object") {
          let start = line;
          let end = column;
          if (typeof start.offset === "number") {
            let pos = this.fromOffset(start.offset);
            line = pos.line;
            column = pos.col;
          } else {
            line = start.line;
            column = start.column;
          }
          if (typeof end.offset === "number") {
            let pos = this.fromOffset(end.offset);
            endLine = pos.line;
            endColumn = pos.col;
          } else {
            endLine = end.line;
            endColumn = end.column;
          }
        } else if (!column) {
          let pos = this.fromOffset(line);
          line = pos.line;
          column = pos.col;
        }
        let origin = this.origin(line, column, endLine, endColumn);
        if (origin) {
          result = new CssSyntaxError2(message, origin.endLine === void 0 ? origin.line : { column: origin.column, line: origin.line }, origin.endLine === void 0 ? origin.column : { column: origin.endColumn, line: origin.endLine }, origin.source, origin.file, opts.plugin);
        } else {
          result = new CssSyntaxError2(message, endLine === void 0 ? line : { column, line }, endLine === void 0 ? column : { column: endColumn, line: endLine }, this.css, this.file, opts.plugin);
        }
        result.input = { column, endColumn, endLine, line, source: this.css };
        if (this.file) {
          if (pathToFileURL) {
            result.input.url = pathToFileURL(this.file).toString();
          }
          result.input.file = this.file;
        }
        return result;
      }
      fromOffset(offset) {
        let lastLine, lineToIndex;
        if (!this[fromOffsetCache]) {
          let lines = this.css.split("\n");
          lineToIndex = new Array(lines.length);
          let prevIndex = 0;
          for (let i = 0, l = lines.length; i < l; i++) {
            lineToIndex[i] = prevIndex;
            prevIndex += lines[i].length + 1;
          }
          this[fromOffsetCache] = lineToIndex;
        } else {
          lineToIndex = this[fromOffsetCache];
        }
        lastLine = lineToIndex[lineToIndex.length - 1];
        let min = 0;
        if (offset >= lastLine) {
          min = lineToIndex.length - 1;
        } else {
          let max = lineToIndex.length - 2;
          let mid;
          while (min < max) {
            mid = min + (max - min >> 1);
            if (offset < lineToIndex[mid]) {
              max = mid - 1;
            } else if (offset >= lineToIndex[mid + 1]) {
              min = mid + 1;
            } else {
              min = mid;
              break;
            }
          }
        }
        return {
          col: offset - lineToIndex[min] + 1,
          line: min + 1
        };
      }
      mapResolve(file) {
        if (/^\w+:\/\//.test(file)) {
          return file;
        }
        return resolve(this.map.consumer().sourceRoot || this.map.root || ".", file);
      }
      origin(line, column, endLine, endColumn) {
        if (!this.map)
          return false;
        let consumer = this.map.consumer();
        let from = consumer.originalPositionFor({ column, line });
        if (!from.source)
          return false;
        let to;
        if (typeof endLine === "number") {
          to = consumer.originalPositionFor({ column: endColumn, line: endLine });
        }
        let fromUrl;
        if (isAbsolute(from.source)) {
          fromUrl = pathToFileURL(from.source);
        } else {
          fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile));
        }
        let result = {
          column: from.column,
          endColumn: to && to.column,
          endLine: to && to.line,
          line: from.line,
          url: fromUrl.toString()
        };
        if (fromUrl.protocol === "file:") {
          if (fileURLToPath) {
            result.file = fileURLToPath(fromUrl);
          } else {
            throw new Error(`file: protocol is not available in this PostCSS build`);
          }
        }
        let source = consumer.sourceContentFor(from.source);
        if (source)
          result.source = source;
        return result;
      }
      toJSON() {
        let json = {};
        for (let name of ["hasBOM", "css", "file", "id"]) {
          if (this[name] != null) {
            json[name] = this[name];
          }
        }
        if (this.map) {
          json.map = { ...this.map };
          if (json.map.consumerCache) {
            json.map.consumerCache = void 0;
          }
        }
        return json;
      }
      get from() {
        return this.file || this.id;
      }
    };
    module2.exports = Input2;
    Input2.default = Input2;
    if (terminalHighlight && terminalHighlight.registerInput) {
      terminalHighlight.registerInput(Input2);
    }
  }
});

// node_modules/postcss/lib/root.js
var require_root = __commonJS({
  "node_modules/postcss/lib/root.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var LazyResult;
    var Processor2;
    var Root2 = class extends Container2 {
      constructor(defaults) {
        super(defaults);
        this.type = "root";
        if (!this.nodes)
          this.nodes = [];
      }
      normalize(child, sample, type) {
        let nodes = super.normalize(child);
        if (sample) {
          if (type === "prepend") {
            if (this.nodes.length > 1) {
              sample.raws.before = this.nodes[1].raws.before;
            } else {
              delete sample.raws.before;
            }
          } else if (this.first !== sample) {
            for (let node of nodes) {
              node.raws.before = sample.raws.before;
            }
          }
        }
        return nodes;
      }
      removeChild(child, ignore) {
        let index = this.index(child);
        if (!ignore && index === 0 && this.nodes.length > 1) {
          this.nodes[1].raws.before = this.nodes[index].raws.before;
        }
        return super.removeChild(child);
      }
      toResult(opts = {}) {
        let lazy = new LazyResult(new Processor2(), this, opts);
        return lazy.stringify();
      }
    };
    Root2.registerLazyResult = (dependant) => {
      LazyResult = dependant;
    };
    Root2.registerProcessor = (dependant) => {
      Processor2 = dependant;
    };
    module2.exports = Root2;
    Root2.default = Root2;
    Container2.registerRoot(Root2);
  }
});

// node_modules/postcss/lib/list.js
var require_list = __commonJS({
  "node_modules/postcss/lib/list.js"(exports, module2) {
    "use strict";
    var list2 = {
      comma(string) {
        return list2.split(string, [","], true);
      },
      space(string) {
        let spaces = [" ", "\n", "	"];
        return list2.split(string, spaces);
      },
      split(string, separators, last2) {
        let array = [];
        let current = "";
        let split = false;
        let func = 0;
        let inQuote = false;
        let prevQuote = "";
        let escape2 = false;
        for (let letter of string) {
          if (escape2) {
            escape2 = false;
          } else if (letter === "\\") {
            escape2 = true;
          } else if (inQuote) {
            if (letter === prevQuote) {
              inQuote = false;
            }
          } else if (letter === '"' || letter === "'") {
            inQuote = true;
            prevQuote = letter;
          } else if (letter === "(") {
            func += 1;
          } else if (letter === ")") {
            if (func > 0)
              func -= 1;
          } else if (func === 0) {
            if (separators.includes(letter))
              split = true;
          }
          if (split) {
            if (current !== "")
              array.push(current.trim());
            current = "";
            split = false;
          } else {
            current += letter;
          }
        }
        if (last2 || current !== "")
          array.push(current.trim());
        return array;
      }
    };
    module2.exports = list2;
    list2.default = list2;
  }
});

// node_modules/postcss/lib/rule.js
var require_rule = __commonJS({
  "node_modules/postcss/lib/rule.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var list2 = require_list();
    var Rule2 = class extends Container2 {
      constructor(defaults) {
        super(defaults);
        this.type = "rule";
        if (!this.nodes)
          this.nodes = [];
      }
      get selectors() {
        return list2.comma(this.selector);
      }
      set selectors(values) {
        let match = this.selector ? this.selector.match(/,\s*/) : null;
        let sep = match ? match[0] : "," + this.raw("between", "beforeOpen");
        this.selector = values.join(sep);
      }
    };
    module2.exports = Rule2;
    Rule2.default = Rule2;
    Container2.registerRule(Rule2);
  }
});

// node_modules/postcss/lib/fromJSON.js
var require_fromJSON = __commonJS({
  "node_modules/postcss/lib/fromJSON.js"(exports, module2) {
    "use strict";
    var AtRule2 = require_at_rule();
    var Comment2 = require_comment();
    var Declaration2 = require_declaration();
    var Input2 = require_input();
    var PreviousMap = require_previous_map();
    var Root2 = require_root();
    var Rule2 = require_rule();
    function fromJSON2(json, inputs) {
      if (Array.isArray(json))
        return json.map((n) => fromJSON2(n));
      let { inputs: ownInputs, ...defaults } = json;
      if (ownInputs) {
        inputs = [];
        for (let input of ownInputs) {
          let inputHydrated = { ...input, __proto__: Input2.prototype };
          if (inputHydrated.map) {
            inputHydrated.map = {
              ...inputHydrated.map,
              __proto__: PreviousMap.prototype
            };
          }
          inputs.push(inputHydrated);
        }
      }
      if (defaults.nodes) {
        defaults.nodes = json.nodes.map((n) => fromJSON2(n, inputs));
      }
      if (defaults.source) {
        let { inputId, ...source } = defaults.source;
        defaults.source = source;
        if (inputId != null) {
          defaults.source.input = inputs[inputId];
        }
      }
      if (defaults.type === "root") {
        return new Root2(defaults);
      } else if (defaults.type === "decl") {
        return new Declaration2(defaults);
      } else if (defaults.type === "rule") {
        return new Rule2(defaults);
      } else if (defaults.type === "comment") {
        return new Comment2(defaults);
      } else if (defaults.type === "atrule") {
        return new AtRule2(defaults);
      } else {
        throw new Error("Unknown node type: " + json.type);
      }
    }
    module2.exports = fromJSON2;
    fromJSON2.default = fromJSON2;
  }
});

// node_modules/postcss/lib/map-generator.js
var require_map_generator = __commonJS({
  "node_modules/postcss/lib/map-generator.js"(exports, module2) {
    "use strict";
    var { dirname, relative, resolve, sep } = require("path");
    var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
    var { pathToFileURL } = require("url");
    var Input2 = require_input();
    var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
    var pathAvailable = Boolean(dirname && resolve && relative && sep);
    var MapGenerator = class {
      constructor(stringify2, root2, opts, cssString) {
        this.stringify = stringify2;
        this.mapOpts = opts.map || {};
        this.root = root2;
        this.opts = opts;
        this.css = cssString;
        this.originalCSS = cssString;
        this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;
        this.memoizedFileURLs = /* @__PURE__ */ new Map();
        this.memoizedPaths = /* @__PURE__ */ new Map();
        this.memoizedURLs = /* @__PURE__ */ new Map();
      }
      addAnnotation() {
        let content;
        if (this.isInline()) {
          content = "data:application/json;base64," + this.toBase64(this.map.toString());
        } else if (typeof this.mapOpts.annotation === "string") {
          content = this.mapOpts.annotation;
        } else if (typeof this.mapOpts.annotation === "function") {
          content = this.mapOpts.annotation(this.opts.to, this.root);
        } else {
          content = this.outputFile() + ".map";
        }
        let eol = "\n";
        if (this.css.includes("\r\n"))
          eol = "\r\n";
        this.css += eol + "/*# sourceMappingURL=" + content + " */";
      }
      applyPrevMaps() {
        for (let prev of this.previous()) {
          let from = this.toUrl(this.path(prev.file));
          let root2 = prev.root || dirname(prev.file);
          let map;
          if (this.mapOpts.sourcesContent === false) {
            map = new SourceMapConsumer(prev.text);
            if (map.sourcesContent) {
              map.sourcesContent = null;
            }
          } else {
            map = prev.consumer();
          }
          this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));
        }
      }
      clearAnnotation() {
        if (this.mapOpts.annotation === false)
          return;
        if (this.root) {
          let node;
          for (let i = this.root.nodes.length - 1; i >= 0; i--) {
            node = this.root.nodes[i];
            if (node.type !== "comment")
              continue;
            if (node.text.startsWith("# sourceMappingURL=")) {
              this.root.removeChild(i);
            }
          }
        } else if (this.css) {
          this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, "");
        }
      }
      generate() {
        this.clearAnnotation();
        if (pathAvailable && sourceMapAvailable && this.isMap()) {
          return this.generateMap();
        } else {
          let result = "";
          this.stringify(this.root, (i) => {
            result += i;
          });
          return [result];
        }
      }
      generateMap() {
        if (this.root) {
          this.generateString();
        } else if (this.previous().length === 1) {
          let prev = this.previous()[0].consumer();
          prev.file = this.outputFile();
          this.map = SourceMapGenerator.fromSourceMap(prev, {
            ignoreInvalidMapping: true
          });
        } else {
          this.map = new SourceMapGenerator({
            file: this.outputFile(),
            ignoreInvalidMapping: true
          });
          this.map.addMapping({
            generated: { column: 0, line: 1 },
            original: { column: 0, line: 1 },
            source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>"
          });
        }
        if (this.isSourcesContent())
          this.setSourcesContent();
        if (this.root && this.previous().length > 0)
          this.applyPrevMaps();
        if (this.isAnnotation())
          this.addAnnotation();
        if (this.isInline()) {
          return [this.css];
        } else {
          return [this.css, this.map];
        }
      }
      generateString() {
        this.css = "";
        this.map = new SourceMapGenerator({
          file: this.outputFile(),
          ignoreInvalidMapping: true
        });
        let line = 1;
        let column = 1;
        let noSource = "<no source>";
        let mapping = {
          generated: { column: 0, line: 0 },
          original: { column: 0, line: 0 },
          source: ""
        };
        let last2, lines;
        this.stringify(this.root, (str, node, type) => {
          this.css += str;
          if (node && type !== "end") {
            mapping.generated.line = line;
            mapping.generated.column = column - 1;
            if (node.source && node.source.start) {
              mapping.source = this.sourcePath(node);
              mapping.original.line = node.source.start.line;
              mapping.original.column = node.source.start.column - 1;
              this.map.addMapping(mapping);
            } else {
              mapping.source = noSource;
              mapping.original.line = 1;
              mapping.original.column = 0;
              this.map.addMapping(mapping);
            }
          }
          lines = str.match(/\n/g);
          if (lines) {
            line += lines.length;
            last2 = str.lastIndexOf("\n");
            column = str.length - last2;
          } else {
            column += str.length;
          }
          if (node && type !== "start") {
            let p = node.parent || { raws: {} };
            let childless = node.type === "decl" || node.type === "atrule" && !node.nodes;
            if (!childless || node !== p.last || p.raws.semicolon) {
              if (node.source && node.source.end) {
                mapping.source = this.sourcePath(node);
                mapping.original.line = node.source.end.line;
                mapping.original.column = node.source.end.column - 1;
                mapping.generated.line = line;
                mapping.generated.column = column - 2;
                this.map.addMapping(mapping);
              } else {
                mapping.source = noSource;
                mapping.original.line = 1;
                mapping.original.column = 0;
                mapping.generated.line = line;
                mapping.generated.column = column - 1;
                this.map.addMapping(mapping);
              }
            }
          }
        });
      }
      isAnnotation() {
        if (this.isInline()) {
          return true;
        }
        if (typeof this.mapOpts.annotation !== "undefined") {
          return this.mapOpts.annotation;
        }
        if (this.previous().length) {
          return this.previous().some((i) => i.annotation);
        }
        return true;
      }
      isInline() {
        if (typeof this.mapOpts.inline !== "undefined") {
          return this.mapOpts.inline;
        }
        let annotation = this.mapOpts.annotation;
        if (typeof annotation !== "undefined" && annotation !== true) {
          return false;
        }
        if (this.previous().length) {
          return this.previous().some((i) => i.inline);
        }
        return true;
      }
      isMap() {
        if (typeof this.opts.map !== "undefined") {
          return !!this.opts.map;
        }
        return this.previous().length > 0;
      }
      isSourcesContent() {
        if (typeof this.mapOpts.sourcesContent !== "undefined") {
          return this.mapOpts.sourcesContent;
        }
        if (this.previous().length) {
          return this.previous().some((i) => i.withContent());
        }
        return true;
      }
      outputFile() {
        if (this.opts.to) {
          return this.path(this.opts.to);
        } else if (this.opts.from) {
          return this.path(this.opts.from);
        } else {
          return "to.css";
        }
      }
      path(file) {
        if (this.mapOpts.absolute)
          return file;
        if (file.charCodeAt(0) === 60)
          return file;
        if (/^\w+:\/\//.test(file))
          return file;
        let cached = this.memoizedPaths.get(file);
        if (cached)
          return cached;
        let from = this.opts.to ? dirname(this.opts.to) : ".";
        if (typeof this.mapOpts.annotation === "string") {
          from = dirname(resolve(from, this.mapOpts.annotation));
        }
        let path = relative(from, file);
        this.memoizedPaths.set(file, path);
        return path;
      }
      previous() {
        if (!this.previousMaps) {
          this.previousMaps = [];
          if (this.root) {
            this.root.walk((node) => {
              if (node.source && node.source.input.map) {
                let map = node.source.input.map;
                if (!this.previousMaps.includes(map)) {
                  this.previousMaps.push(map);
                }
              }
            });
          } else {
            let input = new Input2(this.originalCSS, this.opts);
            if (input.map)
              this.previousMaps.push(input.map);
          }
        }
        return this.previousMaps;
      }
      setSourcesContent() {
        let already = {};
        if (this.root) {
          this.root.walk((node) => {
            if (node.source) {
              let from = node.source.input.from;
              if (from && !already[from]) {
                already[from] = true;
                let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));
                this.map.setSourceContent(fromUrl, node.source.input.css);
              }
            }
          });
        } else if (this.css) {
          let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>";
          this.map.setSourceContent(from, this.css);
        }
      }
      sourcePath(node) {
        if (this.mapOpts.from) {
          return this.toUrl(this.mapOpts.from);
        } else if (this.usesFileUrls) {
          return this.toFileUrl(node.source.input.from);
        } else {
          return this.toUrl(this.path(node.source.input.from));
        }
      }
      toBase64(str) {
        if (Buffer) {
          return Buffer.from(str).toString("base64");
        } else {
          return window.btoa(unescape(encodeURIComponent(str)));
        }
      }
      toFileUrl(path) {
        let cached = this.memoizedFileURLs.get(path);
        if (cached)
          return cached;
        if (pathToFileURL) {
          let fileURL = pathToFileURL(path).toString();
          this.memoizedFileURLs.set(path, fileURL);
          return fileURL;
        } else {
          throw new Error("`map.absolute` option is not available in this PostCSS build");
        }
      }
      toUrl(path) {
        let cached = this.memoizedURLs.get(path);
        if (cached)
          return cached;
        if (sep === "\\") {
          path = path.replace(/\\/g, "/");
        }
        let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);
        this.memoizedURLs.set(path, url);
        return url;
      }
    };
    module2.exports = MapGenerator;
  }
});

// node_modules/postcss/lib/tokenize.js
var require_tokenize = __commonJS({
  "node_modules/postcss/lib/tokenize.js"(exports, module2) {
    "use strict";
    var SINGLE_QUOTE = "'".charCodeAt(0);
    var DOUBLE_QUOTE = '"'.charCodeAt(0);
    var BACKSLASH = "\\".charCodeAt(0);
    var SLASH = "/".charCodeAt(0);
    var NEWLINE = "\n".charCodeAt(0);
    var SPACE = " ".charCodeAt(0);
    var FEED = "\f".charCodeAt(0);
    var TAB = "	".charCodeAt(0);
    var CR = "\r".charCodeAt(0);
    var OPEN_SQUARE = "[".charCodeAt(0);
    var CLOSE_SQUARE = "]".charCodeAt(0);
    var OPEN_PARENTHESES = "(".charCodeAt(0);
    var CLOSE_PARENTHESES = ")".charCodeAt(0);
    var OPEN_CURLY = "{".charCodeAt(0);
    var CLOSE_CURLY = "}".charCodeAt(0);
    var SEMICOLON = ";".charCodeAt(0);
    var ASTERISK = "*".charCodeAt(0);
    var COLON = ":".charCodeAt(0);
    var AT = "@".charCodeAt(0);
    var RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g;
    var RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g;
    var RE_BAD_BRACKET = /.[\r\n"'(/\\]/;
    var RE_HEX_ESCAPE = /[\da-f]/i;
    module2.exports = function tokenizer(input, options = {}) {
      let css = input.css.valueOf();
      let ignore = options.ignoreErrors;
      let code, content, escape2, next, quote;
      let currentToken, escaped, escapePos, n, prev;
      let length = css.length;
      let pos = 0;
      let buffer = [];
      let returned = [];
      function position() {
        return pos;
      }
      function unclosed(what) {
        throw input.error("Unclosed " + what, pos);
      }
      function endOfFile() {
        return returned.length === 0 && pos >= length;
      }
      function nextToken(opts) {
        if (returned.length)
          return returned.pop();
        if (pos >= length)
          return;
        let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;
        code = css.charCodeAt(pos);
        switch (code) {
          case NEWLINE:
          case SPACE:
          case TAB:
          case CR:
          case FEED: {
            next = pos;
            do {
              next += 1;
              code = css.charCodeAt(next);
            } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
            currentToken = ["space", css.slice(pos, next)];
            pos = next - 1;
            break;
          }
          case OPEN_SQUARE:
          case CLOSE_SQUARE:
          case OPEN_CURLY:
          case CLOSE_CURLY:
          case COLON:
          case SEMICOLON:
          case CLOSE_PARENTHESES: {
            let controlChar = String.fromCharCode(code);
            currentToken = [controlChar, controlChar, pos];
            break;
          }
          case OPEN_PARENTHESES: {
            prev = buffer.length ? buffer.pop()[1] : "";
            n = css.charCodeAt(pos + 1);
            if (prev === "url" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
              next = pos;
              do {
                escaped = false;
                next = css.indexOf(")", next + 1);
                if (next === -1) {
                  if (ignore || ignoreUnclosed) {
                    next = pos;
                    break;
                  } else {
                    unclosed("bracket");
                  }
                }
                escapePos = next;
                while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
                  escapePos -= 1;
                  escaped = !escaped;
                }
              } while (escaped);
              currentToken = ["brackets", css.slice(pos, next + 1), pos, next];
              pos = next;
            } else {
              next = css.indexOf(")", pos + 1);
              content = css.slice(pos, next + 1);
              if (next === -1 || RE_BAD_BRACKET.test(content)) {
                currentToken = ["(", "(", pos];
              } else {
                currentToken = ["brackets", content, pos, next];
                pos = next;
              }
            }
            break;
          }
          case SINGLE_QUOTE:
          case DOUBLE_QUOTE: {
            quote = code === SINGLE_QUOTE ? "'" : '"';
            next = pos;
            do {
              escaped = false;
              next = css.indexOf(quote, next + 1);
              if (next === -1) {
                if (ignore || ignoreUnclosed) {
                  next = pos + 1;
                  break;
                } else {
                  unclosed("string");
                }
              }
              escapePos = next;
              while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
                escapePos -= 1;
                escaped = !escaped;
              }
            } while (escaped);
            currentToken = ["string", css.slice(pos, next + 1), pos, next];
            pos = next;
            break;
          }
          case AT: {
            RE_AT_END.lastIndex = pos + 1;
            RE_AT_END.test(css);
            if (RE_AT_END.lastIndex === 0) {
              next = css.length - 1;
            } else {
              next = RE_AT_END.lastIndex - 2;
            }
            currentToken = ["at-word", css.slice(pos, next + 1), pos, next];
            pos = next;
            break;
          }
          case BACKSLASH: {
            next = pos;
            escape2 = true;
            while (css.charCodeAt(next + 1) === BACKSLASH) {
              next += 1;
              escape2 = !escape2;
            }
            code = css.charCodeAt(next + 1);
            if (escape2 && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
              next += 1;
              if (RE_HEX_ESCAPE.test(css.charAt(next))) {
                while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
                  next += 1;
                }
                if (css.charCodeAt(next + 1) === SPACE) {
                  next += 1;
                }
              }
            }
            currentToken = ["word", css.slice(pos, next + 1), pos, next];
            pos = next;
            break;
          }
          default: {
            if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
              next = css.indexOf("*/", pos + 2) + 1;
              if (next === 0) {
                if (ignore || ignoreUnclosed) {
                  next = css.length;
                } else {
                  unclosed("comment");
                }
              }
              currentToken = ["comment", css.slice(pos, next + 1), pos, next];
              pos = next;
            } else {
              RE_WORD_END.lastIndex = pos + 1;
              RE_WORD_END.test(css);
              if (RE_WORD_END.lastIndex === 0) {
                next = css.length - 1;
              } else {
                next = RE_WORD_END.lastIndex - 2;
              }
              currentToken = ["word", css.slice(pos, next + 1), pos, next];
              buffer.push(currentToken);
              pos = next;
            }
            break;
          }
        }
        pos++;
        return currentToken;
      }
      function back(token) {
        returned.push(token);
      }
      return {
        back,
        endOfFile,
        nextToken,
        position
      };
    };
  }
});

// node_modules/postcss/lib/parser.js
var require_parser = __commonJS({
  "node_modules/postcss/lib/parser.js"(exports, module2) {
    "use strict";
    var AtRule2 = require_at_rule();
    var Comment2 = require_comment();
    var Declaration2 = require_declaration();
    var Root2 = require_root();
    var Rule2 = require_rule();
    var tokenizer = require_tokenize();
    var SAFE_COMMENT_NEIGHBOR = {
      empty: true,
      space: true
    };
    function findLastWithPosition(tokens) {
      for (let i = tokens.length - 1; i >= 0; i--) {
        let token = tokens[i];
        let pos = token[3] || token[2];
        if (pos)
          return pos;
      }
    }
    var Parser = class {
      constructor(input) {
        this.input = input;
        this.root = new Root2();
        this.current = this.root;
        this.spaces = "";
        this.semicolon = false;
        this.createTokenizer();
        this.root.source = { input, start: { column: 1, line: 1, offset: 0 } };
      }
      atrule(token) {
        let node = new AtRule2();
        node.name = token[1].slice(1);
        if (node.name === "") {
          this.unnamedAtrule(node, token);
        }
        this.init(node, token[2]);
        let type;
        let prev;
        let shift;
        let last2 = false;
        let open = false;
        let params = [];
        let brackets = [];
        while (!this.tokenizer.endOfFile()) {
          token = this.tokenizer.nextToken();
          type = token[0];
          if (type === "(" || type === "[") {
            brackets.push(type === "(" ? ")" : "]");
          } else if (type === "{" && brackets.length > 0) {
            brackets.push("}");
          } else if (type === brackets[brackets.length - 1]) {
            brackets.pop();
          }
          if (brackets.length === 0) {
            if (type === ";") {
              node.source.end = this.getPosition(token[2]);
              node.source.end.offset++;
              this.semicolon = true;
              break;
            } else if (type === "{") {
              open = true;
              break;
            } else if (type === "}") {
              if (params.length > 0) {
                shift = params.length - 1;
                prev = params[shift];
                while (prev && prev[0] === "space") {
                  prev = params[--shift];
                }
                if (prev) {
                  node.source.end = this.getPosition(prev[3] || prev[2]);
                  node.source.end.offset++;
                }
              }
              this.end(token);
              break;
            } else {
              params.push(token);
            }
          } else {
            params.push(token);
          }
          if (this.tokenizer.endOfFile()) {
            last2 = true;
            break;
          }
        }
        node.raws.between = this.spacesAndCommentsFromEnd(params);
        if (params.length) {
          node.raws.afterName = this.spacesAndCommentsFromStart(params);
          this.raw(node, "params", params);
          if (last2) {
            token = params[params.length - 1];
            node.source.end = this.getPosition(token[3] || token[2]);
            node.source.end.offset++;
            this.spaces = node.raws.between;
            node.raws.between = "";
          }
        } else {
          node.raws.afterName = "";
          node.params = "";
        }
        if (open) {
          node.nodes = [];
          this.current = node;
        }
      }
      checkMissedSemicolon(tokens) {
        let colon = this.colon(tokens);
        if (colon === false)
          return;
        let founded = 0;
        let token;
        for (let j = colon - 1; j >= 0; j--) {
          token = tokens[j];
          if (token[0] !== "space") {
            founded += 1;
            if (founded === 2)
              break;
          }
        }
        throw this.input.error("Missed semicolon", token[0] === "word" ? token[3] + 1 : token[2]);
      }
      colon(tokens) {
        let brackets = 0;
        let prev, token, type;
        for (let [i, element] of tokens.entries()) {
          token = element;
          type = token[0];
          if (type === "(") {
            brackets += 1;
          }
          if (type === ")") {
            brackets -= 1;
          }
          if (brackets === 0 && type === ":") {
            if (!prev) {
              this.doubleColon(token);
            } else if (prev[0] === "word" && prev[1] === "progid") {
              continue;
            } else {
              return i;
            }
          }
          prev = token;
        }
        return false;
      }
      comment(token) {
        let node = new Comment2();
        this.init(node, token[2]);
        node.source.end = this.getPosition(token[3] || token[2]);
        node.source.end.offset++;
        let text = token[1].slice(2, -2);
        if (/^\s*$/.test(text)) {
          node.text = "";
          node.raws.left = text;
          node.raws.right = "";
        } else {
          let match = text.match(/^(\s*)([^]*\S)(\s*)$/);
          node.text = match[2];
          node.raws.left = match[1];
          node.raws.right = match[3];
        }
      }
      createTokenizer() {
        this.tokenizer = tokenizer(this.input);
      }
      decl(tokens, customProperty) {
        let node = new Declaration2();
        this.init(node, tokens[0][2]);
        let last2 = tokens[tokens.length - 1];
        if (last2[0] === ";") {
          this.semicolon = true;
          tokens.pop();
        }
        node.source.end = this.getPosition(last2[3] || last2[2] || findLastWithPosition(tokens));
        node.source.end.offset++;
        while (tokens[0][0] !== "word") {
          if (tokens.length === 1)
            this.unknownWord(tokens);
          node.raws.before += tokens.shift()[1];
        }
        node.source.start = this.getPosition(tokens[0][2]);
        node.prop = "";
        while (tokens.length) {
          let type = tokens[0][0];
          if (type === ":" || type === "space" || type === "comment") {
            break;
          }
          node.prop += tokens.shift()[1];
        }
        node.raws.between = "";
        let token;
        while (tokens.length) {
          token = tokens.shift();
          if (token[0] === ":") {
            node.raws.between += token[1];
            break;
          } else {
            if (token[0] === "word" && /\w/.test(token[1])) {
              this.unknownWord([token]);
            }
            node.raws.between += token[1];
          }
        }
        if (node.prop[0] === "_" || node.prop[0] === "*") {
          node.raws.before += node.prop[0];
          node.prop = node.prop.slice(1);
        }
        let firstSpaces = [];
        let next;
        while (tokens.length) {
          next = tokens[0][0];
          if (next !== "space" && next !== "comment")
            break;
          firstSpaces.push(tokens.shift());
        }
        this.precheckMissedSemicolon(tokens);
        for (let i = tokens.length - 1; i >= 0; i--) {
          token = tokens[i];
          if (token[1].toLowerCase() === "!important") {
            node.important = true;
            let string = this.stringFrom(tokens, i);
            string = this.spacesFromEnd(tokens) + string;
            if (string !== " !important")
              node.raws.important = string;
            break;
          } else if (token[1].toLowerCase() === "important") {
            let cache = tokens.slice(0);
            let str = "";
            for (let j = i; j > 0; j--) {
              let type = cache[j][0];
              if (str.trim().startsWith("!") && type !== "space") {
                break;
              }
              str = cache.pop()[1] + str;
            }
            if (str.trim().startsWith("!")) {
              node.important = true;
              node.raws.important = str;
              tokens = cache;
            }
          }
          if (token[0] !== "space" && token[0] !== "comment") {
            break;
          }
        }
        let hasWord = tokens.some((i) => i[0] !== "space" && i[0] !== "comment");
        if (hasWord) {
          node.raws.between += firstSpaces.map((i) => i[1]).join("");
          firstSpaces = [];
        }
        this.raw(node, "value", firstSpaces.concat(tokens), customProperty);
        if (node.value.includes(":") && !customProperty) {
          this.checkMissedSemicolon(tokens);
        }
      }
      doubleColon(token) {
        throw this.input.error("Double colon", { offset: token[2] }, { offset: token[2] + token[1].length });
      }
      emptyRule(token) {
        let node = new Rule2();
        this.init(node, token[2]);
        node.selector = "";
        node.raws.between = "";
        this.current = node;
      }
      end(token) {
        if (this.current.nodes && this.current.nodes.length) {
          this.current.raws.semicolon = this.semicolon;
        }
        this.semicolon = false;
        this.current.raws.after = (this.current.raws.after || "") + this.spaces;
        this.spaces = "";
        if (this.current.parent) {
          this.current.source.end = this.getPosition(token[2]);
          this.current.source.end.offset++;
          this.current = this.current.parent;
        } else {
          this.unexpectedClose(token);
        }
      }
      endFile() {
        if (this.current.parent)
          this.unclosedBlock();
        if (this.current.nodes && this.current.nodes.length) {
          this.current.raws.semicolon = this.semicolon;
        }
        this.current.raws.after = (this.current.raws.after || "") + this.spaces;
        this.root.source.end = this.getPosition(this.tokenizer.position());
      }
      freeSemicolon(token) {
        this.spaces += token[1];
        if (this.current.nodes) {
          let prev = this.current.nodes[this.current.nodes.length - 1];
          if (prev && prev.type === "rule" && !prev.raws.ownSemicolon) {
            prev.raws.ownSemicolon = this.spaces;
            this.spaces = "";
          }
        }
      }
      getPosition(offset) {
        let pos = this.input.fromOffset(offset);
        return {
          column: pos.col,
          line: pos.line,
          offset
        };
      }
      init(node, offset) {
        this.current.push(node);
        node.source = {
          input: this.input,
          start: this.getPosition(offset)
        };
        node.raws.before = this.spaces;
        this.spaces = "";
        if (node.type !== "comment")
          this.semicolon = false;
      }
      other(start) {
        let end = false;
        let type = null;
        let colon = false;
        let bracket = null;
        let brackets = [];
        let customProperty = start[1].startsWith("--");
        let tokens = [];
        let token = start;
        while (token) {
          type = token[0];
          tokens.push(token);
          if (type === "(" || type === "[") {
            if (!bracket)
              bracket = token;
            brackets.push(type === "(" ? ")" : "]");
          } else if (customProperty && colon && type === "{") {
            if (!bracket)
              bracket = token;
            brackets.push("}");
          } else if (brackets.length === 0) {
            if (type === ";") {
              if (colon) {
                this.decl(tokens, customProperty);
                return;
              } else {
                break;
              }
            } else if (type === "{") {
              this.rule(tokens);
              return;
            } else if (type === "}") {
              this.tokenizer.back(tokens.pop());
              end = true;
              break;
            } else if (type === ":") {
              colon = true;
            }
          } else if (type === brackets[brackets.length - 1]) {
            brackets.pop();
            if (brackets.length === 0)
              bracket = null;
          }
          token = this.tokenizer.nextToken();
        }
        if (this.tokenizer.endOfFile())
          end = true;
        if (brackets.length > 0)
          this.unclosedBracket(bracket);
        if (end && colon) {
          if (!customProperty) {
            while (tokens.length) {
              token = tokens[tokens.length - 1][0];
              if (token !== "space" && token !== "comment")
                break;
              this.tokenizer.back(tokens.pop());
            }
          }
          this.decl(tokens, customProperty);
        } else {
          this.unknownWord(tokens);
        }
      }
      parse() {
        let token;
        while (!this.tokenizer.endOfFile()) {
          token = this.tokenizer.nextToken();
          switch (token[0]) {
            case "space":
              this.spaces += token[1];
              break;
            case ";":
              this.freeSemicolon(token);
              break;
            case "}":
              this.end(token);
              break;
            case "comment":
              this.comment(token);
              break;
            case "at-word":
              this.atrule(token);
              break;
            case "{":
              this.emptyRule(token);
              break;
            default:
              this.other(token);
              break;
          }
        }
        this.endFile();
      }
      precheckMissedSemicolon() {
      }
      raw(node, prop, tokens, customProperty) {
        let token, type;
        let length = tokens.length;
        let value = "";
        let clean = true;
        let next, prev;
        for (let i = 0; i < length; i += 1) {
          token = tokens[i];
          type = token[0];
          if (type === "space" && i === length - 1 && !customProperty) {
            clean = false;
          } else if (type === "comment") {
            prev = tokens[i - 1] ? tokens[i - 1][0] : "empty";
            next = tokens[i + 1] ? tokens[i + 1][0] : "empty";
            if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
              if (value.slice(-1) === ",") {
                clean = false;
              } else {
                value += token[1];
              }
            } else {
              clean = false;
            }
          } else {
            value += token[1];
          }
        }
        if (!clean) {
          let raw = tokens.reduce((all, i) => all + i[1], "");
          node.raws[prop] = { raw, value };
        }
        node[prop] = value;
      }
      rule(tokens) {
        tokens.pop();
        let node = new Rule2();
        this.init(node, tokens[0][2]);
        node.raws.between = this.spacesAndCommentsFromEnd(tokens);
        this.raw(node, "selector", tokens);
        this.current = node;
      }
      spacesAndCommentsFromEnd(tokens) {
        let lastTokenType;
        let spaces = "";
        while (tokens.length) {
          lastTokenType = tokens[tokens.length - 1][0];
          if (lastTokenType !== "space" && lastTokenType !== "comment")
            break;
          spaces = tokens.pop()[1] + spaces;
        }
        return spaces;
      }
      spacesAndCommentsFromStart(tokens) {
        let next;
        let spaces = "";
        while (tokens.length) {
          next = tokens[0][0];
          if (next !== "space" && next !== "comment")
            break;
          spaces += tokens.shift()[1];
        }
        return spaces;
      }
      spacesFromEnd(tokens) {
        let lastTokenType;
        let spaces = "";
        while (tokens.length) {
          lastTokenType = tokens[tokens.length - 1][0];
          if (lastTokenType !== "space")
            break;
          spaces = tokens.pop()[1] + spaces;
        }
        return spaces;
      }
      stringFrom(tokens, from) {
        let result = "";
        for (let i = from; i < tokens.length; i++) {
          result += tokens[i][1];
        }
        tokens.splice(from, tokens.length - from);
        return result;
      }
      unclosedBlock() {
        let pos = this.current.source.start;
        throw this.input.error("Unclosed block", pos.line, pos.column);
      }
      unclosedBracket(bracket) {
        throw this.input.error("Unclosed bracket", { offset: bracket[2] }, { offset: bracket[2] + 1 });
      }
      unexpectedClose(token) {
        throw this.input.error("Unexpected }", { offset: token[2] }, { offset: token[2] + 1 });
      }
      unknownWord(tokens) {
        throw this.input.error("Unknown word", { offset: tokens[0][2] }, { offset: tokens[0][2] + tokens[0][1].length });
      }
      unnamedAtrule(node, token) {
        throw this.input.error("At-rule without name", { offset: token[2] }, { offset: token[2] + token[1].length });
      }
    };
    module2.exports = Parser;
  }
});

// node_modules/postcss/lib/parse.js
var require_parse = __commonJS({
  "node_modules/postcss/lib/parse.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var Input2 = require_input();
    var Parser = require_parser();
    function parse2(css, opts) {
      let input = new Input2(css, opts);
      let parser = new Parser(input);
      try {
        parser.parse();
      } catch (e) {
        if (true) {
          if (e.name === "CssSyntaxError" && opts && opts.from) {
            if (/\.scss$/i.test(opts.from)) {
              e.message += "\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser";
            } else if (/\.sass/i.test(opts.from)) {
              e.message += "\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser";
            } else if (/\.less$/i.test(opts.from)) {
              e.message += "\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser";
            }
          }
        }
        throw e;
      }
      return parser.root;
    }
    module2.exports = parse2;
    parse2.default = parse2;
    Container2.registerParse(parse2);
  }
});

// node_modules/postcss/lib/warning.js
var require_warning = __commonJS({
  "node_modules/postcss/lib/warning.js"(exports, module2) {
    "use strict";
    var Warning2 = class {
      constructor(text, opts = {}) {
        this.type = "warning";
        this.text = text;
        if (opts.node && opts.node.source) {
          let range = opts.node.rangeBy(opts);
          this.line = range.start.line;
          this.column = range.start.column;
          this.endLine = range.end.line;
          this.endColumn = range.end.column;
        }
        for (let opt in opts)
          this[opt] = opts[opt];
      }
      toString() {
        if (this.node) {
          return this.node.error(this.text, {
            index: this.index,
            plugin: this.plugin,
            word: this.word
          }).message;
        }
        if (this.plugin) {
          return this.plugin + ": " + this.text;
        }
        return this.text;
      }
    };
    module2.exports = Warning2;
    Warning2.default = Warning2;
  }
});

// node_modules/postcss/lib/result.js
var require_result = __commonJS({
  "node_modules/postcss/lib/result.js"(exports, module2) {
    "use strict";
    var Warning2 = require_warning();
    var Result2 = class {
      constructor(processor, root2, opts) {
        this.processor = processor;
        this.messages = [];
        this.root = root2;
        this.opts = opts;
        this.css = void 0;
        this.map = void 0;
      }
      toString() {
        return this.css;
      }
      warn(text, opts = {}) {
        if (!opts.plugin) {
          if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
            opts.plugin = this.lastPlugin.postcssPlugin;
          }
        }
        let warning = new Warning2(text, opts);
        this.messages.push(warning);
        return warning;
      }
      warnings() {
        return this.messages.filter((i) => i.type === "warning");
      }
      get content() {
        return this.css;
      }
    };
    module2.exports = Result2;
    Result2.default = Result2;
  }
});

// node_modules/postcss/lib/warn-once.js
var require_warn_once = __commonJS({
  "node_modules/postcss/lib/warn-once.js"(exports, module2) {
    "use strict";
    var printed = {};
    module2.exports = function warnOnce(message) {
      if (printed[message])
        return;
      printed[message] = true;
      if (typeof console !== "undefined" && console.warn) {
        console.warn(message);
      }
    };
  }
});

// node_modules/postcss/lib/lazy-result.js
var require_lazy_result = __commonJS({
  "node_modules/postcss/lib/lazy-result.js"(exports, module2) {
    "use strict";
    var Container2 = require_container();
    var Document2 = require_document();
    var MapGenerator = require_map_generator();
    var parse2 = require_parse();
    var Result2 = require_result();
    var Root2 = require_root();
    var stringify2 = require_stringify();
    var { isClean, my } = require_symbols();
    var warnOnce = require_warn_once();
    var TYPE_TO_CLASS_NAME = {
      atrule: "AtRule",
      comment: "Comment",
      decl: "Declaration",
      document: "Document",
      root: "Root",
      rule: "Rule"
    };
    var PLUGIN_PROPS = {
      AtRule: true,
      AtRuleExit: true,
      Comment: true,
      CommentExit: true,
      Declaration: true,
      DeclarationExit: true,
      Document: true,
      DocumentExit: true,
      Once: true,
      OnceExit: true,
      postcssPlugin: true,
      prepare: true,
      Root: true,
      RootExit: true,
      Rule: true,
      RuleExit: true
    };
    var NOT_VISITORS = {
      Once: true,
      postcssPlugin: true,
      prepare: true
    };
    var CHILDREN = 0;
    function isPromise(obj) {
      return typeof obj === "object" && typeof obj.then === "function";
    }
    function getEvents(node) {
      let key = false;
      let type = TYPE_TO_CLASS_NAME[node.type];
      if (node.type === "decl") {
        key = node.prop.toLowerCase();
      } else if (node.type === "atrule") {
        key = node.name.toLowerCase();
      }
      if (key && node.append) {
        return [
          type,
          type + "-" + key,
          CHILDREN,
          type + "Exit",
          type + "Exit-" + key
        ];
      } else if (key) {
        return [type, type + "-" + key, type + "Exit", type + "Exit-" + key];
      } else if (node.append) {
        return [type, CHILDREN, type + "Exit"];
      } else {
        return [type, type + "Exit"];
      }
    }
    function toStack(node) {
      let events;
      if (node.type === "document") {
        events = ["Document", CHILDREN, "DocumentExit"];
      } else if (node.type === "root") {
        events = ["Root", CHILDREN, "RootExit"];
      } else {
        events = getEvents(node);
      }
      return {
        eventIndex: 0,
        events,
        iterator: 0,
        node,
        visitorIndex: 0,
        visitors: []
      };
    }
    function cleanMarks(node) {
      node[isClean] = false;
      if (node.nodes)
        node.nodes.forEach((i) => cleanMarks(i));
      return node;
    }
    var postcss2 = {};
    var LazyResult = class {
      constructor(processor, css, opts) {
        this.stringified = false;
        this.processed = false;
        let root2;
        if (typeof css === "object" && css !== null && (css.type === "root" || css.type === "document")) {
          root2 = cleanMarks(css);
        } else if (css instanceof LazyResult || css instanceof Result2) {
          root2 = cleanMarks(css.root);
          if (css.map) {
            if (typeof opts.map === "undefined")
              opts.map = {};
            if (!opts.map.inline)
              opts.map.inline = false;
            opts.map.prev = css.map;
          }
        } else {
          let parser = parse2;
          if (opts.syntax)
            parser = opts.syntax.parse;
          if (opts.parser)
            parser = opts.parser;
          if (parser.parse)
            parser = parser.parse;
          try {
            root2 = parser(css, opts);
          } catch (error) {
            this.processed = true;
            this.error = error;
          }
          if (root2 && !root2[my]) {
            Container2.rebuild(root2);
          }
        }
        this.result = new Result2(processor, root2, opts);
        this.helpers = { ...postcss2, postcss: postcss2, result: this.result };
        this.plugins = this.processor.plugins.map((plugin2) => {
          if (typeof plugin2 === "object" && plugin2.prepare) {
            return { ...plugin2, ...plugin2.prepare(this.result) };
          } else {
            return plugin2;
          }
        });
      }
      async() {
        if (this.error)
          return Promise.reject(this.error);
        if (this.processed)
          return Promise.resolve(this.result);
        if (!this.processing) {
          this.processing = this.runAsync();
        }
        return this.processing;
      }
      catch(onRejected) {
        return this.async().catch(onRejected);
      }
      finally(onFinally) {
        return this.async().then(onFinally, onFinally);
      }
      getAsyncError() {
        throw new Error("Use process(css).then(cb) to work with async plugins");
      }
      handleError(error, node) {
        let plugin2 = this.result.lastPlugin;
        try {
          if (node)
            node.addToError(error);
          this.error = error;
          if (error.name === "CssSyntaxError" && !error.plugin) {
            error.plugin = plugin2.postcssPlugin;
            error.setMessage();
          } else if (plugin2.postcssVersion) {
            if (true) {
              let pluginName = plugin2.postcssPlugin;
              let pluginVer = plugin2.postcssVersion;
              let runtimeVer = this.result.processor.version;
              let a = pluginVer.split(".");
              let b = runtimeVer.split(".");
              if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
                console.error("Unknown error from PostCSS plugin. Your current PostCSS version is " + runtimeVer + ", but " + pluginName + " uses " + pluginVer + ". Perhaps this is the source of the error below.");
              }
            }
          }
        } catch (err) {
          if (console && console.error)
            console.error(err);
        }
        return error;
      }
      prepareVisitors() {
        this.listeners = {};
        let add = (plugin2, type, cb) => {
          if (!this.listeners[type])
            this.listeners[type] = [];
          this.listeners[type].push([plugin2, cb]);
        };
        for (let plugin2 of this.plugins) {
          if (typeof plugin2 === "object") {
            for (let event in plugin2) {
              if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
                throw new Error(`Unknown event ${event} in ${plugin2.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);
              }
              if (!NOT_VISITORS[event]) {
                if (typeof plugin2[event] === "object") {
                  for (let filter in plugin2[event]) {
                    if (filter === "*") {
                      add(plugin2, event, plugin2[event][filter]);
                    } else {
                      add(plugin2, event + "-" + filter.toLowerCase(), plugin2[event][filter]);
                    }
                  }
                } else if (typeof plugin2[event] === "function") {
                  add(plugin2, event, plugin2[event]);
                }
              }
            }
          }
        }
        this.hasListener = Object.keys(this.listeners).length > 0;
      }
      async runAsync() {
        this.plugin = 0;
        for (let i = 0; i < this.plugins.length; i++) {
          let plugin2 = this.plugins[i];
          let promise = this.runOnRoot(plugin2);
          if (isPromise(promise)) {
            try {
              await promise;
            } catch (error) {
              throw this.handleError(error);
            }
          }
        }
        this.prepareVisitors();
        if (this.hasListener) {
          let root2 = this.result.root;
          while (!root2[isClean]) {
            root2[isClean] = true;
            let stack = [toStack(root2)];
            while (stack.length > 0) {
              let promise = this.visitTick(stack);
              if (isPromise(promise)) {
                try {
                  await promise;
                } catch (e) {
                  let node = stack[stack.length - 1].node;
                  throw this.handleError(e, node);
                }
              }
            }
          }
          if (this.listeners.OnceExit) {
            for (let [plugin2, visitor] of this.listeners.OnceExit) {
              this.result.lastPlugin = plugin2;
              try {
                if (root2.type === "document") {
                  let roots = root2.nodes.map((subRoot) => visitor(subRoot, this.helpers));
                  await Promise.all(roots);
                } else {
                  await visitor(root2, this.helpers);
                }
              } catch (e) {
                throw this.handleError(e);
              }
            }
          }
        }
        this.processed = true;
        return this.stringify();
      }
      runOnRoot(plugin2) {
        this.result.lastPlugin = plugin2;
        try {
          if (typeof plugin2 === "object" && plugin2.Once) {
            if (this.result.root.type === "document") {
              let roots = this.result.root.nodes.map((root2) => plugin2.Once(root2, this.helpers));
              if (isPromise(roots[0])) {
                return Promise.all(roots);
              }
              return roots;
            }
            return plugin2.Once(this.result.root, this.helpers);
          } else if (typeof plugin2 === "function") {
            return plugin2(this.result.root, this.result);
          }
        } catch (error) {
          throw this.handleError(error);
        }
      }
      stringify() {
        if (this.error)
          throw this.error;
        if (this.stringified)
          return this.result;
        this.stringified = true;
        this.sync();
        let opts = this.result.opts;
        let str = stringify2;
        if (opts.syntax)
          str = opts.syntax.stringify;
        if (opts.stringifier)
          str = opts.stringifier;
        if (str.stringify)
          str = str.stringify;
        let map = new MapGenerator(str, this.result.root, this.result.opts);
        let data = map.generate();
        this.result.css = data[0];
        this.result.map = data[1];
        return this.result;
      }
      sync() {
        if (this.error)
          throw this.error;
        if (this.processed)
          return this.result;
        this.processed = true;
        if (this.processing) {
          throw this.getAsyncError();
        }
        for (let plugin2 of this.plugins) {
          let promise = this.runOnRoot(plugin2);
          if (isPromise(promise)) {
            throw this.getAsyncError();
          }
        }
        this.prepareVisitors();
        if (this.hasListener) {
          let root2 = this.result.root;
          while (!root2[isClean]) {
            root2[isClean] = true;
            this.walkSync(root2);
          }
          if (this.listeners.OnceExit) {
            if (root2.type === "document") {
              for (let subRoot of root2.nodes) {
                this.visitSync(this.listeners.OnceExit, subRoot);
              }
            } else {
              this.visitSync(this.listeners.OnceExit, root2);
            }
          }
        }
        return this.result;
      }
      then(onFulfilled, onRejected) {
        if (true) {
          if (!("from" in this.opts)) {
            warnOnce("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");
          }
        }
        return this.async().then(onFulfilled, onRejected);
      }
      toString() {
        return this.css;
      }
      visitSync(visitors, node) {
        for (let [plugin2, visitor] of visitors) {
          this.result.lastPlugin = plugin2;
          let promise;
          try {
            promise = visitor(node, this.helpers);
          } catch (e) {
            throw this.handleError(e, node.proxyOf);
          }
          if (node.type !== "root" && node.type !== "document" && !node.parent) {
            return true;
          }
          if (isPromise(promise)) {
            throw this.getAsyncError();
          }
        }
      }
      visitTick(stack) {
        let visit = stack[stack.length - 1];
        let { node, visitors } = visit;
        if (node.type !== "root" && node.type !== "document" && !node.parent) {
          stack.pop();
          return;
        }
        if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
          let [plugin2, visitor] = visitors[visit.visitorIndex];
          visit.visitorIndex += 1;
          if (visit.visitorIndex === visitors.length) {
            visit.visitors = [];
            visit.visitorIndex = 0;
          }
          this.result.lastPlugin = plugin2;
          try {
            return visitor(node.toProxy(), this.helpers);
          } catch (e) {
            throw this.handleError(e, node);
          }
        }
        if (visit.iterator !== 0) {
          let iterator = visit.iterator;
          let child;
          while (child = node.nodes[node.indexes[iterator]]) {
            node.indexes[iterator] += 1;
            if (!child[isClean]) {
              child[isClean] = true;
              stack.push(toStack(child));
              return;
            }
          }
          visit.iterator = 0;
          delete node.indexes[iterator];
        }
        let events = visit.events;
        while (visit.eventIndex < events.length) {
          let event = events[visit.eventIndex];
          visit.eventIndex += 1;
          if (event === CHILDREN) {
            if (node.nodes && node.nodes.length) {
              node[isClean] = true;
              visit.iterator = node.getIterator();
            }
            return;
          } else if (this.listeners[event]) {
            visit.visitors = this.listeners[event];
            return;
          }
        }
        stack.pop();
      }
      walkSync(node) {
        node[isClean] = true;
        let events = getEvents(node);
        for (let event of events) {
          if (event === CHILDREN) {
            if (node.nodes) {
              node.each((child) => {
                if (!child[isClean])
                  this.walkSync(child);
              });
            }
          } else {
            let visitors = this.listeners[event];
            if (visitors) {
              if (this.visitSync(visitors, node.toProxy()))
                return;
            }
          }
        }
      }
      warnings() {
        return this.sync().warnings();
      }
      get content() {
        return this.stringify().content;
      }
      get css() {
        return this.stringify().css;
      }
      get map() {
        return this.stringify().map;
      }
      get messages() {
        return this.sync().messages;
      }
      get opts() {
        return this.result.opts;
      }
      get processor() {
        return this.result.processor;
      }
      get root() {
        return this.sync().root;
      }
      get [Symbol.toStringTag]() {
        return "LazyResult";
      }
    };
    LazyResult.registerPostcss = (dependant) => {
      postcss2 = dependant;
    };
    module2.exports = LazyResult;
    LazyResult.default = LazyResult;
    Root2.registerLazyResult(LazyResult);
    Document2.registerLazyResult(LazyResult);
  }
});

// node_modules/postcss/lib/no-work-result.js
var require_no_work_result = __commonJS({
  "node_modules/postcss/lib/no-work-result.js"(exports, module2) {
    "use strict";
    var MapGenerator = require_map_generator();
    var parse2 = require_parse();
    var Result2 = require_result();
    var stringify2 = require_stringify();
    var warnOnce = require_warn_once();
    var NoWorkResult = class {
      constructor(processor, css, opts) {
        css = css.toString();
        this.stringified = false;
        this._processor = processor;
        this._css = css;
        this._opts = opts;
        this._map = void 0;
        let root2;
        let str = stringify2;
        this.result = new Result2(this._processor, root2, this._opts);
        this.result.css = css;
        let self2 = this;
        Object.defineProperty(this.result, "root", {
          get() {
            return self2.root;
          }
        });
        let map = new MapGenerator(str, root2, this._opts, css);
        if (map.isMap()) {
          let [generatedCSS, generatedMap] = map.generate();
          if (generatedCSS) {
            this.result.css = generatedCSS;
          }
          if (generatedMap) {
            this.result.map = generatedMap;
          }
        } else {
          map.clearAnnotation();
          this.result.css = map.css;
        }
      }
      async() {
        if (this.error)
          return Promise.reject(this.error);
        return Promise.resolve(this.result);
      }
      catch(onRejected) {
        return this.async().catch(onRejected);
      }
      finally(onFinally) {
        return this.async().then(onFinally, onFinally);
      }
      sync() {
        if (this.error)
          throw this.error;
        return this.result;
      }
      then(onFulfilled, onRejected) {
        if (true) {
          if (!("from" in this._opts)) {
            warnOnce("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");
          }
        }
        return this.async().then(onFulfilled, onRejected);
      }
      toString() {
        return this._css;
      }
      warnings() {
        return [];
      }
      get content() {
        return this.result.css;
      }
      get css() {
        return this.result.css;
      }
      get map() {
        return this.result.map;
      }
      get messages() {
        return [];
      }
      get opts() {
        return this.result.opts;
      }
      get processor() {
        return this.result.processor;
      }
      get root() {
        if (this._root) {
          return this._root;
        }
        let root2;
        let parser = parse2;
        try {
          root2 = parser(this._css, this._opts);
        } catch (error) {
          this.error = error;
        }
        if (this.error) {
          throw this.error;
        } else {
          this._root = root2;
          return root2;
        }
      }
      get [Symbol.toStringTag]() {
        return "NoWorkResult";
      }
    };
    module2.exports = NoWorkResult;
    NoWorkResult.default = NoWorkResult;
  }
});

// node_modules/postcss/lib/processor.js
var require_processor = __commonJS({
  "node_modules/postcss/lib/processor.js"(exports, module2) {
    "use strict";
    var Document2 = require_document();
    var LazyResult = require_lazy_result();
    var NoWorkResult = require_no_work_result();
    var Root2 = require_root();
    var Processor2 = class {
      constructor(plugins = []) {
        this.version = "8.4.47";
        this.plugins = this.normalize(plugins);
      }
      normalize(plugins) {
        let normalized = [];
        for (let i of plugins) {
          if (i.postcss === true) {
            i = i();
          } else if (i.postcss) {
            i = i.postcss;
          }
          if (typeof i === "object" && Array.isArray(i.plugins)) {
            normalized = normalized.concat(i.plugins);
          } else if (typeof i === "object" && i.postcssPlugin) {
            normalized.push(i);
          } else if (typeof i === "function") {
            normalized.push(i);
          } else if (typeof i === "object" && (i.parse || i.stringify)) {
            if (true) {
              throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.");
            }
          } else {
            throw new Error(i + " is not a PostCSS plugin");
          }
        }
        return normalized;
      }
      process(css, opts = {}) {
        if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {
          return new NoWorkResult(this, css, opts);
        } else {
          return new LazyResult(this, css, opts);
        }
      }
      use(plugin2) {
        this.plugins = this.plugins.concat(this.normalize([plugin2]));
        return this;
      }
    };
    module2.exports = Processor2;
    Processor2.default = Processor2;
    Root2.registerProcessor(Processor2);
    Document2.registerProcessor(Processor2);
  }
});

// node_modules/postcss/lib/postcss.js
var require_postcss = __commonJS({
  "node_modules/postcss/lib/postcss.js"(exports, module2) {
    "use strict";
    var AtRule2 = require_at_rule();
    var Comment2 = require_comment();
    var Container2 = require_container();
    var CssSyntaxError2 = require_css_syntax_error();
    var Declaration2 = require_declaration();
    var Document2 = require_document();
    var fromJSON2 = require_fromJSON();
    var Input2 = require_input();
    var LazyResult = require_lazy_result();
    var list2 = require_list();
    var Node3 = require_node();
    var parse2 = require_parse();
    var Processor2 = require_processor();
    var Result2 = require_result();
    var Root2 = require_root();
    var Rule2 = require_rule();
    var stringify2 = require_stringify();
    var Warning2 = require_warning();
    function postcss2(...plugins) {
      if (plugins.length === 1 && Array.isArray(plugins[0])) {
        plugins = plugins[0];
      }
      return new Processor2(plugins);
    }
    postcss2.plugin = function plugin2(name, initializer) {
      let warningPrinted = false;
      function creator(...args) {
        if (console && console.warn && !warningPrinted) {
          warningPrinted = true;
          console.warn(name + ": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration");
          if (process.env.LANG && process.env.LANG.startsWith("cn")) {
            console.warn(name + ": \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357:\nhttps://www.w3ctech.com/topic/2226");
          }
        }
        let transformer = initializer(...args);
        transformer.postcssPlugin = name;
        transformer.postcssVersion = new Processor2().version;
        return transformer;
      }
      let cache;
      Object.defineProperty(creator, "postcss", {
        get() {
          if (!cache)
            cache = creator();
          return cache;
        }
      });
      creator.process = function(css, processOpts, pluginOpts) {
        return postcss2([creator(pluginOpts)]).process(css, processOpts);
      };
      return creator;
    };
    postcss2.stringify = stringify2;
    postcss2.parse = parse2;
    postcss2.fromJSON = fromJSON2;
    postcss2.list = list2;
    postcss2.comment = (defaults) => new Comment2(defaults);
    postcss2.atRule = (defaults) => new AtRule2(defaults);
    postcss2.decl = (defaults) => new Declaration2(defaults);
    postcss2.rule = (defaults) => new Rule2(defaults);
    postcss2.root = (defaults) => new Root2(defaults);
    postcss2.document = (defaults) => new Document2(defaults);
    postcss2.CssSyntaxError = CssSyntaxError2;
    postcss2.Declaration = Declaration2;
    postcss2.Container = Container2;
    postcss2.Processor = Processor2;
    postcss2.Document = Document2;
    postcss2.Comment = Comment2;
    postcss2.Warning = Warning2;
    postcss2.AtRule = AtRule2;
    postcss2.Result = Result2;
    postcss2.Input = Input2;
    postcss2.Rule = Rule2;
    postcss2.Root = Root2;
    postcss2.Node = Node3;
    LazyResult.registerPostcss(postcss2);
    module2.exports = postcss2;
    postcss2.default = postcss2;
  }
});

// node_modules/postcss-safe-parser/lib/safe-parser.js
var require_safe_parser = __commonJS({
  "node_modules/postcss-safe-parser/lib/safe-parser.js"(exports, module2) {
    var tokenizer = require_tokenize();
    var Comment2 = require_comment();
    var Parser = require_parser();
    var SafeParser = class extends Parser {
      checkMissedSemicolon() {
      }
      comment(token) {
        let node = new Comment2();
        this.init(node, token[2]);
        let pos = this.input.fromOffset(token[3]) || this.input.fromOffset(this.input.css.length - 1);
        node.source.end = {
          column: pos.col,
          line: pos.line,
          offset: token[3] + 1
        };
        let text = token[1].slice(2);
        if (text.slice(-2) === "*/")
          text = text.slice(0, -2);
        if (/^\s*$/.test(text)) {
          node.text = "";
          node.raws.left = text;
          node.raws.right = "";
        } else {
          let match = text.match(/^(\s*)([^]*\S)(\s*)$/);
          node.text = match[2];
          node.raws.left = match[1];
          node.raws.right = match[3];
        }
      }
      createTokenizer() {
        this.tokenizer = tokenizer(this.input, { ignoreErrors: true });
      }
      decl(tokens) {
        if (tokens.length > 1 && tokens.some((i) => i[0] === "word")) {
          super.decl(tokens);
        }
      }
      doubleColon() {
      }
      endFile() {
        if (this.current.nodes && this.current.nodes.length) {
          this.current.raws.semicolon = this.semicolon;
        }
        this.current.raws.after = (this.current.raws.after || "") + this.spaces;
        while (this.current.parent) {
          this.current = this.current.parent;
          this.current.raws.after = "";
        }
        this.root.source.end = this.getPosition(this.tokenizer.position());
      }
      precheckMissedSemicolon(tokens) {
        let colon = this.colon(tokens);
        if (colon === false)
          return;
        let nextStart, prevEnd;
        for (nextStart = colon - 1; nextStart >= 0; nextStart--) {
          if (tokens[nextStart][0] === "word")
            break;
        }
        if (nextStart === 0)
          return;
        for (prevEnd = nextStart - 1; prevEnd >= 0; prevEnd--) {
          if (tokens[prevEnd][0] !== "space") {
            prevEnd += 1;
            break;
          }
        }
        let other = tokens.slice(nextStart);
        let spaces = tokens.slice(prevEnd, nextStart);
        tokens.splice(prevEnd, tokens.length - prevEnd);
        this.spaces = spaces.map((i) => i[1]).join("");
        this.decl(other);
      }
      unclosedBracket() {
      }
      unexpectedClose() {
        this.current.raws.after += "}";
      }
      unknownWord(tokens) {
        this.spaces += tokens.map((i) => i[1]).join("");
      }
      unnamedAtrule(node) {
        node.name = "";
      }
    };
    module2.exports = SafeParser;
  }
});

// node_modules/postcss-safe-parser/lib/safe-parse.js
var require_safe_parse = __commonJS({
  "node_modules/postcss-safe-parser/lib/safe-parse.js"(exports, module2) {
    var { Input: Input2 } = require_postcss();
    var SafeParser = require_safe_parser();
    module2.exports = function safeParse(css, opts) {
      let input = new Input2(css, opts);
      let parser = new SafeParser(input);
      parser.parse();
      return parser.root;
    };
  }
});

// node_modules/clean-css/lib/optimizer/level-0/optimize.js
var require_optimize = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-0/optimize.js"(exports, module2) {
    function level0Optimize(tokens) {
      return tokens;
    }
    module2.exports = level0Optimize;
  }
});

// node_modules/clean-css/lib/utils/natural-compare.js
var require_natural_compare = __commonJS({
  "node_modules/clean-css/lib/utils/natural-compare.js"(exports, module2) {
    var NUMBER_PATTERN = /([0-9]+)/;
    function naturalCompare(value1, value2) {
      var keys1 = ("" + value1).split(NUMBER_PATTERN).map(tryParseInt);
      var keys2 = ("" + value2).split(NUMBER_PATTERN).map(tryParseInt);
      var key1;
      var key2;
      var compareFirst = Math.min(keys1.length, keys2.length);
      var i, l;
      for (i = 0, l = compareFirst; i < l; i++) {
        key1 = keys1[i];
        key2 = keys2[i];
        if (key1 != key2) {
          return key1 > key2 ? 1 : -1;
        }
      }
      return keys1.length > keys2.length ? 1 : keys1.length == keys2.length ? 0 : -1;
    }
    function tryParseInt(value) {
      return "" + parseInt(value) == value ? parseInt(value) : value;
    }
    module2.exports = naturalCompare;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js
var require_sort_selectors = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/sort-selectors.js"(exports, module2) {
    var naturalCompare = require_natural_compare();
    function naturalSorter(scope1, scope2) {
      return naturalCompare(scope1[1], scope2[1]);
    }
    function standardSorter(scope1, scope2) {
      return scope1[1] > scope2[1] ? 1 : -1;
    }
    function sortSelectors(selectors, method) {
      switch (method) {
        case "natural":
          return selectors.sort(naturalSorter);
        case "standard":
          return selectors.sort(standardSorter);
        case "none":
        case false:
          return selectors;
      }
    }
    module2.exports = sortSelectors;
  }
});

// node_modules/clean-css/lib/utils/override.js
var require_override = __commonJS({
  "node_modules/clean-css/lib/utils/override.js"(exports, module2) {
    function override(source1, source2) {
      var target = {};
      var key1;
      var key2;
      var item;
      for (key1 in source1) {
        item = source1[key1];
        if (Array.isArray(item)) {
          target[key1] = item.slice(0);
        } else if (typeof item == "object" && item !== null) {
          target[key1] = override(item, {});
        } else {
          target[key1] = item;
        }
      }
      for (key2 in source2) {
        item = source2[key2];
        if (key2 in target && Array.isArray(item)) {
          target[key2] = item.slice(0);
        } else if (key2 in target && typeof item == "object" && item !== null) {
          target[key2] = override(target[key2], item);
        } else {
          target[key2] = item;
        }
      }
      return target;
    }
    module2.exports = override;
  }
});

// node_modules/clean-css/lib/options/format.js
var require_format = __commonJS({
  "node_modules/clean-css/lib/options/format.js"(exports, module2) {
    var systemLineBreak = require("os").EOL;
    var override = require_override();
    var Breaks = {
      AfterAtRule: "afterAtRule",
      AfterBlockBegins: "afterBlockBegins",
      AfterBlockEnds: "afterBlockEnds",
      AfterComment: "afterComment",
      AfterProperty: "afterProperty",
      AfterRuleBegins: "afterRuleBegins",
      AfterRuleEnds: "afterRuleEnds",
      BeforeBlockEnds: "beforeBlockEnds",
      BetweenSelectors: "betweenSelectors"
    };
    var BreakWith = {
      CarriageReturnLineFeed: "\r\n",
      LineFeed: "\n",
      System: systemLineBreak
    };
    var IndentWith = {
      Space: " ",
      Tab: "	"
    };
    var Spaces = {
      AroundSelectorRelation: "aroundSelectorRelation",
      BeforeBlockBegins: "beforeBlockBegins",
      BeforeValue: "beforeValue"
    };
    var DEFAULTS = {
      breaks: breaks(false),
      breakWith: BreakWith.System,
      indentBy: 0,
      indentWith: IndentWith.Space,
      spaces: spaces(false),
      wrapAt: false,
      semicolonAfterLastProperty: false
    };
    var BEAUTIFY_ALIAS = "beautify";
    var KEEP_BREAKS_ALIAS = "keep-breaks";
    var OPTION_SEPARATOR = ";";
    var OPTION_NAME_VALUE_SEPARATOR = ":";
    var HASH_VALUES_OPTION_SEPARATOR = ",";
    var HASH_VALUES_NAME_VALUE_SEPARATOR = "=";
    var FALSE_KEYWORD_1 = "false";
    var FALSE_KEYWORD_2 = "off";
    var TRUE_KEYWORD_1 = "true";
    var TRUE_KEYWORD_2 = "on";
    function breaks(value) {
      var breakOptions = {};
      breakOptions[Breaks.AfterAtRule] = value;
      breakOptions[Breaks.AfterBlockBegins] = value;
      breakOptions[Breaks.AfterBlockEnds] = value;
      breakOptions[Breaks.AfterComment] = value;
      breakOptions[Breaks.AfterProperty] = value;
      breakOptions[Breaks.AfterRuleBegins] = value;
      breakOptions[Breaks.AfterRuleEnds] = value;
      breakOptions[Breaks.BeforeBlockEnds] = value;
      breakOptions[Breaks.BetweenSelectors] = value;
      return breakOptions;
    }
    function spaces(value) {
      var spaceOptions = {};
      spaceOptions[Spaces.AroundSelectorRelation] = value;
      spaceOptions[Spaces.BeforeBlockBegins] = value;
      spaceOptions[Spaces.BeforeValue] = value;
      return spaceOptions;
    }
    function formatFrom(source) {
      if (source === void 0 || source === false) {
        return false;
      }
      if (typeof source == "object" && "breakWith" in source) {
        source = override(source, { breakWith: mapBreakWith(source.breakWith) });
      }
      if (typeof source == "object" && "indentBy" in source) {
        source = override(source, { indentBy: parseInt(source.indentBy) });
      }
      if (typeof source == "object" && "indentWith" in source) {
        source = override(source, { indentWith: mapIndentWith(source.indentWith) });
      }
      if (typeof source == "object") {
        return remapBreaks(override(DEFAULTS, source));
      }
      if (typeof source == "string" && source == BEAUTIFY_ALIAS) {
        return remapBreaks(override(DEFAULTS, {
          breaks: breaks(true),
          indentBy: 2,
          spaces: spaces(true)
        }));
      }
      if (typeof source == "string" && source == KEEP_BREAKS_ALIAS) {
        return remapBreaks(override(DEFAULTS, {
          breaks: {
            afterAtRule: true,
            afterBlockBegins: true,
            afterBlockEnds: true,
            afterComment: true,
            afterRuleEnds: true,
            beforeBlockEnds: true
          }
        }));
      }
      if (typeof source == "string") {
        return remapBreaks(override(DEFAULTS, toHash(source)));
      }
      return DEFAULTS;
    }
    function toHash(string) {
      return string.split(OPTION_SEPARATOR).reduce(function(accumulator, directive) {
        var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR);
        var name = parts[0];
        var value = parts[1];
        if (name == "breaks" || name == "spaces") {
          accumulator[name] = hashValuesToHash(value);
        } else if (name == "indentBy" || name == "wrapAt") {
          accumulator[name] = parseInt(value);
        } else if (name == "indentWith") {
          accumulator[name] = mapIndentWith(value);
        } else if (name == "breakWith") {
          accumulator[name] = mapBreakWith(value);
        }
        return accumulator;
      }, {});
    }
    function hashValuesToHash(string) {
      return string.split(HASH_VALUES_OPTION_SEPARATOR).reduce(function(accumulator, directive) {
        var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR);
        var name = parts[0];
        var value = parts[1];
        accumulator[name] = normalizeValue(value);
        return accumulator;
      }, {});
    }
    function normalizeValue(value) {
      switch (value) {
        case FALSE_KEYWORD_1:
        case FALSE_KEYWORD_2:
          return false;
        case TRUE_KEYWORD_1:
        case TRUE_KEYWORD_2:
          return true;
        default:
          return value;
      }
    }
    function mapBreakWith(value) {
      switch (value) {
        case "windows":
        case "crlf":
        case BreakWith.CarriageReturnLineFeed:
          return BreakWith.CarriageReturnLineFeed;
        case "unix":
        case "lf":
        case BreakWith.LineFeed:
          return BreakWith.LineFeed;
        default:
          return systemLineBreak;
      }
    }
    function mapIndentWith(value) {
      switch (value) {
        case "space":
          return IndentWith.Space;
        case "tab":
          return IndentWith.Tab;
        default:
          return value;
      }
    }
    function remapBreaks(source) {
      for (var key in Breaks) {
        var breakName = Breaks[key];
        var breakValue = source.breaks[breakName];
        if (breakValue === true) {
          source.breaks[breakName] = source.breakWith;
        } else if (breakValue === false) {
          source.breaks[breakName] = "";
        } else {
          source.breaks[breakName] = source.breakWith.repeat(parseInt(breakValue));
        }
      }
      return source;
    }
    module2.exports = {
      Breaks,
      Spaces,
      formatFrom
    };
  }
});

// node_modules/clean-css/lib/tokenizer/marker.js
var require_marker = __commonJS({
  "node_modules/clean-css/lib/tokenizer/marker.js"(exports, module2) {
    var Marker = {
      ASTERISK: "*",
      AT: "@",
      BACK_SLASH: "\\",
      CARRIAGE_RETURN: "\r",
      CLOSE_CURLY_BRACKET: "}",
      CLOSE_ROUND_BRACKET: ")",
      CLOSE_SQUARE_BRACKET: "]",
      COLON: ":",
      COMMA: ",",
      DOUBLE_QUOTE: '"',
      EXCLAMATION: "!",
      FORWARD_SLASH: "/",
      INTERNAL: "-clean-css-",
      NEW_LINE_NIX: "\n",
      OPEN_CURLY_BRACKET: "{",
      OPEN_ROUND_BRACKET: "(",
      OPEN_SQUARE_BRACKET: "[",
      SEMICOLON: ";",
      SINGLE_QUOTE: "'",
      SPACE: " ",
      TAB: "	",
      UNDERSCORE: "_"
    };
    module2.exports = Marker;
  }
});

// node_modules/clean-css/lib/utils/format-position.js
var require_format_position = __commonJS({
  "node_modules/clean-css/lib/utils/format-position.js"(exports, module2) {
    function formatPosition(metadata) {
      var line = metadata[0];
      var column = metadata[1];
      var source = metadata[2];
      return source ? source + ":" + line + ":" + column : line + ":" + column;
    }
    module2.exports = formatPosition;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js
var require_tidy_rules = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/tidy-rules.js"(exports, module2) {
    var Spaces = require_format().Spaces;
    var Marker = require_marker();
    var formatPosition = require_format_position();
    var CASE_ATTRIBUTE_PATTERN = /[\s"'][iI]\s*\]/;
    var CASE_RESTORE_PATTERN = /([\d\w])([iI])\]/g;
    var DOUBLE_QUOTE_CASE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g;
    var DOUBLE_QUOTE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g;
    var HTML_COMMENT_PATTERN = /^(?:(?:<!--|-->)\s*)+/;
    var SINGLE_QUOTE_CASE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g;
    var SINGLE_QUOTE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g;
    var RELATION_PATTERN = /[>+~]/;
    var WHITESPACE_PATTERN = /\s/;
    var ASTERISK_PLUS_HTML_HACK = "*+html ";
    var ASTERISK_FIRST_CHILD_PLUS_HTML_HACK = "*:first-child+html ";
    var LESS_THAN = "<";
    var PSEUDO_CLASSES_WITH_SELECTORS = [
      ":current",
      ":future",
      ":has",
      ":host",
      ":host-context",
      ":is",
      ":not",
      ":past",
      ":where"
    ];
    function hasInvalidCharacters(value) {
      var isEscaped;
      var isInvalid = false;
      var character;
      var isQuote = false;
      var i, l;
      for (i = 0, l = value.length; i < l; i++) {
        character = value[i];
        if (isEscaped) {
        } else if (character == Marker.SINGLE_QUOTE || character == Marker.DOUBLE_QUOTE) {
          isQuote = !isQuote;
        } else if (!isQuote && (character == Marker.CLOSE_CURLY_BRACKET || character == Marker.EXCLAMATION || character == LESS_THAN || character == Marker.SEMICOLON)) {
          isInvalid = true;
          break;
        } else if (!isQuote && i === 0 && RELATION_PATTERN.test(character)) {
          isInvalid = true;
          break;
        }
        isEscaped = character == Marker.BACK_SLASH;
      }
      return isInvalid;
    }
    function removeWhitespace(value, format) {
      var stripped = [];
      var character;
      var isNewLineNix;
      var isNewLineWin;
      var isEscaped;
      var wasEscaped;
      var isQuoted;
      var isSingleQuoted;
      var isDoubleQuoted;
      var isAttribute;
      var isRelation;
      var isWhitespace;
      var isSpaceAwarePseudoClass;
      var roundBracketLevel = 0;
      var wasComma = false;
      var wasRelation = false;
      var wasWhitespace = false;
      var withCaseAttribute = CASE_ATTRIBUTE_PATTERN.test(value);
      var spaceAroundRelation = format && format.spaces[Spaces.AroundSelectorRelation];
      var i, l;
      for (i = 0, l = value.length; i < l; i++) {
        character = value[i];
        isNewLineNix = character == Marker.NEW_LINE_NIX;
        isNewLineWin = character == Marker.NEW_LINE_NIX && value[i - 1] == Marker.CARRIAGE_RETURN;
        isQuoted = isSingleQuoted || isDoubleQuoted;
        isRelation = !isAttribute && !isEscaped && roundBracketLevel === 0 && RELATION_PATTERN.test(character);
        isWhitespace = WHITESPACE_PATTERN.test(character);
        isSpaceAwarePseudoClass = roundBracketLevel == 1 && character == Marker.CLOSE_ROUND_BRACKET ? false : isSpaceAwarePseudoClass || roundBracketLevel === 0 && character == Marker.COLON && isPseudoClassWithSelectors(value, i);
        if (wasEscaped && isQuoted && isNewLineWin) {
          stripped.pop();
          stripped.pop();
        } else if (isEscaped && isQuoted && isNewLineNix) {
          stripped.pop();
        } else if (isEscaped) {
          stripped.push(character);
        } else if (character == Marker.OPEN_SQUARE_BRACKET && !isQuoted) {
          stripped.push(character);
          isAttribute = true;
        } else if (character == Marker.CLOSE_SQUARE_BRACKET && !isQuoted) {
          stripped.push(character);
          isAttribute = false;
        } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted) {
          stripped.push(character);
          roundBracketLevel++;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted) {
          stripped.push(character);
          roundBracketLevel--;
        } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
          stripped.push(character);
          isSingleQuoted = true;
        } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
          stripped.push(character);
          isDoubleQuoted = true;
        } else if (character == Marker.SINGLE_QUOTE && isQuoted) {
          stripped.push(character);
          isSingleQuoted = false;
        } else if (character == Marker.DOUBLE_QUOTE && isQuoted) {
          stripped.push(character);
          isDoubleQuoted = false;
        } else if (isWhitespace && wasRelation && !spaceAroundRelation) {
          continue;
        } else if (!isWhitespace && wasRelation && spaceAroundRelation) {
          stripped.push(Marker.SPACE);
          stripped.push(character);
        } else if (isWhitespace && !wasWhitespace && wasComma && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {
        } else if (isWhitespace && !wasWhitespace && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {
          stripped.push(character);
        } else if (isWhitespace && (isAttribute || roundBracketLevel > 0) && !isQuoted) {
        } else if (isWhitespace && wasWhitespace && !isQuoted) {
        } else if ((isNewLineWin || isNewLineNix) && (isAttribute || roundBracketLevel > 0) && isQuoted) {
        } else if (isRelation && wasWhitespace && !spaceAroundRelation) {
          stripped.pop();
          stripped.push(character);
        } else if (isRelation && !wasWhitespace && spaceAroundRelation) {
          stripped.push(Marker.SPACE);
          stripped.push(character);
        } else if (isWhitespace) {
          stripped.push(Marker.SPACE);
        } else {
          stripped.push(character);
        }
        wasEscaped = isEscaped;
        isEscaped = character == Marker.BACK_SLASH;
        wasRelation = isRelation;
        wasWhitespace = isWhitespace;
        wasComma = character == Marker.COMMA;
      }
      return withCaseAttribute ? stripped.join("").replace(CASE_RESTORE_PATTERN, "$1 $2]") : stripped.join("");
    }
    function isPseudoClassWithSelectors(value, colonPosition) {
      var pseudoClass = value.substring(colonPosition, value.indexOf(Marker.OPEN_ROUND_BRACKET, colonPosition));
      return PSEUDO_CLASSES_WITH_SELECTORS.indexOf(pseudoClass) > -1;
    }
    function removeQuotes(value) {
      if (value.indexOf("'") == -1 && value.indexOf('"') == -1) {
        return value;
      }
      return value.replace(SINGLE_QUOTE_CASE_PATTERN, "=$1 $2").replace(SINGLE_QUOTE_PATTERN, "=$1$2").replace(DOUBLE_QUOTE_CASE_PATTERN, "=$1 $2").replace(DOUBLE_QUOTE_PATTERN, "=$1$2");
    }
    function replacePseudoClasses(value) {
      return value.replace("nth-child(1)", "first-child").replace("nth-of-type(1)", "first-of-type").replace("nth-of-type(even)", "nth-of-type(2n)").replace("nth-child(even)", "nth-child(2n)").replace("nth-of-type(2n+1)", "nth-of-type(odd)").replace("nth-child(2n+1)", "nth-child(odd)").replace("nth-last-child(1)", "last-child").replace("nth-last-of-type(1)", "last-of-type").replace("nth-last-of-type(even)", "nth-last-of-type(2n)").replace("nth-last-child(even)", "nth-last-child(2n)").replace("nth-last-of-type(2n+1)", "nth-last-of-type(odd)").replace("nth-last-child(2n+1)", "nth-last-child(odd)");
    }
    function tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) {
      var list2 = [];
      var repeated = [];
      function removeHTMLComment(rule3, match) {
        warnings.push("HTML comment '" + match + "' at " + formatPosition(rule3[2][0]) + ". Removing.");
        return "";
      }
      for (var i = 0, l = rules.length; i < l; i++) {
        var rule2 = rules[i];
        var reduced = rule2[1];
        reduced = reduced.replace(HTML_COMMENT_PATTERN, removeHTMLComment.bind(null, rule2));
        if (hasInvalidCharacters(reduced)) {
          warnings.push("Invalid selector '" + rule2[1] + "' at " + formatPosition(rule2[2][0]) + ". Ignoring.");
          continue;
        }
        reduced = removeWhitespace(reduced, format);
        reduced = removeQuotes(reduced);
        if (adjacentSpace && reduced.indexOf("nav") > 0) {
          reduced = reduced.replace(/\+nav(\S|$)/, "+ nav$1");
        }
        if (removeUnsupported && reduced.indexOf(ASTERISK_PLUS_HTML_HACK) > -1) {
          continue;
        }
        if (removeUnsupported && reduced.indexOf(ASTERISK_FIRST_CHILD_PLUS_HTML_HACK) > -1) {
          continue;
        }
        if (reduced.indexOf("*") > -1) {
          reduced = reduced.replace(/\*([:#.[])/g, "$1").replace(/^(:first-child)?\+html/, "*$1+html");
        }
        if (repeated.indexOf(reduced) > -1) {
          continue;
        }
        reduced = replacePseudoClasses(reduced);
        rule2[1] = reduced;
        repeated.push(reduced);
        list2.push(rule2);
      }
      if (list2.length == 1 && list2[0][1].length === 0) {
        warnings.push("Empty selector '" + list2[0][1] + "' at " + formatPosition(list2[0][2][0]) + ". Ignoring.");
        list2 = [];
      }
      return list2;
    }
    module2.exports = tidyRules;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/tidy-block.js
var require_tidy_block = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/tidy-block.js"(exports, module2) {
    var SUPPORTED_COMPACT_BLOCK_MATCHER = /^@media\W/;
    var SUPPORTED_QUOTE_REMOVAL_MATCHER = /^@(?:keyframes|-moz-keyframes|-o-keyframes|-webkit-keyframes)\W/;
    function tidyBlock(values, spaceAfterClosingBrace) {
      var withoutSpaceAfterClosingBrace;
      var withoutQuotes;
      var i;
      for (i = values.length - 1; i >= 0; i--) {
        withoutSpaceAfterClosingBrace = !spaceAfterClosingBrace && SUPPORTED_COMPACT_BLOCK_MATCHER.test(values[i][1]);
        withoutQuotes = SUPPORTED_QUOTE_REMOVAL_MATCHER.test(values[i][1]);
        values[i][1] = values[i][1].replace(/\n|\r\n/g, " ").replace(/\s+/g, " ").replace(/(,|:|\() /g, "$1").replace(/ \)/g, ")");
        if (withoutQuotes) {
          values[i][1] = values[i][1].replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/, "$1").replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/, "$1");
        }
        if (withoutSpaceAfterClosingBrace) {
          values[i][1] = values[i][1].replace(/\) /g, ")");
        }
      }
      return values;
    }
    module2.exports = tidyBlock;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js
var require_tidy_at_rule = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/tidy-at-rule.js"(exports, module2) {
    function tidyAtRule(value) {
      return value.replace(/\s+/g, " ").replace(/url\(\s+/g, "url(").replace(/\s+\)/g, ")").trim();
    }
    module2.exports = tidyAtRule;
  }
});

// node_modules/clean-css/lib/optimizer/hack.js
var require_hack = __commonJS({
  "node_modules/clean-css/lib/optimizer/hack.js"(exports, module2) {
    var Hack = {
      ASTERISK: "asterisk",
      BANG: "bang",
      BACKSLASH: "backslash",
      UNDERSCORE: "underscore"
    };
    module2.exports = Hack;
  }
});

// node_modules/clean-css/lib/optimizer/remove-unused.js
var require_remove_unused = __commonJS({
  "node_modules/clean-css/lib/optimizer/remove-unused.js"(exports, module2) {
    function removeUnused(properties) {
      for (var i = properties.length - 1; i >= 0; i--) {
        var property = properties[i];
        if (property.unused) {
          property.all.splice(property.position, 1);
        }
      }
    }
    module2.exports = removeUnused;
  }
});

// node_modules/clean-css/lib/optimizer/restore-from-optimizing.js
var require_restore_from_optimizing = __commonJS({
  "node_modules/clean-css/lib/optimizer/restore-from-optimizing.js"(exports, module2) {
    var Hack = require_hack();
    var Marker = require_marker();
    var ASTERISK_HACK = "*";
    var BACKSLASH_HACK = "\\";
    var IMPORTANT_TOKEN = "!important";
    var UNDERSCORE_HACK = "_";
    var BANG_HACK = "!ie";
    function restoreFromOptimizing(properties, restoreCallback) {
      var property;
      var restored;
      var current;
      var i;
      for (i = properties.length - 1; i >= 0; i--) {
        property = properties[i];
        if (property.dynamic && property.important) {
          restoreImportant(property);
          continue;
        }
        if (property.dynamic) {
          continue;
        }
        if (property.unused) {
          continue;
        }
        if (!property.dirty && !property.important && !property.hack) {
          continue;
        }
        if (property.optimizable && restoreCallback) {
          restored = restoreCallback(property);
          property.value = restored;
        } else {
          restored = property.value;
        }
        if (property.important) {
          restoreImportant(property);
        }
        if (property.hack) {
          restoreHack(property);
        }
        if ("all" in property) {
          current = property.all[property.position];
          current[1][1] = property.name;
          current.splice(2, current.length - 1);
          Array.prototype.push.apply(current, restored);
        }
      }
    }
    function restoreImportant(property) {
      property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;
    }
    function restoreHack(property) {
      if (property.hack[0] == Hack.UNDERSCORE) {
        property.name = UNDERSCORE_HACK + property.name;
      } else if (property.hack[0] == Hack.ASTERISK) {
        property.name = ASTERISK_HACK + property.name;
      } else if (property.hack[0] == Hack.BACKSLASH) {
        property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];
      } else if (property.hack[0] == Hack.BANG) {
        property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;
      }
    }
    module2.exports = restoreFromOptimizing;
  }
});

// node_modules/clean-css/lib/tokenizer/token.js
var require_token = __commonJS({
  "node_modules/clean-css/lib/tokenizer/token.js"(exports, module2) {
    var Token = {
      AT_RULE: "at-rule",
      AT_RULE_BLOCK: "at-rule-block",
      AT_RULE_BLOCK_SCOPE: "at-rule-block-scope",
      COMMENT: "comment",
      NESTED_BLOCK: "nested-block",
      NESTED_BLOCK_SCOPE: "nested-block-scope",
      PROPERTY: "property",
      PROPERTY_BLOCK: "property-block",
      PROPERTY_NAME: "property-name",
      PROPERTY_VALUE: "property-value",
      RAW: "raw",
      RULE: "rule",
      RULE_SCOPE: "rule-scope"
    };
    module2.exports = Token;
  }
});

// node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js
var require_wrap_for_optimizing = __commonJS({
  "node_modules/clean-css/lib/optimizer/wrap-for-optimizing.js"(exports, module2) {
    var Hack = require_hack();
    var Marker = require_marker();
    var Token = require_token();
    var Match = {
      ASTERISK: "*",
      BACKSLASH: "\\",
      BANG: "!",
      BANG_SUFFIX_PATTERN: /!\w+$/,
      IMPORTANT_TOKEN: "!important",
      IMPORTANT_TOKEN_PATTERN: new RegExp("!important$", "i"),
      IMPORTANT_WORD: "important",
      IMPORTANT_WORD_PATTERN: new RegExp("important$", "i"),
      SUFFIX_BANG_PATTERN: /!$/,
      UNDERSCORE: "_",
      VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/
    };
    function wrapAll(properties, skipProperties) {
      var wrapped = [];
      var single;
      var property;
      var i;
      for (i = properties.length - 1; i >= 0; i--) {
        property = properties[i];
        if (property[0] != Token.PROPERTY) {
          continue;
        }
        if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) {
          continue;
        }
        single = wrapSingle(property);
        single.all = properties;
        single.position = i;
        wrapped.unshift(single);
      }
      return wrapped;
    }
    function someVariableReferences(property) {
      var i, l;
      var value;
      for (i = 2, l = property.length; i < l; i++) {
        value = property[i];
        if (value[0] != Token.PROPERTY_VALUE) {
          continue;
        }
        if (isVariableReference(value[1])) {
          return true;
        }
      }
      return false;
    }
    function isVariableReference(value) {
      return Match.VARIABLE_REFERENCE_PATTERN.test(value);
    }
    function isMultiplex(property) {
      var value;
      var i, l;
      for (i = 3, l = property.length; i < l; i++) {
        value = property[i];
        if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) {
          return true;
        }
      }
      return false;
    }
    function hackFrom(property) {
      var match = false;
      var name = property[1][1];
      var lastValue = property[property.length - 1];
      if (name[0] == Match.UNDERSCORE) {
        match = [Hack.UNDERSCORE];
      } else if (name[0] == Match.ASTERISK) {
        match = [Hack.ASTERISK];
      } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) {
        match = [Hack.BANG];
      } else if (lastValue[1].indexOf(Match.BANG) > 0 && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN) && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) {
        match = [Hack.BANG];
      } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0 && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) {
        match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)];
      } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) {
        match = [Hack.BACKSLASH, lastValue[1].substring(1)];
      }
      return match;
    }
    function isImportant(property) {
      if (property.length < 3) {
        return false;
      }
      var lastValue = property[property.length - 1];
      if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
        return true;
      }
      if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1]) && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) {
        return true;
      }
      return false;
    }
    function stripImportant(property) {
      var lastValue = property[property.length - 1];
      var oneButLastValue = property[property.length - 2];
      if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
        lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, "");
      } else {
        lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, "");
        oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, "");
      }
      if (lastValue[1].length === 0) {
        property.pop();
      }
      if (oneButLastValue[1].length === 0) {
        property.pop();
      }
    }
    function stripPrefixHack(property) {
      property[1][1] = property[1][1].substring(1);
    }
    function stripSuffixHack(property, hackFrom2) {
      var lastValue = property[property.length - 1];
      lastValue[1] = lastValue[1].substring(0, lastValue[1].indexOf(hackFrom2[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG)).trim();
      if (lastValue[1].length === 0) {
        property.pop();
      }
    }
    function wrapSingle(property) {
      var importantProperty = isImportant(property);
      if (importantProperty) {
        stripImportant(property);
      }
      var whichHack = hackFrom(property);
      if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) {
        stripPrefixHack(property);
      } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) {
        stripSuffixHack(property, whichHack);
      }
      return {
        block: property[2] && property[2][0] == Token.PROPERTY_BLOCK,
        components: [],
        dirty: false,
        dynamic: someVariableReferences(property),
        hack: whichHack,
        important: importantProperty,
        name: property[1][1],
        multiplex: property.length > 3 ? isMultiplex(property) : false,
        optimizable: true,
        position: 0,
        shorthand: false,
        unused: false,
        value: property.slice(2)
      };
    }
    module2.exports = {
      all: wrapAll,
      single: wrapSingle
    };
  }
});

// node_modules/clean-css/lib/optimizer/invalid-property-error.js
var require_invalid_property_error = __commonJS({
  "node_modules/clean-css/lib/optimizer/invalid-property-error.js"(exports, module2) {
    function InvalidPropertyError(message) {
      this.name = "InvalidPropertyError";
      this.message = message;
      this.stack = new Error().stack;
    }
    InvalidPropertyError.prototype = Object.create(Error.prototype);
    InvalidPropertyError.prototype.constructor = InvalidPropertyError;
    module2.exports = InvalidPropertyError;
  }
});

// node_modules/clean-css/lib/optimizer/configuration/break-up.js
var require_break_up = __commonJS({
  "node_modules/clean-css/lib/optimizer/configuration/break-up.js"(exports, module2) {
    var InvalidPropertyError = require_invalid_property_error();
    var wrapSingle = require_wrap_for_optimizing().single;
    var Token = require_token();
    var Marker = require_marker();
    var formatPosition = require_format_position();
    function _anyIsInherit(values) {
      var i, l;
      for (i = 0, l = values.length; i < l; i++) {
        if (values[i][1] == "inherit") {
          return true;
        }
      }
      return false;
    }
    function _colorFilter(validator) {
      return function(value) {
        return value[1] == "invert" || validator.isColor(value[1]) || validator.isPrefixed(value[1]);
      };
    }
    function _styleFilter(validator) {
      return function(value) {
        return value[1] != "inherit" && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);
      };
    }
    function _wrapDefault(name, property, configuration) {
      var descriptor = configuration[name];
      if (descriptor.doubleValues && descriptor.defaultValue.length == 2) {
        return wrapSingle([
          Token.PROPERTY,
          [Token.PROPERTY_NAME, name],
          [Token.PROPERTY_VALUE, descriptor.defaultValue[0]],
          [Token.PROPERTY_VALUE, descriptor.defaultValue[1]]
        ]);
      }
      if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
        return wrapSingle([
          Token.PROPERTY,
          [Token.PROPERTY_NAME, name],
          [Token.PROPERTY_VALUE, descriptor.defaultValue[0]]
        ]);
      }
      return wrapSingle([
        Token.PROPERTY,
        [Token.PROPERTY_NAME, name],
        [Token.PROPERTY_VALUE, descriptor.defaultValue]
      ]);
    }
    function _widthFilter(validator) {
      return function(value) {
        return value[1] != "inherit" && (validator.isWidth(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) && !validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);
      };
    }
    function animation(property, configuration, validator) {
      var duration = _wrapDefault(property.name + "-duration", property, configuration);
      var timing = _wrapDefault(property.name + "-timing-function", property, configuration);
      var delay = _wrapDefault(property.name + "-delay", property, configuration);
      var iteration = _wrapDefault(property.name + "-iteration-count", property, configuration);
      var direction = _wrapDefault(property.name + "-direction", property, configuration);
      var fill = _wrapDefault(property.name + "-fill-mode", property, configuration);
      var play = _wrapDefault(property.name + "-play-state", property, configuration);
      var name = _wrapDefault(property.name + "-name", property, configuration);
      var components = [duration, timing, delay, iteration, direction, fill, play, name];
      var values = property.value;
      var value;
      var durationSet = false;
      var timingSet = false;
      var delaySet = false;
      var iterationSet = false;
      var directionSet = false;
      var fillSet = false;
      var playSet = false;
      var nameSet = false;
      var i;
      var l;
      if (property.value.length == 1 && property.value[0][1] == "inherit") {
        duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value;
        return components;
      }
      if (values.length > 1 && _anyIsInherit(values)) {
        throw new InvalidPropertyError("Invalid animation values at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      for (i = 0, l = values.length; i < l; i++) {
        value = values[i];
        if (validator.isTime(value[1]) && !durationSet) {
          duration.value = [value];
          durationSet = true;
        } else if (validator.isTime(value[1]) && !delaySet) {
          delay.value = [value];
          delaySet = true;
        } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {
          timing.value = [value];
          timingSet = true;
        } else if ((validator.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) {
          iteration.value = [value];
          iterationSet = true;
        } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) {
          direction.value = [value];
          directionSet = true;
        } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) {
          fill.value = [value];
          fillSet = true;
        } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) {
          play.value = [value];
          playSet = true;
        } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) {
          name.value = [value];
          nameSet = true;
        } else {
          throw new InvalidPropertyError("Invalid animation value at " + formatPosition(value[2][0]) + ". Ignoring.");
        }
      }
      return components;
    }
    function background(property, configuration, validator) {
      var image = _wrapDefault("background-image", property, configuration);
      var position = _wrapDefault("background-position", property, configuration);
      var size = _wrapDefault("background-size", property, configuration);
      var repeat = _wrapDefault("background-repeat", property, configuration);
      var attachment = _wrapDefault("background-attachment", property, configuration);
      var origin = _wrapDefault("background-origin", property, configuration);
      var clip = _wrapDefault("background-clip", property, configuration);
      var color = _wrapDefault("background-color", property, configuration);
      var components = [image, position, size, repeat, attachment, origin, clip, color];
      var values = property.value;
      var positionSet = false;
      var clipSet = false;
      var originSet = false;
      var repeatSet = false;
      var anyValueSet = false;
      if (property.value.length == 1 && property.value[0][1] == "inherit") {
        color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value;
        return components;
      }
      if (property.value.length == 1 && property.value[0][1] == "0 0") {
        return components;
      }
      for (var i = values.length - 1; i >= 0; i--) {
        var value = values[i];
        if (validator.isBackgroundAttachmentKeyword(value[1])) {
          attachment.value = [value];
          anyValueSet = true;
        } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) {
          if (clipSet) {
            origin.value = [value];
            originSet = true;
          } else {
            clip.value = [value];
            clipSet = true;
          }
          anyValueSet = true;
        } else if (validator.isBackgroundRepeatKeyword(value[1])) {
          if (repeatSet) {
            repeat.value.unshift(value);
          } else {
            repeat.value = [value];
            repeatSet = true;
          }
          anyValueSet = true;
        } else if (validator.isBackgroundPositionKeyword(value[1]) || validator.isBackgroundSizeKeyword(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) {
          if (i > 0) {
            var previousValue = values[i - 1];
            if (previousValue[1] == Marker.FORWARD_SLASH) {
              size.value = [value];
            } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) {
              size.value = [previousValue, value];
              i -= 2;
            } else {
              if (!positionSet) {
                position.value = [];
              }
              position.value.unshift(value);
              positionSet = true;
            }
          } else {
            if (!positionSet) {
              position.value = [];
            }
            position.value.unshift(value);
            positionSet = true;
          }
          anyValueSet = true;
        } else if ((color.value[0][1] == configuration[color.name].defaultValue || color.value[0][1] == "none") && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) {
          color.value = [value];
          anyValueSet = true;
        } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) {
          image.value = [value];
          anyValueSet = true;
        }
      }
      if (clipSet && !originSet) {
        origin.value = clip.value.slice(0);
      }
      if (!anyValueSet) {
        throw new InvalidPropertyError("Invalid background value at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      return components;
    }
    function borderRadius(property, configuration) {
      var values = property.value;
      var splitAt = -1;
      for (var i = 0, l = values.length; i < l; i++) {
        if (values[i][1] == Marker.FORWARD_SLASH) {
          splitAt = i;
          break;
        }
      }
      if (splitAt === 0 || splitAt === values.length - 1) {
        throw new InvalidPropertyError("Invalid border-radius value at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      var target = _wrapDefault(property.name, property, configuration);
      target.value = splitAt > -1 ? values.slice(0, splitAt) : values.slice(0);
      target.components = fourValues(target, configuration);
      var remainder = _wrapDefault(property.name, property, configuration);
      remainder.value = splitAt > -1 ? values.slice(splitAt + 1) : values.slice(0);
      remainder.components = fourValues(remainder, configuration);
      for (var j = 0; j < 4; j++) {
        target.components[j].multiplex = true;
        target.components[j].value = target.components[j].value.concat(remainder.components[j].value);
      }
      return target.components;
    }
    function font(property, configuration, validator) {
      var style = _wrapDefault("font-style", property, configuration);
      var variant = _wrapDefault("font-variant", property, configuration);
      var weight = _wrapDefault("font-weight", property, configuration);
      var stretch = _wrapDefault("font-stretch", property, configuration);
      var size = _wrapDefault("font-size", property, configuration);
      var height = _wrapDefault("line-height", property, configuration);
      var family = _wrapDefault("font-family", property, configuration);
      var components = [style, variant, weight, stretch, size, height, family];
      var values = property.value;
      var fuzzyMatched = 4;
      var index = 0;
      var isStretchSet = false;
      var isStretchValid;
      var isStyleSet = false;
      var isStyleValid;
      var isVariantSet = false;
      var isVariantValid;
      var isWeightSet = false;
      var isWeightValid;
      var appendableFamilyName = false;
      if (!values[index]) {
        throw new InvalidPropertyError("Missing font values at " + formatPosition(property.all[property.position][1][2][0]) + ". Ignoring.");
      }
      if (values.length == 1 && values[0][1] == "inherit") {
        style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
        return components;
      }
      if (values.length == 1 && (validator.isFontKeyword(values[0][1]) || validator.isGlobal(values[0][1]) || validator.isPrefixed(values[0][1]))) {
        values[0][1] = Marker.INTERNAL + values[0][1];
        style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
        return components;
      }
      if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) {
        throw new InvalidPropertyError("Invalid font values at " + formatPosition(property.all[property.position][1][2][0]) + ". Ignoring.");
      }
      if (values.length > 1 && _anyIsInherit(values)) {
        throw new InvalidPropertyError("Invalid font values at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      while (index < fuzzyMatched) {
        isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
        isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
        isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
        isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
        if (isStyleValid && !isStyleSet) {
          style.value = [values[index]];
          isStyleSet = true;
        } else if (isVariantValid && !isVariantSet) {
          variant.value = [values[index]];
          isVariantSet = true;
        } else if (isWeightValid && !isWeightSet) {
          weight.value = [values[index]];
          isWeightSet = true;
        } else if (isStretchValid && !isStretchSet) {
          stretch.value = [values[index]];
          isStretchSet = true;
        } else if (isStyleValid && isStyleSet || isVariantValid && isVariantSet || isWeightValid && isWeightSet || isStretchValid && isStretchSet) {
          throw new InvalidPropertyError("Invalid font style / variant / weight / stretch value at " + formatPosition(values[0][2][0]) + ". Ignoring.");
        } else {
          break;
        }
        index++;
      }
      if (validator.isFontSizeKeyword(values[index][1]) || validator.isUnit(values[index][1]) && !validator.isDynamicUnit(values[index][1])) {
        size.value = [values[index]];
        index++;
      } else {
        throw new InvalidPropertyError("Missing font size at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      if (!values[index]) {
        throw new InvalidPropertyError("Missing font family at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      if (values[index] && values[index][1] == Marker.FORWARD_SLASH && values[index + 1] && (validator.isLineHeightKeyword(values[index + 1][1]) || validator.isUnit(values[index + 1][1]) || validator.isNumber(values[index + 1][1]))) {
        height.value = [values[index + 1]];
        index++;
        index++;
      }
      family.value = [];
      while (values[index]) {
        if (values[index][1] == Marker.COMMA) {
          appendableFamilyName = false;
        } else {
          if (appendableFamilyName) {
            family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1];
          } else {
            family.value.push(values[index]);
          }
          appendableFamilyName = true;
        }
        index++;
      }
      if (family.value.length === 0) {
        throw new InvalidPropertyError("Missing font family at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      return components;
    }
    function _anyIsFontSize(values, validator) {
      var value;
      var i, l;
      for (i = 0, l = values.length; i < l; i++) {
        value = values[i];
        if (validator.isFontSizeKeyword(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1]) || validator.isFunction(value[1])) {
          return true;
        }
      }
      return false;
    }
    function _anyIsFontFamily(values, validator) {
      var value;
      var i, l;
      for (i = 0, l = values.length; i < l; i++) {
        value = values[i];
        if (validator.isIdentifier(value[1]) || validator.isQuotedText(value[1])) {
          return true;
        }
      }
      return false;
    }
    function fourValues(property, configuration) {
      var componentNames = configuration[property.name].components;
      var components = [];
      var value = property.value;
      if (value.length < 1) {
        return [];
      }
      if (value.length < 2) {
        value[1] = value[0].slice(0);
      }
      if (value.length < 3) {
        value[2] = value[0].slice(0);
      }
      if (value.length < 4) {
        value[3] = value[1].slice(0);
      }
      for (var i = componentNames.length - 1; i >= 0; i--) {
        var component = wrapSingle([
          Token.PROPERTY,
          [Token.PROPERTY_NAME, componentNames[i]]
        ]);
        component.value = [value[i]];
        components.unshift(component);
      }
      return components;
    }
    function multiplex(splitWith) {
      return function(property, configuration, validator) {
        var splitsAt = [];
        var values = property.value;
        var i, j, l, m;
        for (i = 0, l = values.length; i < l; i++) {
          if (values[i][1] == ",") {
            splitsAt.push(i);
          }
        }
        if (splitsAt.length === 0) {
          return splitWith(property, configuration, validator);
        }
        var splitComponents = [];
        for (i = 0, l = splitsAt.length; i <= l; i++) {
          var from = i === 0 ? 0 : splitsAt[i - 1] + 1;
          var to = i < l ? splitsAt[i] : values.length;
          var _property = _wrapDefault(property.name, property, configuration);
          _property.value = values.slice(from, to);
          if (_property.value.length > 0) {
            splitComponents.push(splitWith(_property, configuration, validator));
          }
        }
        var components = splitComponents[0];
        for (i = 0, l = components.length; i < l; i++) {
          components[i].multiplex = true;
          for (j = 1, m = splitComponents.length; j < m; j++) {
            components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
            Array.prototype.push.apply(components[i].value, splitComponents[j][i].value);
          }
        }
        return components;
      };
    }
    function listStyle(property, configuration, validator) {
      var type = _wrapDefault("list-style-type", property, configuration);
      var position = _wrapDefault("list-style-position", property, configuration);
      var image = _wrapDefault("list-style-image", property, configuration);
      var components = [type, position, image];
      if (property.value.length == 1 && property.value[0][1] == "inherit") {
        type.value = position.value = image.value = [property.value[0]];
        return components;
      }
      var values = property.value.slice(0);
      var total = values.length;
      var index = 0;
      for (index = 0, total = values.length; index < total; index++) {
        if (validator.isUrl(values[index][1]) || values[index][1] == "0") {
          image.value = [values[index]];
          values.splice(index, 1);
          break;
        }
      }
      for (index = 0, total = values.length; index < total; index++) {
        if (validator.isListStylePositionKeyword(values[index][1])) {
          position.value = [values[index]];
          values.splice(index, 1);
          break;
        }
      }
      if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) {
        type.value = [values[0]];
      }
      return components;
    }
    function transition(property, configuration, validator) {
      var prop = _wrapDefault(property.name + "-property", property, configuration);
      var duration = _wrapDefault(property.name + "-duration", property, configuration);
      var timing = _wrapDefault(property.name + "-timing-function", property, configuration);
      var delay = _wrapDefault(property.name + "-delay", property, configuration);
      var components = [prop, duration, timing, delay];
      var values = property.value;
      var value;
      var durationSet = false;
      var delaySet = false;
      var propSet = false;
      var timingSet = false;
      var i;
      var l;
      if (property.value.length == 1 && property.value[0][1] == "inherit") {
        prop.value = duration.value = timing.value = delay.value = property.value;
        return components;
      }
      if (values.length > 1 && _anyIsInherit(values)) {
        throw new InvalidPropertyError("Invalid animation values at " + formatPosition(values[0][2][0]) + ". Ignoring.");
      }
      for (i = 0, l = values.length; i < l; i++) {
        value = values[i];
        if (validator.isTime(value[1]) && !durationSet) {
          duration.value = [value];
          durationSet = true;
        } else if (validator.isTime(value[1]) && !delaySet) {
          delay.value = [value];
          delaySet = true;
        } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {
          timing.value = [value];
          timingSet = true;
        } else if (validator.isIdentifier(value[1]) && !propSet) {
          prop.value = [value];
          propSet = true;
        } else {
          throw new InvalidPropertyError("Invalid animation value at " + formatPosition(value[2][0]) + ". Ignoring.");
        }
      }
      return components;
    }
    function widthStyleColor(property, configuration, validator) {
      var descriptor = configuration[property.name];
      var components = [
        _wrapDefault(descriptor.components[0], property, configuration),
        _wrapDefault(descriptor.components[1], property, configuration),
        _wrapDefault(descriptor.components[2], property, configuration)
      ];
      var color, style, width;
      for (var i = 0; i < 3; i++) {
        var component = components[i];
        if (component.name.indexOf("color") > 0) {
          color = component;
        } else if (component.name.indexOf("style") > 0) {
          style = component;
        } else {
          width = component;
        }
      }
      if (property.value.length == 1 && property.value[0][1] == "inherit" || property.value.length == 3 && property.value[0][1] == "inherit" && property.value[1][1] == "inherit" && property.value[2][1] == "inherit") {
        color.value = style.value = width.value = [property.value[0]];
        return components;
      }
      var values = property.value.slice(0);
      var match, matches;
      if (values.length > 0) {
        matches = values.filter(_widthFilter(validator));
        match = matches.length > 1 && (matches[0][1] == "none" || matches[0][1] == "auto") ? matches[1] : matches[0];
        if (match) {
          width.value = [match];
          values.splice(values.indexOf(match), 1);
        }
      }
      if (values.length > 0) {
        match = values.filter(_styleFilter(validator))[0];
        if (match) {
          style.value = [match];
          values.splice(values.indexOf(match), 1);
        }
      }
      if (values.length > 0) {
        match = values.filter(_colorFilter(validator))[0];
        if (match) {
          color.value = [match];
          values.splice(values.indexOf(match), 1);
        }
      }
      return components;
    }
    module2.exports = {
      animation,
      background,
      border: widthStyleColor,
      borderRadius,
      font,
      fourValues,
      listStyle,
      multiplex,
      outline: widthStyleColor,
      transition
    };
  }
});

// node_modules/clean-css/lib/optimizer/vendor-prefixes.js
var require_vendor_prefixes = __commonJS({
  "node_modules/clean-css/lib/optimizer/vendor-prefixes.js"(exports, module2) {
    var VENDOR_PREFIX_PATTERN = /(?:^|\W)(-\w+-)/g;
    function unique(value) {
      var prefixes = [];
      var match;
      while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {
        if (prefixes.indexOf(match[0]) == -1) {
          prefixes.push(match[0]);
        }
      }
      return prefixes;
    }
    function same(value1, value2) {
      return unique(value1).sort().join(",") == unique(value2).sort().join(",");
    }
    module2.exports = {
      unique,
      same
    };
  }
});

// node_modules/clean-css/lib/optimizer/configuration/properties/understandable.js
var require_understandable = __commonJS({
  "node_modules/clean-css/lib/optimizer/configuration/properties/understandable.js"(exports, module2) {
    var sameVendorPrefixes = require_vendor_prefixes().same;
    function understandable(validator, value1, value2, _position, isPaired) {
      if (!sameVendorPrefixes(value1, value2)) {
        return false;
      }
      if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) {
        return false;
      }
      return true;
    }
    module2.exports = understandable;
  }
});

// node_modules/clean-css/lib/optimizer/configuration/can-override.js
var require_can_override = __commonJS({
  "node_modules/clean-css/lib/optimizer/configuration/can-override.js"(exports, module2) {
    var understandable = require_understandable();
    function animationIterationCount(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2);
    }
    function animationName(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2);
    }
    function areSameFunction(validator, value1, value2) {
      if (!validator.isFunction(value1) || !validator.isFunction(value2)) {
        return false;
      }
      var function1Name = value1.substring(0, value1.indexOf("("));
      var function2Name = value2.substring(0, value2.indexOf("("));
      var function1Value = value1.substring(function1Name.length + 1, value1.length - 1);
      var function2Value = value2.substring(function2Name.length + 1, value2.length - 1);
      if (validator.isFunction(function1Value) || validator.isFunction(function2Value)) {
        return function1Name === function2Name && areSameFunction(validator, function1Value, function2Value);
      }
      return function1Name === function2Name;
    }
    function backgroundPosition(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) {
        return true;
      }
      return unit(validator, value1, value2);
    }
    function backgroundSize(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) {
        return true;
      }
      return unit(validator, value1, value2);
    }
    function color(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) {
        return false;
      }
      if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) {
        return false;
      }
      if (!validator.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(value2))) {
        return false;
      }
      if (validator.isColor(value1) && validator.isColor(value2)) {
        return true;
      }
      return sameFunctionOrValue(validator, value1, value2);
    }
    function components(overrideCheckers) {
      return function(validator, value1, value2, position) {
        return overrideCheckers[position](validator, value1, value2);
      };
    }
    function fontFamily(validator, value1, value2) {
      return understandable(validator, value1, value2, 0, true);
    }
    function image(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (validator.isImage(value2)) {
        return true;
      }
      if (validator.isImage(value1)) {
        return false;
      }
      return sameFunctionOrValue(validator, value1, value2);
    }
    function keyword(propertyName2) {
      return function(validator, value1, value2) {
        if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName2)(value2)) {
          return false;
        }
        if (validator.isVariable(value1) && validator.isVariable(value2)) {
          return true;
        }
        return validator.isKeyword(propertyName2)(value2);
      };
    }
    function keywordWithGlobal(propertyName2) {
      return function(validator, value1, value2) {
        if (!understandable(validator, value1, value2, 0, true) && !(validator.isKeyword(propertyName2)(value2) || validator.isGlobal(value2))) {
          return false;
        }
        if (validator.isVariable(value1) && validator.isVariable(value2)) {
          return true;
        }
        return validator.isKeyword(propertyName2)(value2) || validator.isGlobal(value2);
      };
    }
    function propertyName(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isIdentifier(value2);
    }
    function sameFunctionOrValue(validator, value1, value2) {
      return areSameFunction(validator, value1, value2) ? true : value1 === value2;
    }
    function textShadow(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2);
    }
    function time(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (validator.isTime(value1) && !validator.isTime(value2)) {
        return false;
      }
      if (validator.isTime(value2)) {
        return true;
      }
      if (validator.isTime(value1)) {
        return false;
      }
      if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) {
        return true;
      }
      return sameFunctionOrValue(validator, value1, value2);
    }
    function timingFunction(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isTimingFunction(value2) || validator.isGlobal(value2);
    }
    function unit(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if (validator.isUnit(value1) && !validator.isUnit(value2)) {
        return false;
      }
      if (validator.isUnit(value2)) {
        return true;
      }
      if (validator.isUnit(value1)) {
        return false;
      }
      if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) {
        return true;
      }
      return sameFunctionOrValue(validator, value1, value2);
    }
    function unitOrKeywordWithGlobal(propertyName2) {
      var byKeyword = keywordWithGlobal(propertyName2);
      return function(validator, value1, value2) {
        return unit(validator, value1, value2) || byKeyword(validator, value1, value2);
      };
    }
    function unitOrNumber(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isNumber(value2))) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      if ((validator.isUnit(value1) || validator.isNumber(value1)) && !(validator.isUnit(value2) || validator.isNumber(value2))) {
        return false;
      }
      if (validator.isUnit(value2) || validator.isNumber(value2)) {
        return true;
      }
      if (validator.isUnit(value1) || validator.isNumber(value1)) {
        return false;
      }
      if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) {
        return true;
      }
      return sameFunctionOrValue(validator, value1, value2);
    }
    function zIndex(validator, value1, value2) {
      if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) {
        return false;
      }
      if (validator.isVariable(value1) && validator.isVariable(value2)) {
        return true;
      }
      return validator.isZIndex(value2);
    }
    module2.exports = {
      generic: {
        color,
        components,
        image,
        propertyName,
        time,
        timingFunction,
        unit,
        unitOrNumber
      },
      property: {
        animationDirection: keywordWithGlobal("animation-direction"),
        animationFillMode: keyword("animation-fill-mode"),
        animationIterationCount,
        animationName,
        animationPlayState: keywordWithGlobal("animation-play-state"),
        backgroundAttachment: keyword("background-attachment"),
        backgroundClip: keywordWithGlobal("background-clip"),
        backgroundOrigin: keyword("background-origin"),
        backgroundPosition,
        backgroundRepeat: keyword("background-repeat"),
        backgroundSize,
        bottom: unitOrKeywordWithGlobal("bottom"),
        borderCollapse: keyword("border-collapse"),
        borderStyle: keywordWithGlobal("*-style"),
        clear: keywordWithGlobal("clear"),
        cursor: keywordWithGlobal("cursor"),
        display: keywordWithGlobal("display"),
        float: keywordWithGlobal("float"),
        left: unitOrKeywordWithGlobal("left"),
        fontFamily,
        fontStretch: keywordWithGlobal("font-stretch"),
        fontStyle: keywordWithGlobal("font-style"),
        fontVariant: keywordWithGlobal("font-variant"),
        fontWeight: keywordWithGlobal("font-weight"),
        listStyleType: keywordWithGlobal("list-style-type"),
        listStylePosition: keywordWithGlobal("list-style-position"),
        outlineStyle: keywordWithGlobal("*-style"),
        overflow: keywordWithGlobal("overflow"),
        position: keywordWithGlobal("position"),
        right: unitOrKeywordWithGlobal("right"),
        textAlign: keywordWithGlobal("text-align"),
        textDecoration: keywordWithGlobal("text-decoration"),
        textOverflow: keywordWithGlobal("text-overflow"),
        textShadow,
        top: unitOrKeywordWithGlobal("top"),
        transform: sameFunctionOrValue,
        verticalAlign: unitOrKeywordWithGlobal("vertical-align"),
        visibility: keywordWithGlobal("visibility"),
        whiteSpace: keywordWithGlobal("white-space"),
        zIndex
      }
    };
  }
});

// node_modules/clean-css/lib/optimizer/clone.js
var require_clone = __commonJS({
  "node_modules/clean-css/lib/optimizer/clone.js"(exports, module2) {
    var wrapSingle = require_wrap_for_optimizing().single;
    var Token = require_token();
    function deep(property) {
      var cloned = shallow(property);
      for (var i = property.components.length - 1; i >= 0; i--) {
        var component = shallow(property.components[i]);
        component.value = property.components[i].value.slice(0);
        cloned.components.unshift(component);
      }
      cloned.dirty = true;
      cloned.value = property.value.slice(0);
      return cloned;
    }
    function shallow(property) {
      var cloned = wrapSingle([
        Token.PROPERTY,
        [Token.PROPERTY_NAME, property.name]
      ]);
      cloned.important = property.important;
      cloned.hack = property.hack;
      cloned.unused = false;
      return cloned;
    }
    module2.exports = {
      deep,
      shallow
    };
  }
});

// node_modules/clean-css/lib/optimizer/configuration/restore.js
var require_restore = __commonJS({
  "node_modules/clean-css/lib/optimizer/configuration/restore.js"(exports, module2) {
    var shallowClone = require_clone().shallow;
    var Token = require_token();
    var Marker = require_marker();
    function isInheritOnly(values) {
      for (var i = 0, l = values.length; i < l; i++) {
        var value = values[i][1];
        if (value != "inherit" && value != Marker.COMMA && value != Marker.FORWARD_SLASH) {
          return false;
        }
      }
      return true;
    }
    function background(property, configuration, lastInMultiplex) {
      var components = property.components;
      var restored = [];
      var needsOne, needsBoth;
      function restoreValue(component2) {
        Array.prototype.unshift.apply(restored, component2.value);
      }
      function isDefaultValue(component2) {
        var descriptor = configuration[component2.name];
        if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
          return component2.value[0][1] == descriptor.defaultValue[0] && (component2.value[1] ? component2.value[1][1] == descriptor.defaultValue[0] : true);
        }
        if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {
          return component2.value[0][1] == descriptor.defaultValue[0] && (component2.value[1] ? component2.value[1][1] : component2.value[0][1]) == descriptor.defaultValue[1];
        }
        return component2.value[0][1] == descriptor.defaultValue;
      }
      for (var i = components.length - 1; i >= 0; i--) {
        var component = components[i];
        var isDefault2 = isDefaultValue(component);
        if (component.name == "background-clip") {
          var originComponent = components[i - 1];
          var isOriginDefault = isDefaultValue(originComponent);
          needsOne = component.value[0][1] == originComponent.value[0][1];
          needsBoth = !needsOne && (isOriginDefault && !isDefault2 || !isOriginDefault && !isDefault2 || !isOriginDefault && isDefault2 && component.value[0][1] != originComponent.value[0][1]);
          if (needsOne) {
            restoreValue(originComponent);
          } else if (needsBoth) {
            restoreValue(component);
            restoreValue(originComponent);
          }
          i--;
        } else if (component.name == "background-size") {
          var positionComponent = components[i - 1];
          var isPositionDefault = isDefaultValue(positionComponent);
          needsOne = !isPositionDefault && isDefault2;
          needsBoth = !needsOne && (isPositionDefault && !isDefault2 || !isPositionDefault && !isDefault2);
          if (needsOne) {
            restoreValue(positionComponent);
          } else if (needsBoth) {
            restoreValue(component);
            restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);
            restoreValue(positionComponent);
          } else if (positionComponent.value.length == 1) {
            restoreValue(positionComponent);
          }
          i--;
        } else {
          if (isDefault2 || configuration[component.name].multiplexLastOnly && !lastInMultiplex) {
            continue;
          }
          restoreValue(component);
        }
      }
      if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == "0") {
        restored.push(property.value[0]);
      }
      if (restored.length === 0) {
        restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]);
      }
      if (isInheritOnly(restored)) {
        return [restored[0]];
      }
      return restored;
    }
    function borderRadius(property) {
      if (property.multiplex) {
        var horizontal = shallowClone(property);
        var vertical = shallowClone(property);
        for (var i = 0; i < 4; i++) {
          var component = property.components[i];
          var horizontalComponent = shallowClone(property);
          horizontalComponent.value = [component.value[0]];
          horizontal.components.push(horizontalComponent);
          var verticalComponent = shallowClone(property);
          verticalComponent.value = [component.value[1] || component.value[0]];
          vertical.components.push(verticalComponent);
        }
        var horizontalValues = fourValues(horizontal);
        var verticalValues = fourValues(vertical);
        if (horizontalValues.length == verticalValues.length && horizontalValues[0][1] == verticalValues[0][1] && (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) && (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) && (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {
          return horizontalValues;
        }
        return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);
      }
      return fourValues(property);
    }
    function font(property, configuration) {
      var components = property.components;
      var restored = [];
      var component;
      var componentIndex = 0;
      var fontFamilyIndex = 0;
      if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) {
        property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length);
        return property.value;
      }
      while (componentIndex < 4) {
        component = components[componentIndex];
        if (component.value[0][1] != configuration[component.name].defaultValue) {
          Array.prototype.push.apply(restored, component.value);
        }
        componentIndex++;
      }
      Array.prototype.push.apply(restored, components[componentIndex].value);
      componentIndex++;
      if (components[componentIndex].value[0][1] != configuration[components[componentIndex].name].defaultValue) {
        Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]);
        Array.prototype.push.apply(restored, components[componentIndex].value);
      }
      componentIndex++;
      while (components[componentIndex].value[fontFamilyIndex]) {
        restored.push(components[componentIndex].value[fontFamilyIndex]);
        if (components[componentIndex].value[fontFamilyIndex + 1]) {
          restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
        }
        fontFamilyIndex++;
      }
      if (isInheritOnly(restored)) {
        return [restored[0]];
      }
      return restored;
    }
    function fourValues(property) {
      var components = property.components;
      var value1 = components[0].value[0];
      var value2 = components[1].value[0];
      var value3 = components[2].value[0];
      var value4 = components[3].value[0];
      if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {
        return [value1];
      }
      if (value1[1] == value3[1] && value2[1] == value4[1]) {
        return [value1, value2];
      }
      if (value2[1] == value4[1]) {
        return [value1, value2, value3];
      }
      return [value1, value2, value3, value4];
    }
    function multiplex(restoreWith) {
      return function(property, configuration) {
        if (!property.multiplex) {
          return restoreWith(property, configuration, true);
        }
        var multiplexSize = 0;
        var restored = [];
        var componentMultiplexSoFar = {};
        var i, l;
        for (i = 0, l = property.components[0].value.length; i < l; i++) {
          if (property.components[0].value[i][1] == Marker.COMMA) {
            multiplexSize++;
          }
        }
        for (i = 0; i <= multiplexSize; i++) {
          var _property = shallowClone(property);
          for (var j = 0, m = property.components.length; j < m; j++) {
            var componentToClone = property.components[j];
            var _component = shallowClone(componentToClone);
            _property.components.push(_component);
            for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {
              if (componentToClone.value[k][1] == Marker.COMMA) {
                componentMultiplexSoFar[_component.name] = k + 1;
                break;
              }
              _component.value.push(componentToClone.value[k]);
            }
          }
          var lastInMultiplex = i == multiplexSize;
          var _restored = restoreWith(_property, configuration, lastInMultiplex);
          Array.prototype.push.apply(restored, _restored);
          if (i < multiplexSize) {
            restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
          }
        }
        return restored;
      };
    }
    function withoutDefaults(property, configuration) {
      var components = property.components;
      var restored = [];
      for (var i = components.length - 1; i >= 0; i--) {
        var component = components[i];
        var descriptor = configuration[component.name];
        if (component.value[0][1] != descriptor.defaultValue || "keepUnlessDefault" in descriptor && !isDefault(components, configuration, descriptor.keepUnlessDefault)) {
          restored.unshift(component.value[0]);
        }
      }
      if (restored.length === 0) {
        restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]);
      }
      if (isInheritOnly(restored)) {
        return [restored[0]];
      }
      return restored;
    }
    function isDefault(components, configuration, propertyName) {
      var component;
      var i, l;
      for (i = 0, l = components.length; i < l; i++) {
        component = components[i];
        if (component.name == propertyName && component.value[0][1] == configuration[propertyName].defaultValue) {
          return true;
        }
      }
      return false;
    }
    module2.exports = {
      background,
      borderRadius,
      font,
      fourValues,
      multiplex,
      withoutDefaults
    };
  }
});

// node_modules/clean-css/lib/options/rounding-precision.js
var require_rounding_precision = __commonJS({
  "node_modules/clean-css/lib/options/rounding-precision.js"(exports, module2) {
    var override = require_override();
    var INTEGER_PATTERN = /^\d+$/;
    var ALL_UNITS = ["*", "all"];
    var DEFAULT_PRECISION = "off";
    var DIRECTIVES_SEPARATOR = ",";
    var DIRECTIVE_VALUE_SEPARATOR = "=";
    function roundingPrecisionFrom(source) {
      return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source));
    }
    function defaults(value) {
      return {
        ch: value,
        cm: value,
        em: value,
        ex: value,
        in: value,
        mm: value,
        pc: value,
        pt: value,
        px: value,
        q: value,
        rem: value,
        vh: value,
        vmax: value,
        vmin: value,
        vw: value,
        "%": value
      };
    }
    function buildPrecisionFrom(source) {
      if (source === null || source === void 0) {
        return {};
      }
      if (typeof source == "boolean") {
        return {};
      }
      if (typeof source == "number" && source == -1) {
        return defaults(DEFAULT_PRECISION);
      }
      if (typeof source == "number") {
        return defaults(source);
      }
      if (typeof source == "string" && INTEGER_PATTERN.test(source)) {
        return defaults(parseInt(source));
      }
      if (typeof source == "string" && source == DEFAULT_PRECISION) {
        return defaults(DEFAULT_PRECISION);
      }
      if (typeof source == "object") {
        return source;
      }
      return source.split(DIRECTIVES_SEPARATOR).reduce(function(accumulator, directive) {
        var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR);
        var name = directiveParts[0];
        var value = parseInt(directiveParts[1]);
        if (Number.isNaN(value) || value == -1) {
          value = DEFAULT_PRECISION;
        }
        if (ALL_UNITS.indexOf(name) > -1) {
          accumulator = override(accumulator, defaults(value));
        } else {
          accumulator[name] = value;
        }
        return accumulator;
      }, {});
    }
    module2.exports = {
      DEFAULT: DEFAULT_PRECISION,
      roundingPrecisionFrom
    };
  }
});

// node_modules/clean-css/lib/options/optimization-level.js
var require_optimization_level = __commonJS({
  "node_modules/clean-css/lib/options/optimization-level.js"(exports, module2) {
    var roundingPrecisionFrom = require_rounding_precision().roundingPrecisionFrom;
    var override = require_override();
    var OptimizationLevel = {
      Zero: "0",
      One: "1",
      Two: "2"
    };
    var DEFAULTS = {};
    DEFAULTS[OptimizationLevel.Zero] = {};
    DEFAULTS[OptimizationLevel.One] = {
      cleanupCharsets: true,
      normalizeUrls: true,
      optimizeBackground: true,
      optimizeBorderRadius: true,
      optimizeFilter: true,
      optimizeFontWeight: true,
      optimizeOutline: true,
      removeEmpty: true,
      removeNegativePaddings: true,
      removeQuotes: true,
      removeWhitespace: true,
      replaceMultipleZeros: true,
      replaceTimeUnits: true,
      replaceZeroUnits: true,
      roundingPrecision: roundingPrecisionFrom(void 0),
      selectorsSortingMethod: "standard",
      specialComments: "all",
      tidyAtRules: true,
      tidyBlockScopes: true,
      tidySelectors: true,
      variableValueOptimizers: []
    };
    DEFAULTS[OptimizationLevel.Two] = {
      mergeAdjacentRules: true,
      mergeIntoShorthands: true,
      mergeMedia: true,
      mergeNonAdjacentRules: true,
      mergeSemantically: false,
      overrideProperties: true,
      removeEmpty: true,
      reduceNonAdjacentRules: true,
      removeDuplicateFontRules: true,
      removeDuplicateMediaBlocks: true,
      removeDuplicateRules: true,
      removeUnusedAtRules: false,
      restructureRules: false,
      skipProperties: []
    };
    var ALL_KEYWORD_1 = "*";
    var ALL_KEYWORD_2 = "all";
    var FALSE_KEYWORD_1 = "false";
    var FALSE_KEYWORD_2 = "off";
    var TRUE_KEYWORD_1 = "true";
    var TRUE_KEYWORD_2 = "on";
    var LIST_VALUE_SEPARATOR = ",";
    var OPTION_SEPARATOR = ";";
    var OPTION_VALUE_SEPARATOR = ":";
    function optimizationLevelFrom(source) {
      var level = override(DEFAULTS, {});
      var Zero = OptimizationLevel.Zero;
      var One = OptimizationLevel.One;
      var Two = OptimizationLevel.Two;
      if (source === void 0) {
        delete level[Two];
        return level;
      }
      if (typeof source == "string") {
        source = parseInt(source);
      }
      if (typeof source == "number" && source === parseInt(Two)) {
        return level;
      }
      if (typeof source == "number" && source === parseInt(One)) {
        delete level[Two];
        return level;
      }
      if (typeof source == "number" && source === parseInt(Zero)) {
        delete level[Two];
        delete level[One];
        return level;
      }
      if (typeof source == "object") {
        source = covertValuesToHashes(source);
      }
      if (One in source && "roundingPrecision" in source[One]) {
        source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision);
      }
      if (Two in source && "skipProperties" in source[Two] && typeof source[Two].skipProperties == "string") {
        source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR);
      }
      if (Zero in source || One in source || Two in source) {
        level[Zero] = override(level[Zero], source[Zero]);
      }
      if (One in source && ALL_KEYWORD_1 in source[One]) {
        level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));
        delete source[One][ALL_KEYWORD_1];
      }
      if (One in source && ALL_KEYWORD_2 in source[One]) {
        level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));
        delete source[One][ALL_KEYWORD_2];
      }
      if (One in source || Two in source) {
        level[One] = override(level[One], source[One]);
      } else {
        delete level[One];
      }
      if (Two in source && ALL_KEYWORD_1 in source[Two]) {
        level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1])));
        delete source[Two][ALL_KEYWORD_1];
      }
      if (Two in source && ALL_KEYWORD_2 in source[Two]) {
        level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2])));
        delete source[Two][ALL_KEYWORD_2];
      }
      if (Two in source) {
        level[Two] = override(level[Two], source[Two]);
      } else {
        delete level[Two];
      }
      return level;
    }
    function defaults(level, value) {
      var options = override(DEFAULTS[level], {});
      var key;
      for (key in options) {
        if (typeof options[key] == "boolean") {
          options[key] = value;
        }
      }
      return options;
    }
    function normalizeValue(value) {
      switch (value) {
        case FALSE_KEYWORD_1:
        case FALSE_KEYWORD_2:
          return false;
        case TRUE_KEYWORD_1:
        case TRUE_KEYWORD_2:
          return true;
        default:
          return value;
      }
    }
    function covertValuesToHashes(source) {
      var clonedSource = override(source, {});
      var level;
      var i;
      for (i = 0; i <= 2; i++) {
        level = "" + i;
        if (level in clonedSource && (clonedSource[level] === void 0 || clonedSource[level] === false)) {
          delete clonedSource[level];
        }
        if (level in clonedSource && clonedSource[level] === true) {
          clonedSource[level] = {};
        }
        if (level in clonedSource && typeof clonedSource[level] == "string") {
          clonedSource[level] = covertToHash(clonedSource[level], level);
        }
      }
      return clonedSource;
    }
    function covertToHash(asString, level) {
      return asString.split(OPTION_SEPARATOR).reduce(function(accumulator, directive) {
        var parts = directive.split(OPTION_VALUE_SEPARATOR);
        var name = parts[0];
        var value = parts[1];
        var normalizedValue = normalizeValue(value);
        if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) {
          accumulator = override(accumulator, defaults(level, normalizedValue));
        } else {
          accumulator[name] = normalizedValue;
        }
        return accumulator;
      }, {});
    }
    module2.exports = {
      OptimizationLevel,
      optimizationLevelFrom
    };
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/background.js
var require_background = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/background.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var plugin2 = {
      level1: {
        property: function background(_rule, property, options) {
          var values = property.value;
          if (!options.level[OptimizationLevel.One].optimizeBackground) {
            return;
          }
          if (values.length == 1 && values[0][1] == "none") {
            values[0][1] = "0 0";
          }
          if (values.length == 1 && values[0][1] == "transparent") {
            values[0][1] = "0 0";
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/box-shadow.js
var require_box_shadow = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/box-shadow.js"(exports, module2) {
    var plugin2 = {
      level1: {
        property: function boxShadow(_rule, property) {
          var values = property.value;
          if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") {
            property.value.splice(2);
            property.dirty = true;
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/border-radius.js
var require_border_radius = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/border-radius.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var plugin2 = {
      level1: {
        property: function borderRadius(_rule, property, options) {
          var values = property.value;
          if (!options.level[OptimizationLevel.One].optimizeBorderRadius) {
            return;
          }
          if (values.length == 3 && values[1][1] == "/" && values[0][1] == values[2][1]) {
            property.value.splice(1);
            property.dirty = true;
          } else if (values.length == 5 && values[2][1] == "/" && values[0][1] == values[3][1] && values[1][1] == values[4][1]) {
            property.value.splice(2);
            property.dirty = true;
          } else if (values.length == 7 && values[3][1] == "/" && values[0][1] == values[4][1] && values[1][1] == values[5][1] && values[2][1] == values[6][1]) {
            property.value.splice(3);
            property.dirty = true;
          } else if (values.length == 9 && values[4][1] == "/" && values[0][1] == values[5][1] && values[1][1] == values[6][1] && values[2][1] == values[7][1] && values[3][1] == values[8][1]) {
            property.value.splice(4);
            property.dirty = true;
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/filter.js
var require_filter = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/filter.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var ALPHA_OR_CHROMA_FILTER_PATTERN = /progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/;
    var NO_SPACE_AFTER_COMMA_PATTERN = /,(\S)/g;
    var WHITESPACE_AROUND_EQUALS_PATTERN = / ?= ?/g;
    var plugin2 = {
      level1: {
        property: function filter(_rule, property, options) {
          if (!options.compatibility.properties.ieFilters) {
            return;
          }
          if (!options.level[OptimizationLevel.One].optimizeFilter) {
            return;
          }
          if (property.value.length == 1) {
            property.value[0][1] = property.value[0][1].replace(ALPHA_OR_CHROMA_FILTER_PATTERN, function(match, filter2, suffix) {
              return filter2.toLowerCase() + suffix;
            });
          }
          property.value[0][1] = property.value[0][1].replace(NO_SPACE_AFTER_COMMA_PATTERN, ", $1").replace(WHITESPACE_AROUND_EQUALS_PATTERN, "=");
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/font-weight.js
var require_font_weight = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/font-weight.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var plugin2 = {
      level1: {
        property: function fontWeight(_rule, property, options) {
          var value = property.value[0][1];
          if (!options.level[OptimizationLevel.One].optimizeFontWeight) {
            return;
          }
          if (value == "normal") {
            value = "400";
          } else if (value == "bold") {
            value = "700";
          }
          property.value[0][1] = value;
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/margin.js
var require_margin = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/margin.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var plugin2 = {
      level1: {
        property: function margin(_rule, property, options) {
          var values = property.value;
          if (!options.level[OptimizationLevel.One].replaceMultipleZeros) {
            return;
          }
          if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") {
            property.value.splice(1);
            property.dirty = true;
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/outline.js
var require_outline = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/outline.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var plugin2 = {
      level1: {
        property: function outline(_rule, property, options) {
          var values = property.value;
          if (!options.level[OptimizationLevel.One].optimizeOutline) {
            return;
          }
          if (values.length == 1 && values[0][1] == "none") {
            values[0][1] = "0";
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers/padding.js
var require_padding = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers/padding.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    function isNegative(value) {
      return value && value[1][0] == "-" && parseFloat(value[1]) < 0;
    }
    var plugin2 = {
      level1: {
        property: function padding(_rule, property, options) {
          var values = property.value;
          if (values.length == 4 && values[0][1] === "0" && values[1][1] === "0" && values[2][1] === "0" && values[3][1] === "0") {
            property.value.splice(1);
            property.dirty = true;
          }
          if (options.level[OptimizationLevel.One].removeNegativePaddings && (isNegative(property.value[0]) || isNegative(property.value[1]) || isNegative(property.value[2]) || isNegative(property.value[3]))) {
            property.unused = true;
          }
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/property-optimizers.js
var require_property_optimizers = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/property-optimizers.js"(exports, module2) {
    module2.exports = {
      background: require_background().level1.property,
      boxShadow: require_box_shadow().level1.property,
      borderRadius: require_border_radius().level1.property,
      filter: require_filter().level1.property,
      fontWeight: require_font_weight().level1.property,
      margin: require_margin().level1.property,
      outline: require_outline().level1.property,
      padding: require_padding().level1.property
    };
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hex.js
var require_shorten_hex = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hex.js"(exports, module2) {
    var COLORS = {
      aliceblue: "#f0f8ff",
      antiquewhite: "#faebd7",
      aqua: "#0ff",
      aquamarine: "#7fffd4",
      azure: "#f0ffff",
      beige: "#f5f5dc",
      bisque: "#ffe4c4",
      black: "#000",
      blanchedalmond: "#ffebcd",
      blue: "#00f",
      blueviolet: "#8a2be2",
      brown: "#a52a2a",
      burlywood: "#deb887",
      cadetblue: "#5f9ea0",
      chartreuse: "#7fff00",
      chocolate: "#d2691e",
      coral: "#ff7f50",
      cornflowerblue: "#6495ed",
      cornsilk: "#fff8dc",
      crimson: "#dc143c",
      cyan: "#0ff",
      darkblue: "#00008b",
      darkcyan: "#008b8b",
      darkgoldenrod: "#b8860b",
      darkgray: "#a9a9a9",
      darkgreen: "#006400",
      darkgrey: "#a9a9a9",
      darkkhaki: "#bdb76b",
      darkmagenta: "#8b008b",
      darkolivegreen: "#556b2f",
      darkorange: "#ff8c00",
      darkorchid: "#9932cc",
      darkred: "#8b0000",
      darksalmon: "#e9967a",
      darkseagreen: "#8fbc8f",
      darkslateblue: "#483d8b",
      darkslategray: "#2f4f4f",
      darkslategrey: "#2f4f4f",
      darkturquoise: "#00ced1",
      darkviolet: "#9400d3",
      deeppink: "#ff1493",
      deepskyblue: "#00bfff",
      dimgray: "#696969",
      dimgrey: "#696969",
      dodgerblue: "#1e90ff",
      firebrick: "#b22222",
      floralwhite: "#fffaf0",
      forestgreen: "#228b22",
      fuchsia: "#f0f",
      gainsboro: "#dcdcdc",
      ghostwhite: "#f8f8ff",
      gold: "#ffd700",
      goldenrod: "#daa520",
      gray: "#808080",
      green: "#008000",
      greenyellow: "#adff2f",
      grey: "#808080",
      honeydew: "#f0fff0",
      hotpink: "#ff69b4",
      indianred: "#cd5c5c",
      indigo: "#4b0082",
      ivory: "#fffff0",
      khaki: "#f0e68c",
      lavender: "#e6e6fa",
      lavenderblush: "#fff0f5",
      lawngreen: "#7cfc00",
      lemonchiffon: "#fffacd",
      lightblue: "#add8e6",
      lightcoral: "#f08080",
      lightcyan: "#e0ffff",
      lightgoldenrodyellow: "#fafad2",
      lightgray: "#d3d3d3",
      lightgreen: "#90ee90",
      lightgrey: "#d3d3d3",
      lightpink: "#ffb6c1",
      lightsalmon: "#ffa07a",
      lightseagreen: "#20b2aa",
      lightskyblue: "#87cefa",
      lightslategray: "#778899",
      lightslategrey: "#778899",
      lightsteelblue: "#b0c4de",
      lightyellow: "#ffffe0",
      lime: "#0f0",
      limegreen: "#32cd32",
      linen: "#faf0e6",
      magenta: "#ff00ff",
      maroon: "#800000",
      mediumaquamarine: "#66cdaa",
      mediumblue: "#0000cd",
      mediumorchid: "#ba55d3",
      mediumpurple: "#9370db",
      mediumseagreen: "#3cb371",
      mediumslateblue: "#7b68ee",
      mediumspringgreen: "#00fa9a",
      mediumturquoise: "#48d1cc",
      mediumvioletred: "#c71585",
      midnightblue: "#191970",
      mintcream: "#f5fffa",
      mistyrose: "#ffe4e1",
      moccasin: "#ffe4b5",
      navajowhite: "#ffdead",
      navy: "#000080",
      oldlace: "#fdf5e6",
      olive: "#808000",
      olivedrab: "#6b8e23",
      orange: "#ffa500",
      orangered: "#ff4500",
      orchid: "#da70d6",
      palegoldenrod: "#eee8aa",
      palegreen: "#98fb98",
      paleturquoise: "#afeeee",
      palevioletred: "#db7093",
      papayawhip: "#ffefd5",
      peachpuff: "#ffdab9",
      peru: "#cd853f",
      pink: "#ffc0cb",
      plum: "#dda0dd",
      powderblue: "#b0e0e6",
      purple: "#800080",
      rebeccapurple: "#663399",
      red: "#f00",
      rosybrown: "#bc8f8f",
      royalblue: "#4169e1",
      saddlebrown: "#8b4513",
      salmon: "#fa8072",
      sandybrown: "#f4a460",
      seagreen: "#2e8b57",
      seashell: "#fff5ee",
      sienna: "#a0522d",
      silver: "#c0c0c0",
      skyblue: "#87ceeb",
      slateblue: "#6a5acd",
      slategray: "#708090",
      slategrey: "#708090",
      snow: "#fffafa",
      springgreen: "#00ff7f",
      steelblue: "#4682b4",
      tan: "#d2b48c",
      teal: "#008080",
      thistle: "#d8bfd8",
      tomato: "#ff6347",
      turquoise: "#40e0d0",
      violet: "#ee82ee",
      wheat: "#f5deb3",
      white: "#fff",
      whitesmoke: "#f5f5f5",
      yellow: "#ff0",
      yellowgreen: "#9acd32"
    };
    var toHex = {};
    var toName = {};
    for (name in COLORS) {
      hex = COLORS[name];
      if (name.length < hex.length) {
        toName[hex] = name;
      } else {
        toHex[name] = hex;
      }
    }
    var hex;
    var name;
    var toHexPattern = new RegExp("(^| |,|\\))(" + Object.keys(toHex).join("|") + ")( |,|\\)|$)", "ig");
    var toNamePattern = new RegExp("(" + Object.keys(toName).join("|") + ")([^a-f0-9]|$)", "ig");
    function hexConverter(match, prefix, colorValue, suffix) {
      return prefix + toHex[colorValue.toLowerCase()] + suffix;
    }
    function nameConverter(match, colorValue, suffix) {
      return toName[colorValue.toLowerCase()] + suffix;
    }
    function shortenHex(value) {
      var hasHex = value.indexOf("#") > -1;
      var shortened = value.replace(toHexPattern, hexConverter);
      if (shortened != value) {
        shortened = shortened.replace(toHexPattern, hexConverter);
      }
      return hasHex ? shortened.replace(toNamePattern, nameConverter) : shortened;
    }
    module2.exports = shortenHex;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js
var require_shorten_hsl = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-hsl.js"(exports, module2) {
    function hslToRgb(h, s, l) {
      var r, g, b;
      h %= 360;
      if (h < 0) {
        h += 360;
      }
      h = ~~h / 360;
      if (s < 0) {
        s = 0;
      } else if (s > 100) {
        s = 100;
      }
      s = ~~s / 100;
      if (l < 0) {
        l = 0;
      } else if (l > 100) {
        l = 100;
      }
      l = ~~l / 100;
      if (s === 0) {
        r = g = b = l;
      } else {
        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;
        r = hueToRgb(p, q, h + 1 / 3);
        g = hueToRgb(p, q, h);
        b = hueToRgb(p, q, h - 1 / 3);
      }
      return [~~(r * 255), ~~(g * 255), ~~(b * 255)];
    }
    function hueToRgb(p, q, t) {
      if (t < 0) {
        t += 1;
      }
      if (t > 1) {
        t -= 1;
      }
      if (t < 1 / 6) {
        return p + (q - p) * 6 * t;
      }
      if (t < 1 / 2) {
        return q;
      }
      if (t < 2 / 3) {
        return p + (q - p) * (2 / 3 - t) * 6;
      }
      return p;
    }
    function shortenHsl(hue, saturation, lightness) {
      var asRgb = hslToRgb(hue, saturation, lightness);
      var redAsHex = asRgb[0].toString(16);
      var greenAsHex = asRgb[1].toString(16);
      var blueAsHex = asRgb[2].toString(16);
      return "#" + ((redAsHex.length == 1 ? "0" : "") + redAsHex) + ((greenAsHex.length == 1 ? "0" : "") + greenAsHex) + ((blueAsHex.length == 1 ? "0" : "") + blueAsHex);
    }
    module2.exports = shortenHsl;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-rgb.js
var require_shorten_rgb = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color/shorten-rgb.js"(exports, module2) {
    function shortenRgb(red, green, blue) {
      var normalizedRed = Math.max(0, Math.min(parseInt(red), 255));
      var normalizedGreen = Math.max(0, Math.min(parseInt(green), 255));
      var normalizedBlue = Math.max(0, Math.min(parseInt(blue), 255));
      return "#" + ("00000" + (normalizedRed << 16 | normalizedGreen << 8 | normalizedBlue).toString(16)).slice(-6);
    }
    module2.exports = shortenRgb;
  }
});

// node_modules/clean-css/lib/utils/split.js
var require_split = __commonJS({
  "node_modules/clean-css/lib/utils/split.js"(exports, module2) {
    var Marker = require_marker();
    function is(value, separator, isSeparatorRegex) {
      return isSeparatorRegex ? separator.test(value) : value === separator;
    }
    function split(value, separator) {
      var openLevel = Marker.OPEN_ROUND_BRACKET;
      var closeLevel = Marker.CLOSE_ROUND_BRACKET;
      var level = 0;
      var cursor = 0;
      var lastStart = 0;
      var lastValue;
      var lastCharacter;
      var len = value.length;
      var parts = [];
      var isSeparatorRegex = typeof separator == "object" && "exec" in separator;
      if (!isSeparatorRegex && value.indexOf(separator) == -1) {
        return [value];
      }
      if (value.indexOf(openLevel) == -1) {
        return value.split(separator);
      }
      while (cursor < len) {
        if (value[cursor] == openLevel) {
          level++;
        } else if (value[cursor] == closeLevel) {
          level--;
        }
        if (level === 0 && cursor > 0 && cursor + 1 < len && is(value[cursor], separator, isSeparatorRegex)) {
          parts.push(value.substring(lastStart, cursor));
          if (isSeparatorRegex && separator.exec(value[cursor]).length > 1) {
            parts.push(value[cursor]);
          }
          lastStart = cursor + 1;
        }
        cursor++;
      }
      if (lastStart < cursor + 1) {
        lastValue = value.substring(lastStart);
        lastCharacter = lastValue[lastValue.length - 1];
        if (is(lastCharacter, separator, isSeparatorRegex)) {
          lastValue = lastValue.substring(0, lastValue.length - 1);
        }
        parts.push(lastValue);
      }
      return parts;
    }
    module2.exports = split;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color.js
var require_color = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/color.js"(exports, module2) {
    var shortenHex = require_shorten_hex();
    var shortenHsl = require_shorten_hsl();
    var shortenRgb = require_shorten_rgb();
    var split = require_split();
    var ANY_COLOR_FUNCTION_PATTERN = /(rgb|rgba|hsl|hsla)\(([^()]+)\)/gi;
    var COLOR_PREFIX_PATTERN = /#|rgb|hsl/gi;
    var HEX_LONG_PATTERN = /(^|[^='"])#([0-9a-f]{6})/gi;
    var HEX_SHORT_PATTERN = /(^|[^='"])#([0-9a-f]{3})/gi;
    var HEX_VALUE_PATTERN = /[0-9a-f]/i;
    var HSL_PATTERN = /hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/gi;
    var RGBA_HSLA_PATTERN = /(rgb|hsl)a?\((-?\d+),(-?\d+%?),(-?\d+%?),(0*[1-9]+[0-9]*(\.?\d*)?)\)/gi;
    var RGB_PATTERN = /rgb\((-?\d+),(-?\d+),(-?\d+)\)/gi;
    var TRANSPARENT_FUNCTION_PATTERN = /(?:rgba|hsla)\(0,0%?,0%?,0\)/g;
    var plugin2 = {
      level1: {
        value: function color(name, value, options) {
          if (!options.compatibility.properties.colors) {
            return value;
          }
          if (!value.match(COLOR_PREFIX_PATTERN)) {
            return shortenHex(value);
          }
          value = value.replace(RGBA_HSLA_PATTERN, function(match, colorFn, p1, p2, p3, alpha) {
            return parseInt(alpha) >= 1 ? colorFn + "(" + [p1, p2, p3].join(",") + ")" : match;
          }).replace(RGB_PATTERN, function(match, red, green, blue) {
            return shortenRgb(red, green, blue);
          }).replace(HSL_PATTERN, function(match, hue, saturation, lightness) {
            return shortenHsl(hue, saturation, lightness);
          }).replace(HEX_LONG_PATTERN, function(match, prefix, color2, at, inputValue) {
            var suffix = inputValue[at + match.length];
            if (suffix && HEX_VALUE_PATTERN.test(suffix)) {
              return match;
            }
            if (color2[0] == color2[1] && color2[2] == color2[3] && color2[4] == color2[5]) {
              return (prefix + "#" + color2[0] + color2[2] + color2[4]).toLowerCase();
            }
            return (prefix + "#" + color2).toLowerCase();
          }).replace(HEX_SHORT_PATTERN, function(match, prefix, color2) {
            return prefix + "#" + color2.toLowerCase();
          }).replace(ANY_COLOR_FUNCTION_PATTERN, function(match, colorFunction, colorDef) {
            var tokens = colorDef.split(",");
            var colorFnLowercase = colorFunction && colorFunction.toLowerCase();
            var applies = colorFnLowercase == "hsl" && tokens.length == 3 || colorFnLowercase == "hsla" && tokens.length == 4 || colorFnLowercase == "rgb" && tokens.length === 3 && colorDef.indexOf("%") > 0 || colorFnLowercase == "rgba" && tokens.length == 4 && tokens[0].indexOf("%") > 0;
            if (!applies) {
              return match;
            }
            if (tokens[1].indexOf("%") == -1) {
              tokens[1] += "%";
            }
            if (tokens[2].indexOf("%") == -1) {
              tokens[2] += "%";
            }
            return colorFunction + "(" + tokens.join(",") + ")";
          });
          if (options.compatibility.colors.opacity && name.indexOf("background") == -1) {
            value = value.replace(TRANSPARENT_FUNCTION_PATTERN, function(match) {
              if (split(value, ",").pop().indexOf("gradient(") > -1) {
                return match;
              }
              return "transparent";
            });
          }
          return shortenHex(value);
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/degrees.js
var require_degrees = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/degrees.js"(exports, module2) {
    var ZERO_DEG_PATTERN = /\(0deg\)/g;
    var plugin2 = {
      level1: {
        value: function degrees(_name, value, options) {
          if (!options.compatibility.properties.zeroUnits) {
            return value;
          }
          if (value.indexOf("0deg") == -1) {
            return value;
          }
          return value.replace(ZERO_DEG_PATTERN, "(0)");
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/starts-as-url.js
var require_starts_as_url = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/starts-as-url.js"(exports, module2) {
    var URL_PREFIX_PATTERN = /^url\(/i;
    function startsAsUrl(value) {
      return URL_PREFIX_PATTERN.test(value);
    }
    module2.exports = startsAsUrl;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/fraction.js
var require_fraction = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/fraction.js"(exports, module2) {
    var split = require_split();
    var startsAsUrl = require_starts_as_url();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var EXPRESSION_PATTERN = /^expression\(.*\)$/;
    var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/;
    var TOKEN_SEPARATOR_PATTERN = /([\s,/])/;
    var DOT_ZERO_PATTERN = /(^|\D)\.0+(\D|$)/g;
    var FRACTION_PATTERN = /\.([1-9]*)0+(\D|$)/g;
    var LEADING_ZERO_FRACTION_PATTERN = /(^|\D)0\.(\d)/g;
    var MINUS_ZERO_FRACTION_PATTERN = /([^\w\d-]|^)-0([^.]|$)/g;
    var ZERO_PREFIXED_UNIT_PATTERN = /(^|\s)0+([1-9])/g;
    function optimizeRecursively(value) {
      var functionTokens;
      var tokens;
      if (startsAsUrl(value)) {
        return value;
      }
      if (EXPRESSION_PATTERN.test(value)) {
        return value;
      }
      functionTokens = ANY_FUNCTION_PATTERN.exec(value);
      if (!functionTokens) {
        return optimizeFractions(value);
      }
      tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN).map(function(token) {
        return optimizeRecursively(token);
      });
      return functionTokens[1] + "(" + tokens.join("") + ")";
    }
    function optimizeFractions(value) {
      if (value.indexOf("0") == -1) {
        return value;
      }
      if (value.indexOf("-") > -1) {
        value = value.replace(MINUS_ZERO_FRACTION_PATTERN, "$10$2").replace(MINUS_ZERO_FRACTION_PATTERN, "$10$2");
      }
      return value.replace(ZERO_PREFIXED_UNIT_PATTERN, "$1$2").replace(DOT_ZERO_PATTERN, "$10$2").replace(FRACTION_PATTERN, function(match, nonZeroPart, suffix) {
        return (nonZeroPart.length > 0 ? "." : "") + nonZeroPart + suffix;
      }).replace(LEADING_ZERO_FRACTION_PATTERN, "$1.$2");
    }
    var plugin2 = {
      level1: {
        value: function fraction(name, value, options) {
          if (!options.level[OptimizationLevel.One].replaceZeroUnits) {
            return value;
          }
          return optimizeRecursively(value);
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/precision.js
var require_precision = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/precision.js"(exports, module2) {
    var plugin2 = {
      level1: {
        value: function precision(_name, value, options) {
          if (!options.precision.enabled || value.indexOf(".") === -1) {
            return value;
          }
          return value.replace(options.precision.decimalPointMatcher, "$1$2$3").replace(options.precision.zeroMatcher, function(match, integerPart, fractionPart, unit) {
            var multiplier = options.precision.units[unit].multiplier;
            var parsedInteger = parseInt(integerPart);
            var integer = Number.isNaN(parsedInteger) ? 0 : parsedInteger;
            var fraction = parseFloat(fractionPart);
            return Math.round((integer + fraction) * multiplier) / multiplier + unit;
          });
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/text-quotes.js
var require_text_quotes = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/text-quotes.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var LOCAL_PREFIX_PATTERN = /^local\(/i;
    var QUOTED_PATTERN = /^('.*'|".*")$/;
    var QUOTED_BUT_SAFE_PATTERN = /^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/;
    var GENERIC_FONT_FAMILY_PATTERN = /^['"](?:cursive|default|emoji|fangsong|fantasy|inherit|initial|math|monospace|revert|revert-layer|sans-serif|serif|system-ui|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|unset)['"]$/;
    var plugin2 = {
      level1: {
        value: function textQuotes(name, value, options) {
          if ((name == "font-family" || name == "font") && GENERIC_FONT_FAMILY_PATTERN.test(value)) {
            return value;
          }
          if (!options.level[OptimizationLevel.One].removeQuotes) {
            return value;
          }
          if (!QUOTED_PATTERN.test(value) && !LOCAL_PREFIX_PATTERN.test(value)) {
            return value;
          }
          return QUOTED_BUT_SAFE_PATTERN.test(value) ? value.substring(1, value.length - 1) : value;
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/time.js
var require_time = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/time.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var TIME_VALUE = /^(-?[\d.]+)(m?s)$/;
    var plugin2 = {
      level1: {
        value: function time(name, value, options) {
          if (!options.level[OptimizationLevel.One].replaceTimeUnits) {
            return value;
          }
          if (!TIME_VALUE.test(value)) {
            return value;
          }
          return value.replace(TIME_VALUE, function(match, val, unit) {
            var newValue;
            if (unit == "ms") {
              newValue = parseInt(val) / 1e3 + "s";
            } else if (unit == "s") {
              newValue = parseFloat(val) * 1e3 + "ms";
            }
            return newValue.length < match.length ? newValue : match;
          });
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/unit.js
var require_unit = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/unit.js"(exports, module2) {
    var WHOLE_PIXEL_VALUE = /(?:^|\s|\()(-?\d+)px/;
    var plugin2 = {
      level1: {
        value: function unit(_name, value, options) {
          if (!WHOLE_PIXEL_VALUE.test(value)) {
            return value;
          }
          return value.replace(WHOLE_PIXEL_VALUE, function(match, val) {
            var newValue;
            var intVal = parseInt(val);
            if (intVal === 0) {
              return match;
            }
            if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.pt && intVal * 3 % 4 === 0) {
              newValue = intVal * 3 / 4 + "pt";
            }
            if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.pc && intVal % 16 === 0) {
              newValue = intVal / 16 + "pc";
            }
            if (options.compatibility.properties.shorterLengthUnits && options.compatibility.units.in && intVal % 96 === 0) {
              newValue = intVal / 96 + "in";
            }
            if (newValue) {
              newValue = match.substring(0, match.indexOf(val)) + newValue;
            }
            return newValue && newValue.length < match.length ? newValue : match;
          });
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-prefix.js
var require_url_prefix = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-prefix.js"(exports, module2) {
    var startsAsUrl = require_starts_as_url();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var URL_PREFIX_PATTERN = /^url\(/i;
    var plugin2 = {
      level1: {
        value: function urlPrefix(_name, value, options) {
          if (!options.level[OptimizationLevel.One].normalizeUrls) {
            return value;
          }
          if (!startsAsUrl(value)) {
            return value;
          }
          return value.replace(URL_PREFIX_PATTERN, "url(");
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-quotes.js
var require_url_quotes = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-quotes.js"(exports, module2) {
    var QUOTED_URL_PATTERN = /^url\(['"].+['"]\)$/;
    var QUOTED_URL_WITH_WHITESPACE_PATTERN = /^url\(['"].*[*\s()'"].*['"]\)$/;
    var QUOTES_PATTERN = /["']/g;
    var URL_DATA_PATTERN = /^url\(['"]data:[^;]+;charset/;
    var plugin2 = {
      level1: {
        value: function urlQuotes(_name, value, options) {
          if (options.compatibility.properties.urlQuotes) {
            return value;
          }
          return QUOTED_URL_PATTERN.test(value) && !QUOTED_URL_WITH_WHITESPACE_PATTERN.test(value) && !URL_DATA_PATTERN.test(value) ? value.replace(QUOTES_PATTERN, "") : value;
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-whitespace.js
var require_url_whitespace = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/url-whitespace.js"(exports, module2) {
    var startsAsUrl = require_starts_as_url();
    var WHITESPACE_PATTERN = /\\?\n|\\?\r\n/g;
    var WHITESPACE_PREFIX_PATTERN = /(\()\s+/g;
    var WHITESPACE_SUFFIX_PATTERN = /\s+(\))/g;
    var plugin2 = {
      level1: {
        value: function urlWhitespace(_name, value) {
          if (!startsAsUrl(value)) {
            return value;
          }
          return value.replace(WHITESPACE_PATTERN, "").replace(WHITESPACE_PREFIX_PATTERN, "$1").replace(WHITESPACE_SUFFIX_PATTERN, "$1");
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/whitespace.js
var require_whitespace = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/whitespace.js"(exports, module2) {
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var Marker = require_marker();
    var CALC_DIVISION_WHITESPACE_PATTERN = /\) ?\/ ?/g;
    var COMMA_AND_SPACE_PATTERN = /, /g;
    var LINE_BREAK_PATTERN = /\r?\n/g;
    var MULTI_WHITESPACE_PATTERN = /\s+/g;
    var FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN = /\s+(;?\))/g;
    var FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN = /(\(;?)\s+/g;
    var VARIABLE_NAME_PATTERN = /^--\S+$/;
    var VARIABLE_VALUE_PATTERN = /^var\(\s*--\S+\s*\)$/;
    var plugin2 = {
      level1: {
        value: function whitespace(name, value, options) {
          if (!options.level[OptimizationLevel.One].removeWhitespace) {
            return value;
          }
          if (VARIABLE_NAME_PATTERN.test(name) && !VARIABLE_VALUE_PATTERN.test(value)) {
            return value;
          }
          if (value.indexOf(" ") == -1 && value.indexOf("\n") == -1 || value.indexOf("expression") === 0) {
            return value;
          }
          if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) {
            return value;
          }
          value = value.replace(LINE_BREAK_PATTERN, "");
          value = value.replace(MULTI_WHITESPACE_PATTERN, " ");
          if (value.indexOf("calc") > -1) {
            value = value.replace(CALC_DIVISION_WHITESPACE_PATTERN, ")/ ");
          }
          return value.replace(FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN, "$1").replace(FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN, "$1").replace(COMMA_AND_SPACE_PATTERN, ",");
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers/zero.js
var require_zero = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers/zero.js"(exports, module2) {
    var split = require_split();
    var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/;
    var SKIP_FUNCTION_PATTERN = /^(?:-moz-calc|-webkit-calc|calc|rgb|hsl|rgba|hsla|min|max|clamp|expression)\(/;
    var TOKEN_SEPARATOR_PATTERN = /([\s,/])/;
    function removeRecursively(value, options) {
      var functionTokens;
      var tokens;
      if (SKIP_FUNCTION_PATTERN.test(value)) {
        return value;
      }
      functionTokens = ANY_FUNCTION_PATTERN.exec(value);
      if (!functionTokens) {
        return removeZeros(value, options);
      }
      tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN).map(function(token) {
        return removeRecursively(token, options);
      });
      return functionTokens[1] + "(" + tokens.join("") + ")";
    }
    function removeZeros(value, options) {
      return value.replace(options.unitsRegexp, "$10$2").replace(options.unitsRegexp, "$10$2");
    }
    var plugin2 = {
      level1: {
        value: function zero(name, value, options) {
          if (!options.compatibility.properties.zeroUnits) {
            return value;
          }
          if (value.indexOf("%") > 0 && (name == "height" || name == "max-height" || name == "width" || name == "max-width")) {
            return value;
          }
          return removeRecursively(value, options);
        }
      }
    };
    module2.exports = plugin2;
  }
});

// node_modules/clean-css/lib/optimizer/level-1/value-optimizers.js
var require_value_optimizers = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/value-optimizers.js"(exports, module2) {
    module2.exports = {
      color: require_color().level1.value,
      degrees: require_degrees().level1.value,
      fraction: require_fraction().level1.value,
      precision: require_precision().level1.value,
      textQuotes: require_text_quotes().level1.value,
      time: require_time().level1.value,
      unit: require_unit().level1.value,
      urlPrefix: require_url_prefix().level1.value,
      urlQuotes: require_url_quotes().level1.value,
      urlWhiteSpace: require_url_whitespace().level1.value,
      whiteSpace: require_whitespace().level1.value,
      zero: require_zero().level1.value
    };
  }
});

// node_modules/clean-css/lib/optimizer/configuration.js
var require_configuration = __commonJS({
  "node_modules/clean-css/lib/optimizer/configuration.js"(exports, module2) {
    var breakUp = require_break_up();
    var canOverride = require_can_override();
    var restore = require_restore();
    var propertyOptimizers = require_property_optimizers();
    var valueOptimizers = require_value_optimizers();
    var override = require_override();
    var configuration = {
      animation: {
        canOverride: canOverride.generic.components([
          canOverride.generic.time,
          canOverride.generic.timingFunction,
          canOverride.generic.time,
          canOverride.property.animationIterationCount,
          canOverride.property.animationDirection,
          canOverride.property.animationFillMode,
          canOverride.property.animationPlayState,
          canOverride.property.animationName
        ]),
        components: [
          "animation-duration",
          "animation-timing-function",
          "animation-delay",
          "animation-iteration-count",
          "animation-direction",
          "animation-fill-mode",
          "animation-play-state",
          "animation-name"
        ],
        breakUp: breakUp.multiplex(breakUp.animation),
        defaultValue: "none",
        restore: restore.multiplex(restore.withoutDefaults),
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.textQuotes,
          valueOptimizers.time,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-delay": {
        canOverride: canOverride.generic.time,
        componentOf: [
          "animation"
        ],
        defaultValue: "0s",
        intoMultiplexMode: "real",
        valueOptimizers: [
          valueOptimizers.time,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-direction": {
        canOverride: canOverride.property.animationDirection,
        componentOf: [
          "animation"
        ],
        defaultValue: "normal",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-duration": {
        canOverride: canOverride.generic.time,
        componentOf: [
          "animation"
        ],
        defaultValue: "0s",
        intoMultiplexMode: "real",
        keepUnlessDefault: "animation-delay",
        valueOptimizers: [
          valueOptimizers.time,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-fill-mode": {
        canOverride: canOverride.property.animationFillMode,
        componentOf: [
          "animation"
        ],
        defaultValue: "none",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-iteration-count": {
        canOverride: canOverride.property.animationIterationCount,
        componentOf: [
          "animation"
        ],
        defaultValue: "1",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-name": {
        canOverride: canOverride.property.animationName,
        componentOf: [
          "animation"
        ],
        defaultValue: "none",
        intoMultiplexMode: "real",
        valueOptimizers: [
          valueOptimizers.textQuotes
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-play-state": {
        canOverride: canOverride.property.animationPlayState,
        componentOf: [
          "animation"
        ],
        defaultValue: "running",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      "animation-timing-function": {
        canOverride: canOverride.generic.timingFunction,
        componentOf: [
          "animation"
        ],
        defaultValue: "ease",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-o-",
          "-webkit-"
        ]
      },
      background: {
        canOverride: canOverride.generic.components([
          canOverride.generic.image,
          canOverride.property.backgroundPosition,
          canOverride.property.backgroundSize,
          canOverride.property.backgroundRepeat,
          canOverride.property.backgroundAttachment,
          canOverride.property.backgroundOrigin,
          canOverride.property.backgroundClip,
          canOverride.generic.color
        ]),
        components: [
          "background-image",
          "background-position",
          "background-size",
          "background-repeat",
          "background-attachment",
          "background-origin",
          "background-clip",
          "background-color"
        ],
        breakUp: breakUp.multiplex(breakUp.background),
        defaultValue: "0 0",
        propertyOptimizer: propertyOptimizers.background,
        restore: restore.multiplex(restore.background),
        shortestValue: "0",
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.urlWhiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.zero,
          valueOptimizers.color,
          valueOptimizers.urlPrefix,
          valueOptimizers.urlQuotes
        ]
      },
      "background-attachment": {
        canOverride: canOverride.property.backgroundAttachment,
        componentOf: [
          "background"
        ],
        defaultValue: "scroll",
        intoMultiplexMode: "real"
      },
      "background-clip": {
        canOverride: canOverride.property.backgroundClip,
        componentOf: [
          "background"
        ],
        defaultValue: "border-box",
        intoMultiplexMode: "real",
        shortestValue: "border-box"
      },
      "background-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "background"
        ],
        defaultValue: "transparent",
        intoMultiplexMode: "real",
        multiplexLastOnly: true,
        nonMergeableValue: "none",
        shortestValue: "red",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "background-image": {
        canOverride: canOverride.generic.image,
        componentOf: [
          "background"
        ],
        defaultValue: "none",
        intoMultiplexMode: "default",
        valueOptimizers: [
          valueOptimizers.urlWhiteSpace,
          valueOptimizers.urlPrefix,
          valueOptimizers.urlQuotes,
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero,
          valueOptimizers.color
        ]
      },
      "background-origin": {
        canOverride: canOverride.property.backgroundOrigin,
        componentOf: [
          "background"
        ],
        defaultValue: "padding-box",
        intoMultiplexMode: "real",
        shortestValue: "border-box"
      },
      "background-position": {
        canOverride: canOverride.property.backgroundPosition,
        componentOf: [
          "background"
        ],
        defaultValue: ["0", "0"],
        doubleValues: true,
        intoMultiplexMode: "real",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "background-repeat": {
        canOverride: canOverride.property.backgroundRepeat,
        componentOf: [
          "background"
        ],
        defaultValue: ["repeat"],
        doubleValues: true,
        intoMultiplexMode: "real"
      },
      "background-size": {
        canOverride: canOverride.property.backgroundSize,
        componentOf: [
          "background"
        ],
        defaultValue: ["auto"],
        doubleValues: true,
        intoMultiplexMode: "real",
        shortestValue: "0 0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      bottom: {
        canOverride: canOverride.property.bottom,
        defaultValue: "auto",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      border: {
        breakUp: breakUp.border,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.property.borderStyle,
          canOverride.generic.color
        ]),
        components: [
          "border-width",
          "border-style",
          "border-color"
        ],
        defaultValue: "none",
        overridesShorthands: [
          "border-bottom",
          "border-left",
          "border-right",
          "border-top"
        ],
        restore: restore.withoutDefaults,
        shorthand: true,
        shorthandComponents: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.zero,
          valueOptimizers.color
        ]
      },
      "border-bottom": {
        breakUp: breakUp.border,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.property.borderStyle,
          canOverride.generic.color
        ]),
        components: [
          "border-bottom-width",
          "border-bottom-style",
          "border-bottom-color"
        ],
        defaultValue: "none",
        restore: restore.withoutDefaults,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.zero,
          valueOptimizers.color
        ]
      },
      "border-bottom-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "border-bottom",
          "border-color"
        ],
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-bottom-left-radius": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-radius"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.borderRadius,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-"
        ]
      },
      "border-bottom-right-radius": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-radius"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.borderRadius,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-"
        ]
      },
      "border-bottom-style": {
        canOverride: canOverride.property.borderStyle,
        componentOf: [
          "border-bottom",
          "border-style"
        ],
        defaultValue: "none"
      },
      "border-bottom-width": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-bottom",
          "border-width"
        ],
        defaultValue: "medium",
        oppositeTo: "border-top-width",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "border-collapse": {
        canOverride: canOverride.property.borderCollapse,
        defaultValue: "separate"
      },
      "border-color": {
        breakUp: breakUp.fourValues,
        canOverride: canOverride.generic.components([
          canOverride.generic.color,
          canOverride.generic.color,
          canOverride.generic.color,
          canOverride.generic.color
        ]),
        componentOf: [
          "border"
        ],
        components: [
          "border-top-color",
          "border-right-color",
          "border-bottom-color",
          "border-left-color"
        ],
        defaultValue: "none",
        restore: restore.fourValues,
        shortestValue: "red",
        shorthand: true,
        singleTypeComponents: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-left": {
        breakUp: breakUp.border,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.property.borderStyle,
          canOverride.generic.color
        ]),
        components: [
          "border-left-width",
          "border-left-style",
          "border-left-color"
        ],
        defaultValue: "none",
        restore: restore.withoutDefaults,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.zero,
          valueOptimizers.color
        ]
      },
      "border-left-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "border-color",
          "border-left"
        ],
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-left-style": {
        canOverride: canOverride.property.borderStyle,
        componentOf: [
          "border-left",
          "border-style"
        ],
        defaultValue: "none"
      },
      "border-left-width": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-left",
          "border-width"
        ],
        defaultValue: "medium",
        oppositeTo: "border-right-width",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "border-radius": {
        breakUp: breakUp.borderRadius,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit
        ]),
        components: [
          "border-top-left-radius",
          "border-top-right-radius",
          "border-bottom-right-radius",
          "border-bottom-left-radius"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.borderRadius,
        restore: restore.borderRadius,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-"
        ]
      },
      "border-right": {
        breakUp: breakUp.border,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.property.borderStyle,
          canOverride.generic.color
        ]),
        components: [
          "border-right-width",
          "border-right-style",
          "border-right-color"
        ],
        defaultValue: "none",
        restore: restore.withoutDefaults,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-right-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "border-color",
          "border-right"
        ],
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-right-style": {
        canOverride: canOverride.property.borderStyle,
        componentOf: [
          "border-right",
          "border-style"
        ],
        defaultValue: "none"
      },
      "border-right-width": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-right",
          "border-width"
        ],
        defaultValue: "medium",
        oppositeTo: "border-left-width",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "border-style": {
        breakUp: breakUp.fourValues,
        canOverride: canOverride.generic.components([
          canOverride.property.borderStyle,
          canOverride.property.borderStyle,
          canOverride.property.borderStyle,
          canOverride.property.borderStyle
        ]),
        componentOf: [
          "border"
        ],
        components: [
          "border-top-style",
          "border-right-style",
          "border-bottom-style",
          "border-left-style"
        ],
        defaultValue: "none",
        restore: restore.fourValues,
        shorthand: true,
        singleTypeComponents: true
      },
      "border-top": {
        breakUp: breakUp.border,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.property.borderStyle,
          canOverride.generic.color
        ]),
        components: [
          "border-top-width",
          "border-top-style",
          "border-top-color"
        ],
        defaultValue: "none",
        restore: restore.withoutDefaults,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.zero,
          valueOptimizers.color,
          valueOptimizers.unit
        ]
      },
      "border-top-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "border-color",
          "border-top"
        ],
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "border-top-left-radius": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-radius"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.borderRadius,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-"
        ]
      },
      "border-top-right-radius": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-radius"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.borderRadius,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-o-"
        ]
      },
      "border-top-style": {
        canOverride: canOverride.property.borderStyle,
        componentOf: [
          "border-style",
          "border-top"
        ],
        defaultValue: "none"
      },
      "border-top-width": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "border-top",
          "border-width"
        ],
        defaultValue: "medium",
        oppositeTo: "border-bottom-width",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "border-width": {
        breakUp: breakUp.fourValues,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit
        ]),
        componentOf: [
          "border"
        ],
        components: [
          "border-top-width",
          "border-right-width",
          "border-bottom-width",
          "border-left-width"
        ],
        defaultValue: "medium",
        restore: restore.fourValues,
        shortestValue: "0",
        shorthand: true,
        singleTypeComponents: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "box-shadow": {
        propertyOptimizer: propertyOptimizers.boxShadow,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero,
          valueOptimizers.color
        ],
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      clear: {
        canOverride: canOverride.property.clear,
        defaultValue: "none"
      },
      clip: {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      color: {
        canOverride: canOverride.generic.color,
        defaultValue: "transparent",
        shortestValue: "red",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "column-gap": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      cursor: {
        canOverride: canOverride.property.cursor,
        defaultValue: "auto"
      },
      display: { canOverride: canOverride.property.display },
      filter: {
        propertyOptimizer: propertyOptimizers.filter,
        valueOptimizers: [
          valueOptimizers.fraction
        ]
      },
      float: {
        canOverride: canOverride.property.float,
        defaultValue: "none"
      },
      font: {
        breakUp: breakUp.font,
        canOverride: canOverride.generic.components([
          canOverride.property.fontStyle,
          canOverride.property.fontVariant,
          canOverride.property.fontWeight,
          canOverride.property.fontStretch,
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.property.fontFamily
        ]),
        components: [
          "font-style",
          "font-variant",
          "font-weight",
          "font-stretch",
          "font-size",
          "line-height",
          "font-family"
        ],
        restore: restore.font,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.textQuotes
        ]
      },
      "font-family": {
        canOverride: canOverride.property.fontFamily,
        defaultValue: "user|agent|specific",
        valueOptimizers: [
          valueOptimizers.textQuotes
        ]
      },
      "font-size": {
        canOverride: canOverride.generic.unit,
        defaultValue: "medium",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.fraction
        ]
      },
      "font-stretch": {
        canOverride: canOverride.property.fontStretch,
        defaultValue: "normal"
      },
      "font-style": {
        canOverride: canOverride.property.fontStyle,
        defaultValue: "normal"
      },
      "font-variant": {
        canOverride: canOverride.property.fontVariant,
        defaultValue: "normal"
      },
      "font-weight": {
        canOverride: canOverride.property.fontWeight,
        defaultValue: "normal",
        propertyOptimizer: propertyOptimizers.fontWeight,
        shortestValue: "400"
      },
      gap: {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      height: {
        canOverride: canOverride.generic.unit,
        defaultValue: "auto",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      left: {
        canOverride: canOverride.property.left,
        defaultValue: "auto",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "letter-spacing": {
        valueOptimizers: [
          valueOptimizers.fraction,
          valueOptimizers.zero
        ]
      },
      "line-height": {
        canOverride: canOverride.generic.unitOrNumber,
        defaultValue: "normal",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.fraction,
          valueOptimizers.zero
        ]
      },
      "list-style": {
        canOverride: canOverride.generic.components([
          canOverride.property.listStyleType,
          canOverride.property.listStylePosition,
          canOverride.property.listStyleImage
        ]),
        components: [
          "list-style-type",
          "list-style-position",
          "list-style-image"
        ],
        breakUp: breakUp.listStyle,
        restore: restore.withoutDefaults,
        defaultValue: "outside",
        shortestValue: "none",
        shorthand: true
      },
      "list-style-image": {
        canOverride: canOverride.generic.image,
        componentOf: [
          "list-style"
        ],
        defaultValue: "none"
      },
      "list-style-position": {
        canOverride: canOverride.property.listStylePosition,
        componentOf: [
          "list-style"
        ],
        defaultValue: "outside",
        shortestValue: "inside"
      },
      "list-style-type": {
        canOverride: canOverride.property.listStyleType,
        componentOf: [
          "list-style"
        ],
        defaultValue: "decimal|disc",
        shortestValue: "none"
      },
      margin: {
        breakUp: breakUp.fourValues,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit
        ]),
        components: [
          "margin-top",
          "margin-right",
          "margin-bottom",
          "margin-left"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.margin,
        restore: restore.fourValues,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-bottom": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "margin"
        ],
        defaultValue: "0",
        oppositeTo: "margin-top",
        propertyOptimizer: propertyOptimizers.margin,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-inline-end": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-inline-start": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-left": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "margin"
        ],
        defaultValue: "0",
        oppositeTo: "margin-right",
        propertyOptimizer: propertyOptimizers.margin,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-right": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "margin"
        ],
        defaultValue: "0",
        oppositeTo: "margin-left",
        propertyOptimizer: propertyOptimizers.margin,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "margin-top": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "margin"
        ],
        defaultValue: "0",
        oppositeTo: "margin-bottom",
        propertyOptimizer: propertyOptimizers.margin,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "max-height": {
        canOverride: canOverride.generic.unit,
        defaultValue: "none",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "max-width": {
        canOverride: canOverride.generic.unit,
        defaultValue: "none",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "min-height": {
        canOverride: canOverride.generic.unit,
        defaultValue: "0",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "min-width": {
        canOverride: canOverride.generic.unit,
        defaultValue: "0",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      opacity: {
        valueOptimizers: [
          valueOptimizers.fraction,
          valueOptimizers.precision
        ]
      },
      outline: {
        canOverride: canOverride.generic.components([
          canOverride.generic.color,
          canOverride.property.outlineStyle,
          canOverride.generic.unit
        ]),
        components: [
          "outline-color",
          "outline-style",
          "outline-width"
        ],
        breakUp: breakUp.outline,
        restore: restore.withoutDefaults,
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.outline,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "outline-color": {
        canOverride: canOverride.generic.color,
        componentOf: [
          "outline"
        ],
        defaultValue: "invert",
        shortestValue: "red",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.color
        ]
      },
      "outline-style": {
        canOverride: canOverride.property.outlineStyle,
        componentOf: [
          "outline"
        ],
        defaultValue: "none"
      },
      "outline-width": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "outline"
        ],
        defaultValue: "medium",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      overflow: {
        canOverride: canOverride.property.overflow,
        defaultValue: "visible"
      },
      "overflow-x": {
        canOverride: canOverride.property.overflow,
        defaultValue: "visible"
      },
      "overflow-y": {
        canOverride: canOverride.property.overflow,
        defaultValue: "visible"
      },
      padding: {
        breakUp: breakUp.fourValues,
        canOverride: canOverride.generic.components([
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit,
          canOverride.generic.unit
        ]),
        components: [
          "padding-top",
          "padding-right",
          "padding-bottom",
          "padding-left"
        ],
        defaultValue: "0",
        propertyOptimizer: propertyOptimizers.padding,
        restore: restore.fourValues,
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "padding-bottom": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "padding"
        ],
        defaultValue: "0",
        oppositeTo: "padding-top",
        propertyOptimizer: propertyOptimizers.padding,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "padding-left": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "padding"
        ],
        defaultValue: "0",
        oppositeTo: "padding-right",
        propertyOptimizer: propertyOptimizers.padding,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "padding-right": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "padding"
        ],
        defaultValue: "0",
        oppositeTo: "padding-left",
        propertyOptimizer: propertyOptimizers.padding,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "padding-top": {
        canOverride: canOverride.generic.unit,
        componentOf: [
          "padding"
        ],
        defaultValue: "0",
        oppositeTo: "padding-bottom",
        propertyOptimizer: propertyOptimizers.padding,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      position: {
        canOverride: canOverride.property.position,
        defaultValue: "static"
      },
      right: {
        canOverride: canOverride.property.right,
        defaultValue: "auto",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "row-gap": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      src: {
        valueOptimizers: [
          valueOptimizers.urlWhiteSpace,
          valueOptimizers.urlPrefix,
          valueOptimizers.urlQuotes
        ]
      },
      "stroke-width": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "text-align": {
        canOverride: canOverride.property.textAlign,
        defaultValue: "left|right"
      },
      "text-decoration": {
        canOverride: canOverride.property.textDecoration,
        defaultValue: "none"
      },
      "text-indent": {
        canOverride: canOverride.property.textOverflow,
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.fraction,
          valueOptimizers.zero
        ]
      },
      "text-overflow": {
        canOverride: canOverride.property.textOverflow,
        defaultValue: "none"
      },
      "text-shadow": {
        canOverride: canOverride.property.textShadow,
        defaultValue: "none",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.zero,
          valueOptimizers.color
        ]
      },
      top: {
        canOverride: canOverride.property.top,
        defaultValue: "auto",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      transform: {
        canOverride: canOverride.property.transform,
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.degrees,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ],
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      transition: {
        breakUp: breakUp.multiplex(breakUp.transition),
        canOverride: canOverride.generic.components([
          canOverride.property.transitionProperty,
          canOverride.generic.time,
          canOverride.generic.timingFunction,
          canOverride.generic.time
        ]),
        components: [
          "transition-property",
          "transition-duration",
          "transition-timing-function",
          "transition-delay"
        ],
        defaultValue: "none",
        restore: restore.multiplex(restore.withoutDefaults),
        shorthand: true,
        valueOptimizers: [
          valueOptimizers.time,
          valueOptimizers.fraction
        ],
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      "transition-delay": {
        canOverride: canOverride.generic.time,
        componentOf: [
          "transition"
        ],
        defaultValue: "0s",
        intoMultiplexMode: "real",
        valueOptimizers: [
          valueOptimizers.time
        ],
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      "transition-duration": {
        canOverride: canOverride.generic.time,
        componentOf: [
          "transition"
        ],
        defaultValue: "0s",
        intoMultiplexMode: "real",
        keepUnlessDefault: "transition-delay",
        valueOptimizers: [
          valueOptimizers.time,
          valueOptimizers.fraction
        ],
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      "transition-property": {
        canOverride: canOverride.generic.propertyName,
        componentOf: [
          "transition"
        ],
        defaultValue: "all",
        intoMultiplexMode: "placeholder",
        placeholderValue: "_",
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      "transition-timing-function": {
        canOverride: canOverride.generic.timingFunction,
        componentOf: [
          "transition"
        ],
        defaultValue: "ease",
        intoMultiplexMode: "real",
        vendorPrefixes: [
          "-moz-",
          "-ms-",
          "-o-",
          "-webkit-"
        ]
      },
      "vertical-align": {
        canOverride: canOverride.property.verticalAlign,
        defaultValue: "baseline",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      visibility: {
        canOverride: canOverride.property.visibility,
        defaultValue: "visible"
      },
      "-webkit-tap-highlight-color": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.color
        ]
      },
      "-webkit-margin-end": {
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "white-space": {
        canOverride: canOverride.property.whiteSpace,
        defaultValue: "normal"
      },
      width: {
        canOverride: canOverride.generic.unit,
        defaultValue: "auto",
        shortestValue: "0",
        valueOptimizers: [
          valueOptimizers.whiteSpace,
          valueOptimizers.fraction,
          valueOptimizers.precision,
          valueOptimizers.unit,
          valueOptimizers.zero
        ]
      },
      "z-index": {
        canOverride: canOverride.property.zIndex,
        defaultValue: "auto"
      }
    };
    var vendorPrefixedConfiguration = {};
    function cloneDescriptor(propertyName2, prefix2) {
      var clonedDescriptor2 = override(configuration[propertyName2], {});
      if ("componentOf" in clonedDescriptor2) {
        clonedDescriptor2.componentOf = clonedDescriptor2.componentOf.map(function(shorthandName) {
          return prefix2 + shorthandName;
        });
      }
      if ("components" in clonedDescriptor2) {
        clonedDescriptor2.components = clonedDescriptor2.components.map(function(longhandName) {
          return prefix2 + longhandName;
        });
      }
      if ("keepUnlessDefault" in clonedDescriptor2) {
        clonedDescriptor2.keepUnlessDefault = prefix2 + clonedDescriptor2.keepUnlessDefault;
      }
      return clonedDescriptor2;
    }
    for (propertyName in configuration) {
      descriptor = configuration[propertyName];
      if (!("vendorPrefixes" in descriptor)) {
        continue;
      }
      for (i = 0; i < descriptor.vendorPrefixes.length; i++) {
        prefix = descriptor.vendorPrefixes[i];
        clonedDescriptor = cloneDescriptor(propertyName, prefix);
        delete clonedDescriptor.vendorPrefixes;
        vendorPrefixedConfiguration[prefix + propertyName] = clonedDescriptor;
      }
      delete descriptor.vendorPrefixes;
    }
    var descriptor;
    var prefix;
    var clonedDescriptor;
    var i;
    var propertyName;
    module2.exports = override(configuration, vendorPrefixedConfiguration);
  }
});

// node_modules/clean-css/lib/writer/helpers.js
var require_helpers = __commonJS({
  "node_modules/clean-css/lib/writer/helpers.js"(exports, module2) {
    var emptyCharacter = "";
    var Breaks = require_format().Breaks;
    var Spaces = require_format().Spaces;
    var Marker = require_marker();
    var Token = require_token();
    function supportsAfterClosingBrace(token) {
      return token[1][1] == "background" || token[1][1] == "transform" || token[1][1] == "src";
    }
    function afterClosingBrace(token, valueIndex) {
      return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET;
    }
    function afterComma(token, valueIndex) {
      return token[valueIndex][1] == Marker.COMMA;
    }
    function afterSlash(token, valueIndex) {
      return token[valueIndex][1] == Marker.FORWARD_SLASH;
    }
    function beforeComma(token, valueIndex) {
      return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA;
    }
    function beforeSlash(token, valueIndex) {
      return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH;
    }
    function inFilter(token) {
      return token[1][1] == "filter" || token[1][1] == "-ms-filter";
    }
    function disallowsSpace(context, token, valueIndex) {
      return !context.spaceAfterClosingBrace && supportsAfterClosingBrace(token) && afterClosingBrace(token, valueIndex) || beforeSlash(token, valueIndex) || afterSlash(token, valueIndex) || beforeComma(token, valueIndex) || afterComma(token, valueIndex);
    }
    function rules(context, tokens) {
      var store = context.store;
      for (var i = 0, l = tokens.length; i < l; i++) {
        store(context, tokens[i]);
        if (i < l - 1) {
          store(context, comma(context));
        }
      }
    }
    function body(context, tokens) {
      var lastPropertyAt = lastPropertyIndex(tokens);
      for (var i = 0, l = tokens.length; i < l; i++) {
        property(context, tokens, i, lastPropertyAt);
      }
    }
    function lastPropertyIndex(tokens) {
      var index = tokens.length - 1;
      for (; index >= 0; index--) {
        if (tokens[index][0] != Token.COMMENT) {
          break;
        }
      }
      return index;
    }
    function property(context, tokens, position, lastPropertyAt) {
      var store = context.store;
      var token = tokens[position];
      var propertyValue = token[2];
      var isPropertyBlock = propertyValue && propertyValue[0] === Token.PROPERTY_BLOCK;
      var needsSemicolon;
      if (context.format) {
        if (context.format.semicolonAfterLastProperty || isPropertyBlock) {
          needsSemicolon = true;
        } else if (position < lastPropertyAt) {
          needsSemicolon = true;
        } else {
          needsSemicolon = false;
        }
      } else {
        needsSemicolon = position < lastPropertyAt || isPropertyBlock;
      }
      var isLast = position === lastPropertyAt;
      switch (token[0]) {
        case Token.AT_RULE:
          store(context, token);
          store(context, semicolon(context, Breaks.AfterProperty, false));
          break;
        case Token.AT_RULE_BLOCK:
          rules(context, token[1]);
          store(context, openBrace(context, Breaks.AfterRuleBegins, true));
          body(context, token[2]);
          store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
          break;
        case Token.COMMENT:
          store(context, token);
          store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);
          break;
        case Token.PROPERTY:
          store(context, token[1]);
          store(context, colon(context));
          if (propertyValue) {
            value(context, token);
          }
          store(context, needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter);
          break;
        case Token.RAW:
          store(context, token);
      }
    }
    function value(context, token) {
      var store = context.store;
      var j, m;
      if (token[2][0] == Token.PROPERTY_BLOCK) {
        store(context, openBrace(context, Breaks.AfterBlockBegins, false));
        body(context, token[2][1]);
        store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true));
      } else {
        for (j = 2, m = token.length; j < m; j++) {
          store(context, token[j]);
          if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) {
            store(context, Marker.SPACE);
          }
        }
      }
    }
    function breakFor(context, where) {
      return context.format ? context.format.breaks[where] : emptyCharacter;
    }
    function allowsSpace(context, where) {
      return context.format && context.format.spaces[where];
    }
    function openBrace(context, where, needsPrefixSpace) {
      if (context.format) {
        context.indentBy += context.format.indentBy;
        context.indentWith = context.format.indentWith.repeat(context.indentBy);
        return (needsPrefixSpace && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter) + Marker.OPEN_CURLY_BRACKET + breakFor(context, where) + context.indentWith;
      }
      return Marker.OPEN_CURLY_BRACKET;
    }
    function closeBrace(context, where, beforeBlockEnd, isLast) {
      if (context.format) {
        context.indentBy -= context.format.indentBy;
        context.indentWith = context.format.indentWith.repeat(context.indentBy);
        return (beforeBlockEnd ? breakFor(context, Breaks.BeforeBlockEnds) : breakFor(context, Breaks.AfterProperty)) + context.indentWith + Marker.CLOSE_CURLY_BRACKET + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith);
      }
      return Marker.CLOSE_CURLY_BRACKET;
    }
    function colon(context) {
      return context.format ? Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter) : Marker.COLON;
    }
    function semicolon(context, where, isLast) {
      return context.format ? Marker.SEMICOLON + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith) : Marker.SEMICOLON;
    }
    function comma(context) {
      return context.format ? Marker.COMMA + breakFor(context, Breaks.BetweenSelectors) + context.indentWith : Marker.COMMA;
    }
    function all(context, tokens) {
      var store = context.store;
      var token;
      var isLast;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        isLast = i == l - 1;
        switch (token[0]) {
          case Token.AT_RULE:
            store(context, token);
            store(context, semicolon(context, Breaks.AfterAtRule, isLast));
            break;
          case Token.AT_RULE_BLOCK:
            rules(context, token[1]);
            store(context, openBrace(context, Breaks.AfterRuleBegins, true));
            body(context, token[2]);
            store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
            break;
          case Token.NESTED_BLOCK:
            rules(context, token[1]);
            store(context, openBrace(context, Breaks.AfterBlockBegins, true));
            all(context, token[2]);
            store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast));
            break;
          case Token.COMMENT:
            store(context, token);
            store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);
            break;
          case Token.RAW:
            store(context, token);
            break;
          case Token.RULE:
            rules(context, token[1]);
            store(context, openBrace(context, Breaks.AfterRuleBegins, true));
            body(context, token[2]);
            store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
            break;
        }
      }
    }
    module2.exports = {
      all,
      body,
      property,
      rules,
      value
    };
  }
});

// node_modules/clean-css/lib/writer/one-time.js
var require_one_time = __commonJS({
  "node_modules/clean-css/lib/writer/one-time.js"(exports, module2) {
    var helpers = require_helpers();
    function store(serializeContext, token) {
      serializeContext.output.push(typeof token == "string" ? token : token[1]);
    }
    function context() {
      var newContext = {
        output: [],
        store
      };
      return newContext;
    }
    function all(tokens) {
      var oneTimeContext = context();
      helpers.all(oneTimeContext, tokens);
      return oneTimeContext.output.join("");
    }
    function body(tokens) {
      var oneTimeContext = context();
      helpers.body(oneTimeContext, tokens);
      return oneTimeContext.output.join("");
    }
    function property(tokens, position) {
      var oneTimeContext = context();
      helpers.property(oneTimeContext, tokens, position, true);
      return oneTimeContext.output.join("");
    }
    function rules(tokens) {
      var oneTimeContext = context();
      helpers.rules(oneTimeContext, tokens);
      return oneTimeContext.output.join("");
    }
    function value(tokens) {
      var oneTimeContext = context();
      helpers.value(oneTimeContext, tokens);
      return oneTimeContext.output.join("");
    }
    module2.exports = {
      all,
      body,
      property,
      rules,
      value
    };
  }
});

// node_modules/clean-css/lib/optimizer/level-1/optimize.js
var require_optimize2 = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-1/optimize.js"(exports, module2) {
    var sortSelectors = require_sort_selectors();
    var tidyRules = require_tidy_rules();
    var tidyBlock = require_tidy_block();
    var tidyAtRule = require_tidy_at_rule();
    var Hack = require_hack();
    var removeUnused = require_remove_unused();
    var restoreFromOptimizing = require_restore_from_optimizing();
    var wrapForOptimizing = require_wrap_for_optimizing().all;
    var configuration = require_configuration();
    var optimizers = require_value_optimizers();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var Token = require_token();
    var Marker = require_marker();
    var formatPosition = require_format_position();
    var serializeRules = require_one_time().rules;
    var CHARSET_TOKEN = "@charset";
    var CHARSET_REGEXP = new RegExp("^" + CHARSET_TOKEN, "i");
    var DEFAULT_ROUNDING_PRECISION = require_rounding_precision().DEFAULT;
    var VARIABLE_PROPERTY_NAME_PATTERN = /^--\S+$/;
    var PROPERTY_NAME_PATTERN = /^(?:-chrome-|-[\w-]+\w|\w[\w-]+\w|\w{1,})$/;
    var IMPORT_PREFIX_PATTERN = /^@import/i;
    var URL_PREFIX_PATTERN = /^url\(/i;
    function startsAsUrl(value) {
      return URL_PREFIX_PATTERN.test(value);
    }
    function isImport(token) {
      return IMPORT_PREFIX_PATTERN.test(token[1]);
    }
    function isLegacyFilter(property) {
      var value;
      if (property.name == "filter" || property.name == "-ms-filter") {
        value = property.value[0][1];
        return value.indexOf("progid") > -1 || value.indexOf("alpha") === 0 || value.indexOf("chroma") === 0;
      }
      return false;
    }
    function noop() {
    }
    function noopValueOptimizer(_name, value, _options) {
      return value;
    }
    function optimizeBody(rule2, properties, context) {
      var options = context.options;
      var valueOptimizers;
      var property, name, type, value;
      var propertyToken;
      var propertyOptimizer;
      var serializedRule = serializeRules(rule2);
      var _properties = wrapForOptimizing(properties);
      var pluginValueOptimizers = context.options.plugins.level1Value;
      var pluginPropertyOptimizers = context.options.plugins.level1Property;
      var isVariable;
      var i, l;
      for (i = 0, l = _properties.length; i < l; i++) {
        var j, k, m, n;
        property = _properties[i];
        name = property.name;
        propertyOptimizer = configuration[name] && configuration[name].propertyOptimizer || noop;
        valueOptimizers = configuration[name] && configuration[name].valueOptimizers || [optimizers.whiteSpace];
        isVariable = VARIABLE_PROPERTY_NAME_PATTERN.test(name);
        if (isVariable) {
          valueOptimizers = options.variableOptimizers.length > 0 ? options.variableOptimizers : [optimizers.whiteSpace];
        }
        if (!isVariable && !PROPERTY_NAME_PATTERN.test(name)) {
          propertyToken = property.all[property.position];
          context.warnings.push("Invalid property name '" + name + "' at " + formatPosition(propertyToken[1][2][0]) + ". Ignoring.");
          property.unused = true;
          continue;
        }
        if (property.value.length === 0) {
          propertyToken = property.all[property.position];
          context.warnings.push("Empty property '" + name + "' at " + formatPosition(propertyToken[1][2][0]) + ". Ignoring.");
          property.unused = true;
          continue;
        }
        if (property.hack && ((property.hack[0] == Hack.ASTERISK || property.hack[0] == Hack.UNDERSCORE) && !options.compatibility.properties.iePrefixHack || property.hack[0] == Hack.BACKSLASH && !options.compatibility.properties.ieSuffixHack || property.hack[0] == Hack.BANG && !options.compatibility.properties.ieBangHack)) {
          property.unused = true;
          continue;
        }
        if (!options.compatibility.properties.ieFilters && isLegacyFilter(property)) {
          property.unused = true;
          continue;
        }
        if (property.block) {
          optimizeBody(rule2, property.value[0][1], context);
          continue;
        }
        for (j = 0, m = property.value.length; j < m; j++) {
          type = property.value[j][0];
          value = property.value[j][1];
          if (type == Token.PROPERTY_BLOCK) {
            property.unused = true;
            context.warnings.push("Invalid value token at " + formatPosition(value[0][1][2][0]) + ". Ignoring.");
            break;
          }
          if (startsAsUrl(value) && !context.validator.isUrl(value)) {
            property.unused = true;
            context.warnings.push("Broken URL '" + value + "' at " + formatPosition(property.value[j][2][0]) + ". Ignoring.");
            break;
          }
          for (k = 0, n = valueOptimizers.length; k < n; k++) {
            value = valueOptimizers[k](name, value, options);
          }
          for (k = 0, n = pluginValueOptimizers.length; k < n; k++) {
            value = pluginValueOptimizers[k](name, value, options);
          }
          property.value[j][1] = value;
        }
        propertyOptimizer(serializedRule, property, options);
        for (j = 0, m = pluginPropertyOptimizers.length; j < m; j++) {
          pluginPropertyOptimizers[j](serializedRule, property, options);
        }
      }
      restoreFromOptimizing(_properties);
      removeUnused(_properties);
      removeComments(properties, options);
    }
    function removeComments(tokens, options) {
      var token;
      var i;
      for (i = 0; i < tokens.length; i++) {
        token = tokens[i];
        if (token[0] != Token.COMMENT) {
          continue;
        }
        optimizeComment(token, options);
        if (token[1].length === 0) {
          tokens.splice(i, 1);
          i--;
        }
      }
    }
    function optimizeComment(token, options) {
      if (token[1][2] == Marker.EXCLAMATION && (options.level[OptimizationLevel.One].specialComments == "all" || options.commentsKept < options.level[OptimizationLevel.One].specialComments)) {
        options.commentsKept++;
        return;
      }
      token[1] = [];
    }
    function cleanupCharsets(tokens) {
      var hasCharset = false;
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        if (token[0] != Token.AT_RULE) {
          continue;
        }
        if (!CHARSET_REGEXP.test(token[1])) {
          continue;
        }
        if (hasCharset || token[1].indexOf(CHARSET_TOKEN) == -1) {
          tokens.splice(i, 1);
          i--;
          l--;
        } else {
          hasCharset = true;
          tokens.splice(i, 1);
          tokens.unshift([Token.AT_RULE, token[1].replace(CHARSET_REGEXP, CHARSET_TOKEN)]);
        }
      }
    }
    function buildUnitRegexp(options) {
      var units = ["px", "em", "ex", "cm", "mm", "in", "pt", "pc", "%"];
      var otherUnits = ["ch", "rem", "vh", "vm", "vmax", "vmin", "vw"];
      otherUnits.forEach(function(unit) {
        if (options.compatibility.units[unit]) {
          units.push(unit);
        }
      });
      return new RegExp("(^|\\s|\\(|,)0(?:" + units.join("|") + ")(\\W|$)", "g");
    }
    function buildPrecisionOptions(roundingPrecision) {
      var precisionOptions = {
        matcher: null,
        units: {}
      };
      var optimizable = [];
      var unit;
      var value;
      for (unit in roundingPrecision) {
        value = roundingPrecision[unit];
        if (value != DEFAULT_ROUNDING_PRECISION) {
          precisionOptions.units[unit] = {};
          precisionOptions.units[unit].value = value;
          precisionOptions.units[unit].multiplier = 10 ** value;
          optimizable.push(unit);
        }
      }
      if (optimizable.length > 0) {
        precisionOptions.enabled = true;
        precisionOptions.decimalPointMatcher = new RegExp("(\\d)\\.($|" + optimizable.join("|") + ")($|\\W)", "g");
        precisionOptions.zeroMatcher = new RegExp("(\\d*)(\\.\\d+)(" + optimizable.join("|") + ")", "g");
      }
      return precisionOptions;
    }
    function buildVariableOptimizers(options) {
      return options.level[OptimizationLevel.One].variableValueOptimizers.map(function(optimizer) {
        if (typeof optimizer == "string") {
          return optimizers[optimizer] || noopValueOptimizer;
        }
        return optimizer;
      });
    }
    function level1Optimize(tokens, context) {
      var options = context.options;
      var levelOptions = options.level[OptimizationLevel.One];
      var ie7Hack = options.compatibility.selectors.ie7Hack;
      var adjacentSpace = options.compatibility.selectors.adjacentSpace;
      var spaceAfterClosingBrace = options.compatibility.properties.spaceAfterClosingBrace;
      var format = options.format;
      var mayHaveCharset = false;
      var afterRules = false;
      options.unitsRegexp = options.unitsRegexp || buildUnitRegexp(options);
      options.precision = options.precision || buildPrecisionOptions(levelOptions.roundingPrecision);
      options.commentsKept = options.commentsKept || 0;
      options.variableOptimizers = options.variableOptimizers || buildVariableOptimizers(options);
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        switch (token[0]) {
          case Token.AT_RULE:
            token[1] = isImport(token) && afterRules ? "" : token[1];
            token[1] = levelOptions.tidyAtRules ? tidyAtRule(token[1]) : token[1];
            mayHaveCharset = true;
            break;
          case Token.AT_RULE_BLOCK:
            optimizeBody(token[1], token[2], context);
            afterRules = true;
            break;
          case Token.NESTED_BLOCK:
            token[1] = levelOptions.tidyBlockScopes ? tidyBlock(token[1], spaceAfterClosingBrace) : token[1];
            level1Optimize(token[2], context);
            afterRules = true;
            break;
          case Token.COMMENT:
            optimizeComment(token, options);
            break;
          case Token.RULE:
            token[1] = levelOptions.tidySelectors ? tidyRules(token[1], !ie7Hack, adjacentSpace, format, context.warnings) : token[1];
            token[1] = token[1].length > 1 ? sortSelectors(token[1], levelOptions.selectorsSortingMethod) : token[1];
            optimizeBody(token[1], token[2], context);
            afterRules = true;
            break;
        }
        if (token[0] == Token.COMMENT && token[1].length === 0 || levelOptions.removeEmpty && (token[1].length === 0 || token[2] && token[2].length === 0)) {
          tokens.splice(i, 1);
          i--;
          l--;
        }
      }
      if (levelOptions.cleanupCharsets && mayHaveCharset) {
        cleanupCharsets(tokens);
      }
      return tokens;
    }
    module2.exports = level1Optimize;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
var require_is_mergeable = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js"(exports, module2) {
    var Marker = require_marker();
    var split = require_split();
    var DEEP_SELECTOR_PATTERN = /\/deep\//;
    var DOUBLE_COLON_PATTERN = /^::/;
    var VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/;
    var NOT_PSEUDO = ":not";
    var PSEUDO_CLASSES_WITH_ARGUMENTS = [
      ":dir",
      ":lang",
      ":not",
      ":nth-child",
      ":nth-last-child",
      ":nth-last-of-type",
      ":nth-of-type"
    ];
    var RELATION_PATTERN = /[>+~]/;
    var UNMIXABLE_PSEUDO_CLASSES = [
      ":after",
      ":before",
      ":first-letter",
      ":first-line",
      ":lang"
    ];
    var UNMIXABLE_PSEUDO_ELEMENTS = [
      "::after",
      "::before",
      "::first-letter",
      "::first-line"
    ];
    var Level = {
      DOUBLE_QUOTE: "double-quote",
      SINGLE_QUOTE: "single-quote",
      ROOT: "root"
    };
    function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
      var singleSelectors = split(selector, Marker.COMMA);
      var singleSelector;
      var i, l;
      for (i = 0, l = singleSelectors.length; i < l; i++) {
        singleSelector = singleSelectors[i];
        if (singleSelector.length === 0 || isDeepSelector(singleSelector) || isVendorPrefixed(singleSelector) || singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) {
          return false;
        }
      }
      return true;
    }
    function isDeepSelector(selector) {
      return DEEP_SELECTOR_PATTERN.test(selector);
    }
    function isVendorPrefixed(selector) {
      return VENDOR_PREFIXED_PATTERN.test(selector);
    }
    function extractPseudoFrom(selector) {
      var list2 = [];
      var character;
      var buffer = [];
      var level = Level.ROOT;
      var roundBracketLevel = 0;
      var isQuoted;
      var isEscaped;
      var isPseudo = false;
      var isRelation;
      var wasColon = false;
      var index;
      var len;
      for (index = 0, len = selector.length; index < len; index++) {
        character = selector[index];
        isRelation = !isEscaped && RELATION_PATTERN.test(character);
        isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE;
        if (isEscaped) {
          buffer.push(character);
        } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) {
          buffer.push(character);
          level = Level.DOUBLE_QUOTE;
        } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
          buffer.push(character);
          level = Level.ROOT;
        } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) {
          buffer.push(character);
          level = Level.SINGLE_QUOTE;
        } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
          buffer.push(character);
          level = Level.ROOT;
        } else if (isQuoted) {
          buffer.push(character);
        } else if (character == Marker.OPEN_ROUND_BRACKET) {
          buffer.push(character);
          roundBracketLevel++;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) {
          buffer.push(character);
          list2.push(buffer.join(""));
          roundBracketLevel--;
          buffer = [];
          isPseudo = false;
        } else if (character == Marker.CLOSE_ROUND_BRACKET) {
          buffer.push(character);
          roundBracketLevel--;
        } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) {
          list2.push(buffer.join(""));
          buffer = [];
          buffer.push(character);
        } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) {
          buffer = [];
          buffer.push(character);
          isPseudo = true;
        } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) {
          list2.push(buffer.join(""));
          buffer = [];
          isPseudo = false;
        } else if (isRelation && roundBracketLevel === 0 && isPseudo) {
          list2.push(buffer.join(""));
          buffer = [];
          isPseudo = false;
        } else {
          buffer.push(character);
        }
        isEscaped = character == Marker.BACK_SLASH;
        wasColon = character == Marker.COLON;
      }
      if (buffer.length > 0 && isPseudo) {
        list2.push(buffer.join(""));
      }
      return list2;
    }
    function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
      return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) && needArguments(matches) && (matches.length < 2 || !someIncorrectlyChained(selector, matches)) && (matches.length < 2 || multiplePseudoMerging && allMixable(matches));
    }
    function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) {
      var match;
      var name;
      var i, l;
      for (i = 0, l = matches.length; i < l; i++) {
        match = matches[i];
        name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match;
        if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) {
          return false;
        }
      }
      return true;
    }
    function needArguments(matches) {
      var match;
      var name;
      var bracketOpensAt;
      var hasArguments;
      var i, l;
      for (i = 0, l = matches.length; i < l; i++) {
        match = matches[i];
        bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET);
        hasArguments = bracketOpensAt > -1;
        name = hasArguments ? match.substring(0, bracketOpensAt) : match;
        if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) {
          return false;
        }
        if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) {
          return false;
        }
      }
      return true;
    }
    function someIncorrectlyChained(selector, matches) {
      var positionInSelector = 0;
      var match;
      var matchAt;
      var nextMatch;
      var nextMatchAt;
      var name;
      var nextName;
      var areChained;
      var i, l;
      for (i = 0, l = matches.length; i < l; i++) {
        match = matches[i];
        nextMatch = matches[i + 1];
        if (!nextMatch) {
          break;
        }
        matchAt = selector.indexOf(match, positionInSelector);
        nextMatchAt = selector.indexOf(match, matchAt + 1);
        positionInSelector = nextMatchAt;
        areChained = matchAt + match.length == nextMatchAt;
        if (areChained) {
          name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET)) : match;
          nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1 ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET)) : nextMatch;
          if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) {
            return true;
          }
        }
      }
      return false;
    }
    function allMixable(matches) {
      var unmixableMatches = 0;
      var match;
      var i, l;
      for (i = 0, l = matches.length; i < l; i++) {
        match = matches[i];
        if (isPseudoElement(match)) {
          unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0;
        } else {
          unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0;
        }
        if (unmixableMatches > 1) {
          return false;
        }
      }
      return true;
    }
    function isPseudoElement(pseudo) {
      return DOUBLE_COLON_PATTERN.test(pseudo);
    }
    module2.exports = isMergeable;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js
var require_every_values_pair = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/every-values-pair.js"(exports, module2) {
    var Marker = require_marker();
    function everyValuesPair(fn, left, right) {
      var leftSize = left.value.length;
      var rightSize = right.value.length;
      var total = Math.max(leftSize, rightSize);
      var lowerBound = Math.min(leftSize, rightSize) - 1;
      var leftValue;
      var rightValue;
      var position;
      for (position = 0; position < total; position++) {
        leftValue = left.value[position] && left.value[position][1] || leftValue;
        rightValue = right.value[position] && right.value[position][1] || rightValue;
        if (leftValue == Marker.COMMA || rightValue == Marker.COMMA) {
          continue;
        }
        if (!fn(leftValue, rightValue, position, position <= lowerBound)) {
          return false;
        }
      }
      return true;
    }
    module2.exports = everyValuesPair;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js
var require_has_inherit = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/has-inherit.js"(exports, module2) {
    function hasInherit(property) {
      for (var i = property.value.length - 1; i >= 0; i--) {
        if (property.value[i][1] == "inherit") {
          return true;
        }
      }
      return false;
    }
    module2.exports = hasInherit;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js
var require_has_same_values = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/has-same-values.js"(exports, module2) {
    function hasSameValues(property) {
      var firstValue = property.value[0][1];
      var i, l;
      for (i = 1, l = property.value.length; i < l; i++) {
        if (property.value[i][1] != firstValue) {
          return false;
        }
      }
      return true;
    }
    module2.exports = hasSameValues;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js
var require_populate_components = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/populate-components.js"(exports, module2) {
    var configuration = require_configuration();
    var InvalidPropertyError = require_invalid_property_error();
    function populateComponents(properties, validator, warnings) {
      var component;
      var j, m;
      for (var i = properties.length - 1; i >= 0; i--) {
        var property = properties[i];
        var descriptor = configuration[property.name];
        if (!property.dynamic && descriptor && descriptor.shorthand) {
          if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) {
            property.optimizable = false;
            continue;
          }
          property.shorthand = true;
          property.dirty = true;
          try {
            property.components = descriptor.breakUp(property, configuration, validator);
            if (descriptor.shorthandComponents) {
              for (j = 0, m = property.components.length; j < m; j++) {
                component = property.components[j];
                component.components = configuration[component.name].breakUp(component, configuration, validator);
              }
            }
          } catch (e) {
            if (e instanceof InvalidPropertyError) {
              property.components = [];
              warnings.push(e.message);
            } else {
              throw e;
            }
          }
          if (property.components.length > 0) {
            property.multiplex = property.components[0].multiplex;
          } else {
            property.unused = true;
          }
        }
      }
    }
    function onlyValueIsVariable(property, validator) {
      return property.value.length == 1 && validator.isVariable(property.value[0][1]);
    }
    function moreThanOneValueIsVariable(property, validator) {
      return property.value.length > 1 && property.value.filter(function(value) {
        return validator.isVariable(value[1]);
      }).length > 1;
    }
    module2.exports = populateComponents;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js
var require_restore_with_components = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/restore-with-components.js"(exports, module2) {
    var configuration = require_configuration();
    function restoreWithComponents(property) {
      var descriptor = configuration[property.name];
      if (descriptor && descriptor.shorthand) {
        return descriptor.restore(property, configuration);
      }
      return property.value;
    }
    module2.exports = restoreWithComponents;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js
var require_merge_into_shorthands = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/merge-into-shorthands.js"(exports, module2) {
    var everyValuesPair = require_every_values_pair();
    var hasInherit = require_has_inherit();
    var hasSameValues = require_has_same_values();
    var populateComponents = require_populate_components();
    var configuration = require_configuration();
    var deepClone = require_clone().deep;
    var restoreWithComponents = require_restore_with_components();
    var restoreFromOptimizing = require_restore_from_optimizing();
    var wrapSingle = require_wrap_for_optimizing().single;
    var serializeBody = require_one_time().body;
    var Token = require_token();
    function mergeIntoShorthands(properties, validator) {
      var candidates = {};
      var descriptor;
      var componentOf;
      var property;
      var i, l;
      var j, m;
      if (properties.length < 3) {
        return;
      }
      for (i = 0, l = properties.length; i < l; i++) {
        property = properties[i];
        descriptor = configuration[property.name];
        if (property.dynamic) {
          continue;
        }
        if (property.unused) {
          continue;
        }
        if (property.hack) {
          continue;
        }
        if (property.block) {
          continue;
        }
        if (descriptor && descriptor.singleTypeComponents && !hasSameValues(property)) {
          continue;
        }
        invalidateOrCompact(properties, i, candidates, validator);
        if (descriptor && descriptor.componentOf) {
          for (j = 0, m = descriptor.componentOf.length; j < m; j++) {
            componentOf = descriptor.componentOf[j];
            candidates[componentOf] = candidates[componentOf] || {};
            candidates[componentOf][property.name] = property;
          }
        }
      }
      invalidateOrCompact(properties, i, candidates, validator);
    }
    function invalidateOrCompact(properties, position, candidates, validator) {
      var invalidatedBy = properties[position];
      var shorthandName;
      var shorthandDescriptor;
      var candidateComponents;
      var replacedCandidates = [];
      var i;
      for (shorthandName in candidates) {
        if (invalidatedBy !== void 0 && shorthandName == invalidatedBy.name) {
          continue;
        }
        shorthandDescriptor = configuration[shorthandName];
        candidateComponents = candidates[shorthandName];
        if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) {
          delete candidates[shorthandName];
          continue;
        }
        if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) {
          continue;
        }
        if (mixedImportance(candidateComponents)) {
          continue;
        }
        if (!overridable(candidateComponents, shorthandName, validator)) {
          continue;
        }
        if (!mergeable(candidateComponents)) {
          continue;
        }
        if (mixedInherit(candidateComponents)) {
          replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator);
        } else {
          replaceWithShorthand(properties, candidateComponents, shorthandName, validator);
        }
        replacedCandidates.push(shorthandName);
      }
      for (i = replacedCandidates.length - 1; i >= 0; i--) {
        delete candidates[replacedCandidates[i]];
      }
    }
    function invalidates(candidates, shorthandName, invalidatedBy) {
      var shorthandDescriptor = configuration[shorthandName];
      var invalidatedByDescriptor = configuration[invalidatedBy.name];
      var componentName;
      if ("overridesShorthands" in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) {
        return true;
      }
      if (invalidatedByDescriptor && "componentOf" in invalidatedByDescriptor) {
        for (componentName in candidates[shorthandName]) {
          if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) {
            return true;
          }
        }
      }
      return false;
    }
    function mixedImportance(components) {
      var important;
      var componentName;
      for (componentName in components) {
        if (important !== void 0 && components[componentName].important != important) {
          return true;
        }
        important = components[componentName].important;
      }
      return false;
    }
    function overridable(components, shorthandName, validator) {
      var descriptor = configuration[shorthandName];
      var newValuePlaceholder = [
        Token.PROPERTY,
        [Token.PROPERTY_NAME, shorthandName],
        [Token.PROPERTY_VALUE, descriptor.defaultValue]
      ];
      var newProperty = wrapSingle(newValuePlaceholder);
      var component;
      var mayOverride;
      var i, l;
      populateComponents([newProperty], validator, []);
      for (i = 0, l = descriptor.components.length; i < l; i++) {
        component = components[descriptor.components[i]];
        mayOverride = configuration[component.name].canOverride || sameValue;
        if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) {
          return false;
        }
      }
      return true;
    }
    function sameValue(_validator, value1, value2) {
      return value1 === value2;
    }
    function mergeable(components) {
      var lastCount = null;
      var currentCount;
      var componentName;
      var component;
      var descriptor;
      var values;
      for (componentName in components) {
        component = components[componentName];
        descriptor = configuration[componentName];
        if (!("restore" in descriptor)) {
          continue;
        }
        restoreFromOptimizing([component.all[component.position]], restoreWithComponents);
        values = descriptor.restore(component, configuration);
        currentCount = values.length;
        if (lastCount !== null && currentCount !== lastCount) {
          return false;
        }
        lastCount = currentCount;
      }
      return true;
    }
    function mixedInherit(components) {
      var componentName;
      var lastValue = null;
      var currentValue;
      for (componentName in components) {
        currentValue = hasInherit(components[componentName]);
        if (lastValue !== null && lastValue !== currentValue) {
          return true;
        }
        lastValue = currentValue;
      }
      return false;
    }
    function replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) {
      var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator);
      var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator);
      var longhandTokensSequence = viaLonghands[0];
      var shorthandTokensSequence = viaShorthand[0];
      var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length;
      var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence;
      var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1];
      var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2];
      var lastComponent = candidateComponents[Object.keys(candidateComponents).pop()];
      var all = lastComponent.all;
      var insertAt = lastComponent.position;
      var componentName;
      var oldComponent;
      var newComponent;
      var newToken;
      newProperty.position = insertAt;
      newProperty.shorthand = true;
      newProperty.important = lastComponent.important;
      newProperty.multiplex = false;
      newProperty.dirty = true;
      newProperty.all = all;
      newProperty.all[insertAt] = newTokensSequence[0];
      properties.splice(insertAt, 1, newProperty);
      for (componentName in candidateComponents) {
        oldComponent = candidateComponents[componentName];
        oldComponent.unused = true;
        newProperty.multiplex = newProperty.multiplex || oldComponent.multiplex;
        if (oldComponent.name in newComponents) {
          newComponent = newComponents[oldComponent.name];
          newToken = findTokenIn(newTokensSequence, componentName);
          newComponent.position = all.length;
          newComponent.all = all;
          newComponent.all.push(newToken);
          properties.push(newComponent);
        }
      }
    }
    function buildSequenceWithInheritLonghands(components, shorthandName, validator) {
      var tokensSequence = [];
      var inheritComponents = {};
      var nonInheritComponents = {};
      var descriptor = configuration[shorthandName];
      var shorthandToken = [
        Token.PROPERTY,
        [Token.PROPERTY_NAME, shorthandName],
        [Token.PROPERTY_VALUE, descriptor.defaultValue]
      ];
      var newProperty = wrapSingle(shorthandToken);
      var component;
      var longhandToken;
      var newComponent;
      var nameMetadata;
      var i, l;
      populateComponents([newProperty], validator, []);
      for (i = 0, l = descriptor.components.length; i < l; i++) {
        component = components[descriptor.components[i]];
        if (hasInherit(component)) {
          longhandToken = component.all[component.position].slice(0, 2);
          Array.prototype.push.apply(longhandToken, component.value);
          tokensSequence.push(longhandToken);
          newComponent = deepClone(component);
          newComponent.value = inferComponentValue(components, newComponent.name);
          newProperty.components[i] = newComponent;
          inheritComponents[component.name] = deepClone(component);
        } else {
          newComponent = deepClone(component);
          newComponent.all = component.all;
          newProperty.components[i] = newComponent;
          nonInheritComponents[component.name] = component;
        }
      }
      newProperty.important = components[Object.keys(components).pop()].important;
      nameMetadata = joinMetadata(nonInheritComponents, 1);
      shorthandToken[1].push(nameMetadata);
      restoreFromOptimizing([newProperty], restoreWithComponents);
      shorthandToken = shorthandToken.slice(0, 2);
      Array.prototype.push.apply(shorthandToken, newProperty.value);
      tokensSequence.unshift(shorthandToken);
      return [tokensSequence, newProperty, inheritComponents];
    }
    function inferComponentValue(components, propertyName) {
      var descriptor = configuration[propertyName];
      if ("oppositeTo" in descriptor) {
        return components[descriptor.oppositeTo].value;
      }
      return [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
    }
    function joinMetadata(components, at) {
      var metadata = [];
      var component;
      var originalValue;
      var componentMetadata;
      var componentName;
      for (componentName in components) {
        component = components[componentName];
        originalValue = component.all[component.position];
        componentMetadata = originalValue[at][originalValue[at].length - 1];
        Array.prototype.push.apply(metadata, componentMetadata);
      }
      return metadata.sort(metadataSorter);
    }
    function metadataSorter(metadata1, metadata2) {
      var line1 = metadata1[0];
      var line2 = metadata2[0];
      var column1 = metadata1[1];
      var column2 = metadata2[1];
      if (line1 < line2) {
        return -1;
      }
      if (line1 === line2) {
        return column1 < column2 ? -1 : 1;
      }
      return 1;
    }
    function buildSequenceWithInheritShorthand(components, shorthandName, validator) {
      var tokensSequence = [];
      var inheritComponents = {};
      var nonInheritComponents = {};
      var descriptor = configuration[shorthandName];
      var shorthandToken = [
        Token.PROPERTY,
        [Token.PROPERTY_NAME, shorthandName],
        [Token.PROPERTY_VALUE, "inherit"]
      ];
      var newProperty = wrapSingle(shorthandToken);
      var component;
      var longhandToken;
      var nameMetadata;
      var valueMetadata;
      var i, l;
      populateComponents([newProperty], validator, []);
      for (i = 0, l = descriptor.components.length; i < l; i++) {
        component = components[descriptor.components[i]];
        if (hasInherit(component)) {
          inheritComponents[component.name] = component;
        } else {
          longhandToken = component.all[component.position].slice(0, 2);
          Array.prototype.push.apply(longhandToken, component.value);
          tokensSequence.push(longhandToken);
          nonInheritComponents[component.name] = deepClone(component);
        }
      }
      nameMetadata = joinMetadata(inheritComponents, 1);
      shorthandToken[1].push(nameMetadata);
      valueMetadata = joinMetadata(inheritComponents, 2);
      shorthandToken[2].push(valueMetadata);
      tokensSequence.unshift(shorthandToken);
      return [tokensSequence, newProperty, nonInheritComponents];
    }
    function findTokenIn(tokens, componentName) {
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        if (tokens[i][1][1] == componentName) {
          return tokens[i];
        }
      }
    }
    function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) {
      var descriptor = configuration[shorthandName];
      var nameMetadata;
      var valueMetadata;
      var newValuePlaceholder = [
        Token.PROPERTY,
        [Token.PROPERTY_NAME, shorthandName],
        [Token.PROPERTY_VALUE, descriptor.defaultValue]
      ];
      var all;
      var insertAt = inferInsertAtFrom(properties, candidateComponents, shorthandName);
      var newProperty = wrapSingle(newValuePlaceholder);
      newProperty.shorthand = true;
      newProperty.dirty = true;
      newProperty.multiplex = false;
      populateComponents([newProperty], validator, []);
      for (var i = 0, l = descriptor.components.length; i < l; i++) {
        var component = candidateComponents[descriptor.components[i]];
        newProperty.components[i] = deepClone(component);
        newProperty.important = component.important;
        newProperty.multiplex = newProperty.multiplex || component.multiplex;
        all = component.all;
      }
      for (var componentName in candidateComponents) {
        candidateComponents[componentName].unused = true;
      }
      nameMetadata = joinMetadata(candidateComponents, 1);
      newValuePlaceholder[1].push(nameMetadata);
      valueMetadata = joinMetadata(candidateComponents, 2);
      newValuePlaceholder[2].push(valueMetadata);
      newProperty.position = insertAt;
      newProperty.all = all;
      newProperty.all[insertAt] = newValuePlaceholder;
      properties.splice(insertAt, 1, newProperty);
    }
    function inferInsertAtFrom(properties, candidateComponents, shorthandName) {
      var candidateComponentNames = Object.keys(candidateComponents);
      var firstCandidatePosition = candidateComponents[candidateComponentNames[0]].position;
      var lastCandidatePosition = candidateComponents[candidateComponentNames[candidateComponentNames.length - 1]].position;
      if (shorthandName == "border" && traversesVia(properties.slice(firstCandidatePosition, lastCandidatePosition), "border-image")) {
        return firstCandidatePosition;
      }
      return lastCandidatePosition;
    }
    function traversesVia(properties, propertyName) {
      for (var i = properties.length - 1; i >= 0; i--) {
        if (properties[i].name == propertyName) {
          return true;
        }
      }
      return false;
    }
    module2.exports = mergeIntoShorthands;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js
var require_has_unset = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/has-unset.js"(exports, module2) {
    function hasUnset(property) {
      for (var i = property.value.length - 1; i >= 0; i--) {
        if (property.value[i][1] == "unset") {
          return true;
        }
      }
      return false;
    }
    module2.exports = hasUnset;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js
var require_find_component_in = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/find-component-in.js"(exports, module2) {
    var configuration = require_configuration();
    function findComponentIn(shorthand, longhand) {
      var comparator = nameComparator(longhand);
      return findInDirectComponents(shorthand, comparator) || findInSubComponents(shorthand, comparator);
    }
    function nameComparator(to) {
      return function(property) {
        return to.name === property.name;
      };
    }
    function findInDirectComponents(shorthand, comparator) {
      return shorthand.components.filter(comparator)[0];
    }
    function findInSubComponents(shorthand, comparator) {
      var shorthandComponent;
      var longhandMatch;
      var i, l;
      if (!configuration[shorthand.name].shorthandComponents) {
        return;
      }
      for (i = 0, l = shorthand.components.length; i < l; i++) {
        shorthandComponent = shorthand.components[i];
        longhandMatch = findInDirectComponents(shorthandComponent, comparator);
        if (longhandMatch) {
          return longhandMatch;
        }
      }
    }
    module2.exports = findComponentIn;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js
var require_is_component_of = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/is-component-of.js"(exports, module2) {
    var configuration = require_configuration();
    function isComponentOf(property1, property2, shallow) {
      return isDirectComponentOf(property1, property2) || !shallow && !!configuration[property1.name].shorthandComponents && isSubComponentOf(property1, property2);
    }
    function isDirectComponentOf(property1, property2) {
      var descriptor = configuration[property1.name];
      return "components" in descriptor && descriptor.components.indexOf(property2.name) > -1;
    }
    function isSubComponentOf(property1, property2) {
      return property1.components.some(function(component) {
        return isDirectComponentOf(component, property2);
      });
    }
    module2.exports = isComponentOf;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js
var require_is_mergeable_shorthand = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/is-mergeable-shorthand.js"(exports, module2) {
    var Marker = require_marker();
    function isMergeableShorthand(shorthand) {
      if (shorthand.name != "font") {
        return true;
      }
      return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1;
    }
    module2.exports = isMergeableShorthand;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js
var require_overrides_non_component_shorthand = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/overrides-non-component-shorthand.js"(exports, module2) {
    var configuration = require_configuration();
    function overridesNonComponentShorthand(property1, property2) {
      return property1.name in configuration && "overridesShorthands" in configuration[property1.name] && configuration[property1.name].overridesShorthands.indexOf(property2.name) > -1;
    }
    module2.exports = overridesNonComponentShorthand;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js
var require_override_properties = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/override-properties.js"(exports, module2) {
    var hasInherit = require_has_inherit();
    var hasUnset = require_has_unset();
    var everyValuesPair = require_every_values_pair();
    var findComponentIn = require_find_component_in();
    var isComponentOf = require_is_component_of();
    var isMergeableShorthand = require_is_mergeable_shorthand();
    var overridesNonComponentShorthand = require_overrides_non_component_shorthand();
    var sameVendorPrefixesIn = require_vendor_prefixes().same;
    var configuration = require_configuration();
    var deepClone = require_clone().deep;
    var restoreWithComponents = require_restore_with_components();
    var shallowClone = require_clone().shallow;
    var restoreFromOptimizing = require_restore_from_optimizing();
    var Token = require_token();
    var Marker = require_marker();
    var serializeProperty = require_one_time().property;
    function sameValue(_validator, value1, value2) {
      return value1 === value2;
    }
    function wouldBreakCompatibility(property, validator) {
      for (var i = 0; i < property.components.length; i++) {
        var component = property.components[i];
        var descriptor = configuration[component.name];
        var canOverride = descriptor && descriptor.canOverride || sameValue;
        var _component = shallowClone(component);
        _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
        if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) {
          return true;
        }
      }
      return false;
    }
    function overrideIntoMultiplex(property, by) {
      by.unused = true;
      turnIntoMultiplex(by, multiplexSize(property));
      property.value = by.value;
    }
    function overrideByMultiplex(property, by) {
      by.unused = true;
      property.multiplex = true;
      property.value = by.value;
    }
    function overrideSimple(property, by) {
      by.unused = true;
      property.value = by.value;
    }
    function override(property, by) {
      if (by.multiplex) {
        overrideByMultiplex(property, by);
      } else if (property.multiplex) {
        overrideIntoMultiplex(property, by);
      } else {
        overrideSimple(property, by);
      }
    }
    function overrideShorthand(property, by) {
      by.unused = true;
      for (var i = 0, l = property.components.length; i < l; i++) {
        override(property.components[i], by.components[i]);
      }
    }
    function turnIntoMultiplex(property, size) {
      property.multiplex = true;
      if (configuration[property.name].shorthand) {
        turnShorthandValueIntoMultiplex(property, size);
      } else {
        turnLonghandValueIntoMultiplex(property, size);
      }
    }
    function turnShorthandValueIntoMultiplex(property, size) {
      var component;
      var i, l;
      for (i = 0, l = property.components.length; i < l; i++) {
        component = property.components[i];
        if (!component.multiplex) {
          turnLonghandValueIntoMultiplex(component, size);
        }
      }
    }
    function turnLonghandValueIntoMultiplex(property, size) {
      var descriptor = configuration[property.name];
      var withRealValue = descriptor.intoMultiplexMode == "real";
      var withValue = descriptor.intoMultiplexMode == "real" ? property.value.slice(0) : descriptor.intoMultiplexMode == "placeholder" ? descriptor.placeholderValue : descriptor.defaultValue;
      var i = multiplexSize(property);
      var j;
      var m = withValue.length;
      for (; i < size; i++) {
        property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
        if (Array.isArray(withValue)) {
          for (j = 0; j < m; j++) {
            property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]);
          }
        } else {
          property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]);
        }
      }
    }
    function multiplexSize(component) {
      var size = 0;
      for (var i = 0, l = component.value.length; i < l; i++) {
        if (component.value[i][1] == Marker.COMMA) {
          size++;
        }
      }
      return size + 1;
    }
    function lengthOf(property) {
      var fakeAsArray = [
        Token.PROPERTY,
        [Token.PROPERTY_NAME, property.name]
      ].concat(property.value);
      return serializeProperty([fakeAsArray], 0).length;
    }
    function moreSameShorthands(properties, startAt, name) {
      var count = 0;
      for (var i = startAt; i >= 0; i--) {
        if (properties[i].name == name && !properties[i].unused) {
          count++;
        }
        if (count > 1) {
          break;
        }
      }
      return count > 1;
    }
    function overridingFunction(shorthand, validator) {
      for (var i = 0, l = shorthand.components.length; i < l; i++) {
        if (!anyValue(validator.isUrl, shorthand.components[i]) && anyValue(validator.isFunction, shorthand.components[i])) {
          return true;
        }
      }
      return false;
    }
    function anyValue(fn, property) {
      for (var i = 0, l = property.value.length; i < l; i++) {
        if (property.value[i][1] == Marker.COMMA) {
          continue;
        }
        if (fn(property.value[i][1])) {
          return true;
        }
      }
      return false;
    }
    function wouldResultInLongerValue(left, right) {
      if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex) {
        return false;
      }
      var multiplex = left.multiplex ? left : right;
      var simple = left.multiplex ? right : left;
      var component;
      var multiplexClone = deepClone(multiplex);
      restoreFromOptimizing([multiplexClone], restoreWithComponents);
      var simpleClone = deepClone(simple);
      restoreFromOptimizing([simpleClone], restoreWithComponents);
      var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone);
      if (left.multiplex) {
        component = findComponentIn(multiplexClone, simpleClone);
        overrideIntoMultiplex(component, simpleClone);
      } else {
        component = findComponentIn(simpleClone, multiplexClone);
        turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone));
        overrideByMultiplex(component, multiplexClone);
      }
      restoreFromOptimizing([simpleClone], restoreWithComponents);
      var lengthAfter = lengthOf(simpleClone);
      return lengthBefore <= lengthAfter;
    }
    function isCompactable(property) {
      return property.name in configuration;
    }
    function noneOverrideHack(left, right) {
      return !left.multiplex && (left.name == "background" || left.name == "background-image") && right.multiplex && (right.name == "background" || right.name == "background-image") && anyLayerIsNone(right.value);
    }
    function anyLayerIsNone(values) {
      var layers = intoLayers(values);
      for (var i = 0, l = layers.length; i < l; i++) {
        if (layers[i].length == 1 && layers[i][0][1] == "none") {
          return true;
        }
      }
      return false;
    }
    function intoLayers(values) {
      var layers = [];
      for (var i = 0, layer = [], l = values.length; i < l; i++) {
        var value = values[i];
        if (value[1] == Marker.COMMA) {
          layers.push(layer);
          layer = [];
        } else {
          layer.push(value);
        }
      }
      layers.push(layer);
      return layers;
    }
    function overrideProperties(properties, withMerging, compatibility, validator) {
      var mayOverride, right, left, component;
      var overriddenComponents;
      var overriddenComponent;
      var overridingComponent;
      var overridable;
      var i, j, k;
      propertyLoop:
        for (i = properties.length - 1; i >= 0; i--) {
          right = properties[i];
          if (!isCompactable(right)) {
            continue;
          }
          if (right.block) {
            continue;
          }
          mayOverride = configuration[right.name].canOverride || sameValue;
          traverseLoop:
            for (j = i - 1; j >= 0; j--) {
              left = properties[j];
              if (!isCompactable(left)) {
                continue;
              }
              if (left.block) {
                continue;
              }
              if (left.dynamic || right.dynamic) {
                continue;
              }
              if (left.unused || right.unused) {
                continue;
              }
              if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack) {
                continue;
              }
              if (left.important == right.important && left.hack[0] != right.hack[0]) {
                continue;
              }
              if (left.important == right.important && (left.hack[0] != right.hack[0] || left.hack[1] && left.hack[1] != right.hack[1])) {
                continue;
              }
              if (hasInherit(right)) {
                continue;
              }
              if (noneOverrideHack(left, right)) {
                continue;
              }
              if (right.shorthand && isComponentOf(right, left)) {
                if (!right.important && left.important) {
                  continue;
                }
                if (!sameVendorPrefixesIn([left], right.components)) {
                  continue;
                }
                if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) {
                  continue;
                }
                if (!isMergeableShorthand(right)) {
                  left.unused = true;
                  continue;
                }
                component = findComponentIn(right, left);
                mayOverride = configuration[left.name].canOverride || sameValue;
                if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {
                  left.unused = true;
                }
              } else if (right.shorthand && overridesNonComponentShorthand(right, left)) {
                if (!right.important && left.important) {
                  continue;
                }
                if (!sameVendorPrefixesIn([left], right.components)) {
                  continue;
                }
                if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) {
                  continue;
                }
                overriddenComponents = left.shorthand ? left.components : [left];
                for (k = overriddenComponents.length - 1; k >= 0; k--) {
                  overriddenComponent = overriddenComponents[k];
                  overridingComponent = findComponentIn(right, overriddenComponent);
                  mayOverride = configuration[overriddenComponent.name].canOverride || sameValue;
                  if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {
                    continue traverseLoop;
                  }
                }
                left.unused = true;
              } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) {
                if (right.important && !left.important) {
                  continue;
                }
                if (!right.important && left.important) {
                  right.unused = true;
                  continue;
                }
                if (moreSameShorthands(properties, i - 1, left.name)) {
                  continue;
                }
                if (overridingFunction(left, validator)) {
                  continue;
                }
                if (!isMergeableShorthand(left)) {
                  continue;
                }
                if (hasUnset(left) || hasUnset(right)) {
                  continue;
                }
                component = findComponentIn(left, right);
                if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {
                  var disabledBackgroundMerging = !compatibility.properties.backgroundClipMerging && component.name.indexOf("background-clip") > -1 || !compatibility.properties.backgroundOriginMerging && component.name.indexOf("background-origin") > -1 || !compatibility.properties.backgroundSizeMerging && component.name.indexOf("background-size") > -1;
                  var nonMergeableValue = configuration[right.name].nonMergeableValue === right.value[0][1];
                  if (disabledBackgroundMerging || nonMergeableValue) {
                    continue;
                  }
                  if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator)) {
                    continue;
                  }
                  if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right))) {
                    continue;
                  }
                  if (wouldResultInLongerValue(left, right)) {
                    continue;
                  }
                  if (!left.multiplex && right.multiplex) {
                    turnIntoMultiplex(left, multiplexSize(right));
                  }
                  override(component, right);
                  left.dirty = true;
                }
              } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) {
                if (!left.multiplex && right.multiplex) {
                  continue;
                }
                if (!right.important && left.important) {
                  right.unused = true;
                  continue propertyLoop;
                }
                if (right.important && !left.important) {
                  left.unused = true;
                  continue;
                }
                if (!isMergeableShorthand(right)) {
                  left.unused = true;
                  continue;
                }
                for (k = left.components.length - 1; k >= 0; k--) {
                  var leftComponent = left.components[k];
                  var rightComponent = right.components[k];
                  mayOverride = configuration[leftComponent.name].canOverride || sameValue;
                  if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent)) {
                    continue propertyLoop;
                  }
                }
                overrideShorthand(left, right);
                left.dirty = true;
              } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) {
                if (!left.important && right.important) {
                  continue;
                }
                component = findComponentIn(left, right);
                mayOverride = configuration[right.name].canOverride || sameValue;
                if (!everyValuesPair(mayOverride.bind(null, validator), component, right)) {
                  continue;
                }
                if (left.important && !right.important) {
                  right.unused = true;
                  continue;
                }
                var rightRestored = configuration[right.name].restore(right, configuration);
                if (rightRestored.length > 1) {
                  continue;
                }
                component = findComponentIn(left, right);
                override(component, right);
                right.dirty = true;
              } else if (left.name == right.name) {
                overridable = true;
                if (right.shorthand) {
                  for (k = right.components.length - 1; k >= 0 && overridable; k--) {
                    overriddenComponent = left.components[k];
                    overridingComponent = right.components[k];
                    mayOverride = configuration[overridingComponent.name].canOverride || sameValue;
                    overridable = everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);
                  }
                } else {
                  mayOverride = configuration[right.name].canOverride || sameValue;
                  overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);
                }
                if (left.important && !right.important && overridable) {
                  right.unused = true;
                  continue;
                }
                if (!left.important && right.important && overridable) {
                  left.unused = true;
                  continue;
                }
                if (!overridable) {
                  continue;
                }
                left.unused = true;
              }
            }
        }
    }
    module2.exports = overrideProperties;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js
var require_optimize3 = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/properties/optimize.js"(exports, module2) {
    var mergeIntoShorthands = require_merge_into_shorthands();
    var overrideProperties = require_override_properties();
    var populateComponents = require_populate_components();
    var restoreWithComponents = require_restore_with_components();
    var wrapForOptimizing = require_wrap_for_optimizing().all;
    var removeUnused = require_remove_unused();
    var restoreFromOptimizing = require_restore_from_optimizing();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    function optimizeProperties(properties, withOverriding, withMerging, context) {
      var levelOptions = context.options.level[OptimizationLevel.Two];
      var _properties = wrapForOptimizing(properties, levelOptions.skipProperties);
      var _property;
      var i, l;
      populateComponents(_properties, context.validator, context.warnings);
      for (i = 0, l = _properties.length; i < l; i++) {
        _property = _properties[i];
        if (_property.block) {
          optimizeProperties(_property.value[0][1], withOverriding, withMerging, context);
        }
      }
      if (withMerging && levelOptions.mergeIntoShorthands) {
        mergeIntoShorthands(_properties, context.validator);
      }
      if (withOverriding && levelOptions.overrideProperties) {
        overrideProperties(_properties, withMerging, context.options.compatibility, context.validator);
      }
      restoreFromOptimizing(_properties, restoreWithComponents);
      removeUnused(_properties);
    }
    module2.exports = optimizeProperties;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js
var require_merge_adjacent = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/merge-adjacent.js"(exports, module2) {
    var isMergeable = require_is_mergeable();
    var optimizeProperties = require_optimize3();
    var sortSelectors = require_sort_selectors();
    var tidyRules = require_tidy_rules();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var serializeBody = require_one_time().body;
    var serializeRules = require_one_time().rules;
    var Token = require_token();
    function mergeAdjacent(tokens, context) {
      var lastToken = [null, [], []];
      var options = context.options;
      var adjacentSpace = options.compatibility.selectors.adjacentSpace;
      var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
      var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
      var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
      var mergeLimit = options.compatibility.selectors.mergeLimit;
      var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        if (token[0] != Token.RULE) {
          lastToken = [null, [], []];
          continue;
        }
        if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) {
          Array.prototype.push.apply(lastToken[2], token[2]);
          optimizeProperties(lastToken[2], true, true, context);
          token[2] = [];
        } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(lastToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && lastToken[1].length < mergeLimit) {
          lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
          lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1];
          token[2] = [];
        } else {
          lastToken = token;
        }
      }
    }
    module2.exports = mergeAdjacent;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js
var require_rules_overlap = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/rules-overlap.js"(exports, module2) {
    var MODIFIER_PATTERN = /--.+$/;
    function rulesOverlap(rule1, rule2, bemMode) {
      var scope1;
      var scope2;
      var i, l;
      var j, m;
      for (i = 0, l = rule1.length; i < l; i++) {
        scope1 = rule1[i][1];
        for (j = 0, m = rule2.length; j < m; j++) {
          scope2 = rule2[j][1];
          if (scope1 == scope2) {
            return true;
          }
          if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) {
            return true;
          }
        }
      }
      return false;
    }
    function withoutModifiers(scope) {
      return scope.replace(MODIFIER_PATTERN, "");
    }
    module2.exports = rulesOverlap;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/specificity.js
var require_specificity = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/specificity.js"(exports, module2) {
    var Marker = require_marker();
    var Selector = {
      ADJACENT_SIBLING: "+",
      DESCENDANT: ">",
      DOT: ".",
      HASH: "#",
      NON_ADJACENT_SIBLING: "~",
      PSEUDO: ":"
    };
    var LETTER_PATTERN = /[a-zA-Z]/;
    var NOT_PREFIX = ":not(";
    var SEPARATOR_PATTERN = /[\s,(>~+]/;
    function specificity(selector) {
      var result = [0, 0, 0];
      var character;
      var isEscaped;
      var isSingleQuoted;
      var isDoubleQuoted;
      var roundBracketLevel = 0;
      var couldIntroduceNewTypeSelector;
      var withinNotPseudoClass = false;
      var wasPseudoClass = false;
      var i, l;
      for (i = 0, l = selector.length; i < l; i++) {
        character = selector[i];
        if (isEscaped) {
        } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
          isSingleQuoted = true;
        } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) {
          isSingleQuoted = false;
        } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
          isDoubleQuoted = true;
        } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) {
          isDoubleQuoted = false;
        } else if (isSingleQuoted || isDoubleQuoted) {
          continue;
        } else if (roundBracketLevel > 0 && !withinNotPseudoClass) {
        } else if (character == Marker.OPEN_ROUND_BRACKET) {
          roundBracketLevel++;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) {
          roundBracketLevel--;
          withinNotPseudoClass = false;
        } else if (character == Marker.CLOSE_ROUND_BRACKET) {
          roundBracketLevel--;
        } else if (character == Selector.HASH) {
          result[0]++;
        } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) {
          result[1]++;
        } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) {
          result[1]++;
          withinNotPseudoClass = false;
        } else if (character == Selector.PSEUDO) {
          withinNotPseudoClass = true;
        } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) {
          result[2]++;
        }
        isEscaped = character == Marker.BACK_SLASH;
        wasPseudoClass = character == Selector.PSEUDO;
        couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character);
      }
      return result;
    }
    function isNotPseudoClass(selector, index) {
      return selector.indexOf(NOT_PREFIX, index) === index;
    }
    module2.exports = specificity;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js
var require_specificities_overlap = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/specificities-overlap.js"(exports, module2) {
    var specificity = require_specificity();
    function specificitiesOverlap(selector1, selector2, cache) {
      var specificity1;
      var specificity2;
      var i, l;
      var j, m;
      for (i = 0, l = selector1.length; i < l; i++) {
        specificity1 = findSpecificity(selector1[i][1], cache);
        for (j = 0, m = selector2.length; j < m; j++) {
          specificity2 = findSpecificity(selector2[j][1], cache);
          if (specificity1[0] === specificity2[0] && specificity1[1] === specificity2[1] && specificity1[2] === specificity2[2]) {
            return true;
          }
        }
      }
      return false;
    }
    function findSpecificity(selector, cache) {
      var value;
      if (!(selector in cache)) {
        cache[selector] = value = specificity(selector);
      }
      return value || cache[selector];
    }
    module2.exports = specificitiesOverlap;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/reorderable.js
var require_reorderable = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/reorderable.js"(exports, module2) {
    var rulesOverlap = require_rules_overlap();
    var specificitiesOverlap = require_specificities_overlap();
    var FLEX_PROPERTIES = /align-items|box-align|box-pack|flex|justify/;
    var BORDER_PROPERTIES = /^border-(top|right|bottom|left|color|style|width|radius)/;
    function canReorder(left, right, cache) {
      for (var i = right.length - 1; i >= 0; i--) {
        for (var j = left.length - 1; j >= 0; j--) {
          if (!canReorderSingle(left[j], right[i], cache)) {
            return false;
          }
        }
      }
      return true;
    }
    function canReorderSingle(left, right, cache) {
      var leftName = left[0];
      var leftValue = left[1];
      var leftNameRoot = left[2];
      var leftSelector = left[5];
      var leftInSpecificSelector = left[6];
      var rightName = right[0];
      var rightValue = right[1];
      var rightNameRoot = right[2];
      var rightSelector = right[5];
      var rightInSpecificSelector = right[6];
      if (leftName == "font" && rightName == "line-height" || rightName == "font" && leftName == "line-height") {
        return false;
      }
      if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName)) {
        return false;
      }
      if (leftNameRoot == rightNameRoot && unprefixed(leftName) == unprefixed(rightName) && vendorPrefixed(leftName) ^ vendorPrefixed(rightName)) {
        return false;
      }
      if (leftNameRoot == "border" && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == "border" || leftName == rightNameRoot || leftValue != rightValue && sameBorderComponent(leftName, rightName))) {
        return false;
      }
      if (rightNameRoot == "border" && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == "border" || rightName == leftNameRoot || leftValue != rightValue && sameBorderComponent(leftName, rightName))) {
        return false;
      }
      if (leftNameRoot == "border" && rightNameRoot == "border" && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName))) {
        return false;
      }
      if (leftNameRoot != rightNameRoot) {
        return true;
      }
      if (leftName == rightName && leftNameRoot == rightNameRoot && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue))) {
        return true;
      }
      if (leftName != rightName && leftNameRoot == rightNameRoot && leftName != leftNameRoot && rightName != rightNameRoot) {
        return true;
      }
      if (leftName != rightName && leftNameRoot == rightNameRoot && leftValue == rightValue) {
        return true;
      }
      if (rightInSpecificSelector && leftInSpecificSelector && !inheritable(leftNameRoot) && !inheritable(rightNameRoot) && !rulesOverlap(rightSelector, leftSelector, false)) {
        return true;
      }
      if (!specificitiesOverlap(leftSelector, rightSelector, cache)) {
        return true;
      }
      return false;
    }
    function vendorPrefixed(name) {
      return /^-(?:moz|webkit|ms|o)-/.test(name);
    }
    function unprefixed(name) {
      return name.replace(/^-(?:moz|webkit|ms|o)-/, "");
    }
    function sameBorderComponent(name1, name2) {
      return name1.split("-").pop() == name2.split("-").pop();
    }
    function isSideBorder(name) {
      return name == "border-top" || name == "border-right" || name == "border-bottom" || name == "border-left";
    }
    function isStyleBorder(name) {
      return name == "border-color" || name == "border-style" || name == "border-width";
    }
    function withDifferentVendorPrefix(value1, value2) {
      return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split("-")[1] != value2.split("-")[2];
    }
    function inheritable(name) {
      return name == "font" || name == "line-height" || name == "list-style";
    }
    module2.exports = {
      canReorder,
      canReorderSingle
    };
  }
});

// node_modules/clean-css/lib/optimizer/level-2/extract-properties.js
var require_extract_properties = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/extract-properties.js"(exports, module2) {
    var Token = require_token();
    var serializeRules = require_one_time().rules;
    var serializeValue = require_one_time().value;
    function extractProperties(token) {
      var properties = [];
      var inSpecificSelector;
      var property;
      var name;
      var value;
      var i, l;
      if (token[0] == Token.RULE) {
        inSpecificSelector = !/[.+>~]/.test(serializeRules(token[1]));
        for (i = 0, l = token[2].length; i < l; i++) {
          property = token[2][i];
          if (property[0] != Token.PROPERTY) {
            continue;
          }
          name = property[1][1];
          if (name.length === 0) {
            continue;
          }
          value = serializeValue(property, i);
          properties.push([
            name,
            value,
            findNameRoot(name),
            token[2][i],
            name + ":" + value,
            token[1],
            inSpecificSelector
          ]);
        }
      } else if (token[0] == Token.NESTED_BLOCK) {
        for (i = 0, l = token[2].length; i < l; i++) {
          properties = properties.concat(extractProperties(token[2][i]));
        }
      }
      return properties;
    }
    function findNameRoot(name) {
      if (name == "list-style") {
        return name;
      }
      if (name.indexOf("-radius") > 0) {
        return "border-radius";
      }
      if (name == "border-collapse" || name == "border-spacing" || name == "border-image") {
        return name;
      }
      if (name.indexOf("border-") === 0 && /^border-\w+-\w+$/.test(name)) {
        return name.match(/border-\w+/)[0];
      }
      if (name.indexOf("border-") === 0 && /^border-\w+$/.test(name)) {
        return "border";
      }
      if (name.indexOf("text-") === 0) {
        return name;
      }
      if (name == "-chrome-") {
        return name;
      }
      return name.replace(/^-\w+-/, "").match(/([a-zA-Z]+)/)[0].toLowerCase();
    }
    module2.exports = extractProperties;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js
var require_merge_media_queries = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/merge-media-queries.js"(exports, module2) {
    var canReorder = require_reorderable().canReorder;
    var canReorderSingle = require_reorderable().canReorderSingle;
    var extractProperties = require_extract_properties();
    var rulesOverlap = require_rules_overlap();
    var serializeRules = require_one_time().rules;
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var Token = require_token();
    function mergeMediaQueries(tokens, context) {
      var mergeSemantically = context.options.level[OptimizationLevel.Two].mergeSemantically;
      var specificityCache = context.cache.specificity;
      var candidates = {};
      var reduced = [];
      for (var i = tokens.length - 1; i >= 0; i--) {
        var token = tokens[i];
        if (token[0] != Token.NESTED_BLOCK) {
          continue;
        }
        var key = serializeRules(token[1]);
        var candidate = candidates[key];
        if (!candidate) {
          candidate = [];
          candidates[key] = candidate;
        }
        candidate.push(i);
      }
      for (var name in candidates) {
        var positions = candidates[name];
        positionLoop:
          for (var j = positions.length - 1; j > 0; j--) {
            var positionOne = positions[j];
            var tokenOne = tokens[positionOne];
            var positionTwo = positions[j - 1];
            var tokenTwo = tokens[positionTwo];
            directionLoop:
              for (var direction = 1; direction >= -1; direction -= 2) {
                var topToBottom = direction == 1;
                var from = topToBottom ? positionOne + 1 : positionTwo - 1;
                var to = topToBottom ? positionTwo : positionOne;
                var delta = topToBottom ? 1 : -1;
                var source = topToBottom ? tokenOne : tokenTwo;
                var target = topToBottom ? tokenTwo : tokenOne;
                var movedProperties = extractProperties(source);
                while (from != to) {
                  var traversedProperties = extractProperties(tokens[from]);
                  from += delta;
                  if (mergeSemantically && allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache)) {
                    continue;
                  }
                  if (!canReorder(movedProperties, traversedProperties, specificityCache)) {
                    continue directionLoop;
                  }
                }
                target[2] = topToBottom ? source[2].concat(target[2]) : target[2].concat(source[2]);
                source[2] = [];
                reduced.push(target);
                continue positionLoop;
              }
          }
      }
      return reduced;
    }
    function allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache) {
      var movedProperty;
      var movedRule;
      var traversedProperty;
      var traversedRule;
      var i, l;
      var j, m;
      for (i = 0, l = movedProperties.length; i < l; i++) {
        movedProperty = movedProperties[i];
        movedRule = movedProperty[5];
        for (j = 0, m = traversedProperties.length; j < m; j++) {
          traversedProperty = traversedProperties[j];
          traversedRule = traversedProperty[5];
          if (rulesOverlap(movedRule, traversedRule, true) && !canReorderSingle(movedProperty, traversedProperty, specificityCache)) {
            return false;
          }
        }
      }
      return true;
    }
    module2.exports = mergeMediaQueries;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js
var require_merge_non_adjacent_by_body = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-body.js"(exports, module2) {
    var isMergeable = require_is_mergeable();
    var sortSelectors = require_sort_selectors();
    var tidyRules = require_tidy_rules();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var serializeBody = require_one_time().body;
    var serializeRules = require_one_time().rules;
    var Token = require_token();
    function unsafeSelector(value) {
      return /\.|\*| :/.test(value);
    }
    function isBemElement(token) {
      var asString = serializeRules(token[1]);
      return asString.indexOf("__") > -1 || asString.indexOf("--") > -1;
    }
    function withoutModifier(selector) {
      return selector.replace(/--[^ ,>+~:]+/g, "");
    }
    function removeAnyUnsafeElements(left, candidates) {
      var leftSelector = withoutModifier(serializeRules(left[1]));
      for (var body in candidates) {
        var right = candidates[body];
        var rightSelector = withoutModifier(serializeRules(right[1]));
        if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1) {
          delete candidates[body];
        }
      }
    }
    function mergeNonAdjacentByBody(tokens, context) {
      var options = context.options;
      var mergeSemantically = options.level[OptimizationLevel.Two].mergeSemantically;
      var adjacentSpace = options.compatibility.selectors.adjacentSpace;
      var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
      var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
      var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
      var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
      var candidates = {};
      for (var i = tokens.length - 1; i >= 0; i--) {
        var token = tokens[i];
        if (token[0] != Token.RULE) {
          continue;
        }
        if (token[2].length > 0 && (!mergeSemantically && unsafeSelector(serializeRules(token[1])))) {
          candidates = {};
        }
        if (token[2].length > 0 && mergeSemantically && isBemElement(token)) {
          removeAnyUnsafeElements(token, candidates);
        }
        var candidateBody = serializeBody(token[2]);
        var oldToken = candidates[candidateBody];
        if (oldToken && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) && isMergeable(serializeRules(oldToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) {
          if (token[2].length > 0) {
            token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
            token[1] = token[1].length > 1 ? sortSelectors(token[1], selectorsSortingMethod) : token[1];
          } else {
            token[1] = oldToken[1].concat(token[1]);
          }
          oldToken[2] = [];
          candidates[candidateBody] = null;
        }
        candidates[serializeBody(token[2])] = token;
      }
    }
    module2.exports = mergeNonAdjacentByBody;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js
var require_merge_non_adjacent_by_selector = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/merge-non-adjacent-by-selector.js"(exports, module2) {
    var canReorder = require_reorderable().canReorder;
    var extractProperties = require_extract_properties();
    var optimizeProperties = require_optimize3();
    var serializeRules = require_one_time().rules;
    var Token = require_token();
    function mergeNonAdjacentBySelector(tokens, context) {
      var specificityCache = context.cache.specificity;
      var allSelectors = {};
      var repeatedSelectors = [];
      var i;
      for (i = tokens.length - 1; i >= 0; i--) {
        if (tokens[i][0] != Token.RULE) {
          continue;
        }
        if (tokens[i][2].length === 0) {
          continue;
        }
        var selector = serializeRules(tokens[i][1]);
        allSelectors[selector] = [i].concat(allSelectors[selector] || []);
        if (allSelectors[selector].length == 2) {
          repeatedSelectors.push(selector);
        }
      }
      for (i = repeatedSelectors.length - 1; i >= 0; i--) {
        var positions = allSelectors[repeatedSelectors[i]];
        selectorIterator:
          for (var j = positions.length - 1; j > 0; j--) {
            var positionOne = positions[j - 1];
            var tokenOne = tokens[positionOne];
            var positionTwo = positions[j];
            var tokenTwo = tokens[positionTwo];
            directionIterator:
              for (var direction = 1; direction >= -1; direction -= 2) {
                var topToBottom = direction == 1;
                var from = topToBottom ? positionOne + 1 : positionTwo - 1;
                var to = topToBottom ? positionTwo : positionOne;
                var delta = topToBottom ? 1 : -1;
                var moved = topToBottom ? tokenOne : tokenTwo;
                var target = topToBottom ? tokenTwo : tokenOne;
                var movedProperties = extractProperties(moved);
                while (from != to) {
                  var traversedProperties = extractProperties(tokens[from]);
                  from += delta;
                  var reorderable = topToBottom ? canReorder(movedProperties, traversedProperties, specificityCache) : canReorder(traversedProperties, movedProperties, specificityCache);
                  if (!reorderable && !topToBottom) {
                    continue selectorIterator;
                  }
                  if (!reorderable && topToBottom) {
                    continue directionIterator;
                  }
                }
                if (topToBottom) {
                  Array.prototype.push.apply(moved[2], target[2]);
                  target[2] = moved[2];
                } else {
                  Array.prototype.push.apply(target[2], moved[2]);
                }
                optimizeProperties(target[2], true, true, context);
                moved[2] = [];
              }
          }
      }
    }
    module2.exports = mergeNonAdjacentBySelector;
  }
});

// node_modules/clean-css/lib/utils/clone-array.js
var require_clone_array = __commonJS({
  "node_modules/clean-css/lib/utils/clone-array.js"(exports, module2) {
    function cloneArray(array) {
      var cloned = array.slice(0);
      for (var i = 0, l = cloned.length; i < l; i++) {
        if (Array.isArray(cloned[i])) {
          cloned[i] = cloneArray(cloned[i]);
        }
      }
      return cloned;
    }
    module2.exports = cloneArray;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js
var require_reduce_non_adjacent = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/reduce-non-adjacent.js"(exports, module2) {
    var isMergeable = require_is_mergeable();
    var optimizeProperties = require_optimize3();
    var cloneArray = require_clone_array();
    var Token = require_token();
    var serializeBody = require_one_time().body;
    var serializeRules = require_one_time().rules;
    function reduceNonAdjacent(tokens, context) {
      var options = context.options;
      var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
      var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
      var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
      var candidates = {};
      var repeated = [];
      for (var i = tokens.length - 1; i >= 0; i--) {
        var token = tokens[i];
        if (token[0] != Token.RULE) {
          continue;
        } else if (token[2].length === 0) {
          continue;
        }
        var selectorAsString = serializeRules(token[1]);
        var isComplexAndNotSpecial = token[1].length > 1 && isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging);
        var wrappedSelectors = wrappedSelectorsFrom(token[1]);
        var selectors = isComplexAndNotSpecial ? [selectorAsString].concat(wrappedSelectors) : [selectorAsString];
        for (var j = 0, m = selectors.length; j < m; j++) {
          var selector = selectors[j];
          if (!candidates[selector]) {
            candidates[selector] = [];
          } else {
            repeated.push(selector);
          }
          candidates[selector].push({
            where: i,
            list: wrappedSelectors,
            isPartial: isComplexAndNotSpecial && j > 0,
            isComplex: isComplexAndNotSpecial && j === 0
          });
        }
      }
      reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context);
      reduceComplexNonAdjacentCases(tokens, candidates, options, context);
    }
    function wrappedSelectorsFrom(list2) {
      var wrapped = [];
      for (var i = 0; i < list2.length; i++) {
        wrapped.push([list2[i][1]]);
      }
      return wrapped;
    }
    function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) {
      function filterOut(idx, bodies) {
        return data[idx].isPartial && bodies.length === 0;
      }
      function reduceBody(token, newBody, processedCount, tokenIdx) {
        if (!data[processedCount - tokenIdx - 1].isPartial) {
          token[2] = newBody;
        }
      }
      for (var i = 0, l = repeated.length; i < l; i++) {
        var selector = repeated[i];
        var data = candidates[selector];
        reduceSelector(tokens, data, {
          filterOut,
          callback: reduceBody
        }, options, context);
      }
    }
    function reduceComplexNonAdjacentCases(tokens, candidates, options, context) {
      var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
      var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
      var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
      var localContext = {};
      function filterOut(idx) {
        return localContext.data[idx].where < localContext.intoPosition;
      }
      function collectReducedBodies(token, newBody, processedCount, tokenIdx) {
        if (tokenIdx === 0) {
          localContext.reducedBodies.push(newBody);
        }
      }
      allSelectors:
        for (var complexSelector in candidates) {
          var into = candidates[complexSelector];
          if (!into[0].isComplex) {
            continue;
          }
          var intoPosition = into[into.length - 1].where;
          var intoToken = tokens[intoPosition];
          var reducedBodies = [];
          var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) ? into[0].list : [complexSelector];
          localContext.intoPosition = intoPosition;
          localContext.reducedBodies = reducedBodies;
          for (var j = 0, m = selectors.length; j < m; j++) {
            var selector = selectors[j];
            var data = candidates[selector];
            if (data.length < 2) {
              continue allSelectors;
            }
            localContext.data = data;
            reduceSelector(tokens, data, {
              filterOut,
              callback: collectReducedBodies
            }, options, context);
            if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) {
              continue allSelectors;
            }
          }
          intoToken[2] = reducedBodies[0];
        }
    }
    function reduceSelector(tokens, data, context, options, outerContext) {
      var bodies = [];
      var bodiesAsList = [];
      var processedTokens = [];
      for (var j = data.length - 1; j >= 0; j--) {
        if (context.filterOut(j, bodies)) {
          continue;
        }
        var where = data[j].where;
        var token = tokens[where];
        var clonedBody = cloneArray(token[2]);
        bodies = bodies.concat(clonedBody);
        bodiesAsList.push(clonedBody);
        processedTokens.push(where);
      }
      optimizeProperties(bodies, true, false, outerContext);
      var processedCount = processedTokens.length;
      var propertyIdx = bodies.length - 1;
      var tokenIdx = processedCount - 1;
      while (tokenIdx >= 0) {
        if ((tokenIdx === 0 || bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1) && propertyIdx > -1) {
          propertyIdx--;
          continue;
        }
        var newBody = bodies.splice(propertyIdx + 1);
        context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx);
        tokenIdx--;
      }
    }
    module2.exports = reduceNonAdjacent;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js
var require_remove_duplicate_font_at_rules = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-font-at-rules.js"(exports, module2) {
    var Token = require_token();
    var serializeAll = require_one_time().all;
    var FONT_FACE_SCOPE = "@font-face";
    function removeDuplicateFontAtRules(tokens) {
      var fontAtRules = [];
      var token;
      var key;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) {
          continue;
        }
        key = serializeAll([token]);
        if (fontAtRules.indexOf(key) > -1) {
          token[2] = [];
        } else {
          fontAtRules.push(key);
        }
      }
    }
    module2.exports = removeDuplicateFontAtRules;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js
var require_remove_duplicate_media_queries = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/remove-duplicate-media-queries.js"(exports, module2) {
    var Token = require_token();
    var serializeAll = require_one_time().all;
    var serializeRules = require_one_time().rules;
    function removeDuplicateMediaQueries(tokens) {
      var candidates = {};
      var candidate;
      var token;
      var key;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        if (token[0] != Token.NESTED_BLOCK) {
          continue;
        }
        key = serializeRules(token[1]) + "%" + serializeAll(token[2]);
        candidate = candidates[key];
        if (candidate) {
          candidate[2] = [];
        }
        candidates[key] = token;
      }
    }
    module2.exports = removeDuplicateMediaQueries;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js
var require_remove_duplicates = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js"(exports, module2) {
    var Token = require_token();
    var serializeBody = require_one_time().body;
    var serializeRules = require_one_time().rules;
    function removeDuplicates(tokens) {
      var matched = {};
      var moreThanOnce = [];
      var id, token;
      var body, bodies;
      for (var i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        if (token[0] != Token.RULE) {
          continue;
        }
        id = serializeRules(token[1]);
        if (matched[id] && matched[id].length == 1) {
          moreThanOnce.push(id);
        } else {
          matched[id] = matched[id] || [];
        }
        matched[id].push(i);
      }
      for (i = 0, l = moreThanOnce.length; i < l; i++) {
        id = moreThanOnce[i];
        bodies = [];
        for (var j = matched[id].length - 1; j >= 0; j--) {
          token = tokens[matched[id][j]];
          body = serializeBody(token[2]);
          if (bodies.indexOf(body) > -1) {
            token[2] = [];
          } else {
            bodies.push(body);
          }
        }
      }
    }
    module2.exports = removeDuplicates;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js
var require_remove_unused_at_rules = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/remove-unused-at-rules.js"(exports, module2) {
    var populateComponents = require_populate_components();
    var wrapForOptimizing = require_wrap_for_optimizing().single;
    var restoreFromOptimizing = require_restore_from_optimizing();
    var Token = require_token();
    var animationNameRegex = /^(-moz-|-o-|-webkit-)?animation-name$/;
    var animationRegex = /^(-moz-|-o-|-webkit-)?animation$/;
    var keyframeRegex = /^@(-moz-|-o-|-webkit-)?keyframes /;
    var importantRegex = /\s{0,31}!important$/;
    var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/;
    function normalize(value) {
      return value.replace(optionalMatchingQuotesRegex, "$2").replace(importantRegex, "");
    }
    function removeUnusedAtRules(tokens, context) {
      removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context);
      removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context);
      removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context);
      removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context);
    }
    function removeUnusedAtRule(tokens, matchCallback, markCallback, context) {
      var atRules = {};
      var atRule2;
      var atRuleTokens;
      var atRuleToken;
      var zeroAt;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        matchCallback(tokens[i], atRules);
      }
      if (Object.keys(atRules).length === 0) {
        return;
      }
      markUsedAtRules(tokens, markCallback, atRules, context);
      for (atRule2 in atRules) {
        atRuleTokens = atRules[atRule2];
        for (i = 0, l = atRuleTokens.length; i < l; i++) {
          atRuleToken = atRuleTokens[i];
          zeroAt = atRuleToken[0] == Token.AT_RULE ? 1 : 2;
          atRuleToken[zeroAt] = [];
        }
      }
    }
    function markUsedAtRules(tokens, markCallback, atRules, context) {
      var boundMarkCallback = markCallback(atRules);
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        switch (tokens[i][0]) {
          case Token.RULE:
            boundMarkCallback(tokens[i], context);
            break;
          case Token.NESTED_BLOCK:
            markUsedAtRules(tokens[i][2], markCallback, atRules, context);
        }
      }
    }
    function matchCounterStyle(token, atRules) {
      var match;
      if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf("@counter-style") === 0) {
        match = token[1][0][1].split(" ")[1];
        atRules[match] = atRules[match] || [];
        atRules[match].push(token);
      }
    }
    function markCounterStylesAsUsed(atRules) {
      return function(token, context) {
        var property;
        var wrappedProperty;
        var i, l;
        for (i = 0, l = token[2].length; i < l; i++) {
          property = token[2][i];
          if (property[1][1] == "list-style") {
            wrappedProperty = wrapForOptimizing(property);
            populateComponents([wrappedProperty], context.validator, context.warnings);
            if (wrappedProperty.components[0].value[0][1] in atRules) {
              delete atRules[property[2][1]];
            }
            restoreFromOptimizing([wrappedProperty]);
          }
          if (property[1][1] == "list-style-type" && property[2][1] in atRules) {
            delete atRules[property[2][1]];
          }
        }
      };
    }
    function matchFontFace(token, atRules) {
      var property;
      var match;
      var i, l;
      if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == "@font-face") {
        for (i = 0, l = token[2].length; i < l; i++) {
          property = token[2][i];
          if (property[1][1] == "font-family") {
            match = normalize(property[2][1].toLowerCase());
            atRules[match] = atRules[match] || [];
            atRules[match].push(token);
            break;
          }
        }
      }
    }
    function markFontFacesAsUsed(atRules) {
      return function(token, context) {
        var property;
        var wrappedProperty;
        var component;
        var normalizedMatch;
        var i, l;
        var j, m;
        for (i = 0, l = token[2].length; i < l; i++) {
          property = token[2][i];
          if (property[1][1] == "font") {
            wrappedProperty = wrapForOptimizing(property);
            populateComponents([wrappedProperty], context.validator, context.warnings);
            component = wrappedProperty.components[6];
            for (j = 0, m = component.value.length; j < m; j++) {
              normalizedMatch = normalize(component.value[j][1].toLowerCase());
              if (normalizedMatch in atRules) {
                delete atRules[normalizedMatch];
              }
            }
            restoreFromOptimizing([wrappedProperty]);
          }
          if (property[1][1] == "font-family") {
            for (j = 2, m = property.length; j < m; j++) {
              normalizedMatch = normalize(property[j][1].toLowerCase());
              if (normalizedMatch in atRules) {
                delete atRules[normalizedMatch];
              }
            }
          }
        }
      };
    }
    function matchKeyframe(token, atRules) {
      var match;
      if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) {
        match = token[1][0][1].split(" ")[1];
        atRules[match] = atRules[match] || [];
        atRules[match].push(token);
      }
    }
    function markKeyframesAsUsed(atRules) {
      return function(token, context) {
        var property;
        var wrappedProperty;
        var component;
        var i, l;
        var j, m;
        for (i = 0, l = token[2].length; i < l; i++) {
          property = token[2][i];
          if (animationRegex.test(property[1][1])) {
            wrappedProperty = wrapForOptimizing(property);
            populateComponents([wrappedProperty], context.validator, context.warnings);
            component = wrappedProperty.components[7];
            for (j = 0, m = component.value.length; j < m; j++) {
              if (component.value[j][1] in atRules) {
                delete atRules[component.value[j][1]];
              }
            }
            restoreFromOptimizing([wrappedProperty]);
          }
          if (animationNameRegex.test(property[1][1])) {
            for (j = 2, m = property.length; j < m; j++) {
              if (property[j][1] in atRules) {
                delete atRules[property[j][1]];
              }
            }
          }
        }
      };
    }
    function matchNamespace(token, atRules) {
      var match;
      if (token[0] == Token.AT_RULE && token[1].indexOf("@namespace") === 0) {
        match = token[1].split(" ")[1];
        atRules[match] = atRules[match] || [];
        atRules[match].push(token);
      }
    }
    function markNamespacesAsUsed(atRules) {
      var namespaceRegex = new RegExp(Object.keys(atRules).join("\\||") + "\\|", "g");
      return function(token) {
        var match;
        var scope;
        var normalizedMatch;
        var i, l;
        var j, m;
        for (i = 0, l = token[1].length; i < l; i++) {
          scope = token[1][i];
          match = scope[1].match(namespaceRegex);
          for (j = 0, m = match.length; j < m; j++) {
            normalizedMatch = match[j].substring(0, match[j].length - 1);
            if (normalizedMatch in atRules) {
              delete atRules[normalizedMatch];
            }
          }
        }
      };
    }
    module2.exports = removeUnusedAtRules;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js
var require_tidy_rule_duplicates = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/tidy-rule-duplicates.js"(exports, module2) {
    function ruleSorter(s1, s2) {
      return s1[1] > s2[1] ? 1 : -1;
    }
    function tidyRuleDuplicates(rules) {
      var list2 = [];
      var repeated = [];
      for (var i = 0, l = rules.length; i < l; i++) {
        var rule2 = rules[i];
        if (repeated.indexOf(rule2[1]) == -1) {
          repeated.push(rule2[1]);
          list2.push(rule2);
        }
      }
      return list2.sort(ruleSorter);
    }
    module2.exports = tidyRuleDuplicates;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/restructure.js
var require_restructure = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/restructure.js"(exports, module2) {
    var canReorderSingle = require_reorderable().canReorderSingle;
    var extractProperties = require_extract_properties();
    var isMergeable = require_is_mergeable();
    var tidyRuleDuplicates = require_tidy_rule_duplicates();
    var Token = require_token();
    var cloneArray = require_clone_array();
    var serializeBody = require_one_time().body;
    var serializeRules = require_one_time().rules;
    function naturalSorter(a, b) {
      return a > b ? 1 : -1;
    }
    function cloneAndMergeSelectors(propertyA, propertyB) {
      var cloned = cloneArray(propertyA);
      cloned[5] = cloned[5].concat(propertyB[5]);
      return cloned;
    }
    function restructure(tokens, context) {
      var options = context.options;
      var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
      var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
      var mergeLimit = options.compatibility.selectors.mergeLimit;
      var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
      var specificityCache = context.cache.specificity;
      var movableTokens = {};
      var movedProperties = [];
      var multiPropertyMoveCache = {};
      var movedToBeDropped = [];
      var maxCombinationsLevel = 2;
      var ID_JOIN_CHARACTER = "%";
      function sendToMultiPropertyMoveCache(position2, movedProperty2, allFits) {
        for (var i2 = allFits.length - 1; i2 >= 0; i2--) {
          var fit = allFits[i2][0];
          var id = addToCache(movedProperty2, fit);
          if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position2, multiPropertyMoveCache[id])) {
            removeAllMatchingFromCache(id);
            break;
          }
        }
      }
      function addToCache(movedProperty2, fit) {
        var id = cacheId(fit);
        multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || [];
        multiPropertyMoveCache[id].push([movedProperty2, fit]);
        return id;
      }
      function removeAllMatchingFromCache(matchId) {
        var matchSelectors = matchId.split(ID_JOIN_CHARACTER);
        var forRemoval = [];
        var i2;
        for (var id in multiPropertyMoveCache) {
          var selectors = id.split(ID_JOIN_CHARACTER);
          for (i2 = selectors.length - 1; i2 >= 0; i2--) {
            if (matchSelectors.indexOf(selectors[i2]) > -1) {
              forRemoval.push(id);
              break;
            }
          }
        }
        for (i2 = forRemoval.length - 1; i2 >= 0; i2--) {
          delete multiPropertyMoveCache[forRemoval[i2]];
        }
      }
      function cacheId(cachedTokens) {
        var id = [];
        for (var i2 = 0, l = cachedTokens.length; i2 < l; i2++) {
          id.push(serializeRules(cachedTokens[i2][1]));
        }
        return id.join(ID_JOIN_CHARACTER);
      }
      function tokensToMerge(sourceTokens) {
        var uniqueTokensWithBody = [];
        var mergeableTokens = [];
        for (var i2 = sourceTokens.length - 1; i2 >= 0; i2--) {
          if (!isMergeable(serializeRules(sourceTokens[i2][1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) {
            continue;
          }
          mergeableTokens.unshift(sourceTokens[i2]);
          if (sourceTokens[i2][2].length > 0 && uniqueTokensWithBody.indexOf(sourceTokens[i2]) == -1) {
            uniqueTokensWithBody.push(sourceTokens[i2]);
          }
        }
        return uniqueTokensWithBody.length > 1 ? mergeableTokens : [];
      }
      function shortenIfPossible(position2, movedProperty2) {
        var name = movedProperty2[0];
        var value = movedProperty2[1];
        var key2 = movedProperty2[4];
        var valueSize = name.length + value.length + 1;
        var allSelectors = [];
        var qualifiedTokens = [];
        var mergeableTokens = tokensToMerge(movableTokens[key2]);
        if (mergeableTokens.length < 2) {
          return;
        }
        var allFits = findAllFits(mergeableTokens, valueSize, 1);
        var bestFit = allFits[0];
        if (bestFit[1] > 0) {
          return sendToMultiPropertyMoveCache(position2, movedProperty2, allFits);
        }
        for (var i2 = bestFit[0].length - 1; i2 >= 0; i2--) {
          allSelectors = bestFit[0][i2][1].concat(allSelectors);
          qualifiedTokens.unshift(bestFit[0][i2]);
        }
        allSelectors = tidyRuleDuplicates(allSelectors);
        dropAsNewTokenAt(position2, [movedProperty2], allSelectors, qualifiedTokens);
      }
      function fitSorter(fit1, fit2) {
        return fit1[1] > fit2[1] ? 1 : fit1[1] == fit2[1] ? 0 : -1;
      }
      function findAllFits(mergeableTokens, propertySize, propertiesCount) {
        var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1);
        return combinations.sort(fitSorter);
      }
      function allCombinations(tokensVariant, propertySize, propertiesCount, level) {
        var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]];
        if (tokensVariant.length > 2 && level > 0) {
          for (var i2 = tokensVariant.length - 1; i2 >= 0; i2--) {
            var subVariant = Array.prototype.slice.call(tokensVariant, 0);
            subVariant.splice(i2, 1);
            differenceVariants = differenceVariants.concat(allCombinations(subVariant, propertySize, propertiesCount, level - 1));
          }
        }
        return differenceVariants;
      }
      function sizeDifference(tokensVariant, propertySize, propertiesCount) {
        var allSelectorsSize = 0;
        for (var i2 = tokensVariant.length - 1; i2 >= 0; i2--) {
          allSelectorsSize += tokensVariant[i2][2].length > propertiesCount ? serializeRules(tokensVariant[i2][1]).length : -1;
        }
        return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
      }
      function dropAsNewTokenAt(position2, properties2, allSelectors, mergeableTokens) {
        var i2, j2, k2, m2;
        var allProperties = [];
        for (i2 = mergeableTokens.length - 1; i2 >= 0; i2--) {
          var mergeableToken = mergeableTokens[i2];
          for (j2 = mergeableToken[2].length - 1; j2 >= 0; j2--) {
            var mergeableProperty = mergeableToken[2][j2];
            for (k2 = 0, m2 = properties2.length; k2 < m2; k2++) {
              var property2 = properties2[k2];
              var mergeablePropertyName = mergeableProperty[1][1];
              var propertyName = property2[0];
              var propertyBody = property2[4];
              if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
                mergeableToken[2].splice(j2, 1);
                break;
              }
            }
          }
        }
        for (i2 = properties2.length - 1; i2 >= 0; i2--) {
          allProperties.unshift(properties2[i2][3]);
        }
        var newToken = [Token.RULE, allSelectors, allProperties];
        tokens.splice(position2, 0, newToken);
      }
      function dropPropertiesAt(position2, movedProperty2) {
        var key2 = movedProperty2[4];
        var toMove = movableTokens[key2];
        if (toMove && toMove.length > 1) {
          if (!shortenMultiMovesIfPossible(position2, movedProperty2)) {
            shortenIfPossible(position2, movedProperty2);
          }
        }
      }
      function shortenMultiMovesIfPossible(position2, movedProperty2) {
        var candidates = [];
        var propertiesAndMergableTokens = [];
        var key2 = movedProperty2[4];
        var j2, k2;
        var mergeableTokens = tokensToMerge(movableTokens[key2]);
        if (mergeableTokens.length < 2) {
          return;
        }
        movableLoop:
          for (var value in movableTokens) {
            var tokensList = movableTokens[value];
            for (j2 = mergeableTokens.length - 1; j2 >= 0; j2--) {
              if (tokensList.indexOf(mergeableTokens[j2]) == -1) {
                continue movableLoop;
              }
            }
            candidates.push(value);
          }
        if (candidates.length < 2) {
          return false;
        }
        for (j2 = candidates.length - 1; j2 >= 0; j2--) {
          for (k2 = movedProperties.length - 1; k2 >= 0; k2--) {
            if (movedProperties[k2][4] == candidates[j2]) {
              propertiesAndMergableTokens.unshift([movedProperties[k2], mergeableTokens]);
              break;
            }
          }
        }
        return processMultiPropertyMove(position2, propertiesAndMergableTokens);
      }
      function processMultiPropertyMove(position2, propertiesAndMergableTokens) {
        var valueSize = 0;
        var properties2 = [];
        var property2;
        for (var i2 = propertiesAndMergableTokens.length - 1; i2 >= 0; i2--) {
          property2 = propertiesAndMergableTokens[i2][0];
          var fullValue = property2[4];
          valueSize += fullValue.length + (i2 > 0 ? 1 : 0);
          properties2.push(property2);
        }
        var mergeableTokens = propertiesAndMergableTokens[0][1];
        var bestFit = findAllFits(mergeableTokens, valueSize, properties2.length)[0];
        if (bestFit[1] > 0) {
          return false;
        }
        var allSelectors = [];
        var qualifiedTokens = [];
        for (i2 = bestFit[0].length - 1; i2 >= 0; i2--) {
          allSelectors = bestFit[0][i2][1].concat(allSelectors);
          qualifiedTokens.unshift(bestFit[0][i2]);
        }
        allSelectors = tidyRuleDuplicates(allSelectors);
        dropAsNewTokenAt(position2, properties2, allSelectors, qualifiedTokens);
        for (i2 = properties2.length - 1; i2 >= 0; i2--) {
          property2 = properties2[i2];
          var index = movedProperties.indexOf(property2);
          delete movableTokens[property2[4]];
          if (index > -1 && movedToBeDropped.indexOf(index) == -1) {
            movedToBeDropped.push(index);
          }
        }
        return true;
      }
      function boundToAnotherPropertyInCurrrentToken(property2, movedProperty2, token2) {
        var propertyName = property2[0];
        var movedPropertyName = movedProperty2[0];
        if (propertyName != movedPropertyName) {
          return false;
        }
        var key2 = movedProperty2[4];
        var toMove = movableTokens[key2];
        return toMove && toMove.indexOf(token2) > -1;
      }
      for (var i = tokens.length - 1; i >= 0; i--) {
        var token = tokens[i];
        var isRule;
        var j, k, m;
        var samePropertyAt;
        if (token[0] == Token.RULE) {
          isRule = true;
        } else if (token[0] == Token.NESTED_BLOCK) {
          isRule = false;
        } else {
          continue;
        }
        var movedCount = movedProperties.length;
        var properties = extractProperties(token);
        movedToBeDropped = [];
        var unmovableInCurrentToken = [];
        for (j = properties.length - 1; j >= 0; j--) {
          for (k = j - 1; k >= 0; k--) {
            if (!canReorderSingle(properties[j], properties[k], specificityCache)) {
              unmovableInCurrentToken.push(j);
              break;
            }
          }
        }
        for (j = properties.length - 1; j >= 0; j--) {
          var property = properties[j];
          var movedSameProperty = false;
          for (k = 0; k < movedCount; k++) {
            var movedProperty = movedProperties[k];
            if (movedToBeDropped.indexOf(k) == -1 && (!canReorderSingle(property, movedProperty, specificityCache) && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) || movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)) {
              dropPropertiesAt(i + 1, movedProperty);
              if (movedToBeDropped.indexOf(k) == -1) {
                movedToBeDropped.push(k);
                delete movableTokens[movedProperty[4]];
              }
            }
            if (!movedSameProperty) {
              movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1];
              if (movedSameProperty) {
                samePropertyAt = k;
              }
            }
          }
          if (!isRule || unmovableInCurrentToken.indexOf(j) > -1) {
            continue;
          }
          var key = property[4];
          if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) {
            dropPropertiesAt(i + 1, movedProperties[samePropertyAt]);
            movedProperties.splice(samePropertyAt, 1);
            movableTokens[key] = [token];
            movedSameProperty = false;
          } else {
            movableTokens[key] = movableTokens[key] || [];
            movableTokens[key].push(token);
          }
          if (movedSameProperty) {
            movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property);
          } else {
            movedProperties.push(property);
          }
        }
        movedToBeDropped = movedToBeDropped.sort(naturalSorter);
        for (j = 0, m = movedToBeDropped.length; j < m; j++) {
          var dropAt = movedToBeDropped[j] - j;
          movedProperties.splice(dropAt, 1);
        }
      }
      var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf("@charset") === 0 ? 1 : 0;
      for (; position < tokens.length - 1; position++) {
        var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf("@import") === 0;
        var isComment = tokens[position][0] === Token.COMMENT;
        if (!(isImportRule || isComment)) {
          break;
        }
      }
      for (i = 0; i < movedProperties.length; i++) {
        dropPropertiesAt(position, movedProperties[i]);
      }
    }
    module2.exports = restructure;
  }
});

// node_modules/clean-css/lib/optimizer/level-2/optimize.js
var require_optimize4 = __commonJS({
  "node_modules/clean-css/lib/optimizer/level-2/optimize.js"(exports, module2) {
    var mergeAdjacent = require_merge_adjacent();
    var mergeMediaQueries = require_merge_media_queries();
    var mergeNonAdjacentByBody = require_merge_non_adjacent_by_body();
    var mergeNonAdjacentBySelector = require_merge_non_adjacent_by_selector();
    var reduceNonAdjacent = require_reduce_non_adjacent();
    var removeDuplicateFontAtRules = require_remove_duplicate_font_at_rules();
    var removeDuplicateMediaQueries = require_remove_duplicate_media_queries();
    var removeDuplicates = require_remove_duplicates();
    var removeUnusedAtRules = require_remove_unused_at_rules();
    var restructure = require_restructure();
    var optimizeProperties = require_optimize3();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var Token = require_token();
    function removeEmpty(tokens) {
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        var isEmpty = false;
        switch (token[0]) {
          case Token.RULE:
            isEmpty = token[1].length === 0 || token[2].length === 0;
            break;
          case Token.NESTED_BLOCK:
            removeEmpty(token[2]);
            isEmpty = token[2].length === 0;
            break;
          case Token.AT_RULE:
            isEmpty = token[1].length === 0;
            break;
          case Token.AT_RULE_BLOCK:
            isEmpty = token[2].length === 0;
        }
        if (isEmpty) {
          tokens.splice(i, 1);
          i--;
          l--;
        }
      }
    }
    function recursivelyOptimizeBlocks(tokens, context) {
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        if (token[0] == Token.NESTED_BLOCK) {
          var isKeyframes = /@(-moz-|-o-|-webkit-)?keyframes/.test(token[1][0][1]);
          level2Optimize(token[2], context, !isKeyframes);
        }
      }
    }
    function recursivelyOptimizeProperties(tokens, context) {
      for (var i = 0, l = tokens.length; i < l; i++) {
        var token = tokens[i];
        switch (token[0]) {
          case Token.RULE:
            optimizeProperties(token[2], true, true, context);
            break;
          case Token.NESTED_BLOCK:
            recursivelyOptimizeProperties(token[2], context);
        }
      }
    }
    function level2Optimize(tokens, context, withRestructuring) {
      var levelOptions = context.options.level[OptimizationLevel.Two];
      var level2Plugins = context.options.plugins.level2Block;
      var reduced;
      var i;
      recursivelyOptimizeBlocks(tokens, context);
      recursivelyOptimizeProperties(tokens, context);
      if (levelOptions.removeDuplicateRules) {
        removeDuplicates(tokens, context);
      }
      if (levelOptions.mergeAdjacentRules) {
        mergeAdjacent(tokens, context);
      }
      if (levelOptions.reduceNonAdjacentRules) {
        reduceNonAdjacent(tokens, context);
      }
      if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != "body") {
        mergeNonAdjacentBySelector(tokens, context);
      }
      if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != "selector") {
        mergeNonAdjacentByBody(tokens, context);
      }
      if (levelOptions.restructureRules && levelOptions.mergeAdjacentRules && withRestructuring) {
        restructure(tokens, context);
        mergeAdjacent(tokens, context);
      }
      if (levelOptions.restructureRules && !levelOptions.mergeAdjacentRules && withRestructuring) {
        restructure(tokens, context);
      }
      if (levelOptions.removeDuplicateFontRules) {
        removeDuplicateFontAtRules(tokens, context);
      }
      if (levelOptions.removeDuplicateMediaBlocks) {
        removeDuplicateMediaQueries(tokens, context);
      }
      if (levelOptions.removeUnusedAtRules) {
        removeUnusedAtRules(tokens, context);
      }
      if (levelOptions.mergeMedia) {
        reduced = mergeMediaQueries(tokens, context);
        for (i = reduced.length - 1; i >= 0; i--) {
          level2Optimize(reduced[i][2], context, false);
        }
      }
      for (i = 0; i < level2Plugins.length; i++) {
        level2Plugins[i](tokens);
      }
      if (levelOptions.removeEmpty) {
        removeEmpty(tokens);
      }
      return tokens;
    }
    module2.exports = level2Optimize;
  }
});

// node_modules/clean-css/lib/optimizer/validator.js
var require_validator = __commonJS({
  "node_modules/clean-css/lib/optimizer/validator.js"(exports, module2) {
    var functionNoVendorRegexStr = "[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)";
    var functionVendorRegexStr = "\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)";
    var variableRegexStr = "var\\(\\-\\-[^\\)]+\\)";
    var functionAnyRegexStr = "(" + variableRegexStr + "|" + functionNoVendorRegexStr + "|" + functionVendorRegexStr + ")";
    var calcRegex = new RegExp("^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$", "i");
    var decimalRegex = /[0-9]/;
    var functionAnyRegex = new RegExp("^" + functionAnyRegexStr + "$", "i");
    var hexAlphaColorRegex = /^#(?:[0-9a-f]{4}|[0-9a-f]{8})$/i;
    var hslColorRegex = /^hsl\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\.?\d+\s{0,31}\)$/;
    var hslColorWithSpacesRegex = /^hsl\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{1,31}\/\s{1,31}\d*\.?\d+%?\s{0,31}\)$/;
    var identifierRegex = /^(-[a-z0-9_][a-z0-9\-_]*|[a-z_][a-z0-9\-_]*)$/i;
    var namedEntityRegex = /^[a-z]+$/i;
    var prefixRegex = /^-([a-z0-9]|-)*$/i;
    var quotedTextRegex = /^("[^"]*"|'[^']*')$/i;
    var rgbColorRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[.\d]+\s{0,31}\)$/i;
    var rgbColorWithSpacesRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}\/\s{1,31}[\d]*\.?[.\d]+%?\s{0,31}\)$/i;
    var timeUnitPattern = /\d+(s|ms)/;
    var timingFunctionRegex = /^(cubic-bezier|steps)\([^)]+\)$/;
    var validTimeUnits = ["ms", "s"];
    var urlRegex = /^url\([\s\S]+\)$/i;
    var variableRegex = new RegExp("^" + variableRegexStr + "$", "i");
    var eightValueColorRegex = /^#[0-9a-f]{8}$/i;
    var fourValueColorRegex = /^#[0-9a-f]{4}$/i;
    var sixValueColorRegex = /^#[0-9a-f]{6}$/i;
    var threeValueColorRegex = /^#[0-9a-f]{3}$/i;
    var DECIMAL_DOT = ".";
    var MINUS_SIGN = "-";
    var PLUS_SIGN = "+";
    var Keywords = {
      "^": [
        "inherit",
        "initial",
        "unset"
      ],
      "*-style": [
        "auto",
        "dashed",
        "dotted",
        "double",
        "groove",
        "hidden",
        "inset",
        "none",
        "outset",
        "ridge",
        "solid"
      ],
      "*-timing-function": [
        "ease",
        "ease-in",
        "ease-in-out",
        "ease-out",
        "linear",
        "step-end",
        "step-start"
      ],
      "animation-direction": [
        "alternate",
        "alternate-reverse",
        "normal",
        "reverse"
      ],
      "animation-fill-mode": [
        "backwards",
        "both",
        "forwards",
        "none"
      ],
      "animation-iteration-count": [
        "infinite"
      ],
      "animation-name": [
        "none"
      ],
      "animation-play-state": [
        "paused",
        "running"
      ],
      "background-attachment": [
        "fixed",
        "inherit",
        "local",
        "scroll"
      ],
      "background-clip": [
        "border-box",
        "content-box",
        "inherit",
        "padding-box",
        "text"
      ],
      "background-origin": [
        "border-box",
        "content-box",
        "inherit",
        "padding-box"
      ],
      "background-position": [
        "bottom",
        "center",
        "left",
        "right",
        "top"
      ],
      "background-repeat": [
        "no-repeat",
        "inherit",
        "repeat",
        "repeat-x",
        "repeat-y",
        "round",
        "space"
      ],
      "background-size": [
        "auto",
        "cover",
        "contain"
      ],
      "border-collapse": [
        "collapse",
        "inherit",
        "separate"
      ],
      bottom: [
        "auto"
      ],
      clear: [
        "both",
        "left",
        "none",
        "right"
      ],
      color: [
        "transparent"
      ],
      cursor: [
        "all-scroll",
        "auto",
        "col-resize",
        "crosshair",
        "default",
        "e-resize",
        "help",
        "move",
        "n-resize",
        "ne-resize",
        "no-drop",
        "not-allowed",
        "nw-resize",
        "pointer",
        "progress",
        "row-resize",
        "s-resize",
        "se-resize",
        "sw-resize",
        "text",
        "vertical-text",
        "w-resize",
        "wait"
      ],
      display: [
        "block",
        "inline",
        "inline-block",
        "inline-table",
        "list-item",
        "none",
        "table",
        "table-caption",
        "table-cell",
        "table-column",
        "table-column-group",
        "table-footer-group",
        "table-header-group",
        "table-row",
        "table-row-group"
      ],
      float: [
        "left",
        "none",
        "right"
      ],
      left: [
        "auto"
      ],
      font: [
        "caption",
        "icon",
        "menu",
        "message-box",
        "small-caption",
        "status-bar",
        "unset"
      ],
      "font-size": [
        "large",
        "larger",
        "medium",
        "small",
        "smaller",
        "x-large",
        "x-small",
        "xx-large",
        "xx-small"
      ],
      "font-stretch": [
        "condensed",
        "expanded",
        "extra-condensed",
        "extra-expanded",
        "normal",
        "semi-condensed",
        "semi-expanded",
        "ultra-condensed",
        "ultra-expanded"
      ],
      "font-style": [
        "italic",
        "normal",
        "oblique"
      ],
      "font-variant": [
        "normal",
        "small-caps"
      ],
      "font-weight": [
        "100",
        "200",
        "300",
        "400",
        "500",
        "600",
        "700",
        "800",
        "900",
        "bold",
        "bolder",
        "lighter",
        "normal"
      ],
      "line-height": [
        "normal"
      ],
      "list-style-position": [
        "inside",
        "outside"
      ],
      "list-style-type": [
        "armenian",
        "circle",
        "decimal",
        "decimal-leading-zero",
        "disc",
        "decimal|disc",
        "georgian",
        "lower-alpha",
        "lower-greek",
        "lower-latin",
        "lower-roman",
        "none",
        "square",
        "upper-alpha",
        "upper-latin",
        "upper-roman"
      ],
      overflow: [
        "auto",
        "hidden",
        "scroll",
        "visible"
      ],
      position: [
        "absolute",
        "fixed",
        "relative",
        "static"
      ],
      right: [
        "auto"
      ],
      "text-align": [
        "center",
        "justify",
        "left",
        "left|right",
        "right"
      ],
      "text-decoration": [
        "line-through",
        "none",
        "overline",
        "underline"
      ],
      "text-overflow": [
        "clip",
        "ellipsis"
      ],
      top: [
        "auto"
      ],
      "vertical-align": [
        "baseline",
        "bottom",
        "middle",
        "sub",
        "super",
        "text-bottom",
        "text-top",
        "top"
      ],
      visibility: [
        "collapse",
        "hidden",
        "visible"
      ],
      "white-space": [
        "normal",
        "nowrap",
        "pre"
      ],
      width: [
        "inherit",
        "initial",
        "medium",
        "thick",
        "thin"
      ]
    };
    var Units = [
      "%",
      "ch",
      "cm",
      "em",
      "ex",
      "in",
      "mm",
      "pc",
      "pt",
      "px",
      "rem",
      "vh",
      "vm",
      "vmax",
      "vmin",
      "vw"
    ];
    function isColor(value) {
      return value != "auto" && (isKeyword("color")(value) || isHexColor(value) || isColorFunction(value) || isNamedEntity(value));
    }
    function isColorFunction(value) {
      return isRgbColor(value) || isHslColor(value);
    }
    function isDynamicUnit(value) {
      return calcRegex.test(value);
    }
    function isFunction(value) {
      return functionAnyRegex.test(value);
    }
    function isHexColor(value) {
      return threeValueColorRegex.test(value) || fourValueColorRegex.test(value) || sixValueColorRegex.test(value) || eightValueColorRegex.test(value);
    }
    function isHslColor(value) {
      return hslColorRegex.test(value) || hslColorWithSpacesRegex.test(value);
    }
    function isHexAlphaColor(value) {
      return hexAlphaColorRegex.test(value);
    }
    function isIdentifier(value) {
      return identifierRegex.test(value);
    }
    function isQuotedText(value) {
      return quotedTextRegex.test(value);
    }
    function isImage(value) {
      return value == "none" || value == "inherit" || isUrl(value);
    }
    function isKeyword(propertyName) {
      return function(value) {
        return Keywords[propertyName].indexOf(value) > -1;
      };
    }
    function isNamedEntity(value) {
      return namedEntityRegex.test(value);
    }
    function isNumber(value) {
      return scanForNumber(value) == value.length;
    }
    function isRgbColor(value) {
      return rgbColorRegex.test(value) || rgbColorWithSpacesRegex.test(value);
    }
    function isPrefixed(value) {
      return prefixRegex.test(value);
    }
    function isPositiveNumber(value) {
      return isNumber(value) && parseFloat(value) >= 0;
    }
    function isVariable(value) {
      return variableRegex.test(value);
    }
    function isTime(value) {
      var numberUpTo = scanForNumber(value);
      return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validTimeUnits.indexOf(value.slice(numberUpTo + 1)) > -1 || isCalculatedTime(value);
    }
    function isCalculatedTime(value) {
      return isFunction(value) && timeUnitPattern.test(value);
    }
    function isTimingFunction() {
      var isTimingFunctionKeyword = isKeyword("*-timing-function");
      return function(value) {
        return isTimingFunctionKeyword(value) || timingFunctionRegex.test(value);
      };
    }
    function isUnit(validUnits, value) {
      var numberUpTo = scanForNumber(value);
      return numberUpTo == value.length && parseInt(value) === 0 || numberUpTo > -1 && validUnits.indexOf(value.slice(numberUpTo + 1).toLowerCase()) > -1 || value == "auto" || value == "inherit";
    }
    function isUrl(value) {
      return urlRegex.test(value);
    }
    function isZIndex(value) {
      return value == "auto" || isNumber(value) || isKeyword("^")(value);
    }
    function scanForNumber(value) {
      var hasDot = false;
      var hasSign = false;
      var character;
      var i, l;
      for (i = 0, l = value.length; i < l; i++) {
        character = value[i];
        if (i === 0 && (character == PLUS_SIGN || character == MINUS_SIGN)) {
          hasSign = true;
        } else if (i > 0 && hasSign && (character == PLUS_SIGN || character == MINUS_SIGN)) {
          return i - 1;
        } else if (character == DECIMAL_DOT && !hasDot) {
          hasDot = true;
        } else if (character == DECIMAL_DOT && hasDot) {
          return i - 1;
        } else if (decimalRegex.test(character)) {
          continue;
        } else {
          return i - 1;
        }
      }
      return i;
    }
    function validator(compatibility) {
      var validUnits = Units.slice(0).filter(function(value) {
        return !(value in compatibility.units) || compatibility.units[value] === true;
      });
      if (compatibility.customUnits.rpx) {
        validUnits.push("rpx");
      }
      return {
        colorOpacity: compatibility.colors.opacity,
        colorHexAlpha: compatibility.colors.hexAlpha,
        isAnimationDirectionKeyword: isKeyword("animation-direction"),
        isAnimationFillModeKeyword: isKeyword("animation-fill-mode"),
        isAnimationIterationCountKeyword: isKeyword("animation-iteration-count"),
        isAnimationNameKeyword: isKeyword("animation-name"),
        isAnimationPlayStateKeyword: isKeyword("animation-play-state"),
        isTimingFunction: isTimingFunction(),
        isBackgroundAttachmentKeyword: isKeyword("background-attachment"),
        isBackgroundClipKeyword: isKeyword("background-clip"),
        isBackgroundOriginKeyword: isKeyword("background-origin"),
        isBackgroundPositionKeyword: isKeyword("background-position"),
        isBackgroundRepeatKeyword: isKeyword("background-repeat"),
        isBackgroundSizeKeyword: isKeyword("background-size"),
        isColor,
        isColorFunction,
        isDynamicUnit,
        isFontKeyword: isKeyword("font"),
        isFontSizeKeyword: isKeyword("font-size"),
        isFontStretchKeyword: isKeyword("font-stretch"),
        isFontStyleKeyword: isKeyword("font-style"),
        isFontVariantKeyword: isKeyword("font-variant"),
        isFontWeightKeyword: isKeyword("font-weight"),
        isFunction,
        isGlobal: isKeyword("^"),
        isHexAlphaColor,
        isHslColor,
        isIdentifier,
        isImage,
        isKeyword,
        isLineHeightKeyword: isKeyword("line-height"),
        isListStylePositionKeyword: isKeyword("list-style-position"),
        isListStyleTypeKeyword: isKeyword("list-style-type"),
        isNumber,
        isPrefixed,
        isPositiveNumber,
        isQuotedText,
        isRgbColor,
        isStyleKeyword: isKeyword("*-style"),
        isTime,
        isUnit: isUnit.bind(null, validUnits),
        isUrl,
        isVariable,
        isWidth: isKeyword("width"),
        isZIndex
      };
    }
    module2.exports = validator;
  }
});

// node_modules/clean-css/lib/options/compatibility.js
var require_compatibility = __commonJS({
  "node_modules/clean-css/lib/options/compatibility.js"(exports, module2) {
    var DEFAULTS = {
      "*": {
        colors: {
          hexAlpha: false,
          opacity: true
        },
        customUnits: { rpx: false },
        properties: {
          backgroundClipMerging: true,
          backgroundOriginMerging: true,
          backgroundSizeMerging: true,
          colors: true,
          ieBangHack: false,
          ieFilters: false,
          iePrefixHack: false,
          ieSuffixHack: false,
          merging: true,
          shorterLengthUnits: false,
          spaceAfterClosingBrace: true,
          urlQuotes: true,
          zeroUnits: true
        },
        selectors: {
          adjacentSpace: false,
          ie7Hack: false,
          mergeablePseudoClasses: [
            ":active",
            ":after",
            ":before",
            ":empty",
            ":checked",
            ":disabled",
            ":empty",
            ":enabled",
            ":first-child",
            ":first-letter",
            ":first-line",
            ":first-of-type",
            ":focus",
            ":hover",
            ":lang",
            ":last-child",
            ":last-of-type",
            ":link",
            ":not",
            ":nth-child",
            ":nth-last-child",
            ":nth-last-of-type",
            ":nth-of-type",
            ":only-child",
            ":only-of-type",
            ":root",
            ":target",
            ":visited"
          ],
          mergeablePseudoElements: [
            "::after",
            "::before",
            "::first-letter",
            "::first-line"
          ],
          mergeLimit: 8191,
          multiplePseudoMerging: true
        },
        units: {
          ch: true,
          in: true,
          pc: true,
          pt: true,
          rem: true,
          vh: true,
          vm: true,
          vmax: true,
          vmin: true,
          vw: true
        }
      }
    };
    DEFAULTS.ie11 = merge2(DEFAULTS["*"], { properties: { ieSuffixHack: true } });
    DEFAULTS.ie10 = merge2(DEFAULTS["*"], { properties: { ieSuffixHack: true } });
    DEFAULTS.ie9 = merge2(DEFAULTS["*"], {
      properties: {
        ieFilters: true,
        ieSuffixHack: true
      }
    });
    DEFAULTS.ie8 = merge2(DEFAULTS.ie9, {
      colors: { opacity: false },
      properties: {
        backgroundClipMerging: false,
        backgroundOriginMerging: false,
        backgroundSizeMerging: false,
        iePrefixHack: true,
        merging: false
      },
      selectors: {
        mergeablePseudoClasses: [
          ":after",
          ":before",
          ":first-child",
          ":first-letter",
          ":focus",
          ":hover",
          ":visited"
        ],
        mergeablePseudoElements: []
      },
      units: {
        ch: false,
        rem: false,
        vh: false,
        vm: false,
        vmax: false,
        vmin: false,
        vw: false
      }
    });
    DEFAULTS.ie7 = merge2(DEFAULTS.ie8, {
      properties: { ieBangHack: true },
      selectors: {
        ie7Hack: true,
        mergeablePseudoClasses: [
          ":first-child",
          ":first-letter",
          ":hover",
          ":visited"
        ]
      }
    });
    function compatibilityFrom(source) {
      return merge2(DEFAULTS["*"], calculateSource(source));
    }
    function merge2(source, target) {
      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          var value = source[key];
          if (Object.prototype.hasOwnProperty.call(target, key) && typeof value === "object" && !Array.isArray(value)) {
            target[key] = merge2(value, target[key] || {});
          } else {
            target[key] = key in target ? target[key] : value;
          }
        }
      }
      return target;
    }
    function calculateSource(source) {
      if (typeof source == "object") {
        return source;
      }
      if (!/[,+-]/.test(source)) {
        return DEFAULTS[source] || DEFAULTS["*"];
      }
      var parts = source.split(",");
      var template = parts[0] in DEFAULTS ? DEFAULTS[parts.shift()] : DEFAULTS["*"];
      source = {};
      parts.forEach(function(part) {
        var isAdd = part[0] == "+";
        var key = part.substring(1).split(".");
        var group = key[0];
        var option = key[1];
        source[group] = source[group] || {};
        source[group][option] = isAdd;
      });
      return merge2(template, source);
    }
    module2.exports = compatibilityFrom;
  }
});

// node_modules/clean-css/lib/utils/is-http-resource.js
var require_is_http_resource = __commonJS({
  "node_modules/clean-css/lib/utils/is-http-resource.js"(exports, module2) {
    var HTTP_RESOURCE_PATTERN = /^http:\/\//;
    function isHttpResource(uri) {
      return HTTP_RESOURCE_PATTERN.test(uri);
    }
    module2.exports = isHttpResource;
  }
});

// node_modules/clean-css/lib/utils/is-https-resource.js
var require_is_https_resource = __commonJS({
  "node_modules/clean-css/lib/utils/is-https-resource.js"(exports, module2) {
    var HTTPS_RESOURCE_PATTERN = /^https:\/\//;
    function isHttpsResource(uri) {
      return HTTPS_RESOURCE_PATTERN.test(uri);
    }
    module2.exports = isHttpsResource;
  }
});

// node_modules/clean-css/lib/reader/load-remote-resource.js
var require_load_remote_resource = __commonJS({
  "node_modules/clean-css/lib/reader/load-remote-resource.js"(exports, module2) {
    var http = require("http");
    var https = require("https");
    var url = require("url");
    var isHttpResource = require_is_http_resource();
    var isHttpsResource = require_is_https_resource();
    var override = require_override();
    var HTTP_PROTOCOL = "http:";
    function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {
      var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;
      var errorHandled = false;
      var requestOptions;
      var fetch2;
      requestOptions = override(url.parse(uri), inlineRequest || {});
      if (inlineRequest.hostname !== void 0) {
        requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;
        requestOptions.path = requestOptions.href;
      }
      fetch2 = proxyProtocol && !isHttpsResource(proxyProtocol) || isHttpResource(uri) ? http.get : https.get;
      fetch2(requestOptions, function(res) {
        var chunks = [];
        var movedUri;
        if (errorHandled) {
          return;
        }
        if (res.statusCode < 200 || res.statusCode > 399) {
          return callback(res.statusCode, null);
        }
        if (res.statusCode > 299) {
          movedUri = url.resolve(uri, res.headers.location);
          return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);
        }
        res.on("data", function(chunk) {
          chunks.push(chunk.toString());
        });
        res.on("end", function() {
          var body = chunks.join("");
          callback(null, body);
        });
      }).on("error", function(res) {
        if (errorHandled) {
          return;
        }
        errorHandled = true;
        callback(res.message, null);
      }).on("timeout", function() {
        if (errorHandled) {
          return;
        }
        errorHandled = true;
        callback("timeout", null);
      }).setTimeout(inlineTimeout);
    }
    module2.exports = loadRemoteResource;
  }
});

// node_modules/clean-css/lib/options/fetch.js
var require_fetch = __commonJS({
  "node_modules/clean-css/lib/options/fetch.js"(exports, module2) {
    var loadRemoteResource = require_load_remote_resource();
    function fetchFrom(callback) {
      return callback || loadRemoteResource;
    }
    module2.exports = fetchFrom;
  }
});

// node_modules/clean-css/lib/options/inline.js
var require_inline = __commonJS({
  "node_modules/clean-css/lib/options/inline.js"(exports, module2) {
    function inlineOptionsFrom(rules) {
      if (Array.isArray(rules)) {
        return rules;
      }
      if (rules === false) {
        return ["none"];
      }
      return rules === void 0 ? ["local"] : rules.split(",");
    }
    module2.exports = inlineOptionsFrom;
  }
});

// node_modules/clean-css/lib/options/inline-request.js
var require_inline_request = __commonJS({
  "node_modules/clean-css/lib/options/inline-request.js"(exports, module2) {
    var url = require("url");
    var override = require_override();
    function inlineRequestFrom(option) {
      return override(proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy), option || {});
    }
    function proxyOptionsFrom(httpProxy) {
      return httpProxy ? {
        hostname: url.parse(httpProxy).hostname,
        port: parseInt(url.parse(httpProxy).port)
      } : {};
    }
    module2.exports = inlineRequestFrom;
  }
});

// node_modules/clean-css/lib/options/inline-timeout.js
var require_inline_timeout = __commonJS({
  "node_modules/clean-css/lib/options/inline-timeout.js"(exports, module2) {
    var DEFAULT_TIMEOUT = 5e3;
    function inlineTimeoutFrom(option) {
      return option || DEFAULT_TIMEOUT;
    }
    module2.exports = inlineTimeoutFrom;
  }
});

// node_modules/clean-css/lib/options/plugins.js
var require_plugins = __commonJS({
  "node_modules/clean-css/lib/options/plugins.js"(exports, module2) {
    function pluginsFrom(plugins) {
      var flatPlugins = {
        level1Value: [],
        level1Property: [],
        level2Block: []
      };
      plugins = plugins || [];
      flatPlugins.level1Value = plugins.map(function(plugin2) {
        return plugin2.level1 && plugin2.level1.value;
      }).filter(function(plugin2) {
        return plugin2 != null;
      });
      flatPlugins.level1Property = plugins.map(function(plugin2) {
        return plugin2.level1 && plugin2.level1.property;
      }).filter(function(plugin2) {
        return plugin2 != null;
      });
      flatPlugins.level2Block = plugins.map(function(plugin2) {
        return plugin2.level2 && plugin2.level2.block;
      }).filter(function(plugin2) {
        return plugin2 != null;
      });
      return flatPlugins;
    }
    module2.exports = pluginsFrom;
  }
});

// node_modules/clean-css/lib/options/rebase.js
var require_rebase = __commonJS({
  "node_modules/clean-css/lib/options/rebase.js"(exports, module2) {
    function rebaseFrom(rebaseOption, rebaseToOption) {
      if (rebaseToOption !== void 0) {
        return true;
      }
      if (rebaseOption === void 0) {
        return false;
      }
      return !!rebaseOption;
    }
    module2.exports = rebaseFrom;
  }
});

// node_modules/clean-css/lib/options/rebase-to.js
var require_rebase_to = __commonJS({
  "node_modules/clean-css/lib/options/rebase-to.js"(exports, module2) {
    var path = require("path");
    function rebaseToFrom(option) {
      return option ? path.resolve(option) : process.cwd();
    }
    module2.exports = rebaseToFrom;
  }
});

// node_modules/source-map/lib/base64.js
var require_base64 = __commonJS({
  "node_modules/source-map/lib/base64.js"(exports) {
    var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
    exports.encode = function(number) {
      if (0 <= number && number < intToCharMap.length) {
        return intToCharMap[number];
      }
      throw new TypeError("Must be between 0 and 63: " + number);
    };
    exports.decode = function(charCode) {
      var bigA = 65;
      var bigZ = 90;
      var littleA = 97;
      var littleZ = 122;
      var zero = 48;
      var nine = 57;
      var plus = 43;
      var slash = 47;
      var littleOffset = 26;
      var numberOffset = 52;
      if (bigA <= charCode && charCode <= bigZ) {
        return charCode - bigA;
      }
      if (littleA <= charCode && charCode <= littleZ) {
        return charCode - littleA + littleOffset;
      }
      if (zero <= charCode && charCode <= nine) {
        return charCode - zero + numberOffset;
      }
      if (charCode == plus) {
        return 62;
      }
      if (charCode == slash) {
        return 63;
      }
      return -1;
    };
  }
});

// node_modules/source-map/lib/base64-vlq.js
var require_base64_vlq = __commonJS({
  "node_modules/source-map/lib/base64-vlq.js"(exports) {
    var base64 = require_base64();
    var VLQ_BASE_SHIFT = 5;
    var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
    var VLQ_BASE_MASK = VLQ_BASE - 1;
    var VLQ_CONTINUATION_BIT = VLQ_BASE;
    function toVLQSigned(aValue) {
      return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;
    }
    function fromVLQSigned(aValue) {
      var isNegative = (aValue & 1) === 1;
      var shifted = aValue >> 1;
      return isNegative ? -shifted : shifted;
    }
    exports.encode = function base64VLQ_encode(aValue) {
      var encoded = "";
      var digit;
      var vlq = toVLQSigned(aValue);
      do {
        digit = vlq & VLQ_BASE_MASK;
        vlq >>>= VLQ_BASE_SHIFT;
        if (vlq > 0) {
          digit |= VLQ_CONTINUATION_BIT;
        }
        encoded += base64.encode(digit);
      } while (vlq > 0);
      return encoded;
    };
    exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
      var strLen = aStr.length;
      var result = 0;
      var shift = 0;
      var continuation, digit;
      do {
        if (aIndex >= strLen) {
          throw new Error("Expected more digits in base 64 VLQ value.");
        }
        digit = base64.decode(aStr.charCodeAt(aIndex++));
        if (digit === -1) {
          throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
        }
        continuation = !!(digit & VLQ_CONTINUATION_BIT);
        digit &= VLQ_BASE_MASK;
        result = result + (digit << shift);
        shift += VLQ_BASE_SHIFT;
      } while (continuation);
      aOutParam.value = fromVLQSigned(result);
      aOutParam.rest = aIndex;
    };
  }
});

// node_modules/source-map/lib/util.js
var require_util = __commonJS({
  "node_modules/source-map/lib/util.js"(exports) {
    function getArg(aArgs, aName, aDefaultValue) {
      if (aName in aArgs) {
        return aArgs[aName];
      } else if (arguments.length === 3) {
        return aDefaultValue;
      } else {
        throw new Error('"' + aName + '" is a required argument.');
      }
    }
    exports.getArg = getArg;
    var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
    var dataUrlRegexp = /^data:.+\,.+$/;
    function urlParse(aUrl) {
      var match = aUrl.match(urlRegexp);
      if (!match) {
        return null;
      }
      return {
        scheme: match[1],
        auth: match[2],
        host: match[3],
        port: match[4],
        path: match[5]
      };
    }
    exports.urlParse = urlParse;
    function urlGenerate(aParsedUrl) {
      var url = "";
      if (aParsedUrl.scheme) {
        url += aParsedUrl.scheme + ":";
      }
      url += "//";
      if (aParsedUrl.auth) {
        url += aParsedUrl.auth + "@";
      }
      if (aParsedUrl.host) {
        url += aParsedUrl.host;
      }
      if (aParsedUrl.port) {
        url += ":" + aParsedUrl.port;
      }
      if (aParsedUrl.path) {
        url += aParsedUrl.path;
      }
      return url;
    }
    exports.urlGenerate = urlGenerate;
    function normalize(aPath) {
      var path = aPath;
      var url = urlParse(aPath);
      if (url) {
        if (!url.path) {
          return aPath;
        }
        path = url.path;
      }
      var isAbsolute = exports.isAbsolute(path);
      var parts = path.split(/\/+/);
      for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
        part = parts[i];
        if (part === ".") {
          parts.splice(i, 1);
        } else if (part === "..") {
          up++;
        } else if (up > 0) {
          if (part === "") {
            parts.splice(i + 1, up);
            up = 0;
          } else {
            parts.splice(i, 2);
            up--;
          }
        }
      }
      path = parts.join("/");
      if (path === "") {
        path = isAbsolute ? "/" : ".";
      }
      if (url) {
        url.path = path;
        return urlGenerate(url);
      }
      return path;
    }
    exports.normalize = normalize;
    function join(aRoot, aPath) {
      if (aRoot === "") {
        aRoot = ".";
      }
      if (aPath === "") {
        aPath = ".";
      }
      var aPathUrl = urlParse(aPath);
      var aRootUrl = urlParse(aRoot);
      if (aRootUrl) {
        aRoot = aRootUrl.path || "/";
      }
      if (aPathUrl && !aPathUrl.scheme) {
        if (aRootUrl) {
          aPathUrl.scheme = aRootUrl.scheme;
        }
        return urlGenerate(aPathUrl);
      }
      if (aPathUrl || aPath.match(dataUrlRegexp)) {
        return aPath;
      }
      if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
        aRootUrl.host = aPath;
        return urlGenerate(aRootUrl);
      }
      var joined = aPath.charAt(0) === "/" ? aPath : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath);
      if (aRootUrl) {
        aRootUrl.path = joined;
        return urlGenerate(aRootUrl);
      }
      return joined;
    }
    exports.join = join;
    exports.isAbsolute = function(aPath) {
      return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
    };
    function relative(aRoot, aPath) {
      if (aRoot === "") {
        aRoot = ".";
      }
      aRoot = aRoot.replace(/\/$/, "");
      var level = 0;
      while (aPath.indexOf(aRoot + "/") !== 0) {
        var index = aRoot.lastIndexOf("/");
        if (index < 0) {
          return aPath;
        }
        aRoot = aRoot.slice(0, index);
        if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
          return aPath;
        }
        ++level;
      }
      return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
    }
    exports.relative = relative;
    var supportsNullProto = function() {
      var obj = /* @__PURE__ */ Object.create(null);
      return !("__proto__" in obj);
    }();
    function identity(s) {
      return s;
    }
    function toSetString(aStr) {
      if (isProtoString(aStr)) {
        return "$" + aStr;
      }
      return aStr;
    }
    exports.toSetString = supportsNullProto ? identity : toSetString;
    function fromSetString(aStr) {
      if (isProtoString(aStr)) {
        return aStr.slice(1);
      }
      return aStr;
    }
    exports.fromSetString = supportsNullProto ? identity : fromSetString;
    function isProtoString(s) {
      if (!s) {
        return false;
      }
      var length = s.length;
      if (length < 9) {
        return false;
      }
      if (s.charCodeAt(length - 1) !== 95 || s.charCodeAt(length - 2) !== 95 || s.charCodeAt(length - 3) !== 111 || s.charCodeAt(length - 4) !== 116 || s.charCodeAt(length - 5) !== 111 || s.charCodeAt(length - 6) !== 114 || s.charCodeAt(length - 7) !== 112 || s.charCodeAt(length - 8) !== 95 || s.charCodeAt(length - 9) !== 95) {
        return false;
      }
      for (var i = length - 10; i >= 0; i--) {
        if (s.charCodeAt(i) !== 36) {
          return false;
        }
      }
      return true;
    }
    function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
      var cmp = strcmp(mappingA.source, mappingB.source);
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalLine - mappingB.originalLine;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalColumn - mappingB.originalColumn;
      if (cmp !== 0 || onlyCompareOriginal) {
        return cmp;
      }
      cmp = mappingA.generatedColumn - mappingB.generatedColumn;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.generatedLine - mappingB.generatedLine;
      if (cmp !== 0) {
        return cmp;
      }
      return strcmp(mappingA.name, mappingB.name);
    }
    exports.compareByOriginalPositions = compareByOriginalPositions;
    function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
      var cmp = mappingA.generatedLine - mappingB.generatedLine;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.generatedColumn - mappingB.generatedColumn;
      if (cmp !== 0 || onlyCompareGenerated) {
        return cmp;
      }
      cmp = strcmp(mappingA.source, mappingB.source);
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalLine - mappingB.originalLine;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalColumn - mappingB.originalColumn;
      if (cmp !== 0) {
        return cmp;
      }
      return strcmp(mappingA.name, mappingB.name);
    }
    exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
    function strcmp(aStr1, aStr2) {
      if (aStr1 === aStr2) {
        return 0;
      }
      if (aStr1 === null) {
        return 1;
      }
      if (aStr2 === null) {
        return -1;
      }
      if (aStr1 > aStr2) {
        return 1;
      }
      return -1;
    }
    function compareByGeneratedPositionsInflated(mappingA, mappingB) {
      var cmp = mappingA.generatedLine - mappingB.generatedLine;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.generatedColumn - mappingB.generatedColumn;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = strcmp(mappingA.source, mappingB.source);
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalLine - mappingB.originalLine;
      if (cmp !== 0) {
        return cmp;
      }
      cmp = mappingA.originalColumn - mappingB.originalColumn;
      if (cmp !== 0) {
        return cmp;
      }
      return strcmp(mappingA.name, mappingB.name);
    }
    exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
    function parseSourceMapInput(str) {
      return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
    }
    exports.parseSourceMapInput = parseSourceMapInput;
    function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
      sourceURL = sourceURL || "";
      if (sourceRoot) {
        if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") {
          sourceRoot += "/";
        }
        sourceURL = sourceRoot + sourceURL;
      }
      if (sourceMapURL) {
        var parsed = urlParse(sourceMapURL);
        if (!parsed) {
          throw new Error("sourceMapURL could not be parsed");
        }
        if (parsed.path) {
          var index = parsed.path.lastIndexOf("/");
          if (index >= 0) {
            parsed.path = parsed.path.substring(0, index + 1);
          }
        }
        sourceURL = join(urlGenerate(parsed), sourceURL);
      }
      return normalize(sourceURL);
    }
    exports.computeSourceURL = computeSourceURL;
  }
});

// node_modules/source-map/lib/array-set.js
var require_array_set = __commonJS({
  "node_modules/source-map/lib/array-set.js"(exports) {
    var util = require_util();
    var has = Object.prototype.hasOwnProperty;
    var hasNativeMap = typeof Map !== "undefined";
    function ArraySet() {
      this._array = [];
      this._set = hasNativeMap ? /* @__PURE__ */ new Map() : /* @__PURE__ */ Object.create(null);
    }
    ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
      var set = new ArraySet();
      for (var i = 0, len = aArray.length; i < len; i++) {
        set.add(aArray[i], aAllowDuplicates);
      }
      return set;
    };
    ArraySet.prototype.size = function ArraySet_size() {
      return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
    };
    ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
      var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
      var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
      var idx = this._array.length;
      if (!isDuplicate || aAllowDuplicates) {
        this._array.push(aStr);
      }
      if (!isDuplicate) {
        if (hasNativeMap) {
          this._set.set(aStr, idx);
        } else {
          this._set[sStr] = idx;
        }
      }
    };
    ArraySet.prototype.has = function ArraySet_has(aStr) {
      if (hasNativeMap) {
        return this._set.has(aStr);
      } else {
        var sStr = util.toSetString(aStr);
        return has.call(this._set, sStr);
      }
    };
    ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
      if (hasNativeMap) {
        var idx = this._set.get(aStr);
        if (idx >= 0) {
          return idx;
        }
      } else {
        var sStr = util.toSetString(aStr);
        if (has.call(this._set, sStr)) {
          return this._set[sStr];
        }
      }
      throw new Error('"' + aStr + '" is not in the set.');
    };
    ArraySet.prototype.at = function ArraySet_at(aIdx) {
      if (aIdx >= 0 && aIdx < this._array.length) {
        return this._array[aIdx];
      }
      throw new Error("No element indexed by " + aIdx);
    };
    ArraySet.prototype.toArray = function ArraySet_toArray() {
      return this._array.slice();
    };
    exports.ArraySet = ArraySet;
  }
});

// node_modules/source-map/lib/mapping-list.js
var require_mapping_list = __commonJS({
  "node_modules/source-map/lib/mapping-list.js"(exports) {
    var util = require_util();
    function generatedPositionAfter(mappingA, mappingB) {
      var lineA = mappingA.generatedLine;
      var lineB = mappingB.generatedLine;
      var columnA = mappingA.generatedColumn;
      var columnB = mappingB.generatedColumn;
      return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
    }
    function MappingList() {
      this._array = [];
      this._sorted = true;
      this._last = { generatedLine: -1, generatedColumn: 0 };
    }
    MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {
      this._array.forEach(aCallback, aThisArg);
    };
    MappingList.prototype.add = function MappingList_add(aMapping) {
      if (generatedPositionAfter(this._last, aMapping)) {
        this._last = aMapping;
        this._array.push(aMapping);
      } else {
        this._sorted = false;
        this._array.push(aMapping);
      }
    };
    MappingList.prototype.toArray = function MappingList_toArray() {
      if (!this._sorted) {
        this._array.sort(util.compareByGeneratedPositionsInflated);
        this._sorted = true;
      }
      return this._array;
    };
    exports.MappingList = MappingList;
  }
});

// node_modules/source-map/lib/source-map-generator.js
var require_source_map_generator = __commonJS({
  "node_modules/source-map/lib/source-map-generator.js"(exports) {
    var base64VLQ = require_base64_vlq();
    var util = require_util();
    var ArraySet = require_array_set().ArraySet;
    var MappingList = require_mapping_list().MappingList;
    function SourceMapGenerator(aArgs) {
      if (!aArgs) {
        aArgs = {};
      }
      this._file = util.getArg(aArgs, "file", null);
      this._sourceRoot = util.getArg(aArgs, "sourceRoot", null);
      this._skipValidation = util.getArg(aArgs, "skipValidation", false);
      this._sources = new ArraySet();
      this._names = new ArraySet();
      this._mappings = new MappingList();
      this._sourcesContents = null;
    }
    SourceMapGenerator.prototype._version = 3;
    SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
      var sourceRoot = aSourceMapConsumer.sourceRoot;
      var generator = new SourceMapGenerator({
        file: aSourceMapConsumer.file,
        sourceRoot
      });
      aSourceMapConsumer.eachMapping(function(mapping) {
        var newMapping = {
          generated: {
            line: mapping.generatedLine,
            column: mapping.generatedColumn
          }
        };
        if (mapping.source != null) {
          newMapping.source = mapping.source;
          if (sourceRoot != null) {
            newMapping.source = util.relative(sourceRoot, newMapping.source);
          }
          newMapping.original = {
            line: mapping.originalLine,
            column: mapping.originalColumn
          };
          if (mapping.name != null) {
            newMapping.name = mapping.name;
          }
        }
        generator.addMapping(newMapping);
      });
      aSourceMapConsumer.sources.forEach(function(sourceFile) {
        var sourceRelative = sourceFile;
        if (sourceRoot !== null) {
          sourceRelative = util.relative(sourceRoot, sourceFile);
        }
        if (!generator._sources.has(sourceRelative)) {
          generator._sources.add(sourceRelative);
        }
        var content = aSourceMapConsumer.sourceContentFor(sourceFile);
        if (content != null) {
          generator.setSourceContent(sourceFile, content);
        }
      });
      return generator;
    };
    SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {
      var generated = util.getArg(aArgs, "generated");
      var original = util.getArg(aArgs, "original", null);
      var source = util.getArg(aArgs, "source", null);
      var name = util.getArg(aArgs, "name", null);
      if (!this._skipValidation) {
        this._validateMapping(generated, original, source, name);
      }
      if (source != null) {
        source = String(source);
        if (!this._sources.has(source)) {
          this._sources.add(source);
        }
      }
      if (name != null) {
        name = String(name);
        if (!this._names.has(name)) {
          this._names.add(name);
        }
      }
      this._mappings.add({
        generatedLine: generated.line,
        generatedColumn: generated.column,
        originalLine: original != null && original.line,
        originalColumn: original != null && original.column,
        source,
        name
      });
    };
    SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
      var source = aSourceFile;
      if (this._sourceRoot != null) {
        source = util.relative(this._sourceRoot, source);
      }
      if (aSourceContent != null) {
        if (!this._sourcesContents) {
          this._sourcesContents = /* @__PURE__ */ Object.create(null);
        }
        this._sourcesContents[util.toSetString(source)] = aSourceContent;
      } else if (this._sourcesContents) {
        delete this._sourcesContents[util.toSetString(source)];
        if (Object.keys(this._sourcesContents).length === 0) {
          this._sourcesContents = null;
        }
      }
    };
    SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
      var sourceFile = aSourceFile;
      if (aSourceFile == null) {
        if (aSourceMapConsumer.file == null) {
          throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);
        }
        sourceFile = aSourceMapConsumer.file;
      }
      var sourceRoot = this._sourceRoot;
      if (sourceRoot != null) {
        sourceFile = util.relative(sourceRoot, sourceFile);
      }
      var newSources = new ArraySet();
      var newNames = new ArraySet();
      this._mappings.unsortedForEach(function(mapping) {
        if (mapping.source === sourceFile && mapping.originalLine != null) {
          var original = aSourceMapConsumer.originalPositionFor({
            line: mapping.originalLine,
            column: mapping.originalColumn
          });
          if (original.source != null) {
            mapping.source = original.source;
            if (aSourceMapPath != null) {
              mapping.source = util.join(aSourceMapPath, mapping.source);
            }
            if (sourceRoot != null) {
              mapping.source = util.relative(sourceRoot, mapping.source);
            }
            mapping.originalLine = original.line;
            mapping.originalColumn = original.column;
            if (original.name != null) {
              mapping.name = original.name;
            }
          }
        }
        var source = mapping.source;
        if (source != null && !newSources.has(source)) {
          newSources.add(source);
        }
        var name = mapping.name;
        if (name != null && !newNames.has(name)) {
          newNames.add(name);
        }
      }, this);
      this._sources = newSources;
      this._names = newNames;
      aSourceMapConsumer.sources.forEach(function(sourceFile2) {
        var content = aSourceMapConsumer.sourceContentFor(sourceFile2);
        if (content != null) {
          if (aSourceMapPath != null) {
            sourceFile2 = util.join(aSourceMapPath, sourceFile2);
          }
          if (sourceRoot != null) {
            sourceFile2 = util.relative(sourceRoot, sourceFile2);
          }
          this.setSourceContent(sourceFile2, content);
        }
      }, this);
    };
    SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {
      if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
        throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");
      }
      if (aGenerated && "line" in aGenerated && "column" in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {
        return;
      } else if (aGenerated && "line" in aGenerated && "column" in aGenerated && aOriginal && "line" in aOriginal && "column" in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {
        return;
      } else {
        throw new Error("Invalid mapping: " + JSON.stringify({
          generated: aGenerated,
          source: aSource,
          original: aOriginal,
          name: aName
        }));
      }
    };
    SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {
      var previousGeneratedColumn = 0;
      var previousGeneratedLine = 1;
      var previousOriginalColumn = 0;
      var previousOriginalLine = 0;
      var previousName = 0;
      var previousSource = 0;
      var result = "";
      var next;
      var mapping;
      var nameIdx;
      var sourceIdx;
      var mappings = this._mappings.toArray();
      for (var i = 0, len = mappings.length; i < len; i++) {
        mapping = mappings[i];
        next = "";
        if (mapping.generatedLine !== previousGeneratedLine) {
          previousGeneratedColumn = 0;
          while (mapping.generatedLine !== previousGeneratedLine) {
            next += ";";
            previousGeneratedLine++;
          }
        } else {
          if (i > 0) {
            if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
              continue;
            }
            next += ",";
          }
        }
        next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);
        previousGeneratedColumn = mapping.generatedColumn;
        if (mapping.source != null) {
          sourceIdx = this._sources.indexOf(mapping.source);
          next += base64VLQ.encode(sourceIdx - previousSource);
          previousSource = sourceIdx;
          next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);
          previousOriginalLine = mapping.originalLine - 1;
          next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);
          previousOriginalColumn = mapping.originalColumn;
          if (mapping.name != null) {
            nameIdx = this._names.indexOf(mapping.name);
            next += base64VLQ.encode(nameIdx - previousName);
            previousName = nameIdx;
          }
        }
        result += next;
      }
      return result;
    };
    SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
      return aSources.map(function(source) {
        if (!this._sourcesContents) {
          return null;
        }
        if (aSourceRoot != null) {
          source = util.relative(aSourceRoot, source);
        }
        var key = util.toSetString(source);
        return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;
      }, this);
    };
    SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {
      var map = {
        version: this._version,
        sources: this._sources.toArray(),
        names: this._names.toArray(),
        mappings: this._serializeMappings()
      };
      if (this._file != null) {
        map.file = this._file;
      }
      if (this._sourceRoot != null) {
        map.sourceRoot = this._sourceRoot;
      }
      if (this._sourcesContents) {
        map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
      }
      return map;
    };
    SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {
      return JSON.stringify(this.toJSON());
    };
    exports.SourceMapGenerator = SourceMapGenerator;
  }
});

// node_modules/source-map/lib/binary-search.js
var require_binary_search = __commonJS({
  "node_modules/source-map/lib/binary-search.js"(exports) {
    exports.GREATEST_LOWER_BOUND = 1;
    exports.LEAST_UPPER_BOUND = 2;
    function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
      var mid = Math.floor((aHigh - aLow) / 2) + aLow;
      var cmp = aCompare(aNeedle, aHaystack[mid], true);
      if (cmp === 0) {
        return mid;
      } else if (cmp > 0) {
        if (aHigh - mid > 1) {
          return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
        }
        if (aBias == exports.LEAST_UPPER_BOUND) {
          return aHigh < aHaystack.length ? aHigh : -1;
        } else {
          return mid;
        }
      } else {
        if (mid - aLow > 1) {
          return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
        }
        if (aBias == exports.LEAST_UPPER_BOUND) {
          return mid;
        } else {
          return aLow < 0 ? -1 : aLow;
        }
      }
    }
    exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
      if (aHaystack.length === 0) {
        return -1;
      }
      var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);
      if (index < 0) {
        return -1;
      }
      while (index - 1 >= 0) {
        if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
          break;
        }
        --index;
      }
      return index;
    };
  }
});

// node_modules/source-map/lib/quick-sort.js
var require_quick_sort = __commonJS({
  "node_modules/source-map/lib/quick-sort.js"(exports) {
    function swap(ary, x, y) {
      var temp = ary[x];
      ary[x] = ary[y];
      ary[y] = temp;
    }
    function randomIntInRange(low, high) {
      return Math.round(low + Math.random() * (high - low));
    }
    function doQuickSort(ary, comparator, p, r) {
      if (p < r) {
        var pivotIndex = randomIntInRange(p, r);
        var i = p - 1;
        swap(ary, pivotIndex, r);
        var pivot = ary[r];
        for (var j = p; j < r; j++) {
          if (comparator(ary[j], pivot) <= 0) {
            i += 1;
            swap(ary, i, j);
          }
        }
        swap(ary, i + 1, j);
        var q = i + 1;
        doQuickSort(ary, comparator, p, q - 1);
        doQuickSort(ary, comparator, q + 1, r);
      }
    }
    exports.quickSort = function(ary, comparator) {
      doQuickSort(ary, comparator, 0, ary.length - 1);
    };
  }
});

// node_modules/source-map/lib/source-map-consumer.js
var require_source_map_consumer = __commonJS({
  "node_modules/source-map/lib/source-map-consumer.js"(exports) {
    var util = require_util();
    var binarySearch = require_binary_search();
    var ArraySet = require_array_set().ArraySet;
    var base64VLQ = require_base64_vlq();
    var quickSort = require_quick_sort().quickSort;
    function SourceMapConsumer(aSourceMap, aSourceMapURL) {
      var sourceMap = aSourceMap;
      if (typeof aSourceMap === "string") {
        sourceMap = util.parseSourceMapInput(aSourceMap);
      }
      return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
    }
    SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
      return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
    };
    SourceMapConsumer.prototype._version = 3;
    SourceMapConsumer.prototype.__generatedMappings = null;
    Object.defineProperty(SourceMapConsumer.prototype, "_generatedMappings", {
      configurable: true,
      enumerable: true,
      get: function() {
        if (!this.__generatedMappings) {
          this._parseMappings(this._mappings, this.sourceRoot);
        }
        return this.__generatedMappings;
      }
    });
    SourceMapConsumer.prototype.__originalMappings = null;
    Object.defineProperty(SourceMapConsumer.prototype, "_originalMappings", {
      configurable: true,
      enumerable: true,
      get: function() {
        if (!this.__originalMappings) {
          this._parseMappings(this._mappings, this.sourceRoot);
        }
        return this.__originalMappings;
      }
    });
    SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
      var c = aStr.charAt(index);
      return c === ";" || c === ",";
    };
    SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
      throw new Error("Subclasses must implement _parseMappings");
    };
    SourceMapConsumer.GENERATED_ORDER = 1;
    SourceMapConsumer.ORIGINAL_ORDER = 2;
    SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
    SourceMapConsumer.LEAST_UPPER_BOUND = 2;
    SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
      var context = aContext || null;
      var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
      var mappings;
      switch (order) {
        case SourceMapConsumer.GENERATED_ORDER:
          mappings = this._generatedMappings;
          break;
        case SourceMapConsumer.ORIGINAL_ORDER:
          mappings = this._originalMappings;
          break;
        default:
          throw new Error("Unknown order of iteration.");
      }
      var sourceRoot = this.sourceRoot;
      mappings.map(function(mapping) {
        var source = mapping.source === null ? null : this._sources.at(mapping.source);
        source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
        return {
          source,
          generatedLine: mapping.generatedLine,
          generatedColumn: mapping.generatedColumn,
          originalLine: mapping.originalLine,
          originalColumn: mapping.originalColumn,
          name: mapping.name === null ? null : this._names.at(mapping.name)
        };
      }, this).forEach(aCallback, context);
    };
    SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
      var line = util.getArg(aArgs, "line");
      var needle = {
        source: util.getArg(aArgs, "source"),
        originalLine: line,
        originalColumn: util.getArg(aArgs, "column", 0)
      };
      needle.source = this._findSourceIndex(needle.source);
      if (needle.source < 0) {
        return [];
      }
      var mappings = [];
      var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);
      if (index >= 0) {
        var mapping = this._originalMappings[index];
        if (aArgs.column === void 0) {
          var originalLine = mapping.originalLine;
          while (mapping && mapping.originalLine === originalLine) {
            mappings.push({
              line: util.getArg(mapping, "generatedLine", null),
              column: util.getArg(mapping, "generatedColumn", null),
              lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
            });
            mapping = this._originalMappings[++index];
          }
        } else {
          var originalColumn = mapping.originalColumn;
          while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {
            mappings.push({
              line: util.getArg(mapping, "generatedLine", null),
              column: util.getArg(mapping, "generatedColumn", null),
              lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
            });
            mapping = this._originalMappings[++index];
          }
        }
      }
      return mappings;
    };
    exports.SourceMapConsumer = SourceMapConsumer;
    function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
      var sourceMap = aSourceMap;
      if (typeof aSourceMap === "string") {
        sourceMap = util.parseSourceMapInput(aSourceMap);
      }
      var version = util.getArg(sourceMap, "version");
      var sources = util.getArg(sourceMap, "sources");
      var names = util.getArg(sourceMap, "names", []);
      var sourceRoot = util.getArg(sourceMap, "sourceRoot", null);
      var sourcesContent = util.getArg(sourceMap, "sourcesContent", null);
      var mappings = util.getArg(sourceMap, "mappings");
      var file = util.getArg(sourceMap, "file", null);
      if (version != this._version) {
        throw new Error("Unsupported version: " + version);
      }
      if (sourceRoot) {
        sourceRoot = util.normalize(sourceRoot);
      }
      sources = sources.map(String).map(util.normalize).map(function(source) {
        return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;
      });
      this._names = ArraySet.fromArray(names.map(String), true);
      this._sources = ArraySet.fromArray(sources, true);
      this._absoluteSources = this._sources.toArray().map(function(s) {
        return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
      });
      this.sourceRoot = sourceRoot;
      this.sourcesContent = sourcesContent;
      this._mappings = mappings;
      this._sourceMapURL = aSourceMapURL;
      this.file = file;
    }
    BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
    BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
    BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
      var relativeSource = aSource;
      if (this.sourceRoot != null) {
        relativeSource = util.relative(this.sourceRoot, relativeSource);
      }
      if (this._sources.has(relativeSource)) {
        return this._sources.indexOf(relativeSource);
      }
      var i;
      for (i = 0; i < this._absoluteSources.length; ++i) {
        if (this._absoluteSources[i] == aSource) {
          return i;
        }
      }
      return -1;
    };
    BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
      var smc = Object.create(BasicSourceMapConsumer.prototype);
      var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
      var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
      smc.sourceRoot = aSourceMap._sourceRoot;
      smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);
      smc.file = aSourceMap._file;
      smc._sourceMapURL = aSourceMapURL;
      smc._absoluteSources = smc._sources.toArray().map(function(s) {
        return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
      });
      var generatedMappings = aSourceMap._mappings.toArray().slice();
      var destGeneratedMappings = smc.__generatedMappings = [];
      var destOriginalMappings = smc.__originalMappings = [];
      for (var i = 0, length = generatedMappings.length; i < length; i++) {
        var srcMapping = generatedMappings[i];
        var destMapping = new Mapping();
        destMapping.generatedLine = srcMapping.generatedLine;
        destMapping.generatedColumn = srcMapping.generatedColumn;
        if (srcMapping.source) {
          destMapping.source = sources.indexOf(srcMapping.source);
          destMapping.originalLine = srcMapping.originalLine;
          destMapping.originalColumn = srcMapping.originalColumn;
          if (srcMapping.name) {
            destMapping.name = names.indexOf(srcMapping.name);
          }
          destOriginalMappings.push(destMapping);
        }
        destGeneratedMappings.push(destMapping);
      }
      quickSort(smc.__originalMappings, util.compareByOriginalPositions);
      return smc;
    };
    BasicSourceMapConsumer.prototype._version = 3;
    Object.defineProperty(BasicSourceMapConsumer.prototype, "sources", {
      get: function() {
        return this._absoluteSources.slice();
      }
    });
    function Mapping() {
      this.generatedLine = 0;
      this.generatedColumn = 0;
      this.source = null;
      this.originalLine = null;
      this.originalColumn = null;
      this.name = null;
    }
    BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
      var generatedLine = 1;
      var previousGeneratedColumn = 0;
      var previousOriginalLine = 0;
      var previousOriginalColumn = 0;
      var previousSource = 0;
      var previousName = 0;
      var length = aStr.length;
      var index = 0;
      var cachedSegments = {};
      var temp = {};
      var originalMappings = [];
      var generatedMappings = [];
      var mapping, str, segment, end, value;
      while (index < length) {
        if (aStr.charAt(index) === ";") {
          generatedLine++;
          index++;
          previousGeneratedColumn = 0;
        } else if (aStr.charAt(index) === ",") {
          index++;
        } else {
          mapping = new Mapping();
          mapping.generatedLine = generatedLine;
          for (end = index; end < length; end++) {
            if (this._charIsMappingSeparator(aStr, end)) {
              break;
            }
          }
          str = aStr.slice(index, end);
          segment = cachedSegments[str];
          if (segment) {
            index += str.length;
          } else {
            segment = [];
            while (index < end) {
              base64VLQ.decode(aStr, index, temp);
              value = temp.value;
              index = temp.rest;
              segment.push(value);
            }
            if (segment.length === 2) {
              throw new Error("Found a source, but no line and column");
            }
            if (segment.length === 3) {
              throw new Error("Found a source and line, but no column");
            }
            cachedSegments[str] = segment;
          }
          mapping.generatedColumn = previousGeneratedColumn + segment[0];
          previousGeneratedColumn = mapping.generatedColumn;
          if (segment.length > 1) {
            mapping.source = previousSource + segment[1];
            previousSource += segment[1];
            mapping.originalLine = previousOriginalLine + segment[2];
            previousOriginalLine = mapping.originalLine;
            mapping.originalLine += 1;
            mapping.originalColumn = previousOriginalColumn + segment[3];
            previousOriginalColumn = mapping.originalColumn;
            if (segment.length > 4) {
              mapping.name = previousName + segment[4];
              previousName += segment[4];
            }
          }
          generatedMappings.push(mapping);
          if (typeof mapping.originalLine === "number") {
            originalMappings.push(mapping);
          }
        }
      }
      quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
      this.__generatedMappings = generatedMappings;
      quickSort(originalMappings, util.compareByOriginalPositions);
      this.__originalMappings = originalMappings;
    };
    BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {
      if (aNeedle[aLineName] <= 0) {
        throw new TypeError("Line must be greater than or equal to 1, got " + aNeedle[aLineName]);
      }
      if (aNeedle[aColumnName] < 0) {
        throw new TypeError("Column must be greater than or equal to 0, got " + aNeedle[aColumnName]);
      }
      return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
    };
    BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {
      for (var index = 0; index < this._generatedMappings.length; ++index) {
        var mapping = this._generatedMappings[index];
        if (index + 1 < this._generatedMappings.length) {
          var nextMapping = this._generatedMappings[index + 1];
          if (mapping.generatedLine === nextMapping.generatedLine) {
            mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
            continue;
          }
        }
        mapping.lastGeneratedColumn = Infinity;
      }
    };
    BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {
      var needle = {
        generatedLine: util.getArg(aArgs, "line"),
        generatedColumn: util.getArg(aArgs, "column")
      };
      var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND));
      if (index >= 0) {
        var mapping = this._generatedMappings[index];
        if (mapping.generatedLine === needle.generatedLine) {
          var source = util.getArg(mapping, "source", null);
          if (source !== null) {
            source = this._sources.at(source);
            source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
          }
          var name = util.getArg(mapping, "name", null);
          if (name !== null) {
            name = this._names.at(name);
          }
          return {
            source,
            line: util.getArg(mapping, "originalLine", null),
            column: util.getArg(mapping, "originalColumn", null),
            name
          };
        }
      }
      return {
        source: null,
        line: null,
        column: null,
        name: null
      };
    };
    BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {
      if (!this.sourcesContent) {
        return false;
      }
      return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function(sc) {
        return sc == null;
      });
    };
    BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
      if (!this.sourcesContent) {
        return null;
      }
      var index = this._findSourceIndex(aSource);
      if (index >= 0) {
        return this.sourcesContent[index];
      }
      var relativeSource = aSource;
      if (this.sourceRoot != null) {
        relativeSource = util.relative(this.sourceRoot, relativeSource);
      }
      var url;
      if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {
        var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
        if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) {
          return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];
        }
        if ((!url.path || url.path == "/") && this._sources.has("/" + relativeSource)) {
          return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
        }
      }
      if (nullOnMissing) {
        return null;
      } else {
        throw new Error('"' + relativeSource + '" is not in the SourceMap.');
      }
    };
    BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {
      var source = util.getArg(aArgs, "source");
      source = this._findSourceIndex(source);
      if (source < 0) {
        return {
          line: null,
          column: null,
          lastColumn: null
        };
      }
      var needle = {
        source,
        originalLine: util.getArg(aArgs, "line"),
        originalColumn: util.getArg(aArgs, "column")
      };
      var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND));
      if (index >= 0) {
        var mapping = this._originalMappings[index];
        if (mapping.source === needle.source) {
          return {
            line: util.getArg(mapping, "generatedLine", null),
            column: util.getArg(mapping, "generatedColumn", null),
            lastColumn: util.getArg(mapping, "lastGeneratedColumn", null)
          };
        }
      }
      return {
        line: null,
        column: null,
        lastColumn: null
      };
    };
    exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
    function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
      var sourceMap = aSourceMap;
      if (typeof aSourceMap === "string") {
        sourceMap = util.parseSourceMapInput(aSourceMap);
      }
      var version = util.getArg(sourceMap, "version");
      var sections = util.getArg(sourceMap, "sections");
      if (version != this._version) {
        throw new Error("Unsupported version: " + version);
      }
      this._sources = new ArraySet();
      this._names = new ArraySet();
      var lastOffset = {
        line: -1,
        column: 0
      };
      this._sections = sections.map(function(s) {
        if (s.url) {
          throw new Error("Support for url field in sections not implemented.");
        }
        var offset = util.getArg(s, "offset");
        var offsetLine = util.getArg(offset, "line");
        var offsetColumn = util.getArg(offset, "column");
        if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {
          throw new Error("Section offsets must be ordered and non-overlapping.");
        }
        lastOffset = offset;
        return {
          generatedOffset: {
            generatedLine: offsetLine + 1,
            generatedColumn: offsetColumn + 1
          },
          consumer: new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL)
        };
      });
    }
    IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
    IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
    IndexedSourceMapConsumer.prototype._version = 3;
    Object.defineProperty(IndexedSourceMapConsumer.prototype, "sources", {
      get: function() {
        var sources = [];
        for (var i = 0; i < this._sections.length; i++) {
          for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
            sources.push(this._sections[i].consumer.sources[j]);
          }
        }
        return sources;
      }
    });
    IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
      var needle = {
        generatedLine: util.getArg(aArgs, "line"),
        generatedColumn: util.getArg(aArgs, "column")
      };
      var sectionIndex = binarySearch.search(needle, this._sections, function(needle2, section2) {
        var cmp = needle2.generatedLine - section2.generatedOffset.generatedLine;
        if (cmp) {
          return cmp;
        }
        return needle2.generatedColumn - section2.generatedOffset.generatedColumn;
      });
      var section = this._sections[sectionIndex];
      if (!section) {
        return {
          source: null,
          line: null,
          column: null,
          name: null
        };
      }
      return section.consumer.originalPositionFor({
        line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),
        column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
        bias: aArgs.bias
      });
    };
    IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {
      return this._sections.every(function(s) {
        return s.consumer.hasContentsOfAllSources();
      });
    };
    IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
      for (var i = 0; i < this._sections.length; i++) {
        var section = this._sections[i];
        var content = section.consumer.sourceContentFor(aSource, true);
        if (content) {
          return content;
        }
      }
      if (nullOnMissing) {
        return null;
      } else {
        throw new Error('"' + aSource + '" is not in the SourceMap.');
      }
    };
    IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
      for (var i = 0; i < this._sections.length; i++) {
        var section = this._sections[i];
        if (section.consumer._findSourceIndex(util.getArg(aArgs, "source")) === -1) {
          continue;
        }
        var generatedPosition = section.consumer.generatedPositionFor(aArgs);
        if (generatedPosition) {
          var ret = {
            line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),
            column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)
          };
          return ret;
        }
      }
      return {
        line: null,
        column: null
      };
    };
    IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
      this.__generatedMappings = [];
      this.__originalMappings = [];
      for (var i = 0; i < this._sections.length; i++) {
        var section = this._sections[i];
        var sectionMappings = section.consumer._generatedMappings;
        for (var j = 0; j < sectionMappings.length; j++) {
          var mapping = sectionMappings[j];
          var source = section.consumer._sources.at(mapping.source);
          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
          this._sources.add(source);
          source = this._sources.indexOf(source);
          var name = null;
          if (mapping.name) {
            name = section.consumer._names.at(mapping.name);
            this._names.add(name);
            name = this._names.indexOf(name);
          }
          var adjustedMapping = {
            source,
            generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),
            generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
            originalLine: mapping.originalLine,
            originalColumn: mapping.originalColumn,
            name
          };
          this.__generatedMappings.push(adjustedMapping);
          if (typeof adjustedMapping.originalLine === "number") {
            this.__originalMappings.push(adjustedMapping);
          }
        }
      }
      quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
      quickSort(this.__originalMappings, util.compareByOriginalPositions);
    };
    exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
  }
});

// node_modules/source-map/lib/source-node.js
var require_source_node = __commonJS({
  "node_modules/source-map/lib/source-node.js"(exports) {
    var SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
    var util = require_util();
    var REGEX_NEWLINE = /(\r?\n)/;
    var NEWLINE_CODE = 10;
    var isSourceNode = "$$$isSourceNode$$$";
    function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
      this.children = [];
      this.sourceContents = {};
      this.line = aLine == null ? null : aLine;
      this.column = aColumn == null ? null : aColumn;
      this.source = aSource == null ? null : aSource;
      this.name = aName == null ? null : aName;
      this[isSourceNode] = true;
      if (aChunks != null)
        this.add(aChunks);
    }
    SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
      var node = new SourceNode();
      var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
      var remainingLinesIndex = 0;
      var shiftNextLine = function() {
        var lineContents = getNextLine();
        var newLine = getNextLine() || "";
        return lineContents + newLine;
        function getNextLine() {
          return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : void 0;
        }
      };
      var lastGeneratedLine = 1, lastGeneratedColumn = 0;
      var lastMapping = null;
      aSourceMapConsumer.eachMapping(function(mapping) {
        if (lastMapping !== null) {
          if (lastGeneratedLine < mapping.generatedLine) {
            addMappingWithCode(lastMapping, shiftNextLine());
            lastGeneratedLine++;
            lastGeneratedColumn = 0;
          } else {
            var nextLine = remainingLines[remainingLinesIndex] || "";
            var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);
            remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);
            lastGeneratedColumn = mapping.generatedColumn;
            addMappingWithCode(lastMapping, code);
            lastMapping = mapping;
            return;
          }
        }
        while (lastGeneratedLine < mapping.generatedLine) {
          node.add(shiftNextLine());
          lastGeneratedLine++;
        }
        if (lastGeneratedColumn < mapping.generatedColumn) {
          var nextLine = remainingLines[remainingLinesIndex] || "";
          node.add(nextLine.substr(0, mapping.generatedColumn));
          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
          lastGeneratedColumn = mapping.generatedColumn;
        }
        lastMapping = mapping;
      }, this);
      if (remainingLinesIndex < remainingLines.length) {
        if (lastMapping) {
          addMappingWithCode(lastMapping, shiftNextLine());
        }
        node.add(remainingLines.splice(remainingLinesIndex).join(""));
      }
      aSourceMapConsumer.sources.forEach(function(sourceFile) {
        var content = aSourceMapConsumer.sourceContentFor(sourceFile);
        if (content != null) {
          if (aRelativePath != null) {
            sourceFile = util.join(aRelativePath, sourceFile);
          }
          node.setSourceContent(sourceFile, content);
        }
      });
      return node;
      function addMappingWithCode(mapping, code) {
        if (mapping === null || mapping.source === void 0) {
          node.add(code);
        } else {
          var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;
          node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));
        }
      }
    };
    SourceNode.prototype.add = function SourceNode_add(aChunk) {
      if (Array.isArray(aChunk)) {
        aChunk.forEach(function(chunk) {
          this.add(chunk);
        }, this);
      } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
        if (aChunk) {
          this.children.push(aChunk);
        }
      } else {
        throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
      }
      return this;
    };
    SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
      if (Array.isArray(aChunk)) {
        for (var i = aChunk.length - 1; i >= 0; i--) {
          this.prepend(aChunk[i]);
        }
      } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
        this.children.unshift(aChunk);
      } else {
        throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
      }
      return this;
    };
    SourceNode.prototype.walk = function SourceNode_walk(aFn) {
      var chunk;
      for (var i = 0, len = this.children.length; i < len; i++) {
        chunk = this.children[i];
        if (chunk[isSourceNode]) {
          chunk.walk(aFn);
        } else {
          if (chunk !== "") {
            aFn(chunk, {
              source: this.source,
              line: this.line,
              column: this.column,
              name: this.name
            });
          }
        }
      }
    };
    SourceNode.prototype.join = function SourceNode_join(aSep) {
      var newChildren;
      var i;
      var len = this.children.length;
      if (len > 0) {
        newChildren = [];
        for (i = 0; i < len - 1; i++) {
          newChildren.push(this.children[i]);
          newChildren.push(aSep);
        }
        newChildren.push(this.children[i]);
        this.children = newChildren;
      }
      return this;
    };
    SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
      var lastChild = this.children[this.children.length - 1];
      if (lastChild[isSourceNode]) {
        lastChild.replaceRight(aPattern, aReplacement);
      } else if (typeof lastChild === "string") {
        this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
      } else {
        this.children.push("".replace(aPattern, aReplacement));
      }
      return this;
    };
    SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
      this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
    };
    SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {
      for (var i = 0, len = this.children.length; i < len; i++) {
        if (this.children[i][isSourceNode]) {
          this.children[i].walkSourceContents(aFn);
        }
      }
      var sources = Object.keys(this.sourceContents);
      for (var i = 0, len = sources.length; i < len; i++) {
        aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
      }
    };
    SourceNode.prototype.toString = function SourceNode_toString() {
      var str = "";
      this.walk(function(chunk) {
        str += chunk;
      });
      return str;
    };
    SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
      var generated = {
        code: "",
        line: 1,
        column: 0
      };
      var map = new SourceMapGenerator(aArgs);
      var sourceMappingActive = false;
      var lastOriginalSource = null;
      var lastOriginalLine = null;
      var lastOriginalColumn = null;
      var lastOriginalName = null;
      this.walk(function(chunk, original) {
        generated.code += chunk;
        if (original.source !== null && original.line !== null && original.column !== null) {
          if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {
            map.addMapping({
              source: original.source,
              original: {
                line: original.line,
                column: original.column
              },
              generated: {
                line: generated.line,
                column: generated.column
              },
              name: original.name
            });
          }
          lastOriginalSource = original.source;
          lastOriginalLine = original.line;
          lastOriginalColumn = original.column;
          lastOriginalName = original.name;
          sourceMappingActive = true;
        } else if (sourceMappingActive) {
          map.addMapping({
            generated: {
              line: generated.line,
              column: generated.column
            }
          });
          lastOriginalSource = null;
          sourceMappingActive = false;
        }
        for (var idx = 0, length = chunk.length; idx < length; idx++) {
          if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
            generated.line++;
            generated.column = 0;
            if (idx + 1 === length) {
              lastOriginalSource = null;
              sourceMappingActive = false;
            } else if (sourceMappingActive) {
              map.addMapping({
                source: original.source,
                original: {
                  line: original.line,
                  column: original.column
                },
                generated: {
                  line: generated.line,
                  column: generated.column
                },
                name: original.name
              });
            }
          } else {
            generated.column++;
          }
        }
      });
      this.walkSourceContents(function(sourceFile, sourceContent) {
        map.setSourceContent(sourceFile, sourceContent);
      });
      return { code: generated.code, map };
    };
    exports.SourceNode = SourceNode;
  }
});

// node_modules/source-map/source-map.js
var require_source_map2 = __commonJS({
  "node_modules/source-map/source-map.js"(exports) {
    exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
    exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer;
    exports.SourceNode = require_source_node().SourceNode;
  }
});

// node_modules/clean-css/lib/reader/input-source-map-tracker.js
var require_input_source_map_tracker = __commonJS({
  "node_modules/clean-css/lib/reader/input-source-map-tracker.js"(exports, module2) {
    var SourceMapConsumer = require_source_map2().SourceMapConsumer;
    function inputSourceMapTracker() {
      var maps = {};
      return {
        all: all.bind(null, maps),
        isTracking: isTracking.bind(null, maps),
        originalPositionFor: originalPositionFor.bind(null, maps),
        track: track.bind(null, maps)
      };
    }
    function all(maps) {
      return maps;
    }
    function isTracking(maps, source) {
      return source in maps;
    }
    function originalPositionFor(maps, metadata, range, selectorFallbacks) {
      var line = metadata[0];
      var column = metadata[1];
      var source = metadata[2];
      var position = {
        line,
        column: column + range
      };
      var originalPosition;
      while (!originalPosition && position.column > column) {
        position.column--;
        originalPosition = maps[source].originalPositionFor(position);
      }
      if (!originalPosition || originalPosition.column < 0) {
        return metadata;
      }
      if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
        return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
      }
      return originalPosition.line !== null ? toMetadata(originalPosition) : metadata;
    }
    function toMetadata(asHash) {
      return [asHash.line, asHash.column, asHash.source];
    }
    function track(maps, source, data) {
      maps[source] = new SourceMapConsumer(data);
    }
    module2.exports = inputSourceMapTracker;
  }
});

// node_modules/clean-css/lib/utils/is-remote-resource.js
var require_is_remote_resource = __commonJS({
  "node_modules/clean-css/lib/utils/is-remote-resource.js"(exports, module2) {
    var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/;
    var FILE_RESOURCE_PATTERN = /^file:\/\//;
    function isRemoteResource(uri) {
      return REMOTE_RESOURCE_PATTERN.test(uri) && !FILE_RESOURCE_PATTERN.test(uri);
    }
    module2.exports = isRemoteResource;
  }
});

// node_modules/clean-css/lib/utils/has-protocol.js
var require_has_protocol = __commonJS({
  "node_modules/clean-css/lib/utils/has-protocol.js"(exports, module2) {
    var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//;
    function hasProtocol(uri) {
      return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri);
    }
    module2.exports = hasProtocol;
  }
});

// node_modules/clean-css/lib/reader/is-allowed-resource.js
var require_is_allowed_resource = __commonJS({
  "node_modules/clean-css/lib/reader/is-allowed-resource.js"(exports, module2) {
    var path = require("path");
    var url = require("url");
    var isRemoteResource = require_is_remote_resource();
    var hasProtocol = require_has_protocol();
    var HTTP_PROTOCOL = "http:";
    function isAllowedResource(uri, isRemote, rules) {
      var match;
      var absoluteUri;
      var allowed = !isRemote;
      var rule2;
      var isNegated;
      var normalizedRule;
      var i;
      if (rules.length === 0) {
        return false;
      }
      if (isRemote && !hasProtocol(uri)) {
        uri = HTTP_PROTOCOL + uri;
      }
      match = isRemote ? url.parse(uri).host : uri;
      absoluteUri = isRemote ? uri : path.resolve(uri);
      for (i = 0; i < rules.length; i++) {
        rule2 = rules[i];
        isNegated = rule2[0] == "!";
        normalizedRule = rule2.substring(1);
        if (isNegated && isRemote && isRemoteRule(normalizedRule)) {
          allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]);
        } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) {
          allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]);
        } else if (isNegated) {
          allowed = allowed && true;
        } else if (rule2 == "all") {
          allowed = true;
        } else if (isRemote && rule2 == "local") {
          allowed = allowed || false;
        } else if (isRemote && rule2 == "remote") {
          allowed = true;
        } else if (!isRemote && rule2 == "remote") {
          allowed = false;
        } else if (!isRemote && rule2 == "local") {
          allowed = true;
        } else if (rule2 === match) {
          allowed = true;
        } else if (rule2 === uri) {
          allowed = true;
        } else if (isRemote && absoluteUri.indexOf(rule2) === 0) {
          allowed = true;
        } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule2)) === 0) {
          allowed = true;
        } else if (isRemote != isRemoteRule(normalizedRule)) {
          allowed = allowed && true;
        } else {
          allowed = false;
        }
      }
      return allowed;
    }
    function isRemoteRule(rule2) {
      return isRemoteResource(rule2) || url.parse(HTTP_PROTOCOL + "//" + rule2).host == rule2;
    }
    module2.exports = isAllowedResource;
  }
});

// node_modules/clean-css/lib/reader/match-data-uri.js
var require_match_data_uri = __commonJS({
  "node_modules/clean-css/lib/reader/match-data-uri.js"(exports, module2) {
    var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;
    function matchDataUri(uri) {
      return DATA_URI_PATTERN.exec(uri);
    }
    module2.exports = matchDataUri;
  }
});

// node_modules/clean-css/lib/reader/rebase-local-map.js
var require_rebase_local_map = __commonJS({
  "node_modules/clean-css/lib/reader/rebase-local-map.js"(exports, module2) {
    var path = require("path");
    function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) {
      var currentPath = path.resolve("");
      var absoluteUri = path.resolve(currentPath, sourceUri);
      var absoluteUriDirectory = path.dirname(absoluteUri);
      sourceMap.sources = sourceMap.sources.map(function(source) {
        return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source));
      });
      return sourceMap;
    }
    module2.exports = rebaseLocalMap;
  }
});

// node_modules/clean-css/lib/reader/rebase-remote-map.js
var require_rebase_remote_map = __commonJS({
  "node_modules/clean-css/lib/reader/rebase-remote-map.js"(exports, module2) {
    var path = require("path");
    var url = require("url");
    function rebaseRemoteMap(sourceMap, sourceUri) {
      var sourceDirectory = path.dirname(sourceUri);
      sourceMap.sources = sourceMap.sources.map(function(source) {
        return url.resolve(sourceDirectory, source);
      });
      return sourceMap;
    }
    module2.exports = rebaseRemoteMap;
  }
});

// node_modules/clean-css/lib/utils/is-data-uri-resource.js
var require_is_data_uri_resource = __commonJS({
  "node_modules/clean-css/lib/utils/is-data-uri-resource.js"(exports, module2) {
    var DATA_URI_PATTERN = /^data:(\S{0,31}?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;
    function isDataUriResource(uri) {
      return DATA_URI_PATTERN.test(uri);
    }
    module2.exports = isDataUriResource;
  }
});

// node_modules/clean-css/lib/reader/apply-source-maps.js
var require_apply_source_maps = __commonJS({
  "node_modules/clean-css/lib/reader/apply-source-maps.js"(exports, module2) {
    var fs2 = require("fs");
    var path = require("path");
    var isAllowedResource = require_is_allowed_resource();
    var matchDataUri = require_match_data_uri();
    var rebaseLocalMap = require_rebase_local_map();
    var rebaseRemoteMap = require_rebase_remote_map();
    var Token = require_token();
    var hasProtocol = require_has_protocol();
    var isDataUriResource = require_is_data_uri_resource();
    var isRemoteResource = require_is_remote_resource();
    var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
    function applySourceMaps(tokens, context, callback) {
      var applyContext = {
        callback,
        fetch: context.options.fetch,
        index: 0,
        inline: context.options.inline,
        inlineRequest: context.options.inlineRequest,
        inlineTimeout: context.options.inlineTimeout,
        inputSourceMapTracker: context.inputSourceMapTracker,
        localOnly: context.localOnly,
        processedTokens: [],
        rebaseTo: context.options.rebaseTo,
        sourceTokens: tokens,
        warnings: context.warnings
      };
      return context.options.sourceMap && tokens.length > 0 ? doApplySourceMaps(applyContext) : callback(tokens);
    }
    function doApplySourceMaps(applyContext) {
      var singleSourceTokens = [];
      var lastSource = findTokenSource(applyContext.sourceTokens[0]);
      var source;
      var token;
      var l;
      for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) {
        token = applyContext.sourceTokens[applyContext.index];
        source = findTokenSource(token);
        if (source != lastSource) {
          singleSourceTokens = [];
          lastSource = source;
        }
        singleSourceTokens.push(token);
        applyContext.processedTokens.push(token);
        if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) {
          return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext);
        }
      }
      return applyContext.callback(applyContext.processedTokens);
    }
    function findTokenSource(token) {
      var scope;
      var metadata;
      if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT || token[0] == Token.RAW) {
        metadata = token[2][0];
      } else {
        scope = token[1][0];
        metadata = scope[2][0];
      }
      return metadata[2];
    }
    function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) {
      return extractInputSourceMapFrom(sourceMapComment, applyContext, function(inputSourceMap) {
        if (inputSourceMap) {
          applyContext.inputSourceMapTracker.track(source, inputSourceMap);
          applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker);
        }
        applyContext.index++;
        return doApplySourceMaps(applyContext);
      });
    }
    function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) {
      var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1];
      var absoluteUri;
      var sourceMap;
      var rebasedMap;
      if (isDataUriResource(uri)) {
        sourceMap = extractInputSourceMapFromDataUri(uri);
        return whenSourceMapReady(sourceMap);
      }
      if (isRemoteResource(uri)) {
        return loadInputSourceMapFromRemoteUri(uri, applyContext, function(sourceMap2) {
          var parsedMap;
          if (sourceMap2) {
            parsedMap = JSON.parse(sourceMap2);
            rebasedMap = rebaseRemoteMap(parsedMap, uri);
            whenSourceMapReady(rebasedMap);
          } else {
            whenSourceMapReady(null);
          }
        });
      }
      absoluteUri = path.resolve(applyContext.rebaseTo, uri);
      sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext);
      if (sourceMap) {
        rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo);
        return whenSourceMapReady(rebasedMap);
      }
      return whenSourceMapReady(null);
    }
    function extractInputSourceMapFromDataUri(uri) {
      var dataUriMatch = matchDataUri(uri);
      var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : "us-ascii";
      var encoding = dataUriMatch[3] ? dataUriMatch[3].split(";")[1] : "utf8";
      var data = encoding == "utf8" ? global.unescape(dataUriMatch[4]) : dataUriMatch[4];
      var buffer = Buffer.from(data, encoding);
      buffer.charset = charset;
      return JSON.parse(buffer.toString());
    }
    function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) {
      var isAllowed = isAllowedResource(uri, true, applyContext.inline);
      var isRuntimeResource = !hasProtocol(uri);
      if (applyContext.localOnly) {
        applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
        return whenLoaded(null);
      }
      if (isRuntimeResource) {
        applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
        return whenLoaded(null);
      }
      if (!isAllowed) {
        applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
        return whenLoaded(null);
      }
      applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function(error, body) {
        if (error) {
          applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error);
          return whenLoaded(null);
        }
        whenLoaded(body);
      });
    }
    function loadInputSourceMapFromLocalUri(uri, applyContext) {
      var isAllowed = isAllowedResource(uri, false, applyContext.inline);
      var sourceMap;
      if (!fs2.existsSync(uri) || !fs2.statSync(uri).isFile()) {
        applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.');
        return null;
      }
      if (!isAllowed) {
        applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
        return null;
      }
      if (!fs2.statSync(uri).size) {
        applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is empty.');
        return null;
      }
      sourceMap = fs2.readFileSync(uri, "utf-8");
      return JSON.parse(sourceMap);
    }
    function applySourceMapRecursively(tokens, inputSourceMapTracker) {
      var token;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        switch (token[0]) {
          case Token.AT_RULE:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.AT_RULE_BLOCK:
            applySourceMapRecursively(token[1], inputSourceMapTracker);
            applySourceMapRecursively(token[2], inputSourceMapTracker);
            break;
          case Token.AT_RULE_BLOCK_SCOPE:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.NESTED_BLOCK:
            applySourceMapRecursively(token[1], inputSourceMapTracker);
            applySourceMapRecursively(token[2], inputSourceMapTracker);
            break;
          case Token.NESTED_BLOCK_SCOPE:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.COMMENT:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.PROPERTY:
            applySourceMapRecursively(token, inputSourceMapTracker);
            break;
          case Token.PROPERTY_BLOCK:
            applySourceMapRecursively(token[1], inputSourceMapTracker);
            break;
          case Token.PROPERTY_NAME:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.PROPERTY_VALUE:
            applySourceMapTo(token, inputSourceMapTracker);
            break;
          case Token.RULE:
            applySourceMapRecursively(token[1], inputSourceMapTracker);
            applySourceMapRecursively(token[2], inputSourceMapTracker);
            break;
          case Token.RULE_SCOPE:
            applySourceMapTo(token, inputSourceMapTracker);
        }
      }
      return tokens;
    }
    function applySourceMapTo(token, inputSourceMapTracker) {
      var value = token[1];
      var metadata = token[2];
      var newMetadata = [];
      var i, l;
      for (i = 0, l = metadata.length; i < l; i++) {
        newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length));
      }
      token[2] = newMetadata;
    }
    module2.exports = applySourceMaps;
  }
});

// node_modules/clean-css/lib/reader/extract-import-url-and-media.js
var require_extract_import_url_and_media = __commonJS({
  "node_modules/clean-css/lib/reader/extract-import-url-and-media.js"(exports, module2) {
    var split = require_split();
    var BRACE_PREFIX = /^\(/;
    var BRACE_SUFFIX = /\)$/;
    var IMPORT_PREFIX_PATTERN = /^@import/i;
    var QUOTE_PREFIX_PATTERN = /['"]\s{0,31}/;
    var QUOTE_SUFFIX_PATTERN = /\s{0,31}['"]/;
    var URL_PREFIX_PATTERN = /^url\(\s{0,31}/i;
    var URL_SUFFIX_PATTERN = /\s{0,31}\)/i;
    function extractImportUrlAndMedia(atRuleValue) {
      var uri;
      var mediaQuery;
      var normalized;
      var parts;
      normalized = atRuleValue.replace(IMPORT_PREFIX_PATTERN, "").trim().replace(URL_PREFIX_PATTERN, "(").replace(URL_SUFFIX_PATTERN, ") ").replace(QUOTE_PREFIX_PATTERN, "").replace(QUOTE_SUFFIX_PATTERN, "");
      parts = split(normalized, " ");
      uri = parts[0].replace(BRACE_PREFIX, "").replace(BRACE_SUFFIX, "");
      mediaQuery = parts.slice(1).join(" ");
      return [uri, mediaQuery];
    }
    module2.exports = extractImportUrlAndMedia;
  }
});

// node_modules/clean-css/lib/reader/load-original-sources.js
var require_load_original_sources = __commonJS({
  "node_modules/clean-css/lib/reader/load-original-sources.js"(exports, module2) {
    var fs2 = require("fs");
    var path = require("path");
    var isAllowedResource = require_is_allowed_resource();
    var hasProtocol = require_has_protocol();
    var isRemoteResource = require_is_remote_resource();
    function loadOriginalSources(context, callback) {
      var loadContext = {
        callback,
        fetch: context.options.fetch,
        index: 0,
        inline: context.options.inline,
        inlineRequest: context.options.inlineRequest,
        inlineTimeout: context.options.inlineTimeout,
        localOnly: context.localOnly,
        rebaseTo: context.options.rebaseTo,
        sourcesContent: context.sourcesContent,
        uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()),
        warnings: context.warnings
      };
      return context.options.sourceMap && context.options.sourceMapInlineSources ? doLoadOriginalSources(loadContext) : callback();
    }
    function uriToSourceMapping(allSourceMapConsumers) {
      var mapping = {};
      var consumer;
      var uri;
      var source;
      var i, l;
      for (source in allSourceMapConsumers) {
        consumer = allSourceMapConsumers[source];
        for (i = 0, l = consumer.sources.length; i < l; i++) {
          uri = consumer.sources[i];
          source = consumer.sourceContentFor(uri, true);
          mapping[uri] = source;
        }
      }
      return mapping;
    }
    function doLoadOriginalSources(loadContext) {
      var uris = Object.keys(loadContext.uriToSource);
      var uri;
      var source;
      var total;
      for (total = uris.length; loadContext.index < total; loadContext.index++) {
        uri = uris[loadContext.index];
        source = loadContext.uriToSource[uri];
        if (source) {
          loadContext.sourcesContent[uri] = source;
        } else {
          return loadOriginalSource(uri, loadContext);
        }
      }
      return loadContext.callback();
    }
    function loadOriginalSource(uri, loadContext) {
      var content;
      if (isRemoteResource(uri)) {
        return loadOriginalSourceFromRemoteUri(uri, loadContext, function(content2) {
          loadContext.index++;
          loadContext.sourcesContent[uri] = content2;
          return doLoadOriginalSources(loadContext);
        });
      }
      content = loadOriginalSourceFromLocalUri(uri, loadContext);
      loadContext.index++;
      loadContext.sourcesContent[uri] = content;
      return doLoadOriginalSources(loadContext);
    }
    function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) {
      var isAllowed = isAllowedResource(uri, true, loadContext.inline);
      var isRuntimeResource = !hasProtocol(uri);
      if (loadContext.localOnly) {
        loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
        return whenLoaded(null);
      }
      if (isRuntimeResource) {
        loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
        return whenLoaded(null);
      }
      if (!isAllowed) {
        loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
        return whenLoaded(null);
      }
      loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function(error, content) {
        if (error) {
          loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error);
        }
        whenLoaded(content);
      });
    }
    function loadOriginalSourceFromLocalUri(relativeUri, loadContext) {
      var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline);
      var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri);
      if (!fs2.existsSync(absoluteUri) || !fs2.statSync(absoluteUri).isFile()) {
        loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.');
        return null;
      }
      if (!isAllowed) {
        loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.');
        return null;
      }
      var result = fs2.readFileSync(absoluteUri, "utf8");
      if (result.charCodeAt(0) === 65279) {
        result = result.substring(1);
      }
      return result;
    }
    module2.exports = loadOriginalSources;
  }
});

// node_modules/clean-css/lib/reader/normalize-path.js
var require_normalize_path = __commonJS({
  "node_modules/clean-css/lib/reader/normalize-path.js"(exports, module2) {
    var UNIX_SEPARATOR = "/";
    var WINDOWS_SEPARATOR_PATTERN = /\\/g;
    function normalizePath(path) {
      return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR);
    }
    module2.exports = normalizePath;
  }
});

// node_modules/clean-css/lib/reader/restore-import.js
var require_restore_import = __commonJS({
  "node_modules/clean-css/lib/reader/restore-import.js"(exports, module2) {
    function restoreImport(uri, mediaQuery) {
      return ("@import " + uri + " " + mediaQuery).trim();
    }
    module2.exports = restoreImport;
  }
});

// node_modules/clean-css/lib/reader/rewrite-url.js
var require_rewrite_url = __commonJS({
  "node_modules/clean-css/lib/reader/rewrite-url.js"(exports, module2) {
    var path = require("path");
    var url = require("url");
    var isDataUriResource = require_is_data_uri_resource();
    var DOUBLE_QUOTE = '"';
    var SINGLE_QUOTE = "'";
    var URL_PREFIX = "url(";
    var URL_SUFFIX = ")";
    var PROTOCOL_LESS_PREFIX_PATTERN = /^[^\w\d]*\/\//;
    var QUOTE_PREFIX_PATTERN = /^["']/;
    var QUOTE_SUFFIX_PATTERN = /["']$/;
    var ROUND_BRACKETS_PATTERN = /[()]/;
    var URL_PREFIX_PATTERN = /^url\(/i;
    var URL_SUFFIX_PATTERN = /\)$/;
    var WHITESPACE_PATTERN = /\s/;
    var isWindows = process.platform == "win32";
    function rebase(uri, rebaseConfig) {
      if (!rebaseConfig) {
        return uri;
      }
      if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) {
        return uri;
      }
      if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri) || isDataUriResource(uri)) {
        return uri;
      }
      if (isRemote(rebaseConfig.toBase)) {
        return url.resolve(rebaseConfig.toBase, uri);
      }
      return rebaseConfig.absolute ? normalize(absolute(uri, rebaseConfig)) : normalize(relative(uri, rebaseConfig));
    }
    function isAbsolute(uri) {
      return path.isAbsolute(uri);
    }
    function isSVGMarker(uri) {
      return uri[0] == "#";
    }
    function isInternal(uri) {
      return /^\w+:\w+/.test(uri);
    }
    function isRemote(uri) {
      return /^[^:]+?:\/\//.test(uri) || PROTOCOL_LESS_PREFIX_PATTERN.test(uri);
    }
    function absolute(uri, rebaseConfig) {
      return path.resolve(path.join(rebaseConfig.fromBase || "", uri)).replace(rebaseConfig.toBase, "");
    }
    function relative(uri, rebaseConfig) {
      return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || "", uri));
    }
    function normalize(uri) {
      return isWindows ? uri.replace(/\\/g, "/") : uri;
    }
    function quoteFor(unquotedUrl) {
      if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) {
        return DOUBLE_QUOTE;
      }
      if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) {
        return SINGLE_QUOTE;
      }
      if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) {
        return SINGLE_QUOTE;
      }
      return "";
    }
    function hasWhitespace(url2) {
      return WHITESPACE_PATTERN.test(url2);
    }
    function hasRoundBrackets(url2) {
      return ROUND_BRACKETS_PATTERN.test(url2);
    }
    function rewriteUrl(originalUrl, rebaseConfig, pathOnly) {
      var strippedUrl = originalUrl.replace(URL_PREFIX_PATTERN, "").replace(URL_SUFFIX_PATTERN, "").trim();
      var unquotedUrl = strippedUrl.replace(QUOTE_PREFIX_PATTERN, "").replace(QUOTE_SUFFIX_PATTERN, "").trim();
      var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE ? strippedUrl[0] : quoteFor(unquotedUrl);
      return pathOnly ? rebase(unquotedUrl, rebaseConfig) : URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX;
    }
    module2.exports = rewriteUrl;
  }
});

// node_modules/clean-css/lib/utils/is-import.js
var require_is_import = __commonJS({
  "node_modules/clean-css/lib/utils/is-import.js"(exports, module2) {
    var IMPORT_PREFIX_PATTERN = /^@import/i;
    function isImport(value) {
      return IMPORT_PREFIX_PATTERN.test(value);
    }
    module2.exports = isImport;
  }
});

// node_modules/clean-css/lib/reader/rebase.js
var require_rebase2 = __commonJS({
  "node_modules/clean-css/lib/reader/rebase.js"(exports, module2) {
    var extractImportUrlAndMedia = require_extract_import_url_and_media();
    var restoreImport = require_restore_import();
    var rewriteUrl = require_rewrite_url();
    var Token = require_token();
    var isImport = require_is_import();
    var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
    function rebase(tokens, rebaseAll, validator, rebaseConfig) {
      return rebaseAll ? rebaseEverything(tokens, validator, rebaseConfig) : rebaseAtRules(tokens, validator, rebaseConfig);
    }
    function rebaseEverything(tokens, validator, rebaseConfig) {
      var token;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        switch (token[0]) {
          case Token.AT_RULE:
            rebaseAtRule(token, validator, rebaseConfig);
            break;
          case Token.AT_RULE_BLOCK:
            rebaseProperties(token[2], validator, rebaseConfig);
            break;
          case Token.COMMENT:
            rebaseSourceMapComment(token, rebaseConfig);
            break;
          case Token.NESTED_BLOCK:
            rebaseEverything(token[2], validator, rebaseConfig);
            break;
          case Token.RULE:
            rebaseProperties(token[2], validator, rebaseConfig);
            break;
        }
      }
      return tokens;
    }
    function rebaseAtRules(tokens, validator, rebaseConfig) {
      var token;
      var i, l;
      for (i = 0, l = tokens.length; i < l; i++) {
        token = tokens[i];
        switch (token[0]) {
          case Token.AT_RULE:
            rebaseAtRule(token, validator, rebaseConfig);
            break;
        }
      }
      return tokens;
    }
    function rebaseAtRule(token, validator, rebaseConfig) {
      if (!isImport(token[1])) {
        return;
      }
      var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
      var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);
      var mediaQuery = uriAndMediaQuery[1];
      token[1] = restoreImport(newUrl, mediaQuery);
    }
    function rebaseSourceMapComment(token, rebaseConfig) {
      var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);
      if (matches && matches[1].indexOf("data:") === -1) {
        token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));
      }
    }
    function rebaseProperties(properties, validator, rebaseConfig) {
      var property;
      var value;
      var i, l;
      var j, m;
      for (i = 0, l = properties.length; i < l; i++) {
        property = properties[i];
        for (j = 2, m = property.length; j < m; j++) {
          value = property[j][1];
          if (validator.isUrl(value)) {
            property[j][1] = rewriteUrl(value, rebaseConfig);
          }
        }
      }
    }
    module2.exports = rebase;
  }
});

// node_modules/clean-css/lib/tokenizer/tokenize.js
var require_tokenize2 = __commonJS({
  "node_modules/clean-css/lib/tokenizer/tokenize.js"(exports, module2) {
    var Marker = require_marker();
    var Token = require_token();
    var formatPosition = require_format_position();
    var Level = {
      BLOCK: "block",
      COMMENT: "comment",
      DOUBLE_QUOTE: "double-quote",
      RULE: "rule",
      SINGLE_QUOTE: "single-quote"
    };
    var AT_RULES = [
      "@charset",
      "@import"
    ];
    var BLOCK_RULES = [
      "@-moz-document",
      "@document",
      "@-moz-keyframes",
      "@-ms-keyframes",
      "@-o-keyframes",
      "@-webkit-keyframes",
      "@keyframes",
      "@media",
      "@supports",
      "@container",
      "@layer"
    ];
    var IGNORE_END_COMMENT_PATTERN = /\/\* clean-css ignore:end \*\/$/;
    var IGNORE_START_COMMENT_PATTERN = /^\/\* clean-css ignore:start \*\//;
    var PAGE_MARGIN_BOXES = [
      "@bottom-center",
      "@bottom-left",
      "@bottom-left-corner",
      "@bottom-right",
      "@bottom-right-corner",
      "@left-bottom",
      "@left-middle",
      "@left-top",
      "@right-bottom",
      "@right-middle",
      "@right-top",
      "@top-center",
      "@top-left",
      "@top-left-corner",
      "@top-right",
      "@top-right-corner"
    ];
    var EXTRA_PAGE_BOXES = [
      "@footnote",
      "@footnotes",
      "@left",
      "@page-float-bottom",
      "@page-float-top",
      "@right"
    ];
    var REPEAT_PATTERN = /^\[\s{0,31}\d+\s{0,31}\]$/;
    var TAIL_BROKEN_VALUE_PATTERN = /([^}])\}*$/;
    var RULE_WORD_SEPARATOR_PATTERN = /[\s(]/;
    function tokenize(source, externalContext) {
      var internalContext = {
        level: Level.BLOCK,
        position: {
          source: externalContext.source || void 0,
          line: 1,
          column: 0,
          index: 0
        }
      };
      return intoTokens(source, externalContext, internalContext, false);
    }
    function intoTokens(source, externalContext, internalContext, isNested) {
      var allTokens = [];
      var newTokens = allTokens;
      var lastToken;
      var ruleToken;
      var ruleTokens = [];
      var propertyToken;
      var metadata;
      var metadatas = [];
      var level = internalContext.level;
      var levels = [];
      var buffer = [];
      var buffers = [];
      var isBufferEmpty = true;
      var serializedBuffer;
      var serializedBufferPart;
      var roundBracketLevel = 0;
      var isQuoted;
      var isSpace;
      var isNewLineNix;
      var isNewLineWin;
      var isCarriageReturn;
      var isCommentStart;
      var wasCommentStart = false;
      var isCommentEnd;
      var wasCommentEnd = false;
      var isCommentEndMarker;
      var isEscaped;
      var wasEscaped = false;
      var characterWithNoSpecialMeaning;
      var isPreviousDash = false;
      var isVariable = false;
      var isRaw = false;
      var seekingValue = false;
      var seekingPropertyBlockClosing = false;
      var position = internalContext.position;
      var lastCommentStartAt;
      for (; position.index < source.length; position.index++) {
        var character = source[position.index];
        isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE;
        isSpace = character == Marker.SPACE || character == Marker.TAB;
        isNewLineNix = character == Marker.NEW_LINE_NIX;
        isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.CARRIAGE_RETURN;
        isCarriageReturn = character == Marker.CARRIAGE_RETURN && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX;
        isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH;
        isCommentEndMarker = !wasCommentStart && !isQuoted && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK;
        isCommentEnd = level == Level.COMMENT && isCommentEndMarker;
        characterWithNoSpecialMeaning = !isSpace && !isCarriageReturn && (character >= "A" && character <= "Z" || character >= "a" && character <= "z" || character >= "0" && character <= "9" || character == "-");
        isVariable = isVariable || level != Level.COMMENT && !seekingValue && isPreviousDash && character === "-" && buffer.length === 1;
        isPreviousDash = character === "-";
        roundBracketLevel = Math.max(roundBracketLevel, 0);
        metadata = isBufferEmpty ? [position.line, position.column, position.source] : metadata;
        if (isEscaped) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if (characterWithNoSpecialMeaning) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if ((isSpace || isNewLineNix && !isNewLineWin) && (isQuoted || level == Level.COMMENT)) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if ((isSpace || isNewLineNix && !isNewLineWin) && isBufferEmpty) {
        } else if (!isCommentEnd && level == Level.COMMENT) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if (!isCommentStart && !isCommentEnd && isRaw) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if (isCommentStart && isVariable && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
          buffer.push(character);
          isBufferEmpty = false;
          levels.push(level);
          level = Level.COMMENT;
        } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
          metadatas.push(metadata);
          buffer.push(character);
          buffers.push(buffer.slice(0, -2));
          isBufferEmpty = false;
          buffer = buffer.slice(-2);
          metadata = [position.line, position.column - 1, position.source];
          levels.push(level);
          level = Level.COMMENT;
        } else if (isCommentStart) {
          levels.push(level);
          level = Level.COMMENT;
          buffer.push(character);
          isBufferEmpty = false;
        } else if (isCommentEnd && isVariable) {
          buffer.push(character);
          level = levels.pop();
        } else if (isCommentEnd && isIgnoreStartComment(buffer)) {
          serializedBuffer = buffer.join("").trim() + character;
          lastToken = [
            Token.COMMENT,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ];
          newTokens.push(lastToken);
          isRaw = true;
          metadata = metadatas.pop() || null;
          buffer = buffers.pop() || [];
          isBufferEmpty = buffer.length === 0;
        } else if (isCommentEnd && isIgnoreEndComment(buffer)) {
          serializedBuffer = buffer.join("") + character;
          lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK);
          serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt);
          lastToken = [
            Token.RAW,
            serializedBufferPart,
            [originalMetadata(metadata, serializedBufferPart, externalContext)]
          ];
          newTokens.push(lastToken);
          serializedBufferPart = serializedBuffer.substring(lastCommentStartAt);
          metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source];
          lastToken = [
            Token.COMMENT,
            serializedBufferPart,
            [originalMetadata(metadata, serializedBufferPart, externalContext)]
          ];
          newTokens.push(lastToken);
          isRaw = false;
          level = levels.pop();
          metadata = metadatas.pop() || null;
          buffer = buffers.pop() || [];
          isBufferEmpty = buffer.length === 0;
        } else if (isCommentEnd) {
          serializedBuffer = buffer.join("").trim() + character;
          lastToken = [
            Token.COMMENT,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ];
          newTokens.push(lastToken);
          level = levels.pop();
          metadata = metadatas.pop() || null;
          buffer = buffers.pop() || [];
          isBufferEmpty = buffer.length === 0;
        } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) {
          externalContext.warnings.push("Unexpected '*/' at " + formatPosition([position.line, position.column, position.source]) + ".");
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
          levels.push(level);
          level = Level.SINGLE_QUOTE;
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
          level = levels.pop();
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
          levels.push(level);
          level = Level.DOUBLE_QUOTE;
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
          level = levels.pop();
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character != Marker.CLOSE_ROUND_BRACKET && character != Marker.OPEN_ROUND_BRACKET && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
          buffer.push(character);
          isBufferEmpty = false;
          roundBracketLevel++;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
          buffer.push(character);
          isBufferEmpty = false;
          roundBracketLevel--;
        } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) {
          serializedBuffer = buffer.join("").trim();
          allTokens.push([
            Token.AT_RULE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) {
          serializedBuffer = buffer.join("").trim();
          ruleToken[1].push([
            tokenScopeFrom(ruleToken[0]),
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) {
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.COMMA && level == Level.BLOCK) {
          ruleToken = [tokenTypeFrom(buffer), [], []];
          serializedBuffer = buffer.join("").trim();
          ruleToken[1].push([
            tokenScopeFrom(ruleToken[0]),
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext, 0)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && ruleToken && ruleToken[0] == Token.NESTED_BLOCK) {
          serializedBuffer = buffer.join("").trim();
          ruleToken[1].push([
            Token.NESTED_BLOCK_SCOPE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          allTokens.push(ruleToken);
          levels.push(level);
          position.column++;
          position.index++;
          buffer = [];
          isBufferEmpty = true;
          ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
          ruleToken = null;
        } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) {
          serializedBuffer = buffer.join("").trim();
          ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []];
          ruleToken[1].push([
            Token.NESTED_BLOCK_SCOPE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          allTokens.push(ruleToken);
          levels.push(level);
          position.column++;
          position.index++;
          buffer = [];
          isBufferEmpty = true;
          isVariable = false;
          ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
          ruleToken = null;
        } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) {
          serializedBuffer = buffer.join("").trim();
          ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []];
          ruleToken[1].push([
            tokenScopeFrom(ruleToken[0]),
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]
          ]);
          newTokens = ruleToken[2];
          allTokens.push(ruleToken);
          levels.push(level);
          level = Level.RULE;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) {
          ruleTokens.push(ruleToken);
          ruleToken = [Token.PROPERTY_BLOCK, []];
          propertyToken.push(ruleToken);
          newTokens = ruleToken[1];
          levels.push(level);
          level = Level.RULE;
          seekingValue = false;
        } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) {
          serializedBuffer = buffer.join("").trim();
          ruleTokens.push(ruleToken);
          ruleToken = [Token.AT_RULE_BLOCK, [], []];
          ruleToken[1].push([
            Token.AT_RULE_BLOCK_SCOPE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          newTokens.push(ruleToken);
          newTokens = ruleToken[2];
          levels.push(level);
          level = Level.RULE;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {
          serializedBuffer = buffer.join("").trim();
          propertyToken = [
            Token.PROPERTY,
            [
              Token.PROPERTY_NAME,
              serializedBuffer,
              [originalMetadata(metadata, serializedBuffer, externalContext)]
            ]
          ];
          newTokens.push(propertyToken);
          seekingValue = true;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && ruleTokens.length > 0 && !isBufferEmpty && buffer[0] == Marker.AT) {
          serializedBuffer = buffer.join("").trim();
          ruleToken[1].push([
            Token.AT_RULE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && !isBufferEmpty) {
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken = null;
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
          isVariable = false;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty && isVariable && !propertyToken[2]) {
          propertyToken.push([Token.PROPERTY_VALUE, " ", [originalMetadata(metadata, " ", externalContext)]]);
          isVariable = false;
          propertyToken = null;
          seekingValue = false;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty) {
          propertyToken = null;
          seekingValue = false;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && !isBufferEmpty && buffer[0] == Marker.AT) {
          serializedBuffer = buffer.join("");
          newTokens.push([
            Token.AT_RULE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) {
          seekingPropertyBlockClosing = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.SEMICOLON && level == Level.RULE && isBufferEmpty) {
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && seekingValue && !isBufferEmpty && ruleTokens.length > 0) {
          serializedBuffer = buffer.join("");
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken = null;
          ruleToken = ruleTokens.pop();
          newTokens = ruleToken[2];
          level = levels.pop();
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && !isBufferEmpty && buffer[0] == Marker.AT && ruleTokens.length > 0) {
          serializedBuffer = buffer.join("");
          ruleToken[1].push([
            Token.AT_RULE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken = null;
          ruleToken = ruleTokens.pop();
          newTokens = ruleToken[2];
          level = levels.pop();
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && ruleTokens.length > 0) {
          propertyToken = null;
          ruleToken = ruleTokens.pop();
          newTokens = ruleToken[2];
          level = levels.pop();
          seekingValue = false;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && !isBufferEmpty) {
          serializedBuffer = buffer.join("");
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken = null;
          ruleToken = ruleTokens.pop();
          newTokens = allTokens;
          level = levels.pop();
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && !isBufferEmpty && buffer[0] == Marker.AT) {
          propertyToken = null;
          ruleToken = null;
          serializedBuffer = buffer.join("").trim();
          newTokens.push([
            Token.AT_RULE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          newTokens = allTokens;
          level = levels.pop();
          seekingValue = false;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && levels[levels.length - 1] == Level.RULE) {
          propertyToken = null;
          ruleToken = ruleTokens.pop();
          newTokens = ruleToken[2];
          level = levels.pop();
          seekingValue = false;
          seekingPropertyBlockClosing = true;
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && isVariable && propertyToken && !propertyToken[2]) {
          propertyToken.push([Token.PROPERTY_VALUE, " ", [originalMetadata(metadata, " ", externalContext)]]);
          isVariable = false;
          propertyToken = null;
          ruleToken = null;
          newTokens = allTokens;
          level = levels.pop();
          seekingValue = false;
          isVariable = false;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) {
          propertyToken = null;
          ruleToken = null;
          newTokens = allTokens;
          level = levels.pop();
          seekingValue = false;
          isVariable = false;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK && !isNested && position.index <= source.length - 1) {
          externalContext.warnings.push("Unexpected '}' at " + formatPosition([position.line, position.column, position.source]) + ".");
          buffer.push(character);
          isBufferEmpty = false;
        } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) {
          break;
        } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) {
          buffer.push(character);
          isBufferEmpty = false;
          roundBracketLevel++;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue && roundBracketLevel == 1) {
          buffer.push(character);
          isBufferEmpty = false;
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          roundBracketLevel--;
          buffer = [];
          isBufferEmpty = true;
          isVariable = false;
        } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) {
          buffer.push(character);
          isBufferEmpty = false;
          isVariable = false;
          roundBracketLevel--;
        } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue && !isBufferEmpty) {
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken.push([
            Token.PROPERTY_VALUE,
            character,
            [[position.line, position.column, position.source]]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue) {
          propertyToken.push([
            Token.PROPERTY_VALUE,
            character,
            [[position.line, position.column, position.source]]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && !isBufferEmpty) {
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          propertyToken.push([
            Token.PROPERTY_VALUE,
            character,
            [[position.line, position.column, position.source]]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) {
          propertyToken.push([
            Token.PROPERTY_VALUE,
            character,
            [[position.line, position.column, position.source]]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (character == Marker.CLOSE_SQUARE_BRACKET && propertyToken && propertyToken.length > 1 && !isBufferEmpty && isRepeatToken(buffer)) {
          buffer.push(character);
          serializedBuffer = buffer.join("").trim();
          propertyToken[propertyToken.length - 1][1] += serializedBuffer;
          buffer = [];
          isBufferEmpty = true;
        } else if ((isSpace || isNewLineNix && !isNewLineWin) && level == Level.RULE && seekingValue && propertyToken && !isBufferEmpty) {
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) {
          serializedBuffer = buffer.join("").trim();
          propertyToken.push([
            Token.PROPERTY_VALUE,
            serializedBuffer,
            [originalMetadata(metadata, serializedBuffer, externalContext)]
          ]);
          buffer = [];
          isBufferEmpty = true;
        } else if (isNewLineWin && level == Level.RULE && seekingValue) {
          buffer = [];
          isBufferEmpty = true;
        } else if (isNewLineWin && buffer.length == 1) {
          buffer.pop();
          isBufferEmpty = buffer.length === 0;
        } else if (!isBufferEmpty || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) {
          buffer.push(character);
          isBufferEmpty = false;
        }
        wasEscaped = isEscaped;
        isEscaped = !wasEscaped && character == Marker.BACK_SLASH;
        wasCommentStart = isCommentStart;
        wasCommentEnd = isCommentEnd;
        position.line = isNewLineWin || isNewLineNix || isCarriageReturn ? position.line + 1 : position.line;
        position.column = isNewLineWin || isNewLineNix || isCarriageReturn ? 0 : position.column + 1;
      }
      if (seekingValue) {
        externalContext.warnings.push("Missing '}' at " + formatPosition([position.line, position.column, position.source]) + ".");
      }
      if (seekingValue && buffer.length > 0) {
        serializedBuffer = buffer.join("").trimRight().replace(TAIL_BROKEN_VALUE_PATTERN, "$1").trimRight();
        propertyToken.push([
          Token.PROPERTY_VALUE,
          serializedBuffer,
          [originalMetadata(metadata, serializedBuffer, externalContext)]
        ]);
        buffer = [];
      }
      if (buffer.length > 0) {
        externalContext.warnings.push("Invalid character(s) '" + buffer.join("") + "' at " + formatPosition(metadata) + ". Ignoring.");
      }
      return allTokens;
    }
    function isIgnoreStartComment(buffer) {
      return IGNORE_START_COMMENT_PATTERN.test(buffer.join("") + Marker.FORWARD_SLASH);
    }
    function isIgnoreEndComment(buffer) {
      return IGNORE_END_COMMENT_PATTERN.test(buffer.join("") + Marker.FORWARD_SLASH);
    }
    function originalMetadata(metadata, value, externalContext, selectorFallbacks) {
      var source = metadata[2];
      return externalContext.inputSourceMapTracker.isTracking(source) ? externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks) : metadata;
    }
    function tokenTypeFrom(buffer) {
      var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE;
      var ruleWord = buffer.join("").split(RULE_WORD_SEPARATOR_PATTERN)[0];
      if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) {
        return Token.NESTED_BLOCK;
      }
      if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) {
        return Token.AT_RULE;
      }
      if (isAtRule) {
        return Token.AT_RULE_BLOCK;
      }
      return Token.RULE;
    }
    function tokenScopeFrom(tokenType) {
      if (tokenType == Token.RULE) {
        return Token.RULE_SCOPE;
      }
      if (tokenType == Token.NESTED_BLOCK) {
        return Token.NESTED_BLOCK_SCOPE;
      }
      if (tokenType == Token.AT_RULE_BLOCK) {
        return Token.AT_RULE_BLOCK_SCOPE;
      }
    }
    function isPageMarginBox(buffer) {
      var serializedBuffer = buffer.join("").trim();
      return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1;
    }
    function isRepeatToken(buffer) {
      return REPEAT_PATTERN.test(buffer.join("") + Marker.CLOSE_SQUARE_BRACKET);
    }
    module2.exports = tokenize;
  }
});

// node_modules/clean-css/lib/reader/read-sources.js
var require_read_sources = __commonJS({
  "node_modules/clean-css/lib/reader/read-sources.js"(exports, module2) {
    var fs2 = require("fs");
    var path = require("path");
    var applySourceMaps = require_apply_source_maps();
    var extractImportUrlAndMedia = require_extract_import_url_and_media();
    var isAllowedResource = require_is_allowed_resource();
    var loadOriginalSources = require_load_original_sources();
    var normalizePath = require_normalize_path();
    var rebase = require_rebase2();
    var rebaseLocalMap = require_rebase_local_map();
    var rebaseRemoteMap = require_rebase_remote_map();
    var restoreImport = require_restore_import();
    var tokenize = require_tokenize2();
    var Token = require_token();
    var Marker = require_marker();
    var hasProtocol = require_has_protocol();
    var isImport = require_is_import();
    var isRemoteResource = require_is_remote_resource();
    var UNKNOWN_URI = "uri:unknown";
    var FILE_RESOURCE_PROTOCOL = "file://";
    function readSources(input, context, callback) {
      return doReadSources(input, context, function(tokens) {
        return applySourceMaps(tokens, context, function() {
          return loadOriginalSources(context, function() {
            return callback(tokens);
          });
        });
      });
    }
    function doReadSources(input, context, callback) {
      if (typeof input == "string") {
        return fromString(input, context, callback);
      }
      if (Buffer.isBuffer(input)) {
        return fromString(input.toString(), context, callback);
      }
      if (Array.isArray(input)) {
        return fromArray(input, context, callback);
      }
      if (typeof input == "object") {
        return fromHash(input, context, callback);
      }
    }
    function fromString(input, context, callback) {
      context.source = void 0;
      context.sourcesContent[void 0] = input;
      context.stats.originalSize += input.length;
      return fromStyles(input, context, { inline: context.options.inline }, callback);
    }
    function fromArray(input, context, callback) {
      var inputAsImports = input.reduce(function(accumulator, uriOrHash) {
        if (typeof uriOrHash === "string") {
          return addStringSource(uriOrHash, accumulator);
        }
        return addHashSource(uriOrHash, context, accumulator);
      }, []);
      return fromStyles(inputAsImports.join(""), context, { inline: ["all"] }, callback);
    }
    function fromHash(input, context, callback) {
      var inputAsImports = addHashSource(input, context, []);
      return fromStyles(inputAsImports.join(""), context, { inline: ["all"] }, callback);
    }
    function addStringSource(input, imports) {
      imports.push(restoreAsImport(normalizeUri(input)));
      return imports;
    }
    function addHashSource(input, context, imports) {
      var uri;
      var normalizedUri;
      var source;
      for (uri in input) {
        source = input[uri];
        normalizedUri = normalizeUri(uri);
        imports.push(restoreAsImport(normalizedUri));
        context.sourcesContent[normalizedUri] = source.styles;
        if (source.sourceMap) {
          trackSourceMap(source.sourceMap, normalizedUri, context);
        }
      }
      return imports;
    }
    function normalizeUri(uri) {
      var currentPath = path.resolve("");
      var absoluteUri;
      var relativeToCurrentPath;
      var normalizedUri;
      if (isRemoteResource(uri)) {
        return uri;
      }
      absoluteUri = path.isAbsolute(uri) ? uri : path.resolve(uri);
      relativeToCurrentPath = path.relative(currentPath, absoluteUri);
      normalizedUri = normalizePath(relativeToCurrentPath);
      return normalizedUri;
    }
    function trackSourceMap(sourceMap, uri, context) {
      var parsedMap = typeof sourceMap == "string" ? JSON.parse(sourceMap) : sourceMap;
      var rebasedMap = isRemoteResource(uri) ? rebaseRemoteMap(parsedMap, uri) : rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo);
      context.inputSourceMapTracker.track(uri, rebasedMap);
    }
    function restoreAsImport(uri) {
      return restoreImport("url(" + uri + ")", "") + Marker.SEMICOLON;
    }
    function fromStyles(styles, context, parentInlinerContext, callback) {
      var tokens;
      var rebaseConfig = {};
      if (!context.source) {
        rebaseConfig.fromBase = path.resolve("");
        rebaseConfig.toBase = context.options.rebaseTo;
      } else if (isRemoteResource(context.source)) {
        rebaseConfig.fromBase = context.source;
        rebaseConfig.toBase = context.source;
      } else if (path.isAbsolute(context.source)) {
        rebaseConfig.fromBase = path.dirname(context.source);
        rebaseConfig.toBase = context.options.rebaseTo;
      } else {
        rebaseConfig.fromBase = path.dirname(path.resolve(context.source));
        rebaseConfig.toBase = context.options.rebaseTo;
      }
      tokens = tokenize(styles, context);
      tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig);
      return allowsAnyImports(parentInlinerContext.inline) ? inline(tokens, context, parentInlinerContext, callback) : callback(tokens);
    }
    function allowsAnyImports(inline2) {
      return !(inline2.length == 1 && inline2[0] == "none");
    }
    function inline(tokens, externalContext, parentInlinerContext, callback) {
      var inlinerContext = {
        afterContent: false,
        callback,
        errors: externalContext.errors,
        externalContext,
        fetch: externalContext.options.fetch,
        inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets,
        inline: parentInlinerContext.inline,
        inlineRequest: externalContext.options.inlineRequest,
        inlineTimeout: externalContext.options.inlineTimeout,
        isRemote: parentInlinerContext.isRemote || false,
        localOnly: externalContext.localOnly,
        outputTokens: [],
        rebaseTo: externalContext.options.rebaseTo,
        sourceTokens: tokens,
        warnings: externalContext.warnings
      };
      return doInlineImports(inlinerContext);
    }
    function doInlineImports(inlinerContext) {
      var token;
      var i, l;
      for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) {
        token = inlinerContext.sourceTokens[i];
        if (token[0] == Token.AT_RULE && isImport(token[1])) {
          inlinerContext.sourceTokens.splice(0, i);
          return inlineStylesheet(token, inlinerContext);
        }
        if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
          inlinerContext.outputTokens.push(token);
        } else {
          inlinerContext.outputTokens.push(token);
          inlinerContext.afterContent = true;
        }
      }
      inlinerContext.sourceTokens = [];
      return inlinerContext.callback(inlinerContext.outputTokens);
    }
    function inlineStylesheet(token, inlinerContext) {
      var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
      var uri = uriAndMediaQuery[0];
      var mediaQuery = uriAndMediaQuery[1];
      var metadata = token[2];
      return isRemoteResource(uri) ? inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) : inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext);
    }
    function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) {
      var isAllowed = isAllowedResource(uri, true, inlinerContext.inline);
      var originalUri = uri;
      var isLoaded = uri in inlinerContext.externalContext.sourcesContent;
      var isRuntimeResource = !hasProtocol(uri);
      if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) {
        inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.');
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      if (inlinerContext.localOnly && inlinerContext.afterContent) {
        inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.');
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      if (isRuntimeResource) {
        inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.');
        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      if (inlinerContext.localOnly && !isLoaded) {
        inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.');
        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      if (!isAllowed && inlinerContext.afterContent) {
        inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.');
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      if (!isAllowed) {
        inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.');
        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
        return doInlineImports(inlinerContext);
      }
      inlinerContext.inlinedStylesheets.push(uri);
      function whenLoaded(error, importedStyles) {
        if (error) {
          inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error);
          return process.nextTick(function() {
            inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
            inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
            doInlineImports(inlinerContext);
          });
        }
        inlinerContext.inline = inlinerContext.externalContext.options.inline;
        inlinerContext.isRemote = true;
        inlinerContext.externalContext.source = originalUri;
        inlinerContext.externalContext.sourcesContent[uri] = importedStyles;
        inlinerContext.externalContext.stats.originalSize += importedStyles.length;
        return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {
          importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
          inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
          inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
          return doInlineImports(inlinerContext);
        });
      }
      return isLoaded ? whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri]) : inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded);
    }
    function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) {
      var protocolLessUri = uri.replace(FILE_RESOURCE_PROTOCOL, "");
      var currentPath = path.resolve("");
      var absoluteUri = path.isAbsolute(protocolLessUri) ? path.resolve(currentPath, protocolLessUri[0] == "/" ? protocolLessUri.substring(1) : protocolLessUri) : path.resolve(inlinerContext.rebaseTo, protocolLessUri);
      var relativeToCurrentPath = path.relative(currentPath, absoluteUri);
      var importedStyles;
      var isAllowed = isAllowedResource(protocolLessUri, false, inlinerContext.inline);
      var normalizedPath = normalizePath(relativeToCurrentPath);
      var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent;
      if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) {
        inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as it has already been imported.');
      } else if (isAllowed && !isLoaded && (!fs2.existsSync(absoluteUri) || !fs2.statSync(absoluteUri).isFile())) {
        inlinerContext.errors.push('Ignoring local @import of "' + protocolLessUri + '" as resource is missing.');
      } else if (!isAllowed && inlinerContext.afterContent) {
        inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as resource is not allowed and after other content.');
      } else if (inlinerContext.afterContent) {
        inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as after other content.');
      } else if (!isAllowed) {
        inlinerContext.warnings.push('Skipping local @import of "' + protocolLessUri + '" as resource is not allowed.');
        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
      } else {
        importedStyles = isLoaded ? inlinerContext.externalContext.sourcesContent[normalizedPath] : fs2.readFileSync(absoluteUri, "utf-8");
        if (importedStyles.charCodeAt(0) === 65279) {
          importedStyles = importedStyles.substring(1);
        }
        inlinerContext.inlinedStylesheets.push(absoluteUri);
        inlinerContext.inline = inlinerContext.externalContext.options.inline;
        inlinerContext.externalContext.source = normalizedPath;
        inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles;
        inlinerContext.externalContext.stats.originalSize += importedStyles.length;
        return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {
          importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
          inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
          inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
          return doInlineImports(inlinerContext);
        });
      }
      inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
      return doInlineImports(inlinerContext);
    }
    function wrapInMedia(tokens, mediaQuery, metadata) {
      if (mediaQuery) {
        return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, "@media " + mediaQuery, metadata]], tokens]];
      }
      return tokens;
    }
    module2.exports = readSources;
  }
});

// node_modules/clean-css/lib/writer/simple.js
var require_simple = __commonJS({
  "node_modules/clean-css/lib/writer/simple.js"(exports, module2) {
    var all = require_helpers().all;
    function store(serializeContext, token) {
      var value = typeof token == "string" ? token : token[1];
      var wrap2 = serializeContext.wrap;
      wrap2(serializeContext, value);
      track(serializeContext, value);
      serializeContext.output.push(value);
    }
    function wrap(serializeContext, value) {
      if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
        track(serializeContext, serializeContext.format.breakWith);
        serializeContext.output.push(serializeContext.format.breakWith);
      }
    }
    function track(serializeContext, value) {
      var parts = value.split("\n");
      serializeContext.line += parts.length - 1;
      serializeContext.column = parts.length > 1 ? 0 : serializeContext.column + parts.pop().length;
    }
    function serializeStyles(tokens, context) {
      var serializeContext = {
        column: 0,
        format: context.options.format,
        indentBy: 0,
        indentWith: "",
        line: 1,
        output: [],
        spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
        store,
        wrap: context.options.format.wrapAt ? wrap : function() {
        }
      };
      all(serializeContext, tokens);
      return { styles: serializeContext.output.join("") };
    }
    module2.exports = serializeStyles;
  }
});

// node_modules/clean-css/lib/writer/source-maps.js
var require_source_maps = __commonJS({
  "node_modules/clean-css/lib/writer/source-maps.js"(exports, module2) {
    var SourceMapGenerator = require_source_map2().SourceMapGenerator;
    var all = require_helpers().all;
    var isRemoteResource = require_is_remote_resource();
    var isWindows = process.platform == "win32";
    var NIX_SEPARATOR_PATTERN = /\//g;
    var UNKNOWN_SOURCE = "$stdin";
    var WINDOWS_SEPARATOR = "\\";
    function store(serializeContext, element) {
      var fromString = typeof element == "string";
      var value = fromString ? element : element[1];
      var mappings = fromString ? null : element[2];
      var wrap2 = serializeContext.wrap;
      wrap2(serializeContext, value);
      track(serializeContext, value, mappings);
      serializeContext.output.push(value);
    }
    function wrap(serializeContext, value) {
      if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
        track(serializeContext, serializeContext.format.breakWith, false);
        serializeContext.output.push(serializeContext.format.breakWith);
      }
    }
    function track(serializeContext, value, mappings) {
      var parts = value.split("\n");
      if (mappings) {
        trackAllMappings(serializeContext, mappings);
      }
      serializeContext.line += parts.length - 1;
      serializeContext.column = parts.length > 1 ? 0 : serializeContext.column + parts.pop().length;
    }
    function trackAllMappings(serializeContext, mappings) {
      for (var i = 0, l = mappings.length; i < l; i++) {
        trackMapping(serializeContext, mappings[i]);
      }
    }
    function trackMapping(serializeContext, mapping) {
      var line = mapping[0];
      var column = mapping[1];
      var originalSource = mapping[2];
      var source = originalSource;
      var storedSource = source || UNKNOWN_SOURCE;
      if (isWindows && source && !isRemoteResource(source)) {
        storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR);
      }
      serializeContext.outputMap.addMapping({
        generated: {
          line: serializeContext.line,
          column: serializeContext.column
        },
        source: storedSource,
        original: {
          line,
          column
        }
      });
      if (serializeContext.inlineSources && originalSource in serializeContext.sourcesContent) {
        serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]);
      }
    }
    function serializeStylesAndSourceMap(tokens, context) {
      var serializeContext = {
        column: 0,
        format: context.options.format,
        indentBy: 0,
        indentWith: "",
        inlineSources: context.options.sourceMapInlineSources,
        line: 1,
        output: [],
        outputMap: new SourceMapGenerator(),
        sourcesContent: context.sourcesContent,
        spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
        store,
        wrap: context.options.format.wrapAt ? wrap : function() {
        }
      };
      all(serializeContext, tokens);
      return {
        sourceMap: serializeContext.outputMap,
        styles: serializeContext.output.join("")
      };
    }
    module2.exports = serializeStylesAndSourceMap;
  }
});

// node_modules/clean-css/lib/clean.js
var require_clean = __commonJS({
  "node_modules/clean-css/lib/clean.js"(exports, module2) {
    var level0Optimize = require_optimize();
    var level1Optimize = require_optimize2();
    var level2Optimize = require_optimize4();
    var validator = require_validator();
    var compatibilityFrom = require_compatibility();
    var fetchFrom = require_fetch();
    var formatFrom = require_format().formatFrom;
    var inlineFrom = require_inline();
    var inlineRequestFrom = require_inline_request();
    var inlineTimeoutFrom = require_inline_timeout();
    var OptimizationLevel = require_optimization_level().OptimizationLevel;
    var optimizationLevelFrom = require_optimization_level().optimizationLevelFrom;
    var pluginsFrom = require_plugins();
    var rebaseFrom = require_rebase();
    var rebaseToFrom = require_rebase_to();
    var inputSourceMapTracker = require_input_source_map_tracker();
    var readSources = require_read_sources();
    var serializeStyles = require_simple();
    var serializeStylesAndSourceMap = require_source_maps();
    var CleanCSS = module2.exports = function CleanCSS2(options) {
      options = options || {};
      this.options = {
        batch: !!options.batch,
        compatibility: compatibilityFrom(options.compatibility),
        explicitRebaseTo: "rebaseTo" in options,
        fetch: fetchFrom(options.fetch),
        format: formatFrom(options.format),
        inline: inlineFrom(options.inline),
        inlineRequest: inlineRequestFrom(options.inlineRequest),
        inlineTimeout: inlineTimeoutFrom(options.inlineTimeout),
        level: optimizationLevelFrom(options.level),
        plugins: pluginsFrom(options.plugins),
        rebase: rebaseFrom(options.rebase, options.rebaseTo),
        rebaseTo: rebaseToFrom(options.rebaseTo),
        returnPromise: !!options.returnPromise,
        sourceMap: !!options.sourceMap,
        sourceMapInlineSources: !!options.sourceMapInlineSources
      };
    };
    CleanCSS.process = function(input, opts) {
      var cleanCss;
      var optsTo = opts.to;
      delete opts.to;
      cleanCss = new CleanCSS(Object.assign({
        returnPromise: true,
        rebaseTo: optsTo
      }, opts));
      return cleanCss.minify(input).then(function(output) {
        return { css: output.styles };
      });
    };
    CleanCSS.prototype.minify = function(input, maybeSourceMap, maybeCallback) {
      var options = this.options;
      if (options.returnPromise) {
        return new Promise(function(resolve, reject) {
          minifyAll(input, options, maybeSourceMap, function(errors, output) {
            return errors ? reject(errors) : resolve(output);
          });
        });
      }
      return minifyAll(input, options, maybeSourceMap, maybeCallback);
    };
    function minifyAll(input, options, maybeSourceMap, maybeCallback) {
      if (options.batch && Array.isArray(input)) {
        return minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback);
      }
      if (options.batch && typeof input == "object") {
        return minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback);
      }
      return minify(input, options, maybeSourceMap, maybeCallback);
    }
    function minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback) {
      var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null;
      var errors = [];
      var outputAsHash = {};
      var inputValue;
      var i, l;
      function whenHashBatchDone(innerErrors, output) {
        outputAsHash = Object.assign(outputAsHash, output);
        if (innerErrors !== null) {
          errors = errors.concat(innerErrors);
        }
      }
      for (i = 0, l = input.length; i < l; i++) {
        if (typeof input[i] == "object") {
          minifyInBatchesFromHash(input[i], options, whenHashBatchDone);
        } else {
          inputValue = input[i];
          outputAsHash[inputValue] = minify([inputValue], options);
          errors = errors.concat(outputAsHash[inputValue].errors);
        }
      }
      return callback ? callback(errors.length > 0 ? errors : null, outputAsHash) : outputAsHash;
    }
    function minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback) {
      var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null;
      var errors = [];
      var outputAsHash = {};
      var inputKey;
      var inputValue;
      for (inputKey in input) {
        inputValue = input[inputKey];
        outputAsHash[inputKey] = minify(inputValue.styles, options, inputValue.sourceMap);
        errors = errors.concat(outputAsHash[inputKey].errors);
      }
      return callback ? callback(errors.length > 0 ? errors : null, outputAsHash) : outputAsHash;
    }
    function minify(input, options, maybeSourceMap, maybeCallback) {
      var sourceMap = typeof maybeSourceMap != "function" ? maybeSourceMap : null;
      var callback = typeof maybeCallback == "function" ? maybeCallback : typeof maybeSourceMap == "function" ? maybeSourceMap : null;
      var context = {
        stats: {
          efficiency: 0,
          minifiedSize: 0,
          originalSize: 0,
          startedAt: Date.now(),
          timeSpent: 0
        },
        cache: { specificity: {} },
        errors: [],
        inlinedStylesheets: [],
        inputSourceMapTracker: inputSourceMapTracker(),
        localOnly: !callback,
        options,
        source: null,
        sourcesContent: {},
        validator: validator(options.compatibility),
        warnings: []
      };
      var implicitRebaseToWarning;
      if (sourceMap) {
        context.inputSourceMapTracker.track(void 0, sourceMap);
      }
      if (options.rebase && !options.explicitRebaseTo) {
        implicitRebaseToWarning = "You have set `rebase: true` without giving `rebaseTo` option, which, in this case, defaults to the current working directory. You are then warned this can lead to unexpected URL rebasing (aka here be dragons)! If you are OK with the clean-css output, then you can get rid of this warning by giving clean-css a `rebaseTo: process.cwd()` option.";
        context.warnings.push(implicitRebaseToWarning);
      }
      return runner(context.localOnly)(function() {
        return readSources(input, context, function(tokens) {
          var serialize = context.options.sourceMap ? serializeStylesAndSourceMap : serializeStyles;
          var optimizedTokens = optimize(tokens, context);
          var optimizedStyles = serialize(optimizedTokens, context);
          var output = withMetadata(optimizedStyles, context);
          return callback ? callback(context.errors.length > 0 ? context.errors : null, output) : output;
        });
      });
    }
    function runner(localOnly) {
      return localOnly ? function(callback) {
        return callback();
      } : process.nextTick;
    }
    function optimize(tokens, context) {
      var optimized = level0Optimize(tokens, context);
      optimized = OptimizationLevel.One in context.options.level ? level1Optimize(tokens, context) : tokens;
      optimized = OptimizationLevel.Two in context.options.level ? level2Optimize(tokens, context, true) : optimized;
      return optimized;
    }
    function withMetadata(output, context) {
      output.stats = calculateStatsFrom(output.styles, context);
      output.errors = context.errors;
      output.inlinedStylesheets = context.inlinedStylesheets;
      output.warnings = context.warnings;
      return output;
    }
    function calculateStatsFrom(styles, context) {
      var finishedAt = Date.now();
      var timeSpent = finishedAt - context.stats.startedAt;
      delete context.stats.startedAt;
      context.stats.timeSpent = timeSpent;
      context.stats.efficiency = 1 - styles.length / context.stats.originalSize;
      context.stats.minifiedSize = styles.length;
      return context.stats;
    }
  }
});

// node_modules/clean-css/index.js
var require_clean_css = __commonJS({
  "node_modules/clean-css/index.js"(exports, module2) {
    module2.exports = require_clean();
  }
});

// node_modules/entities/lib/generated/decode-data-html.js
var require_decode_data_html = __commonJS({
  "node_modules/entities/lib/generated/decode-data-html.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.default = new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(c) {
      return c.charCodeAt(0);
    }));
  }
});

// node_modules/entities/lib/generated/decode-data-xml.js
var require_decode_data_xml = __commonJS({
  "node_modules/entities/lib/generated/decode-data-xml.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.default = new Uint16Array("\u0200aglq	\x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(c) {
      return c.charCodeAt(0);
    }));
  }
});

// node_modules/entities/lib/decode_codepoint.js
var require_decode_codepoint = __commonJS({
  "node_modules/entities/lib/decode_codepoint.js"(exports) {
    "use strict";
    var _a3;
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.replaceCodePoint = exports.fromCodePoint = void 0;
    var decodeMap = /* @__PURE__ */ new Map([
      [0, 65533],
      [128, 8364],
      [130, 8218],
      [131, 402],
      [132, 8222],
      [133, 8230],
      [134, 8224],
      [135, 8225],
      [136, 710],
      [137, 8240],
      [138, 352],
      [139, 8249],
      [140, 338],
      [142, 381],
      [145, 8216],
      [146, 8217],
      [147, 8220],
      [148, 8221],
      [149, 8226],
      [150, 8211],
      [151, 8212],
      [152, 732],
      [153, 8482],
      [154, 353],
      [155, 8250],
      [156, 339],
      [158, 382],
      [159, 376]
    ]);
    exports.fromCodePoint = (_a3 = String.fromCodePoint) !== null && _a3 !== void 0 ? _a3 : function(codePoint) {
      var output = "";
      if (codePoint > 65535) {
        codePoint -= 65536;
        output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
        codePoint = 56320 | codePoint & 1023;
      }
      output += String.fromCharCode(codePoint);
      return output;
    };
    function replaceCodePoint(codePoint) {
      var _a4;
      if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
        return 65533;
      }
      return (_a4 = decodeMap.get(codePoint)) !== null && _a4 !== void 0 ? _a4 : codePoint;
    }
    exports.replaceCodePoint = replaceCodePoint;
    function decodeCodePoint(codePoint) {
      return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
    }
    exports.default = decodeCodePoint;
  }
});

// node_modules/entities/lib/decode.js
var require_decode = __commonJS({
  "node_modules/entities/lib/decode.js"(exports) {
    "use strict";
    var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
      if (k2 === void 0)
        k2 = k;
      var desc = Object.getOwnPropertyDescriptor(m, k);
      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
        desc = { enumerable: true, get: function() {
          return m[k];
        } };
      }
      Object.defineProperty(o, k2, desc);
    } : function(o, m, k, k2) {
      if (k2 === void 0)
        k2 = k;
      o[k2] = m[k];
    });
    var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
      Object.defineProperty(o, "default", { enumerable: true, value: v });
    } : function(o, v) {
      o["default"] = v;
    });
    var __importStar = exports && exports.__importStar || function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k in mod)
          if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
            __createBinding(result, mod, k);
      }
      __setModuleDefault(result, mod);
      return result;
    };
    var __importDefault = exports && exports.__importDefault || function(mod) {
      return mod && mod.__esModule ? mod : { "default": mod };
    };
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
    var decode_data_html_js_1 = __importDefault(require_decode_data_html());
    exports.htmlDecodeTree = decode_data_html_js_1.default;
    var decode_data_xml_js_1 = __importDefault(require_decode_data_xml());
    exports.xmlDecodeTree = decode_data_xml_js_1.default;
    var decode_codepoint_js_1 = __importStar(require_decode_codepoint());
    exports.decodeCodePoint = decode_codepoint_js_1.default;
    var decode_codepoint_js_2 = require_decode_codepoint();
    Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function() {
      return decode_codepoint_js_2.replaceCodePoint;
    } });
    Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function() {
      return decode_codepoint_js_2.fromCodePoint;
    } });
    var CharCodes;
    (function(CharCodes2) {
      CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
      CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
      CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
      CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
      CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
      CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
      CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
      CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
      CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
      CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
      CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
      CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
    })(CharCodes || (CharCodes = {}));
    var TO_LOWER_BIT = 32;
    var BinTrieFlags;
    (function(BinTrieFlags2) {
      BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
      BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
      BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
    })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
    function isNumber(code) {
      return code >= CharCodes.ZERO && code <= CharCodes.NINE;
    }
    function isHexadecimalCharacter(code) {
      return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
    }
    function isAsciiAlphaNumeric(code) {
      return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
    }
    function isEntityInAttributeInvalidEnd(code) {
      return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
    }
    var EntityDecoderState;
    (function(EntityDecoderState2) {
      EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
      EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
      EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
      EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
      EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
    })(EntityDecoderState || (EntityDecoderState = {}));
    var DecodingMode;
    (function(DecodingMode2) {
      DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
      DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
      DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
    })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
    var EntityDecoder = function() {
      function EntityDecoder2(decodeTree, emitCodePoint, errors) {
        this.decodeTree = decodeTree;
        this.emitCodePoint = emitCodePoint;
        this.errors = errors;
        this.state = EntityDecoderState.EntityStart;
        this.consumed = 1;
        this.result = 0;
        this.treeIndex = 0;
        this.excess = 1;
        this.decodeMode = DecodingMode.Strict;
      }
      EntityDecoder2.prototype.startEntity = function(decodeMode) {
        this.decodeMode = decodeMode;
        this.state = EntityDecoderState.EntityStart;
        this.result = 0;
        this.treeIndex = 0;
        this.excess = 1;
        this.consumed = 1;
      };
      EntityDecoder2.prototype.write = function(str, offset) {
        switch (this.state) {
          case EntityDecoderState.EntityStart: {
            if (str.charCodeAt(offset) === CharCodes.NUM) {
              this.state = EntityDecoderState.NumericStart;
              this.consumed += 1;
              return this.stateNumericStart(str, offset + 1);
            }
            this.state = EntityDecoderState.NamedEntity;
            return this.stateNamedEntity(str, offset);
          }
          case EntityDecoderState.NumericStart: {
            return this.stateNumericStart(str, offset);
          }
          case EntityDecoderState.NumericDecimal: {
            return this.stateNumericDecimal(str, offset);
          }
          case EntityDecoderState.NumericHex: {
            return this.stateNumericHex(str, offset);
          }
          case EntityDecoderState.NamedEntity: {
            return this.stateNamedEntity(str, offset);
          }
        }
      };
      EntityDecoder2.prototype.stateNumericStart = function(str, offset) {
        if (offset >= str.length) {
          return -1;
        }
        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
          this.state = EntityDecoderState.NumericHex;
          this.consumed += 1;
          return this.stateNumericHex(str, offset + 1);
        }
        this.state = EntityDecoderState.NumericDecimal;
        return this.stateNumericDecimal(str, offset);
      };
      EntityDecoder2.prototype.addToNumericResult = function(str, start, end, base) {
        if (start !== end) {
          var digitCount = end - start;
          this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
          this.consumed += digitCount;
        }
      };
      EntityDecoder2.prototype.stateNumericHex = function(str, offset) {
        var startIdx = offset;
        while (offset < str.length) {
          var char = str.charCodeAt(offset);
          if (isNumber(char) || isHexadecimalCharacter(char)) {
            offset += 1;
          } else {
            this.addToNumericResult(str, startIdx, offset, 16);
            return this.emitNumericEntity(char, 3);
          }
        }
        this.addToNumericResult(str, startIdx, offset, 16);
        return -1;
      };
      EntityDecoder2.prototype.stateNumericDecimal = function(str, offset) {
        var startIdx = offset;
        while (offset < str.length) {
          var char = str.charCodeAt(offset);
          if (isNumber(char)) {
            offset += 1;
          } else {
            this.addToNumericResult(str, startIdx, offset, 10);
            return this.emitNumericEntity(char, 2);
          }
        }
        this.addToNumericResult(str, startIdx, offset, 10);
        return -1;
      };
      EntityDecoder2.prototype.emitNumericEntity = function(lastCp, expectedLength) {
        var _a3;
        if (this.consumed <= expectedLength) {
          (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
          return 0;
        }
        if (lastCp === CharCodes.SEMI) {
          this.consumed += 1;
        } else if (this.decodeMode === DecodingMode.Strict) {
          return 0;
        }
        this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
        if (this.errors) {
          if (lastCp !== CharCodes.SEMI) {
            this.errors.missingSemicolonAfterCharacterReference();
          }
          this.errors.validateNumericCharacterReference(this.result);
        }
        return this.consumed;
      };
      EntityDecoder2.prototype.stateNamedEntity = function(str, offset) {
        var decodeTree = this.decodeTree;
        var current = decodeTree[this.treeIndex];
        var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
        for (; offset < str.length; offset++, this.excess++) {
          var char = str.charCodeAt(offset);
          this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
          if (this.treeIndex < 0) {
            return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
          }
          current = decodeTree[this.treeIndex];
          valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
          if (valueLength !== 0) {
            if (char === CharCodes.SEMI) {
              return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
            }
            if (this.decodeMode !== DecodingMode.Strict) {
              this.result = this.treeIndex;
              this.consumed += this.excess;
              this.excess = 0;
            }
          }
        }
        return -1;
      };
      EntityDecoder2.prototype.emitNotTerminatedNamedEntity = function() {
        var _a3;
        var _b3 = this, result = _b3.result, decodeTree = _b3.decodeTree;
        var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
        this.emitNamedEntityData(result, valueLength, this.consumed);
        (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
        return this.consumed;
      };
      EntityDecoder2.prototype.emitNamedEntityData = function(result, valueLength, consumed) {
        var decodeTree = this.decodeTree;
        this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
        if (valueLength === 3) {
          this.emitCodePoint(decodeTree[result + 2], consumed);
        }
        return consumed;
      };
      EntityDecoder2.prototype.end = function() {
        var _a3;
        switch (this.state) {
          case EntityDecoderState.NamedEntity: {
            return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
          }
          case EntityDecoderState.NumericDecimal: {
            return this.emitNumericEntity(0, 2);
          }
          case EntityDecoderState.NumericHex: {
            return this.emitNumericEntity(0, 3);
          }
          case EntityDecoderState.NumericStart: {
            (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
            return 0;
          }
          case EntityDecoderState.EntityStart: {
            return 0;
          }
        }
      };
      return EntityDecoder2;
    }();
    exports.EntityDecoder = EntityDecoder;
    function getDecoder(decodeTree) {
      var ret = "";
      var decoder = new EntityDecoder(decodeTree, function(str) {
        return ret += (0, decode_codepoint_js_1.fromCodePoint)(str);
      });
      return function decodeWithTrie(str, decodeMode) {
        var lastIndex = 0;
        var offset = 0;
        while ((offset = str.indexOf("&", offset)) >= 0) {
          ret += str.slice(lastIndex, offset);
          decoder.startEntity(decodeMode);
          var len = decoder.write(str, offset + 1);
          if (len < 0) {
            lastIndex = offset + decoder.end();
            break;
          }
          lastIndex = offset + len;
          offset = len === 0 ? lastIndex + 1 : lastIndex;
        }
        var result = ret + str.slice(lastIndex);
        ret = "";
        return result;
      };
    }
    function determineBranch(decodeTree, current, nodeIdx, char) {
      var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
      var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
      if (branchCount === 0) {
        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
      }
      if (jumpOffset) {
        var value = char - jumpOffset;
        return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
      }
      var lo = nodeIdx;
      var hi = lo + branchCount - 1;
      while (lo <= hi) {
        var mid = lo + hi >>> 1;
        var midVal = decodeTree[mid];
        if (midVal < char) {
          lo = mid + 1;
        } else if (midVal > char) {
          hi = mid - 1;
        } else {
          return decodeTree[mid + branchCount];
        }
      }
      return -1;
    }
    exports.determineBranch = determineBranch;
    var htmlDecoder = getDecoder(decode_data_html_js_1.default);
    var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
    function decodeHTML(str, mode) {
      if (mode === void 0) {
        mode = DecodingMode.Legacy;
      }
      return htmlDecoder(str, mode);
    }
    exports.decodeHTML = decodeHTML;
    function decodeHTMLAttribute(str) {
      return htmlDecoder(str, DecodingMode.Attribute);
    }
    exports.decodeHTMLAttribute = decodeHTMLAttribute;
    function decodeHTMLStrict(str) {
      return htmlDecoder(str, DecodingMode.Strict);
    }
    exports.decodeHTMLStrict = decodeHTMLStrict;
    function decodeXML(str) {
      return xmlDecoder(str, DecodingMode.Strict);
    }
    exports.decodeXML = decodeXML;
  }
});

// node_modules/entities/lib/generated/encode-html.js
var require_encode_html = __commonJS({
  "node_modules/entities/lib/generated/encode-html.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function restoreDiff(arr) {
      for (var i = 1; i < arr.length; i++) {
        arr[i][0] += arr[i - 1][0] + 1;
      }
      return arr;
    }
    exports.default = new Map(/* @__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
  }
});

// node_modules/entities/lib/escape.js
var require_escape = __commonJS({
  "node_modules/entities/lib/escape.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0;
    exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
    var xmlCodeMap = /* @__PURE__ */ new Map([
      [34, "&quot;"],
      [38, "&amp;"],
      [39, "&apos;"],
      [60, "&lt;"],
      [62, "&gt;"]
    ]);
    exports.getCodePoint = String.prototype.codePointAt != null ? function(str, index) {
      return str.codePointAt(index);
    } : function(c, index) {
      return (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index);
    };
    function encodeXML(str) {
      var ret = "";
      var lastIdx = 0;
      var match;
      while ((match = exports.xmlReplacer.exec(str)) !== null) {
        var i = match.index;
        var char = str.charCodeAt(i);
        var next = xmlCodeMap.get(char);
        if (next !== void 0) {
          ret += str.substring(lastIdx, i) + next;
          lastIdx = i + 1;
        } else {
          ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";");
          lastIdx = exports.xmlReplacer.lastIndex += Number((char & 64512) === 55296);
        }
      }
      return ret + str.substr(lastIdx);
    }
    exports.encodeXML = encodeXML;
    exports.escape = encodeXML;
    function getEscaper(regex, map) {
      return function escape2(data) {
        var match;
        var lastIdx = 0;
        var result = "";
        while (match = regex.exec(data)) {
          if (lastIdx !== match.index) {
            result += data.substring(lastIdx, match.index);
          }
          result += map.get(match[0].charCodeAt(0));
          lastIdx = match.index + 1;
        }
        return result + data.substring(lastIdx);
      };
    }
    exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
    exports.escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
      [34, "&quot;"],
      [38, "&amp;"],
      [160, "&nbsp;"]
    ]));
    exports.escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
      [38, "&amp;"],
      [60, "&lt;"],
      [62, "&gt;"],
      [160, "&nbsp;"]
    ]));
  }
});

// node_modules/entities/lib/encode.js
var require_encode = __commonJS({
  "node_modules/entities/lib/encode.js"(exports) {
    "use strict";
    var __importDefault = exports && exports.__importDefault || function(mod) {
      return mod && mod.__esModule ? mod : { "default": mod };
    };
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.encodeNonAsciiHTML = exports.encodeHTML = void 0;
    var encode_html_js_1 = __importDefault(require_encode_html());
    var escape_js_1 = require_escape();
    var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
    function encodeHTML(data) {
      return encodeHTMLTrieRe(htmlReplacer, data);
    }
    exports.encodeHTML = encodeHTML;
    function encodeNonAsciiHTML(data) {
      return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data);
    }
    exports.encodeNonAsciiHTML = encodeNonAsciiHTML;
    function encodeHTMLTrieRe(regExp, str) {
      var ret = "";
      var lastIdx = 0;
      var match;
      while ((match = regExp.exec(str)) !== null) {
        var i = match.index;
        ret += str.substring(lastIdx, i);
        var char = str.charCodeAt(i);
        var next = encode_html_js_1.default.get(char);
        if (typeof next === "object") {
          if (i + 1 < str.length) {
            var nextChar = str.charCodeAt(i + 1);
            var value = typeof next.n === "number" ? next.n === nextChar ? next.o : void 0 : next.n.get(nextChar);
            if (value !== void 0) {
              ret += value;
              lastIdx = regExp.lastIndex += 1;
              continue;
            }
          }
          next = next.v;
        }
        if (next !== void 0) {
          ret += next;
          lastIdx = i + 1;
        } else {
          var cp = (0, escape_js_1.getCodePoint)(str, i);
          ret += "&#x".concat(cp.toString(16), ";");
          lastIdx = regExp.lastIndex += Number(cp !== char);
        }
      }
      return ret + str.substr(lastIdx);
    }
  }
});

// node_modules/entities/lib/index.js
var require_lib2 = __commonJS({
  "node_modules/entities/lib/index.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0;
    var decode_js_1 = require_decode();
    var encode_js_1 = require_encode();
    var escape_js_1 = require_escape();
    var EntityLevel;
    (function(EntityLevel2) {
      EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
      EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
    })(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {}));
    var EncodingMode;
    (function(EncodingMode2) {
      EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
      EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
      EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
      EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
      EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
    })(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {}));
    function decode(data, options) {
      if (options === void 0) {
        options = EntityLevel.XML;
      }
      var level = typeof options === "number" ? options : options.level;
      if (level === EntityLevel.HTML) {
        var mode = typeof options === "object" ? options.mode : void 0;
        return (0, decode_js_1.decodeHTML)(data, mode);
      }
      return (0, decode_js_1.decodeXML)(data);
    }
    exports.decode = decode;
    function decodeStrict(data, options) {
      var _a3;
      if (options === void 0) {
        options = EntityLevel.XML;
      }
      var opts = typeof options === "number" ? { level: options } : options;
      (_a3 = opts.mode) !== null && _a3 !== void 0 ? _a3 : opts.mode = decode_js_1.DecodingMode.Strict;
      return decode(data, opts);
    }
    exports.decodeStrict = decodeStrict;
    function encode(data, options) {
      if (options === void 0) {
        options = EntityLevel.XML;
      }
      var opts = typeof options === "number" ? { level: options } : options;
      if (opts.mode === EncodingMode.UTF8)
        return (0, escape_js_1.escapeUTF8)(data);
      if (opts.mode === EncodingMode.Attribute)
        return (0, escape_js_1.escapeAttribute)(data);
      if (opts.mode === EncodingMode.Text)
        return (0, escape_js_1.escapeText)(data);
      if (opts.level === EntityLevel.HTML) {
        if (opts.mode === EncodingMode.ASCII) {
          return (0, encode_js_1.encodeNonAsciiHTML)(data);
        }
        return (0, encode_js_1.encodeHTML)(data);
      }
      return (0, escape_js_1.encodeXML)(data);
    }
    exports.encode = encode;
    var escape_js_2 = require_escape();
    Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function() {
      return escape_js_2.encodeXML;
    } });
    Object.defineProperty(exports, "escape", { enumerable: true, get: function() {
      return escape_js_2.escape;
    } });
    Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function() {
      return escape_js_2.escapeUTF8;
    } });
    Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function() {
      return escape_js_2.escapeAttribute;
    } });
    Object.defineProperty(exports, "escapeText", { enumerable: true, get: function() {
      return escape_js_2.escapeText;
    } });
    var encode_js_2 = require_encode();
    Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function() {
      return encode_js_2.encodeHTML;
    } });
    Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function() {
      return encode_js_2.encodeNonAsciiHTML;
    } });
    Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function() {
      return encode_js_2.encodeHTML;
    } });
    Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function() {
      return encode_js_2.encodeHTML;
    } });
    var decode_js_2 = require_decode();
    Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function() {
      return decode_js_2.EntityDecoder;
    } });
    Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function() {
      return decode_js_2.DecodingMode;
    } });
    Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function() {
      return decode_js_2.decodeXML;
    } });
    Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function() {
      return decode_js_2.decodeHTML;
    } });
    Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function() {
      return decode_js_2.decodeHTMLStrict;
    } });
    Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function() {
      return decode_js_2.decodeHTMLAttribute;
    } });
    Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function() {
      return decode_js_2.decodeHTML;
    } });
    Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function() {
      return decode_js_2.decodeHTML;
    } });
    Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function() {
      return decode_js_2.decodeHTMLStrict;
    } });
    Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function() {
      return decode_js_2.decodeHTMLStrict;
    } });
    Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function() {
      return decode_js_2.decodeXML;
    } });
  }
});

// node_modules/relateurl/lib/constants.js
var require_constants = __commonJS({
  "node_modules/relateurl/lib/constants.js"(exports, module2) {
    "use strict";
    module2.exports = {
      ABSOLUTE: "absolute",
      PATH_RELATIVE: "pathRelative",
      ROOT_RELATIVE: "rootRelative",
      SHORTEST: "shortest"
    };
  }
});

// node_modules/relateurl/lib/format.js
var require_format2 = __commonJS({
  "node_modules/relateurl/lib/format.js"(exports, module2) {
    "use strict";
    var constants = require_constants();
    function formatAuth(urlObj, options) {
      if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE)) {
        return urlObj.auth + "@";
      }
      return "";
    }
    function formatHash(urlObj, options) {
      return urlObj.hash ? urlObj.hash : "";
    }
    function formatHost(urlObj, options) {
      if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output === constants.ABSOLUTE)) {
        return urlObj.host.full;
      }
      return "";
    }
    function formatPath(urlObj, options) {
      var str = "";
      var absolutePath = urlObj.path.absolute.string;
      var relativePath = urlObj.path.relative.string;
      var resource = showResource(urlObj, options);
      if (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE || options.output === constants.ROOT_RELATIVE) {
        str = absolutePath;
      } else if (relativePath.length <= absolutePath.length && options.output === constants.SHORTEST || options.output === constants.PATH_RELATIVE) {
        str = relativePath;
        if (str === "") {
          var query = showQuery(urlObj, options) && !!getQuery(urlObj, options);
          if (urlObj.extra.relation.maximumPath && !resource) {
            str = "./";
          } else if (urlObj.extra.relation.overridesQuery && !resource && !query) {
            str = "./";
          }
        }
      } else {
        str = absolutePath;
      }
      if (str === "/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output === constants.ABSOLUTE)) {
        str = "";
      }
      return str;
    }
    function formatPort(urlObj, options) {
      if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost) {
        return ":" + urlObj.port;
      }
      return "";
    }
    function formatQuery(urlObj, options) {
      return showQuery(urlObj, options) ? getQuery(urlObj, options) : "";
    }
    function formatResource(urlObj, options) {
      return showResource(urlObj, options) ? urlObj.resource : "";
    }
    function formatScheme(urlObj, options) {
      var str = "";
      if (urlObj.extra.relation.maximumHost || options.output === constants.ABSOLUTE) {
        if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output === constants.ABSOLUTE) {
          str += urlObj.scheme + "://";
        } else {
          str += "//";
        }
      }
      return str;
    }
    function formatUrl(urlObj, options) {
      var url = "";
      url += formatScheme(urlObj, options);
      url += formatAuth(urlObj, options);
      url += formatHost(urlObj, options);
      url += formatPort(urlObj, options);
      url += formatPath(urlObj, options);
      url += formatResource(urlObj, options);
      url += formatQuery(urlObj, options);
      url += formatHash(urlObj, options);
      return url;
    }
    function getQuery(urlObj, options) {
      var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
      return urlObj.query.string[stripQuery ? "stripped" : "full"];
    }
    function showQuery(urlObj, options) {
      return !urlObj.extra.relation.minimumQuery || options.output === constants.ABSOLUTE || options.output === constants.ROOT_RELATIVE;
    }
    function showResource(urlObj, options) {
      var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex;
      var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output !== constants.ABSOLUTE && options.output !== constants.ROOT_RELATIVE;
      return !!urlObj.resource && !removeMatchingResource && !removeIndex;
    }
    module2.exports = formatUrl;
  }
});

// node_modules/relateurl/lib/util/object.js
var require_object = __commonJS({
  "node_modules/relateurl/lib/util/object.js"(exports, module2) {
    "use strict";
    function clone(obj) {
      if (obj instanceof Object) {
        var clonedObj = obj instanceof Array ? [] : {};
        for (var i in obj) {
          if (obj.hasOwnProperty(i)) {
            clonedObj[i] = clone(obj[i]);
          }
        }
        return clonedObj;
      }
      return obj;
    }
    function isPlainObject(obj) {
      return !!obj && typeof obj === "object" && obj.constructor === Object;
    }
    function shallowMerge(target, source) {
      if (target instanceof Object && source instanceof Object) {
        for (var i in source) {
          if (source.hasOwnProperty(i)) {
            target[i] = source[i];
          }
        }
      }
      return target;
    }
    module2.exports = {
      clone,
      isPlainObject,
      shallowMerge
    };
  }
});

// node_modules/relateurl/lib/options.js
var require_options = __commonJS({
  "node_modules/relateurl/lib/options.js"(exports, module2) {
    "use strict";
    var objUtils = require_object();
    function getOptions(options, defaults) {
      if (objUtils.isPlainObject(options)) {
        var newOptions = {};
        for (var i in defaults) {
          if (defaults.hasOwnProperty(i)) {
            if (options[i] !== void 0) {
              newOptions[i] = mergeOption(options[i], defaults[i]);
            } else {
              newOptions[i] = defaults[i];
            }
          }
        }
        return newOptions;
      } else {
        return defaults;
      }
    }
    function mergeOption(newValues, defaultValues) {
      if (defaultValues instanceof Object && newValues instanceof Object) {
        if (defaultValues instanceof Array && newValues instanceof Array) {
          return defaultValues.concat(newValues);
        } else {
          return objUtils.shallowMerge(newValues, defaultValues);
        }
      }
      return newValues;
    }
    module2.exports = getOptions;
  }
});

// node_modules/relateurl/lib/parse/hrefInfo.js
var require_hrefInfo = __commonJS({
  "node_modules/relateurl/lib/parse/hrefInfo.js"(exports, module2) {
    "use strict";
    function hrefInfo(urlObj) {
      var minimumPathOnly = !urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port;
      var minimumResourceOnly = minimumPathOnly && !urlObj.path.absolute.string;
      var minimumQueryOnly = minimumResourceOnly && !urlObj.resource;
      var minimumHashOnly = minimumQueryOnly && !urlObj.query.string.full.length;
      var empty = minimumHashOnly && !urlObj.hash;
      urlObj.extra.hrefInfo.minimumPathOnly = minimumPathOnly;
      urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly;
      urlObj.extra.hrefInfo.minimumQueryOnly = minimumQueryOnly;
      urlObj.extra.hrefInfo.minimumHashOnly = minimumHashOnly;
      urlObj.extra.hrefInfo.empty = empty;
    }
    module2.exports = hrefInfo;
  }
});

// node_modules/relateurl/lib/parse/host.js
var require_host = __commonJS({
  "node_modules/relateurl/lib/parse/host.js"(exports, module2) {
    "use strict";
    function parseHost(urlObj, options) {
      if (options.ignore_www) {
        var host = urlObj.host.full;
        if (host) {
          var stripped = host;
          if (host.indexOf("www.") === 0) {
            stripped = host.substr(4);
          }
          urlObj.host.stripped = stripped;
        }
      }
    }
    module2.exports = parseHost;
  }
});

// node_modules/relateurl/lib/parse/path.js
var require_path = __commonJS({
  "node_modules/relateurl/lib/parse/path.js"(exports, module2) {
    "use strict";
    function isDirectoryIndex(resource, options) {
      var verdict = false;
      options.directoryIndexes.every(function(index) {
        if (index === resource) {
          verdict = true;
          return false;
        }
        return true;
      });
      return verdict;
    }
    function parsePath(urlObj, options) {
      var path = urlObj.path.absolute.string;
      if (path) {
        var lastSlash = path.lastIndexOf("/");
        if (lastSlash > -1) {
          if (++lastSlash < path.length) {
            var resource = path.substr(lastSlash);
            if (resource !== "." && resource !== "..") {
              urlObj.resource = resource;
              path = path.substr(0, lastSlash);
            } else {
              path += "/";
            }
          }
          urlObj.path.absolute.string = path;
          urlObj.path.absolute.array = splitPath(path);
        } else if (path === "." || path === "..") {
          path += "/";
          urlObj.path.absolute.string = path;
          urlObj.path.absolute.array = splitPath(path);
        } else {
          urlObj.resource = path;
          urlObj.path.absolute.string = null;
        }
        urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options);
      }
    }
    function splitPath(path) {
      if (path !== "/") {
        var cleaned = [];
        path.split("/").forEach(function(dir) {
          if (dir !== "") {
            cleaned.push(dir);
          }
        });
        return cleaned;
      } else {
        return [];
      }
    }
    module2.exports = parsePath;
  }
});

// node_modules/relateurl/lib/parse/port.js
var require_port = __commonJS({
  "node_modules/relateurl/lib/parse/port.js"(exports, module2) {
    "use strict";
    function parsePort(urlObj, options) {
      var defaultPort = -1;
      for (var i in options.defaultPorts) {
        if (i === urlObj.scheme && options.defaultPorts.hasOwnProperty(i)) {
          defaultPort = options.defaultPorts[i];
          break;
        }
      }
      if (defaultPort > -1) {
        defaultPort = defaultPort.toString();
        if (urlObj.port === null) {
          urlObj.port = defaultPort;
        }
        urlObj.extra.portIsDefault = urlObj.port === defaultPort;
      }
    }
    module2.exports = parsePort;
  }
});

// node_modules/relateurl/lib/parse/query.js
var require_query = __commonJS({
  "node_modules/relateurl/lib/parse/query.js"(exports, module2) {
    "use strict";
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    function parseQuery(urlObj, options) {
      urlObj.query.string.full = stringify2(urlObj.query.object, false);
      if (options.removeEmptyQueries) {
        urlObj.query.string.stripped = stringify2(urlObj.query.object, true);
      }
    }
    function stringify2(queryObj, removeEmptyQueries) {
      var count = 0;
      var str = "";
      for (var i in queryObj) {
        if (i !== "" && hasOwnProperty.call(queryObj, i) === true) {
          var value = queryObj[i];
          if (value !== "" || !removeEmptyQueries) {
            str += ++count === 1 ? "?" : "&";
            i = encodeURIComponent(i);
            if (value !== "") {
              str += i + "=" + encodeURIComponent(value).replace(/%20/g, "+");
            } else {
              str += i;
            }
          }
        }
      }
      return str;
    }
    module2.exports = parseQuery;
  }
});

// node_modules/relateurl/lib/parse/urlstring.js
var require_urlstring = __commonJS({
  "node_modules/relateurl/lib/parse/urlstring.js"(exports, module2) {
    "use strict";
    var _parseUrl = require("url").parse;
    function clean(urlObj) {
      var scheme = urlObj.protocol;
      if (scheme) {
        if (scheme.indexOf(":") === scheme.length - 1) {
          scheme = scheme.substr(0, scheme.length - 1);
        }
      }
      urlObj.host = {
        full: urlObj.hostname,
        stripped: null
      };
      urlObj.path = {
        absolute: {
          array: null,
          string: urlObj.pathname
        },
        relative: {
          array: null,
          string: null
        }
      };
      urlObj.query = {
        object: urlObj.query,
        string: {
          full: null,
          stripped: null
        }
      };
      urlObj.extra = {
        hrefInfo: {
          minimumPathOnly: null,
          minimumResourceOnly: null,
          minimumQueryOnly: null,
          minimumHashOnly: null,
          empty: null,
          separatorOnlyQuery: urlObj.search === "?"
        },
        portIsDefault: null,
        relation: {
          maximumScheme: null,
          maximumAuth: null,
          maximumHost: null,
          maximumPort: null,
          maximumPath: null,
          maximumResource: null,
          maximumQuery: null,
          maximumHash: null,
          minimumScheme: null,
          minimumAuth: null,
          minimumHost: null,
          minimumPort: null,
          minimumPath: null,
          minimumResource: null,
          minimumQuery: null,
          minimumHash: null,
          overridesQuery: null
        },
        resourceIsIndex: null,
        slashes: urlObj.slashes
      };
      urlObj.resource = null;
      urlObj.scheme = scheme;
      delete urlObj.hostname;
      delete urlObj.pathname;
      delete urlObj.protocol;
      delete urlObj.search;
      delete urlObj.slashes;
      return urlObj;
    }
    function validScheme(url, options) {
      var valid = true;
      options.rejectedSchemes.every(function(rejectedScheme) {
        valid = !(url.indexOf(rejectedScheme + ":") === 0);
        return valid;
      });
      return valid;
    }
    function parseUrlString(url, options) {
      if (validScheme(url, options)) {
        return clean(_parseUrl(url, true, options.slashesDenoteHost));
      } else {
        return { href: url, valid: false };
      }
    }
    module2.exports = parseUrlString;
  }
});

// node_modules/relateurl/lib/util/path.js
var require_path2 = __commonJS({
  "node_modules/relateurl/lib/util/path.js"(exports, module2) {
    "use strict";
    function joinPath(pathArray) {
      if (pathArray.length > 0) {
        return pathArray.join("/") + "/";
      } else {
        return "";
      }
    }
    function resolveDotSegments(pathArray) {
      var pathAbsolute = [];
      pathArray.forEach(function(dir) {
        if (dir !== "..") {
          if (dir !== ".") {
            pathAbsolute.push(dir);
          }
        } else {
          if (pathAbsolute.length > 0) {
            pathAbsolute.splice(pathAbsolute.length - 1, 1);
          }
        }
      });
      return pathAbsolute;
    }
    module2.exports = {
      join: joinPath,
      resolveDotSegments
    };
  }
});

// node_modules/relateurl/lib/parse/index.js
var require_parse2 = __commonJS({
  "node_modules/relateurl/lib/parse/index.js"(exports, module2) {
    "use strict";
    var hrefInfo = require_hrefInfo();
    var parseHost = require_host();
    var parsePath = require_path();
    var parsePort = require_port();
    var parseQuery = require_query();
    var parseUrlString = require_urlstring();
    var pathUtils = require_path2();
    function parseFromUrl(url, options, fallback) {
      if (url) {
        var urlObj = parseUrl(url, options);
        var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
        urlObj.path.absolute.array = pathArray;
        urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
        return urlObj;
      } else {
        return fallback;
      }
    }
    function parseUrl(url, options) {
      var urlObj = parseUrlString(url, options);
      if (urlObj.valid === false)
        return urlObj;
      parseHost(urlObj, options);
      parsePort(urlObj, options);
      parsePath(urlObj, options);
      parseQuery(urlObj, options);
      hrefInfo(urlObj);
      return urlObj;
    }
    module2.exports = {
      from: parseFromUrl,
      to: parseUrl
    };
  }
});

// node_modules/relateurl/lib/relate/findRelation.js
var require_findRelation = __commonJS({
  "node_modules/relateurl/lib/relate/findRelation.js"(exports, module2) {
    "use strict";
    function findRelation_upToPath(urlObj, siteUrlObj, options) {
      var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;
      var minimumScheme = urlObj.scheme === siteUrlObj.scheme || !urlObj.scheme;
      var minimumAuth = minimumScheme && (urlObj.auth === siteUrlObj.auth || options.removeAuth || pathOnly);
      var www = options.ignore_www ? "stripped" : "full";
      var minimumHost = minimumAuth && (urlObj.host[www] === siteUrlObj.host[www] || pathOnly);
      var minimumPort = minimumHost && (urlObj.port === siteUrlObj.port || pathOnly);
      urlObj.extra.relation.minimumScheme = minimumScheme;
      urlObj.extra.relation.minimumAuth = minimumAuth;
      urlObj.extra.relation.minimumHost = minimumHost;
      urlObj.extra.relation.minimumPort = minimumPort;
      urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth;
      urlObj.extra.relation.maximumAuth = !minimumScheme || minimumScheme && !minimumHost;
      urlObj.extra.relation.maximumHost = !minimumScheme || minimumScheme && !minimumPort;
    }
    function findRelation_pathOn(urlObj, siteUrlObj, options) {
      var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;
      var hashOnly = urlObj.extra.hrefInfo.minimumHashOnly;
      var empty = urlObj.extra.hrefInfo.empty;
      var minimumPort = urlObj.extra.relation.minimumPort;
      var minimumScheme = urlObj.extra.relation.minimumScheme;
      var minimumPath = minimumPort && urlObj.path.absolute.string === siteUrlObj.path.absolute.string;
      var matchingResource = urlObj.resource === siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex || options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource;
      var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty);
      var query = options.removeEmptyQueries ? "stripped" : "full";
      var urlQuery = urlObj.query.string[query];
      var siteUrlQuery = siteUrlObj.query.string[query];
      var minimumQuery = minimumResource && !!urlQuery && urlQuery === siteUrlQuery || (hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery;
      var minimumHash = minimumQuery && urlObj.hash === siteUrlObj.hash;
      urlObj.extra.relation.minimumPath = minimumPath;
      urlObj.extra.relation.minimumResource = minimumResource;
      urlObj.extra.relation.minimumQuery = minimumQuery;
      urlObj.extra.relation.minimumHash = minimumHash;
      urlObj.extra.relation.maximumPort = !minimumScheme || minimumScheme && !minimumPath;
      urlObj.extra.relation.maximumPath = !minimumScheme || minimumScheme && !minimumResource;
      urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery;
      urlObj.extra.relation.maximumQuery = !minimumScheme || minimumScheme && !minimumHash;
      urlObj.extra.relation.maximumHash = !minimumScheme || minimumScheme && !minimumHash;
      urlObj.extra.relation.overridesQuery = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery;
    }
    module2.exports = {
      pathOn: findRelation_pathOn,
      upToPath: findRelation_upToPath
    };
  }
});

// node_modules/relateurl/lib/relate/absolutize.js
var require_absolutize = __commonJS({
  "node_modules/relateurl/lib/relate/absolutize.js"(exports, module2) {
    "use strict";
    var findRelation = require_findRelation();
    var objUtils = require_object();
    var pathUtils = require_path2();
    function absolutize(urlObj, siteUrlObj, options) {
      findRelation.upToPath(urlObj, siteUrlObj, options);
      if (urlObj.extra.relation.minimumScheme)
        urlObj.scheme = siteUrlObj.scheme;
      if (urlObj.extra.relation.minimumAuth)
        urlObj.auth = siteUrlObj.auth;
      if (urlObj.extra.relation.minimumHost)
        urlObj.host = objUtils.clone(siteUrlObj.host);
      if (urlObj.extra.relation.minimumPort)
        copyPort(urlObj, siteUrlObj);
      if (urlObj.extra.relation.minimumScheme)
        copyPath(urlObj, siteUrlObj);
      findRelation.pathOn(urlObj, siteUrlObj, options);
      if (urlObj.extra.relation.minimumResource)
        copyResource(urlObj, siteUrlObj);
      if (urlObj.extra.relation.minimumQuery)
        urlObj.query = objUtils.clone(siteUrlObj.query);
      if (urlObj.extra.relation.minimumHash)
        urlObj.hash = siteUrlObj.hash;
    }
    function copyPath(urlObj, siteUrlObj) {
      if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly) {
        var pathArray = urlObj.path.absolute.array;
        var pathString = "/";
        if (pathArray) {
          if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/") !== 0) {
            pathArray = siteUrlObj.path.absolute.array.concat(pathArray);
          }
          pathArray = pathUtils.resolveDotSegments(pathArray);
          pathString += pathUtils.join(pathArray);
        } else {
          pathArray = [];
        }
        urlObj.path.absolute.array = pathArray;
        urlObj.path.absolute.string = pathString;
      } else {
        urlObj.path = objUtils.clone(siteUrlObj.path);
      }
    }
    function copyPort(urlObj, siteUrlObj) {
      urlObj.port = siteUrlObj.port;
      urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault;
    }
    function copyResource(urlObj, siteUrlObj) {
      urlObj.resource = siteUrlObj.resource;
      urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex;
    }
    module2.exports = absolutize;
  }
});

// node_modules/relateurl/lib/relate/relativize.js
var require_relativize = __commonJS({
  "node_modules/relateurl/lib/relate/relativize.js"(exports, module2) {
    "use strict";
    var pathUtils = require_path2();
    function relatePath(absolutePath, siteAbsolutePath) {
      var relativePath = [];
      var related = true;
      var parentIndex = -1;
      siteAbsolutePath.forEach(function(siteAbsoluteDir, i) {
        if (related) {
          if (absolutePath[i] !== siteAbsoluteDir) {
            related = false;
          } else {
            parentIndex = i;
          }
        }
        if (!related) {
          relativePath.push("..");
        }
      });
      absolutePath.forEach(function(dir, i) {
        if (i > parentIndex) {
          relativePath.push(dir);
        }
      });
      return relativePath;
    }
    function relativize(urlObj, siteUrlObj, options) {
      if (urlObj.extra.relation.minimumScheme) {
        var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
        urlObj.path.relative.array = pathArray;
        urlObj.path.relative.string = pathUtils.join(pathArray);
      }
    }
    module2.exports = relativize;
  }
});

// node_modules/relateurl/lib/relate/index.js
var require_relate = __commonJS({
  "node_modules/relateurl/lib/relate/index.js"(exports, module2) {
    "use strict";
    var absolutize = require_absolutize();
    var relativize = require_relativize();
    function relateUrl(siteUrlObj, urlObj, options) {
      absolutize(urlObj, siteUrlObj, options);
      relativize(urlObj, siteUrlObj, options);
      return urlObj;
    }
    module2.exports = relateUrl;
  }
});

// node_modules/relateurl/lib/index.js
var require_lib3 = __commonJS({
  "node_modules/relateurl/lib/index.js"(exports, module2) {
    "use strict";
    var constants = require_constants();
    var formatUrl = require_format2();
    var getOptions = require_options();
    var objUtils = require_object();
    var parseUrl = require_parse2();
    var relateUrl = require_relate();
    function RelateUrl(from, options) {
      this.options = getOptions(options, {
        defaultPorts: { ftp: 21, http: 80, https: 443 },
        directoryIndexes: ["index.html"],
        ignore_www: false,
        output: RelateUrl.SHORTEST,
        rejectedSchemes: ["data", "javascript", "mailto"],
        removeAuth: false,
        removeDirectoryIndexes: true,
        removeEmptyQueries: false,
        removeRootTrailingSlash: true,
        schemeRelative: true,
        site: void 0,
        slashesDenoteHost: true
      });
      this.from = parseUrl.from(from, this.options, null);
    }
    RelateUrl.prototype.relate = function(from, to, options) {
      if (objUtils.isPlainObject(to)) {
        options = to;
        to = from;
        from = null;
      } else if (!to) {
        to = from;
        from = null;
      }
      options = getOptions(options, this.options);
      from = from || options.site;
      from = parseUrl.from(from, options, this.from);
      if (!from || !from.href) {
        throw new Error("from value not defined.");
      } else if (from.extra.hrefInfo.minimumPathOnly) {
        throw new Error("from value supplied is not absolute: " + from.href);
      }
      to = parseUrl.to(to, options);
      if (to.valid === false)
        return to.href;
      to = relateUrl(from, to, options);
      to = formatUrl(to, options);
      return to;
    };
    RelateUrl.relate = function(from, to, options) {
      return new RelateUrl().relate(from, to, options);
    };
    objUtils.shallowMerge(RelateUrl, constants);
    module2.exports = RelateUrl;
  }
});

// node_modules/@jridgewell/source-map/dist/source-map.umd.js
var require_source_map_umd = __commonJS({
  "node_modules/@jridgewell/source-map/dist/source-map.umd.js"(exports, module2) {
    (function(global2, factory) {
      typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.sourceMap = {}));
    })(exports, function(exports2) {
      "use strict";
      const comma = ",".charCodeAt(0);
      const semicolon = ";".charCodeAt(0);
      const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
      const intToChar = new Uint8Array(64);
      const charToInteger = new Uint8Array(128);
      for (let i = 0; i < chars.length; i++) {
        const c = chars.charCodeAt(i);
        charToInteger[c] = i;
        intToChar[i] = c;
      }
      const td = typeof TextDecoder !== "undefined" ? new TextDecoder() : typeof Buffer !== "undefined" ? {
        decode(buf) {
          const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);
          return out.toString();
        }
      } : {
        decode(buf) {
          let out = "";
          for (let i = 0; i < buf.length; i++) {
            out += String.fromCharCode(buf[i]);
          }
          return out;
        }
      };
      function decode(mappings) {
        const state = new Int32Array(5);
        const decoded = [];
        let line = [];
        let sorted = true;
        let lastCol = 0;
        for (let i = 0; i < mappings.length; ) {
          const c = mappings.charCodeAt(i);
          if (c === comma) {
            i++;
          } else if (c === semicolon) {
            state[0] = lastCol = 0;
            if (!sorted)
              sort(line);
            sorted = true;
            decoded.push(line);
            line = [];
            i++;
          } else {
            i = decodeInteger(mappings, i, state, 0);
            const col = state[0];
            if (col < lastCol)
              sorted = false;
            lastCol = col;
            if (!hasMoreSegments(mappings, i)) {
              line.push([col]);
              continue;
            }
            i = decodeInteger(mappings, i, state, 1);
            i = decodeInteger(mappings, i, state, 2);
            i = decodeInteger(mappings, i, state, 3);
            if (!hasMoreSegments(mappings, i)) {
              line.push([col, state[1], state[2], state[3]]);
              continue;
            }
            i = decodeInteger(mappings, i, state, 4);
            line.push([col, state[1], state[2], state[3], state[4]]);
          }
        }
        if (!sorted)
          sort(line);
        decoded.push(line);
        return decoded;
      }
      function decodeInteger(mappings, pos, state, j) {
        let value = 0;
        let shift = 0;
        let integer = 0;
        do {
          const c = mappings.charCodeAt(pos++);
          integer = charToInteger[c];
          value |= (integer & 31) << shift;
          shift += 5;
        } while (integer & 32);
        const shouldNegate = value & 1;
        value >>>= 1;
        if (shouldNegate) {
          value = -2147483648 | -value;
        }
        state[j] += value;
        return pos;
      }
      function hasMoreSegments(mappings, i) {
        if (i >= mappings.length)
          return false;
        const c = mappings.charCodeAt(i);
        if (c === comma || c === semicolon)
          return false;
        return true;
      }
      function sort(line) {
        line.sort(sortComparator$1);
      }
      function sortComparator$1(a, b) {
        return a[0] - b[0];
      }
      function encode(decoded) {
        const state = new Int32Array(5);
        let buf = new Uint8Array(1024);
        let pos = 0;
        for (let i = 0; i < decoded.length; i++) {
          const line = decoded[i];
          if (i > 0) {
            buf = reserve(buf, pos, 1);
            buf[pos++] = semicolon;
          }
          if (line.length === 0)
            continue;
          state[0] = 0;
          for (let j = 0; j < line.length; j++) {
            const segment = line[j];
            buf = reserve(buf, pos, 36);
            if (j > 0)
              buf[pos++] = comma;
            pos = encodeInteger(buf, pos, state, segment, 0);
            if (segment.length === 1)
              continue;
            pos = encodeInteger(buf, pos, state, segment, 1);
            pos = encodeInteger(buf, pos, state, segment, 2);
            pos = encodeInteger(buf, pos, state, segment, 3);
            if (segment.length === 4)
              continue;
            pos = encodeInteger(buf, pos, state, segment, 4);
          }
        }
        return td.decode(buf.subarray(0, pos));
      }
      function reserve(buf, pos, count) {
        if (buf.length > pos + count)
          return buf;
        const swap = new Uint8Array(buf.length * 2);
        swap.set(buf);
        return swap;
      }
      function encodeInteger(buf, pos, state, segment, j) {
        const next = segment[j];
        let num = next - state[j];
        state[j] = next;
        num = num < 0 ? -num << 1 | 1 : num << 1;
        do {
          let clamped = num & 31;
          num >>>= 5;
          if (num > 0)
            clamped |= 32;
          buf[pos++] = intToChar[clamped];
        } while (num > 0);
        return pos;
      }
      const schemeRegex = /^[\w+.-]+:\/\//;
      const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?/;
      const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/]*)?)?(\/?.*)/i;
      function isAbsoluteUrl(input) {
        return schemeRegex.test(input);
      }
      function isSchemeRelativeUrl(input) {
        return input.startsWith("//");
      }
      function isAbsolutePath(input) {
        return input.startsWith("/");
      }
      function isFileUrl(input) {
        return input.startsWith("file:");
      }
      function parseAbsoluteUrl(input) {
        const match = urlRegex.exec(input);
        return makeUrl(match[1], match[2] || "", match[3], match[4] || "", match[5] || "/");
      }
      function parseFileUrl(input) {
        const match = fileRegex.exec(input);
        const path = match[2];
        return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path) ? path : "/" + path);
      }
      function makeUrl(scheme, user, host, port, path) {
        return {
          scheme,
          user,
          host,
          port,
          path,
          relativePath: false
        };
      }
      function parseUrl(input) {
        if (isSchemeRelativeUrl(input)) {
          const url2 = parseAbsoluteUrl("http:" + input);
          url2.scheme = "";
          return url2;
        }
        if (isAbsolutePath(input)) {
          const url2 = parseAbsoluteUrl("http://foo.com" + input);
          url2.scheme = "";
          url2.host = "";
          return url2;
        }
        if (isFileUrl(input))
          return parseFileUrl(input);
        if (isAbsoluteUrl(input))
          return parseAbsoluteUrl(input);
        const url = parseAbsoluteUrl("http://foo.com/" + input);
        url.scheme = "";
        url.host = "";
        url.relativePath = true;
        return url;
      }
      function stripPathFilename(path) {
        if (path.endsWith("/.."))
          return path;
        const index = path.lastIndexOf("/");
        return path.slice(0, index + 1);
      }
      function mergePaths(url, base) {
        if (!url.relativePath)
          return;
        normalizePath(base);
        if (url.path === "/") {
          url.path = base.path;
        } else {
          url.path = stripPathFilename(base.path) + url.path;
        }
        url.relativePath = base.relativePath;
      }
      function normalizePath(url) {
        const { relativePath } = url;
        const pieces = url.path.split("/");
        let pointer = 1;
        let positive = 0;
        let addTrailingSlash = false;
        for (let i = 1; i < pieces.length; i++) {
          const piece = pieces[i];
          if (!piece) {
            addTrailingSlash = true;
            continue;
          }
          addTrailingSlash = false;
          if (piece === ".")
            continue;
          if (piece === "..") {
            if (positive) {
              addTrailingSlash = true;
              positive--;
              pointer--;
            } else if (relativePath) {
              pieces[pointer++] = piece;
            }
            continue;
          }
          pieces[pointer++] = piece;
          positive++;
        }
        let path = "";
        for (let i = 1; i < pointer; i++) {
          path += "/" + pieces[i];
        }
        if (!path || addTrailingSlash && !path.endsWith("/..")) {
          path += "/";
        }
        url.path = path;
      }
      function resolve$1(input, base) {
        if (!input && !base)
          return "";
        const url = parseUrl(input);
        if (base && !url.scheme) {
          const baseUrl = parseUrl(base);
          url.scheme = baseUrl.scheme;
          if (!url.host) {
            url.user = baseUrl.user;
            url.host = baseUrl.host;
            url.port = baseUrl.port;
          }
          mergePaths(url, baseUrl);
        }
        normalizePath(url);
        if (url.relativePath) {
          const path = url.path.slice(1);
          if (!path)
            return ".";
          const keepRelative = (base || input).startsWith(".");
          return !keepRelative || path.startsWith(".") ? path : "./" + path;
        }
        if (!url.scheme && !url.host)
          return url.path;
        return `${url.scheme}//${url.user}${url.host}${url.port}${url.path}`;
      }
      function resolve(input, base) {
        if (base && !base.endsWith("/"))
          base += "/";
        return resolve$1(input, base);
      }
      function stripFilename(path) {
        if (!path)
          return "";
        const index = path.lastIndexOf("/");
        return path.slice(0, index + 1);
      }
      const COLUMN$1 = 0;
      const SOURCES_INDEX$1 = 1;
      const SOURCE_LINE$1 = 2;
      const SOURCE_COLUMN$1 = 3;
      const NAMES_INDEX$1 = 4;
      function maybeSort(mappings, owned) {
        const unsortedIndex = nextUnsortedSegmentLine(mappings, 0);
        if (unsortedIndex === mappings.length)
          return mappings;
        if (!owned)
          mappings = mappings.slice();
        for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) {
          mappings[i] = sortSegments(mappings[i], owned);
        }
        return mappings;
      }
      function nextUnsortedSegmentLine(mappings, start) {
        for (let i = start; i < mappings.length; i++) {
          if (!isSorted(mappings[i]))
            return i;
        }
        return mappings.length;
      }
      function isSorted(line) {
        for (let j = 1; j < line.length; j++) {
          if (line[j][COLUMN$1] < line[j - 1][COLUMN$1]) {
            return false;
          }
        }
        return true;
      }
      function sortSegments(line, owned) {
        if (!owned)
          line = line.slice();
        return line.sort(sortComparator);
      }
      function sortComparator(a, b) {
        return a[COLUMN$1] - b[COLUMN$1];
      }
      let found = false;
      function binarySearch(haystack, needle, low, high) {
        while (low <= high) {
          const mid = low + (high - low >> 1);
          const cmp = haystack[mid][COLUMN$1] - needle;
          if (cmp === 0) {
            found = true;
            return mid;
          }
          if (cmp < 0) {
            low = mid + 1;
          } else {
            high = mid - 1;
          }
        }
        found = false;
        return low - 1;
      }
      function upperBound(haystack, needle, index) {
        for (let i = index + 1; i < haystack.length; i++, index++) {
          if (haystack[i][COLUMN$1] !== needle)
            break;
        }
        return index;
      }
      function lowerBound(haystack, needle, index) {
        for (let i = index - 1; i >= 0; i--, index--) {
          if (haystack[i][COLUMN$1] !== needle)
            break;
        }
        return index;
      }
      function memoizedState() {
        return {
          lastKey: -1,
          lastNeedle: -1,
          lastIndex: -1
        };
      }
      function memoizedBinarySearch(haystack, needle, state, key) {
        const { lastKey, lastNeedle, lastIndex } = state;
        let low = 0;
        let high = haystack.length - 1;
        if (key === lastKey) {
          if (needle === lastNeedle) {
            found = lastIndex !== -1 && haystack[lastIndex][COLUMN$1] === needle;
            return lastIndex;
          }
          if (needle >= lastNeedle) {
            low = lastIndex === -1 ? 0 : lastIndex;
          } else {
            high = lastIndex;
          }
        }
        state.lastKey = key;
        state.lastNeedle = needle;
        return state.lastIndex = binarySearch(haystack, needle, low, high);
      }
      const AnyMap = function(map, mapUrl) {
        const parsed = typeof map === "string" ? JSON.parse(map) : map;
        if (!("sections" in parsed))
          return new TraceMap(parsed, mapUrl);
        const mappings = [];
        const sources = [];
        const sourcesContent = [];
        const names = [];
        const { sections } = parsed;
        let i = 0;
        for (; i < sections.length - 1; i++) {
          const no = sections[i + 1].offset;
          addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, no.line, no.column);
        }
        if (sections.length > 0) {
          addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, Infinity, Infinity);
        }
        const joined = {
          version: 3,
          file: parsed.file,
          names,
          sources,
          sourcesContent,
          mappings
        };
        return presortedDecodedMap(joined);
      };
      function addSection(section, mapUrl, mappings, sources, sourcesContent, names, stopLine, stopColumn) {
        const map = AnyMap(section.map, mapUrl);
        const { line: lineOffset, column: columnOffset } = section.offset;
        const sourcesOffset = sources.length;
        const namesOffset = names.length;
        const decoded = decodedMappings(map);
        const { resolvedSources } = map;
        append(sources, resolvedSources);
        append(sourcesContent, map.sourcesContent || fillSourcesContent(resolvedSources.length));
        append(names, map.names);
        for (let i = mappings.length; i <= lineOffset; i++)
          mappings.push([]);
        const stopI = stopLine - lineOffset;
        const len = Math.min(decoded.length, stopI + 1);
        for (let i = 0; i < len; i++) {
          const line = decoded[i];
          const out = i === 0 ? mappings[lineOffset] : mappings[lineOffset + i] = [];
          const cOffset = i === 0 ? columnOffset : 0;
          for (let j = 0; j < line.length; j++) {
            const seg = line[j];
            const column = cOffset + seg[COLUMN$1];
            if (i === stopI && column >= stopColumn)
              break;
            if (seg.length === 1) {
              out.push([column]);
              continue;
            }
            const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX$1];
            const sourceLine = seg[SOURCE_LINE$1];
            const sourceColumn = seg[SOURCE_COLUMN$1];
            if (seg.length === 4) {
              out.push([column, sourcesIndex, sourceLine, sourceColumn]);
              continue;
            }
            out.push([column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX$1]]);
          }
        }
      }
      function append(arr, other) {
        for (let i = 0; i < other.length; i++)
          arr.push(other[i]);
      }
      function fillSourcesContent(len) {
        const sourcesContent = [];
        for (let i = 0; i < len; i++)
          sourcesContent[i] = null;
        return sourcesContent;
      }
      const INVALID_ORIGINAL_MAPPING = Object.freeze({
        source: null,
        line: null,
        column: null,
        name: null
      });
      Object.freeze({
        line: null,
        column: null
      });
      const LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)";
      const COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)";
      const LEAST_UPPER_BOUND = -1;
      const GREATEST_LOWER_BOUND = 1;
      let decodedMappings;
      let originalPositionFor;
      let presortedDecodedMap;
      class TraceMap {
        constructor(map, mapUrl) {
          this._decodedMemo = memoizedState();
          this._bySources = void 0;
          this._bySourceMemos = void 0;
          const isString = typeof map === "string";
          if (!isString && map.constructor === TraceMap)
            return map;
          const parsed = isString ? JSON.parse(map) : map;
          const { version, file, names, sourceRoot, sources, sourcesContent } = parsed;
          this.version = version;
          this.file = file;
          this.names = names;
          this.sourceRoot = sourceRoot;
          this.sources = sources;
          this.sourcesContent = sourcesContent;
          if (sourceRoot || mapUrl) {
            const from = resolve(sourceRoot || "", stripFilename(mapUrl));
            this.resolvedSources = sources.map((s) => resolve(s || "", from));
          } else {
            this.resolvedSources = sources.map((s) => s || "");
          }
          const { mappings } = parsed;
          if (typeof mappings === "string") {
            this._encoded = mappings;
            this._decoded = void 0;
          } else {
            this._encoded = void 0;
            this._decoded = maybeSort(mappings, isString);
          }
        }
      }
      (() => {
        decodedMappings = (map) => {
          return map._decoded || (map._decoded = decode(map._encoded));
        };
        originalPositionFor = (map, { line, column, bias }) => {
          line--;
          if (line < 0)
            throw new Error(LINE_GTR_ZERO);
          if (column < 0)
            throw new Error(COL_GTR_EQ_ZERO);
          const decoded = decodedMappings(map);
          if (line >= decoded.length)
            return INVALID_ORIGINAL_MAPPING;
          const segment = traceSegmentInternal(decoded[line], map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);
          if (segment == null)
            return INVALID_ORIGINAL_MAPPING;
          if (segment.length == 1)
            return INVALID_ORIGINAL_MAPPING;
          const { names, resolvedSources } = map;
          return {
            source: resolvedSources[segment[SOURCES_INDEX$1]],
            line: segment[SOURCE_LINE$1] + 1,
            column: segment[SOURCE_COLUMN$1],
            name: segment.length === 5 ? names[segment[NAMES_INDEX$1]] : null
          };
        };
        presortedDecodedMap = (map, mapUrl) => {
          const clone = Object.assign({}, map);
          clone.mappings = [];
          const tracer = new TraceMap(clone, mapUrl);
          tracer._decoded = map.mappings;
          return tracer;
        };
      })();
      function traceSegmentInternal(segments, memo, line, column, bias) {
        let index = memoizedBinarySearch(segments, column, memo, line);
        if (found) {
          index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);
        } else if (bias === LEAST_UPPER_BOUND)
          index++;
        if (index === -1 || index === segments.length)
          return null;
        return segments[index];
      }
      let get;
      let put;
      class SetArray {
        constructor() {
          this._indexes = { __proto__: null };
          this.array = [];
        }
      }
      (() => {
        get = (strarr, key) => strarr._indexes[key];
        put = (strarr, key) => {
          const index = get(strarr, key);
          if (index !== void 0)
            return index;
          const { array, _indexes: indexes } = strarr;
          return indexes[key] = array.push(key) - 1;
        };
      })();
      const COLUMN = 0;
      const SOURCES_INDEX = 1;
      const SOURCE_LINE = 2;
      const SOURCE_COLUMN = 3;
      const NAMES_INDEX = 4;
      const NO_NAME = -1;
      let maybeAddMapping;
      let setSourceContent;
      let toDecodedMap;
      let toEncodedMap;
      let addSegmentInternal;
      class GenMapping {
        constructor({ file, sourceRoot } = {}) {
          this._names = new SetArray();
          this._sources = new SetArray();
          this._sourcesContent = [];
          this._mappings = [];
          this.file = file;
          this.sourceRoot = sourceRoot;
        }
      }
      (() => {
        maybeAddMapping = (map, mapping) => {
          return addMappingInternal(true, map, mapping);
        };
        setSourceContent = (map, source, content) => {
          const { _sources: sources, _sourcesContent: sourcesContent } = map;
          sourcesContent[put(sources, source)] = content;
        };
        toDecodedMap = (map) => {
          const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = map;
          removeEmptyFinalLines(mappings);
          return {
            version: 3,
            file: file || void 0,
            names: names.array,
            sourceRoot: sourceRoot || void 0,
            sources: sources.array,
            sourcesContent,
            mappings
          };
        };
        toEncodedMap = (map) => {
          const decoded = toDecodedMap(map);
          return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) });
        };
        addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name) => {
          const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = map;
          const line = getLine(mappings, genLine);
          const index = getColumnIndex(line, genColumn);
          if (!source) {
            if (skipable && skipSourceless(line, index))
              return;
            return insert(line, index, [genColumn]);
          }
          const sourcesIndex = put(sources, source);
          const namesIndex = name ? put(names, name) : NO_NAME;
          if (sourcesIndex === sourcesContent.length)
            sourcesContent[sourcesIndex] = null;
          if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {
            return;
          }
          return insert(line, index, name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]);
        };
      })();
      function getLine(mappings, index) {
        for (let i = mappings.length; i <= index; i++) {
          mappings[i] = [];
        }
        return mappings[index];
      }
      function getColumnIndex(line, genColumn) {
        let index = line.length;
        for (let i = index - 1; i >= 0; index = i--) {
          const current = line[i];
          if (genColumn >= current[COLUMN])
            break;
        }
        return index;
      }
      function insert(array, index, value) {
        for (let i = array.length; i > index; i--) {
          array[i] = array[i - 1];
        }
        array[index] = value;
      }
      function removeEmptyFinalLines(mappings) {
        const { length } = mappings;
        let len = length;
        for (let i = len - 1; i >= 0; len = i, i--) {
          if (mappings[i].length > 0)
            break;
        }
        if (len < length)
          mappings.length = len;
      }
      function skipSourceless(line, index) {
        if (index === 0)
          return true;
        const prev = line[index - 1];
        return prev.length === 1;
      }
      function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {
        if (index === 0)
          return false;
        const prev = line[index - 1];
        if (prev.length === 1)
          return false;
        return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME);
      }
      function addMappingInternal(skipable, map, mapping) {
        const { generated, source, original, name } = mapping;
        if (!source) {
          return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null);
        }
        const s = source;
        return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name);
      }
      class SourceMapConsumer {
        constructor(map, mapUrl) {
          const trace = this._map = new AnyMap(map, mapUrl);
          this.file = trace.file;
          this.names = trace.names;
          this.sourceRoot = trace.sourceRoot;
          this.sources = trace.resolvedSources;
          this.sourcesContent = trace.sourcesContent;
        }
        originalPositionFor(needle) {
          return originalPositionFor(this._map, needle);
        }
        destroy() {
        }
      }
      class SourceMapGenerator {
        constructor(opts) {
          this._map = new GenMapping(opts);
        }
        addMapping(mapping) {
          maybeAddMapping(this._map, mapping);
        }
        setSourceContent(source, content) {
          setSourceContent(this._map, source, content);
        }
        toJSON() {
          return toEncodedMap(this._map);
        }
        toDecodedMap() {
          return toDecodedMap(this._map);
        }
      }
      exports2.SourceMapConsumer = SourceMapConsumer;
      exports2.SourceMapGenerator = SourceMapGenerator;
      Object.defineProperty(exports2, "__esModule", { value: true });
    });
  }
});

// node_modules/acorn/dist/acorn.js
var require_acorn = __commonJS({
  "node_modules/acorn/dist/acorn.js"(exports, module2) {
    (function(global2, factory) {
      typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.acorn = {}));
    })(exports, function(exports2) {
      "use strict";
      var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
      var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];
      var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECE\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA8FF-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F";
      var nonASCIIidentifierStartChars = "\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC";
      var reservedWords = {
        3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
        5: "class enum extends super const export import",
        6: "enum",
        strict: "implements interface let package private protected public static yield",
        strictBind: "eval arguments"
      };
      var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
      var keywords$1 = {
        5: ecma5AndLessKeywords,
        "5module": ecma5AndLessKeywords + " export import",
        6: ecma5AndLessKeywords + " const class extends export import super"
      };
      var keywordRelationalOperator = /^in(stanceof)?$/;
      var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
      var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
      function isInAstralSet(code, set) {
        var pos = 65536;
        for (var i2 = 0; i2 < set.length; i2 += 2) {
          pos += set[i2];
          if (pos > code) {
            return false;
          }
          pos += set[i2 + 1];
          if (pos >= code) {
            return true;
          }
        }
        return false;
      }
      function isIdentifierStart(code, astral) {
        if (code < 65) {
          return code === 36;
        }
        if (code < 91) {
          return true;
        }
        if (code < 97) {
          return code === 95;
        }
        if (code < 123) {
          return true;
        }
        if (code <= 65535) {
          return code >= 170 && nonASCIIidentifierStart.test(String.fromCharCode(code));
        }
        if (astral === false) {
          return false;
        }
        return isInAstralSet(code, astralIdentifierStartCodes);
      }
      function isIdentifierChar(code, astral) {
        if (code < 48) {
          return code === 36;
        }
        if (code < 58) {
          return true;
        }
        if (code < 65) {
          return false;
        }
        if (code < 91) {
          return true;
        }
        if (code < 97) {
          return code === 95;
        }
        if (code < 123) {
          return true;
        }
        if (code <= 65535) {
          return code >= 170 && nonASCIIidentifier.test(String.fromCharCode(code));
        }
        if (astral === false) {
          return false;
        }
        return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
      }
      var TokenType = function TokenType2(label, conf) {
        if (conf === void 0)
          conf = {};
        this.label = label;
        this.keyword = conf.keyword;
        this.beforeExpr = !!conf.beforeExpr;
        this.startsExpr = !!conf.startsExpr;
        this.isLoop = !!conf.isLoop;
        this.isAssign = !!conf.isAssign;
        this.prefix = !!conf.prefix;
        this.postfix = !!conf.postfix;
        this.binop = conf.binop || null;
        this.updateContext = null;
      };
      function binop(name, prec) {
        return new TokenType(name, { beforeExpr: true, binop: prec });
      }
      var beforeExpr = { beforeExpr: true }, startsExpr = { startsExpr: true };
      var keywords = {};
      function kw(name, options) {
        if (options === void 0)
          options = {};
        options.keyword = name;
        return keywords[name] = new TokenType(name, options);
      }
      var types$1 = {
        num: new TokenType("num", startsExpr),
        regexp: new TokenType("regexp", startsExpr),
        string: new TokenType("string", startsExpr),
        name: new TokenType("name", startsExpr),
        privateId: new TokenType("privateId", startsExpr),
        eof: new TokenType("eof"),
        bracketL: new TokenType("[", { beforeExpr: true, startsExpr: true }),
        bracketR: new TokenType("]"),
        braceL: new TokenType("{", { beforeExpr: true, startsExpr: true }),
        braceR: new TokenType("}"),
        parenL: new TokenType("(", { beforeExpr: true, startsExpr: true }),
        parenR: new TokenType(")"),
        comma: new TokenType(",", beforeExpr),
        semi: new TokenType(";", beforeExpr),
        colon: new TokenType(":", beforeExpr),
        dot: new TokenType("."),
        question: new TokenType("?", beforeExpr),
        questionDot: new TokenType("?."),
        arrow: new TokenType("=>", beforeExpr),
        template: new TokenType("template"),
        invalidTemplate: new TokenType("invalidTemplate"),
        ellipsis: new TokenType("...", beforeExpr),
        backQuote: new TokenType("`", startsExpr),
        dollarBraceL: new TokenType("${", { beforeExpr: true, startsExpr: true }),
        eq: new TokenType("=", { beforeExpr: true, isAssign: true }),
        assign: new TokenType("_=", { beforeExpr: true, isAssign: true }),
        incDec: new TokenType("++/--", { prefix: true, postfix: true, startsExpr: true }),
        prefix: new TokenType("!/~", { beforeExpr: true, prefix: true, startsExpr: true }),
        logicalOR: binop("||", 1),
        logicalAND: binop("&&", 2),
        bitwiseOR: binop("|", 3),
        bitwiseXOR: binop("^", 4),
        bitwiseAND: binop("&", 5),
        equality: binop("==/!=/===/!==", 6),
        relational: binop("</>/<=/>=", 7),
        bitShift: binop("<</>>/>>>", 8),
        plusMin: new TokenType("+/-", { beforeExpr: true, binop: 9, prefix: true, startsExpr: true }),
        modulo: binop("%", 10),
        star: binop("*", 10),
        slash: binop("/", 10),
        starstar: new TokenType("**", { beforeExpr: true }),
        coalesce: binop("??", 1),
        _break: kw("break"),
        _case: kw("case", beforeExpr),
        _catch: kw("catch"),
        _continue: kw("continue"),
        _debugger: kw("debugger"),
        _default: kw("default", beforeExpr),
        _do: kw("do", { isLoop: true, beforeExpr: true }),
        _else: kw("else", beforeExpr),
        _finally: kw("finally"),
        _for: kw("for", { isLoop: true }),
        _function: kw("function", startsExpr),
        _if: kw("if"),
        _return: kw("return", beforeExpr),
        _switch: kw("switch"),
        _throw: kw("throw", beforeExpr),
        _try: kw("try"),
        _var: kw("var"),
        _const: kw("const"),
        _while: kw("while", { isLoop: true }),
        _with: kw("with"),
        _new: kw("new", { beforeExpr: true, startsExpr: true }),
        _this: kw("this", startsExpr),
        _super: kw("super", startsExpr),
        _class: kw("class", startsExpr),
        _extends: kw("extends", beforeExpr),
        _export: kw("export"),
        _import: kw("import", startsExpr),
        _null: kw("null", startsExpr),
        _true: kw("true", startsExpr),
        _false: kw("false", startsExpr),
        _in: kw("in", { beforeExpr: true, binop: 7 }),
        _instanceof: kw("instanceof", { beforeExpr: true, binop: 7 }),
        _typeof: kw("typeof", { beforeExpr: true, prefix: true, startsExpr: true }),
        _void: kw("void", { beforeExpr: true, prefix: true, startsExpr: true }),
        _delete: kw("delete", { beforeExpr: true, prefix: true, startsExpr: true })
      };
      var lineBreak = /\r\n?|\n|\u2028|\u2029/;
      var lineBreakG = new RegExp(lineBreak.source, "g");
      function isNewLine(code) {
        return code === 10 || code === 13 || code === 8232 || code === 8233;
      }
      function nextLineBreak(code, from, end) {
        if (end === void 0)
          end = code.length;
        for (var i2 = from; i2 < end; i2++) {
          var next = code.charCodeAt(i2);
          if (isNewLine(next)) {
            return i2 < end - 1 && next === 13 && code.charCodeAt(i2 + 1) === 10 ? i2 + 2 : i2 + 1;
          }
        }
        return -1;
      }
      var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
      var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
      var ref = Object.prototype;
      var hasOwnProperty = ref.hasOwnProperty;
      var toString = ref.toString;
      var hasOwn = Object.hasOwn || function(obj, propName) {
        return hasOwnProperty.call(obj, propName);
      };
      var isArray = Array.isArray || function(obj) {
        return toString.call(obj) === "[object Array]";
      };
      function wordsRegexp(words) {
        return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$");
      }
      function codePointToString(code) {
        if (code <= 65535) {
          return String.fromCharCode(code);
        }
        code -= 65536;
        return String.fromCharCode((code >> 10) + 55296, (code & 1023) + 56320);
      }
      var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/;
      var Position = function Position2(line, col) {
        this.line = line;
        this.column = col;
      };
      Position.prototype.offset = function offset(n) {
        return new Position(this.line, this.column + n);
      };
      var SourceLocation = function SourceLocation2(p, start, end) {
        this.start = start;
        this.end = end;
        if (p.sourceFile !== null) {
          this.source = p.sourceFile;
        }
      };
      function getLineInfo(input, offset) {
        for (var line = 1, cur = 0; ; ) {
          var nextBreak = nextLineBreak(input, cur, offset);
          if (nextBreak < 0) {
            return new Position(line, offset - cur);
          }
          ++line;
          cur = nextBreak;
        }
      }
      var defaultOptions2 = {
        ecmaVersion: null,
        sourceType: "script",
        onInsertedSemicolon: null,
        onTrailingComma: null,
        allowReserved: null,
        allowReturnOutsideFunction: false,
        allowImportExportEverywhere: false,
        allowAwaitOutsideFunction: null,
        allowSuperOutsideMethod: null,
        allowHashBang: false,
        checkPrivateFields: true,
        locations: false,
        onToken: null,
        onComment: null,
        ranges: false,
        program: null,
        sourceFile: null,
        directSourceFile: null,
        preserveParens: false
      };
      var warnedAboutEcmaVersion = false;
      function getOptions(opts) {
        var options = {};
        for (var opt in defaultOptions2) {
          options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions2[opt];
        }
        if (options.ecmaVersion === "latest") {
          options.ecmaVersion = 1e8;
        } else if (options.ecmaVersion == null) {
          if (!warnedAboutEcmaVersion && typeof console === "object" && console.warn) {
            warnedAboutEcmaVersion = true;
            console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.");
          }
          options.ecmaVersion = 11;
        } else if (options.ecmaVersion >= 2015) {
          options.ecmaVersion -= 2009;
        }
        if (options.allowReserved == null) {
          options.allowReserved = options.ecmaVersion < 5;
        }
        if (!opts || opts.allowHashBang == null) {
          options.allowHashBang = options.ecmaVersion >= 14;
        }
        if (isArray(options.onToken)) {
          var tokens = options.onToken;
          options.onToken = function(token) {
            return tokens.push(token);
          };
        }
        if (isArray(options.onComment)) {
          options.onComment = pushComment(options, options.onComment);
        }
        return options;
      }
      function pushComment(options, array) {
        return function(block, text, start, end, startLoc, endLoc) {
          var comment2 = {
            type: block ? "Block" : "Line",
            value: text,
            start,
            end
          };
          if (options.locations) {
            comment2.loc = new SourceLocation(this, startLoc, endLoc);
          }
          if (options.ranges) {
            comment2.range = [start, end];
          }
          array.push(comment2);
        };
      }
      var SCOPE_TOP = 1, SCOPE_FUNCTION = 2, SCOPE_ASYNC = 4, SCOPE_GENERATOR = 8, SCOPE_ARROW = 16, SCOPE_SIMPLE_CATCH = 32, SCOPE_SUPER = 64, SCOPE_DIRECT_SUPER = 128, SCOPE_CLASS_STATIC_BLOCK = 256, SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;
      function functionFlags(async, generator) {
        return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0);
      }
      var BIND_NONE = 0, BIND_VAR = 1, BIND_LEXICAL = 2, BIND_FUNCTION = 3, BIND_SIMPLE_CATCH = 4, BIND_OUTSIDE = 5;
      var Parser = function Parser2(options, input, startPos) {
        this.options = options = getOptions(options);
        this.sourceFile = options.sourceFile;
        this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
        var reserved = "";
        if (options.allowReserved !== true) {
          reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];
          if (options.sourceType === "module") {
            reserved += " await";
          }
        }
        this.reservedWords = wordsRegexp(reserved);
        var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
        this.reservedWordsStrict = wordsRegexp(reservedStrict);
        this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
        this.input = String(input);
        this.containsEsc = false;
        if (startPos) {
          this.pos = startPos;
          this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
          this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
        } else {
          this.pos = this.lineStart = 0;
          this.curLine = 1;
        }
        this.type = types$1.eof;
        this.value = null;
        this.start = this.end = this.pos;
        this.startLoc = this.endLoc = this.curPosition();
        this.lastTokEndLoc = this.lastTokStartLoc = null;
        this.lastTokStart = this.lastTokEnd = this.pos;
        this.context = this.initialContext();
        this.exprAllowed = true;
        this.inModule = options.sourceType === "module";
        this.strict = this.inModule || this.strictDirective(this.pos);
        this.potentialArrowAt = -1;
        this.potentialArrowInForAwait = false;
        this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
        this.labels = [];
        this.undefinedExports = /* @__PURE__ */ Object.create(null);
        if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!") {
          this.skipLineComment(2);
        }
        this.scopeStack = [];
        this.enterScope(SCOPE_TOP);
        this.regexpState = null;
        this.privateNameStack = [];
      };
      var prototypeAccessors = { inFunction: { configurable: true }, inGenerator: { configurable: true }, inAsync: { configurable: true }, canAwait: { configurable: true }, allowSuper: { configurable: true }, allowDirectSuper: { configurable: true }, treatFunctionsAsVar: { configurable: true }, allowNewDotTarget: { configurable: true }, inClassStaticBlock: { configurable: true } };
      Parser.prototype.parse = function parse3() {
        var node = this.options.program || this.startNode();
        this.nextToken();
        return this.parseTopLevel(node);
      };
      prototypeAccessors.inFunction.get = function() {
        return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0;
      };
      prototypeAccessors.inGenerator.get = function() {
        return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit;
      };
      prototypeAccessors.inAsync.get = function() {
        return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit;
      };
      prototypeAccessors.canAwait.get = function() {
        for (var i2 = this.scopeStack.length - 1; i2 >= 0; i2--) {
          var scope = this.scopeStack[i2];
          if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) {
            return false;
          }
          if (scope.flags & SCOPE_FUNCTION) {
            return (scope.flags & SCOPE_ASYNC) > 0;
          }
        }
        return this.inModule && this.options.ecmaVersion >= 13 || this.options.allowAwaitOutsideFunction;
      };
      prototypeAccessors.allowSuper.get = function() {
        var ref2 = this.currentThisScope();
        var flags = ref2.flags;
        var inClassFieldInit = ref2.inClassFieldInit;
        return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod;
      };
      prototypeAccessors.allowDirectSuper.get = function() {
        return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0;
      };
      prototypeAccessors.treatFunctionsAsVar.get = function() {
        return this.treatFunctionsAsVarInScope(this.currentScope());
      };
      prototypeAccessors.allowNewDotTarget.get = function() {
        var ref2 = this.currentThisScope();
        var flags = ref2.flags;
        var inClassFieldInit = ref2.inClassFieldInit;
        return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit;
      };
      prototypeAccessors.inClassStaticBlock.get = function() {
        return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0;
      };
      Parser.extend = function extend() {
        var plugins = [], len = arguments.length;
        while (len--)
          plugins[len] = arguments[len];
        var cls = this;
        for (var i2 = 0; i2 < plugins.length; i2++) {
          cls = plugins[i2](cls);
        }
        return cls;
      };
      Parser.parse = function parse3(input, options) {
        return new this(options, input).parse();
      };
      Parser.parseExpressionAt = function parseExpressionAt2(input, pos, options) {
        var parser = new this(options, input, pos);
        parser.nextToken();
        return parser.parseExpression();
      };
      Parser.tokenizer = function tokenizer2(input, options) {
        return new this(options, input);
      };
      Object.defineProperties(Parser.prototype, prototypeAccessors);
      var pp$9 = Parser.prototype;
      var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/;
      pp$9.strictDirective = function(start) {
        if (this.options.ecmaVersion < 5) {
          return false;
        }
        for (; ; ) {
          skipWhiteSpace.lastIndex = start;
          start += skipWhiteSpace.exec(this.input)[0].length;
          var match = literal.exec(this.input.slice(start));
          if (!match) {
            return false;
          }
          if ((match[1] || match[2]) === "use strict") {
            skipWhiteSpace.lastIndex = start + match[0].length;
            var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;
            var next = this.input.charAt(end);
            return next === ";" || next === "}" || lineBreak.test(spaceAfter[0]) && !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "=");
          }
          start += match[0].length;
          skipWhiteSpace.lastIndex = start;
          start += skipWhiteSpace.exec(this.input)[0].length;
          if (this.input[start] === ";") {
            start++;
          }
        }
      };
      pp$9.eat = function(type) {
        if (this.type === type) {
          this.next();
          return true;
        } else {
          return false;
        }
      };
      pp$9.isContextual = function(name) {
        return this.type === types$1.name && this.value === name && !this.containsEsc;
      };
      pp$9.eatContextual = function(name) {
        if (!this.isContextual(name)) {
          return false;
        }
        this.next();
        return true;
      };
      pp$9.expectContextual = function(name) {
        if (!this.eatContextual(name)) {
          this.unexpected();
        }
      };
      pp$9.canInsertSemicolon = function() {
        return this.type === types$1.eof || this.type === types$1.braceR || lineBreak.test(this.input.slice(this.lastTokEnd, this.start));
      };
      pp$9.insertSemicolon = function() {
        if (this.canInsertSemicolon()) {
          if (this.options.onInsertedSemicolon) {
            this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);
          }
          return true;
        }
      };
      pp$9.semicolon = function() {
        if (!this.eat(types$1.semi) && !this.insertSemicolon()) {
          this.unexpected();
        }
      };
      pp$9.afterTrailingComma = function(tokType, notNext) {
        if (this.type === tokType) {
          if (this.options.onTrailingComma) {
            this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);
          }
          if (!notNext) {
            this.next();
          }
          return true;
        }
      };
      pp$9.expect = function(type) {
        this.eat(type) || this.unexpected();
      };
      pp$9.unexpected = function(pos) {
        this.raise(pos != null ? pos : this.start, "Unexpected token");
      };
      var DestructuringErrors = function DestructuringErrors2() {
        this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1;
      };
      pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {
        if (!refDestructuringErrors) {
          return;
        }
        if (refDestructuringErrors.trailingComma > -1) {
          this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element");
        }
        var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
        if (parens > -1) {
          this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern");
        }
      };
      pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
        if (!refDestructuringErrors) {
          return false;
        }
        var shorthandAssign = refDestructuringErrors.shorthandAssign;
        var doubleProto = refDestructuringErrors.doubleProto;
        if (!andThrow) {
          return shorthandAssign >= 0 || doubleProto >= 0;
        }
        if (shorthandAssign >= 0) {
          this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns");
        }
        if (doubleProto >= 0) {
          this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property");
        }
      };
      pp$9.checkYieldAwaitInDefaultParams = function() {
        if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) {
          this.raise(this.yieldPos, "Yield expression cannot be a default value");
        }
        if (this.awaitPos) {
          this.raise(this.awaitPos, "Await expression cannot be a default value");
        }
      };
      pp$9.isSimpleAssignTarget = function(expr) {
        if (expr.type === "ParenthesizedExpression") {
          return this.isSimpleAssignTarget(expr.expression);
        }
        return expr.type === "Identifier" || expr.type === "MemberExpression";
      };
      var pp$8 = Parser.prototype;
      pp$8.parseTopLevel = function(node) {
        var exports3 = /* @__PURE__ */ Object.create(null);
        if (!node.body) {
          node.body = [];
        }
        while (this.type !== types$1.eof) {
          var stmt = this.parseStatement(null, true, exports3);
          node.body.push(stmt);
        }
        if (this.inModule) {
          for (var i2 = 0, list3 = Object.keys(this.undefinedExports); i2 < list3.length; i2 += 1) {
            var name = list3[i2];
            this.raiseRecoverable(this.undefinedExports[name].start, "Export '" + name + "' is not defined");
          }
        }
        this.adaptDirectivePrologue(node.body);
        this.next();
        node.sourceType = this.options.sourceType;
        return this.finishNode(node, "Program");
      };
      var loopLabel = { kind: "loop" }, switchLabel = { kind: "switch" };
      pp$8.isLet = function(context) {
        if (this.options.ecmaVersion < 6 || !this.isContextual("let")) {
          return false;
        }
        skipWhiteSpace.lastIndex = this.pos;
        var skip = skipWhiteSpace.exec(this.input);
        var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
        if (nextCh === 91 || nextCh === 92) {
          return true;
        }
        if (context) {
          return false;
        }
        if (nextCh === 123 || nextCh > 55295 && nextCh < 56320) {
          return true;
        }
        if (isIdentifierStart(nextCh, true)) {
          var pos = next + 1;
          while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) {
            ++pos;
          }
          if (nextCh === 92 || nextCh > 55295 && nextCh < 56320) {
            return true;
          }
          var ident = this.input.slice(next, pos);
          if (!keywordRelationalOperator.test(ident)) {
            return true;
          }
        }
        return false;
      };
      pp$8.isAsyncFunction = function() {
        if (this.options.ecmaVersion < 8 || !this.isContextual("async")) {
          return false;
        }
        skipWhiteSpace.lastIndex = this.pos;
        var skip = skipWhiteSpace.exec(this.input);
        var next = this.pos + skip[0].length, after;
        return !lineBreak.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === "function" && (next + 8 === this.input.length || !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 55295 && after < 56320));
      };
      pp$8.parseStatement = function(context, topLevel, exports3) {
        var starttype = this.type, node = this.startNode(), kind;
        if (this.isLet(context)) {
          starttype = types$1._var;
          kind = "let";
        }
        switch (starttype) {
          case types$1._break:
          case types$1._continue:
            return this.parseBreakContinueStatement(node, starttype.keyword);
          case types$1._debugger:
            return this.parseDebuggerStatement(node);
          case types$1._do:
            return this.parseDoStatement(node);
          case types$1._for:
            return this.parseForStatement(node);
          case types$1._function:
            if (context && (this.strict || context !== "if" && context !== "label") && this.options.ecmaVersion >= 6) {
              this.unexpected();
            }
            return this.parseFunctionStatement(node, false, !context);
          case types$1._class:
            if (context) {
              this.unexpected();
            }
            return this.parseClass(node, true);
          case types$1._if:
            return this.parseIfStatement(node);
          case types$1._return:
            return this.parseReturnStatement(node);
          case types$1._switch:
            return this.parseSwitchStatement(node);
          case types$1._throw:
            return this.parseThrowStatement(node);
          case types$1._try:
            return this.parseTryStatement(node);
          case types$1._const:
          case types$1._var:
            kind = kind || this.value;
            if (context && kind !== "var") {
              this.unexpected();
            }
            return this.parseVarStatement(node, kind);
          case types$1._while:
            return this.parseWhileStatement(node);
          case types$1._with:
            return this.parseWithStatement(node);
          case types$1.braceL:
            return this.parseBlock(true, node);
          case types$1.semi:
            return this.parseEmptyStatement(node);
          case types$1._export:
          case types$1._import:
            if (this.options.ecmaVersion > 10 && starttype === types$1._import) {
              skipWhiteSpace.lastIndex = this.pos;
              var skip = skipWhiteSpace.exec(this.input);
              var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
              if (nextCh === 40 || nextCh === 46) {
                return this.parseExpressionStatement(node, this.parseExpression());
              }
            }
            if (!this.options.allowImportExportEverywhere) {
              if (!topLevel) {
                this.raise(this.start, "'import' and 'export' may only appear at the top level");
              }
              if (!this.inModule) {
                this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'");
              }
            }
            return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports3);
          default:
            if (this.isAsyncFunction()) {
              if (context) {
                this.unexpected();
              }
              this.next();
              return this.parseFunctionStatement(node, true, !context);
            }
            var maybeName = this.value, expr = this.parseExpression();
            if (starttype === types$1.name && expr.type === "Identifier" && this.eat(types$1.colon)) {
              return this.parseLabeledStatement(node, maybeName, expr, context);
            } else {
              return this.parseExpressionStatement(node, expr);
            }
        }
      };
      pp$8.parseBreakContinueStatement = function(node, keyword) {
        var isBreak = keyword === "break";
        this.next();
        if (this.eat(types$1.semi) || this.insertSemicolon()) {
          node.label = null;
        } else if (this.type !== types$1.name) {
          this.unexpected();
        } else {
          node.label = this.parseIdent();
          this.semicolon();
        }
        var i2 = 0;
        for (; i2 < this.labels.length; ++i2) {
          var lab = this.labels[i2];
          if (node.label == null || lab.name === node.label.name) {
            if (lab.kind != null && (isBreak || lab.kind === "loop")) {
              break;
            }
            if (node.label && isBreak) {
              break;
            }
          }
        }
        if (i2 === this.labels.length) {
          this.raise(node.start, "Unsyntactic " + keyword);
        }
        return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
      };
      pp$8.parseDebuggerStatement = function(node) {
        this.next();
        this.semicolon();
        return this.finishNode(node, "DebuggerStatement");
      };
      pp$8.parseDoStatement = function(node) {
        this.next();
        this.labels.push(loopLabel);
        node.body = this.parseStatement("do");
        this.labels.pop();
        this.expect(types$1._while);
        node.test = this.parseParenExpression();
        if (this.options.ecmaVersion >= 6) {
          this.eat(types$1.semi);
        } else {
          this.semicolon();
        }
        return this.finishNode(node, "DoWhileStatement");
      };
      pp$8.parseForStatement = function(node) {
        this.next();
        var awaitAt = this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual("await") ? this.lastTokStart : -1;
        this.labels.push(loopLabel);
        this.enterScope(0);
        this.expect(types$1.parenL);
        if (this.type === types$1.semi) {
          if (awaitAt > -1) {
            this.unexpected(awaitAt);
          }
          return this.parseFor(node, null);
        }
        var isLet = this.isLet();
        if (this.type === types$1._var || this.type === types$1._const || isLet) {
          var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
          this.next();
          this.parseVar(init$1, true, kind);
          this.finishNode(init$1, "VariableDeclaration");
          if ((this.type === types$1._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) && init$1.declarations.length === 1) {
            if (this.options.ecmaVersion >= 9) {
              if (this.type === types$1._in) {
                if (awaitAt > -1) {
                  this.unexpected(awaitAt);
                }
              } else {
                node.await = awaitAt > -1;
              }
            }
            return this.parseForIn(node, init$1);
          }
          if (awaitAt > -1) {
            this.unexpected(awaitAt);
          }
          return this.parseFor(node, init$1);
        }
        var startsWithLet = this.isContextual("let"), isForOf = false;
        var refDestructuringErrors = new DestructuringErrors();
        var init = this.parseExpression(awaitAt > -1 ? "await" : true, refDestructuringErrors);
        if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
          if (this.options.ecmaVersion >= 9) {
            if (this.type === types$1._in) {
              if (awaitAt > -1) {
                this.unexpected(awaitAt);
              }
            } else {
              node.await = awaitAt > -1;
            }
          }
          if (startsWithLet && isForOf) {
            this.raise(init.start, "The left-hand side of a for-of loop may not start with 'let'.");
          }
          this.toAssignable(init, false, refDestructuringErrors);
          this.checkLValPattern(init);
          return this.parseForIn(node, init);
        } else {
          this.checkExpressionErrors(refDestructuringErrors, true);
        }
        if (awaitAt > -1) {
          this.unexpected(awaitAt);
        }
        return this.parseFor(node, init);
      };
      pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {
        this.next();
        return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync);
      };
      pp$8.parseIfStatement = function(node) {
        this.next();
        node.test = this.parseParenExpression();
        node.consequent = this.parseStatement("if");
        node.alternate = this.eat(types$1._else) ? this.parseStatement("if") : null;
        return this.finishNode(node, "IfStatement");
      };
      pp$8.parseReturnStatement = function(node) {
        if (!this.inFunction && !this.options.allowReturnOutsideFunction) {
          this.raise(this.start, "'return' outside of function");
        }
        this.next();
        if (this.eat(types$1.semi) || this.insertSemicolon()) {
          node.argument = null;
        } else {
          node.argument = this.parseExpression();
          this.semicolon();
        }
        return this.finishNode(node, "ReturnStatement");
      };
      pp$8.parseSwitchStatement = function(node) {
        this.next();
        node.discriminant = this.parseParenExpression();
        node.cases = [];
        this.expect(types$1.braceL);
        this.labels.push(switchLabel);
        this.enterScope(0);
        var cur;
        for (var sawDefault = false; this.type !== types$1.braceR; ) {
          if (this.type === types$1._case || this.type === types$1._default) {
            var isCase = this.type === types$1._case;
            if (cur) {
              this.finishNode(cur, "SwitchCase");
            }
            node.cases.push(cur = this.startNode());
            cur.consequent = [];
            this.next();
            if (isCase) {
              cur.test = this.parseExpression();
            } else {
              if (sawDefault) {
                this.raiseRecoverable(this.lastTokStart, "Multiple default clauses");
              }
              sawDefault = true;
              cur.test = null;
            }
            this.expect(types$1.colon);
          } else {
            if (!cur) {
              this.unexpected();
            }
            cur.consequent.push(this.parseStatement(null));
          }
        }
        this.exitScope();
        if (cur) {
          this.finishNode(cur, "SwitchCase");
        }
        this.next();
        this.labels.pop();
        return this.finishNode(node, "SwitchStatement");
      };
      pp$8.parseThrowStatement = function(node) {
        this.next();
        if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) {
          this.raise(this.lastTokEnd, "Illegal newline after throw");
        }
        node.argument = this.parseExpression();
        this.semicolon();
        return this.finishNode(node, "ThrowStatement");
      };
      var empty$1 = [];
      pp$8.parseCatchClauseParam = function() {
        var param = this.parseBindingAtom();
        var simple = param.type === "Identifier";
        this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
        this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
        this.expect(types$1.parenR);
        return param;
      };
      pp$8.parseTryStatement = function(node) {
        this.next();
        node.block = this.parseBlock();
        node.handler = null;
        if (this.type === types$1._catch) {
          var clause = this.startNode();
          this.next();
          if (this.eat(types$1.parenL)) {
            clause.param = this.parseCatchClauseParam();
          } else {
            if (this.options.ecmaVersion < 10) {
              this.unexpected();
            }
            clause.param = null;
            this.enterScope(0);
          }
          clause.body = this.parseBlock(false);
          this.exitScope();
          node.handler = this.finishNode(clause, "CatchClause");
        }
        node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;
        if (!node.handler && !node.finalizer) {
          this.raise(node.start, "Missing catch or finally clause");
        }
        return this.finishNode(node, "TryStatement");
      };
      pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {
        this.next();
        this.parseVar(node, false, kind, allowMissingInitializer);
        this.semicolon();
        return this.finishNode(node, "VariableDeclaration");
      };
      pp$8.parseWhileStatement = function(node) {
        this.next();
        node.test = this.parseParenExpression();
        this.labels.push(loopLabel);
        node.body = this.parseStatement("while");
        this.labels.pop();
        return this.finishNode(node, "WhileStatement");
      };
      pp$8.parseWithStatement = function(node) {
        if (this.strict) {
          this.raise(this.start, "'with' in strict mode");
        }
        this.next();
        node.object = this.parseParenExpression();
        node.body = this.parseStatement("with");
        return this.finishNode(node, "WithStatement");
      };
      pp$8.parseEmptyStatement = function(node) {
        this.next();
        return this.finishNode(node, "EmptyStatement");
      };
      pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {
        for (var i$1 = 0, list3 = this.labels; i$1 < list3.length; i$1 += 1) {
          var label = list3[i$1];
          if (label.name === maybeName) {
            this.raise(expr.start, "Label '" + maybeName + "' is already declared");
          }
        }
        var kind = this.type.isLoop ? "loop" : this.type === types$1._switch ? "switch" : null;
        for (var i2 = this.labels.length - 1; i2 >= 0; i2--) {
          var label$1 = this.labels[i2];
          if (label$1.statementStart === node.start) {
            label$1.statementStart = this.start;
            label$1.kind = kind;
          } else {
            break;
          }
        }
        this.labels.push({ name: maybeName, kind, statementStart: this.start });
        node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
        this.labels.pop();
        node.label = expr;
        return this.finishNode(node, "LabeledStatement");
      };
      pp$8.parseExpressionStatement = function(node, expr) {
        node.expression = expr;
        this.semicolon();
        return this.finishNode(node, "ExpressionStatement");
      };
      pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {
        if (createNewLexicalScope === void 0)
          createNewLexicalScope = true;
        if (node === void 0)
          node = this.startNode();
        node.body = [];
        this.expect(types$1.braceL);
        if (createNewLexicalScope) {
          this.enterScope(0);
        }
        while (this.type !== types$1.braceR) {
          var stmt = this.parseStatement(null);
          node.body.push(stmt);
        }
        if (exitStrict) {
          this.strict = false;
        }
        this.next();
        if (createNewLexicalScope) {
          this.exitScope();
        }
        return this.finishNode(node, "BlockStatement");
      };
      pp$8.parseFor = function(node, init) {
        node.init = init;
        this.expect(types$1.semi);
        node.test = this.type === types$1.semi ? null : this.parseExpression();
        this.expect(types$1.semi);
        node.update = this.type === types$1.parenR ? null : this.parseExpression();
        this.expect(types$1.parenR);
        node.body = this.parseStatement("for");
        this.exitScope();
        this.labels.pop();
        return this.finishNode(node, "ForStatement");
      };
      pp$8.parseForIn = function(node, init) {
        var isForIn = this.type === types$1._in;
        this.next();
        if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || this.options.ecmaVersion < 8 || this.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) {
          this.raise(init.start, (isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer");
        }
        node.left = init;
        node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
        this.expect(types$1.parenR);
        node.body = this.parseStatement("for");
        this.exitScope();
        this.labels.pop();
        return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement");
      };
      pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {
        node.declarations = [];
        node.kind = kind;
        for (; ; ) {
          var decl2 = this.startNode();
          this.parseVarId(decl2, kind);
          if (this.eat(types$1.eq)) {
            decl2.init = this.parseMaybeAssign(isFor);
          } else if (!allowMissingInitializer && kind === "const" && !(this.type === types$1._in || this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
            this.unexpected();
          } else if (!allowMissingInitializer && decl2.id.type !== "Identifier" && !(isFor && (this.type === types$1._in || this.isContextual("of")))) {
            this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
          } else {
            decl2.init = null;
          }
          node.declarations.push(this.finishNode(decl2, "VariableDeclarator"));
          if (!this.eat(types$1.comma)) {
            break;
          }
        }
        return node;
      };
      pp$8.parseVarId = function(decl2, kind) {
        decl2.id = this.parseBindingAtom();
        this.checkLValPattern(decl2.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
      };
      var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
      pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {
        this.initFunction(node);
        if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
          if (this.type === types$1.star && statement & FUNC_HANGING_STATEMENT) {
            this.unexpected();
          }
          node.generator = this.eat(types$1.star);
        }
        if (this.options.ecmaVersion >= 8) {
          node.async = !!isAsync;
        }
        if (statement & FUNC_STATEMENT) {
          node.id = statement & FUNC_NULLABLE_ID && this.type !== types$1.name ? null : this.parseIdent();
          if (node.id && !(statement & FUNC_HANGING_STATEMENT)) {
            this.checkLValSimple(node.id, this.strict || node.generator || node.async ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION);
          }
        }
        var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
        this.yieldPos = 0;
        this.awaitPos = 0;
        this.awaitIdentPos = 0;
        this.enterScope(functionFlags(node.async, node.generator));
        if (!(statement & FUNC_STATEMENT)) {
          node.id = this.type === types$1.name ? this.parseIdent() : null;
        }
        this.parseFunctionParams(node);
        this.parseFunctionBody(node, allowExpressionBody, false, forInit);
        this.yieldPos = oldYieldPos;
        this.awaitPos = oldAwaitPos;
        this.awaitIdentPos = oldAwaitIdentPos;
        return this.finishNode(node, statement & FUNC_STATEMENT ? "FunctionDeclaration" : "FunctionExpression");
      };
      pp$8.parseFunctionParams = function(node) {
        this.expect(types$1.parenL);
        node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);
        this.checkYieldAwaitInDefaultParams();
      };
      pp$8.parseClass = function(node, isStatement) {
        this.next();
        var oldStrict = this.strict;
        this.strict = true;
        this.parseClassId(node, isStatement);
        this.parseClassSuper(node);
        var privateNameMap = this.enterClassBody();
        var classBody = this.startNode();
        var hadConstructor = false;
        classBody.body = [];
        this.expect(types$1.braceL);
        while (this.type !== types$1.braceR) {
          var element = this.parseClassElement(node.superClass !== null);
          if (element) {
            classBody.body.push(element);
            if (element.type === "MethodDefinition" && element.kind === "constructor") {
              if (hadConstructor) {
                this.raiseRecoverable(element.start, "Duplicate constructor in the same class");
              }
              hadConstructor = true;
            } else if (element.key && element.key.type === "PrivateIdentifier" && isPrivateNameConflicted(privateNameMap, element)) {
              this.raiseRecoverable(element.key.start, "Identifier '#" + element.key.name + "' has already been declared");
            }
          }
        }
        this.strict = oldStrict;
        this.next();
        node.body = this.finishNode(classBody, "ClassBody");
        this.exitClassBody();
        return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
      };
      pp$8.parseClassElement = function(constructorAllowsSuper) {
        if (this.eat(types$1.semi)) {
          return null;
        }
        var ecmaVersion2 = this.options.ecmaVersion;
        var node = this.startNode();
        var keyName = "";
        var isGenerator = false;
        var isAsync = false;
        var kind = "method";
        var isStatic = false;
        if (this.eatContextual("static")) {
          if (ecmaVersion2 >= 13 && this.eat(types$1.braceL)) {
            this.parseClassStaticBlock(node);
            return node;
          }
          if (this.isClassElementNameStart() || this.type === types$1.star) {
            isStatic = true;
          } else {
            keyName = "static";
          }
        }
        node.static = isStatic;
        if (!keyName && ecmaVersion2 >= 8 && this.eatContextual("async")) {
          if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {
            isAsync = true;
          } else {
            keyName = "async";
          }
        }
        if (!keyName && (ecmaVersion2 >= 9 || !isAsync) && this.eat(types$1.star)) {
          isGenerator = true;
        }
        if (!keyName && !isAsync && !isGenerator) {
          var lastValue = this.value;
          if (this.eatContextual("get") || this.eatContextual("set")) {
            if (this.isClassElementNameStart()) {
              kind = lastValue;
            } else {
              keyName = lastValue;
            }
          }
        }
        if (keyName) {
          node.computed = false;
          node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);
          node.key.name = keyName;
          this.finishNode(node.key, "Identifier");
        } else {
          this.parseClassElementName(node);
        }
        if (ecmaVersion2 < 13 || this.type === types$1.parenL || kind !== "method" || isGenerator || isAsync) {
          var isConstructor = !node.static && checkKeyName(node, "constructor");
          var allowsDirectSuper = isConstructor && constructorAllowsSuper;
          if (isConstructor && kind !== "method") {
            this.raise(node.key.start, "Constructor can't have get/set modifier");
          }
          node.kind = isConstructor ? "constructor" : kind;
          this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);
        } else {
          this.parseClassField(node);
        }
        return node;
      };
      pp$8.isClassElementNameStart = function() {
        return this.type === types$1.name || this.type === types$1.privateId || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword;
      };
      pp$8.parseClassElementName = function(element) {
        if (this.type === types$1.privateId) {
          if (this.value === "constructor") {
            this.raise(this.start, "Classes can't have an element named '#constructor'");
          }
          element.computed = false;
          element.key = this.parsePrivateIdent();
        } else {
          this.parsePropertyName(element);
        }
      };
      pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
        var key = method.key;
        if (method.kind === "constructor") {
          if (isGenerator) {
            this.raise(key.start, "Constructor can't be a generator");
          }
          if (isAsync) {
            this.raise(key.start, "Constructor can't be an async method");
          }
        } else if (method.static && checkKeyName(method, "prototype")) {
          this.raise(key.start, "Classes may not have a static property named prototype");
        }
        var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
        if (method.kind === "get" && value.params.length !== 0) {
          this.raiseRecoverable(value.start, "getter should have no params");
        }
        if (method.kind === "set" && value.params.length !== 1) {
          this.raiseRecoverable(value.start, "setter should have exactly one param");
        }
        if (method.kind === "set" && value.params[0].type === "RestElement") {
          this.raiseRecoverable(value.params[0].start, "Setter cannot use rest params");
        }
        return this.finishNode(method, "MethodDefinition");
      };
      pp$8.parseClassField = function(field) {
        if (checkKeyName(field, "constructor")) {
          this.raise(field.key.start, "Classes can't have a field named 'constructor'");
        } else if (field.static && checkKeyName(field, "prototype")) {
          this.raise(field.key.start, "Classes can't have a static field named 'prototype'");
        }
        if (this.eat(types$1.eq)) {
          var scope = this.currentThisScope();
          var inClassFieldInit = scope.inClassFieldInit;
          scope.inClassFieldInit = true;
          field.value = this.parseMaybeAssign();
          scope.inClassFieldInit = inClassFieldInit;
        } else {
          field.value = null;
        }
        this.semicolon();
        return this.finishNode(field, "PropertyDefinition");
      };
      pp$8.parseClassStaticBlock = function(node) {
        node.body = [];
        var oldLabels = this.labels;
        this.labels = [];
        this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);
        while (this.type !== types$1.braceR) {
          var stmt = this.parseStatement(null);
          node.body.push(stmt);
        }
        this.next();
        this.exitScope();
        this.labels = oldLabels;
        return this.finishNode(node, "StaticBlock");
      };
      pp$8.parseClassId = function(node, isStatement) {
        if (this.type === types$1.name) {
          node.id = this.parseIdent();
          if (isStatement) {
            this.checkLValSimple(node.id, BIND_LEXICAL, false);
          }
        } else {
          if (isStatement === true) {
            this.unexpected();
          }
          node.id = null;
        }
      };
      pp$8.parseClassSuper = function(node) {
        node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;
      };
      pp$8.enterClassBody = function() {
        var element = { declared: /* @__PURE__ */ Object.create(null), used: [] };
        this.privateNameStack.push(element);
        return element.declared;
      };
      pp$8.exitClassBody = function() {
        var ref2 = this.privateNameStack.pop();
        var declared = ref2.declared;
        var used = ref2.used;
        if (!this.options.checkPrivateFields) {
          return;
        }
        var len = this.privateNameStack.length;
        var parent = len === 0 ? null : this.privateNameStack[len - 1];
        for (var i2 = 0; i2 < used.length; ++i2) {
          var id = used[i2];
          if (!hasOwn(declared, id.name)) {
            if (parent) {
              parent.used.push(id);
            } else {
              this.raiseRecoverable(id.start, "Private field '#" + id.name + "' must be declared in an enclosing class");
            }
          }
        }
      };
      function isPrivateNameConflicted(privateNameMap, element) {
        var name = element.key.name;
        var curr = privateNameMap[name];
        var next = "true";
        if (element.type === "MethodDefinition" && (element.kind === "get" || element.kind === "set")) {
          next = (element.static ? "s" : "i") + element.kind;
        }
        if (curr === "iget" && next === "iset" || curr === "iset" && next === "iget" || curr === "sget" && next === "sset" || curr === "sset" && next === "sget") {
          privateNameMap[name] = "true";
          return false;
        } else if (!curr) {
          privateNameMap[name] = next;
          return false;
        } else {
          return true;
        }
      }
      function checkKeyName(node, name) {
        var computed = node.computed;
        var key = node.key;
        return !computed && (key.type === "Identifier" && key.name === name || key.type === "Literal" && key.value === name);
      }
      pp$8.parseExportAllDeclaration = function(node, exports3) {
        if (this.options.ecmaVersion >= 11) {
          if (this.eatContextual("as")) {
            node.exported = this.parseModuleExportName();
            this.checkExport(exports3, node.exported, this.lastTokStart);
          } else {
            node.exported = null;
          }
        }
        this.expectContextual("from");
        if (this.type !== types$1.string) {
          this.unexpected();
        }
        node.source = this.parseExprAtom();
        this.semicolon();
        return this.finishNode(node, "ExportAllDeclaration");
      };
      pp$8.parseExport = function(node, exports3) {
        this.next();
        if (this.eat(types$1.star)) {
          return this.parseExportAllDeclaration(node, exports3);
        }
        if (this.eat(types$1._default)) {
          this.checkExport(exports3, "default", this.lastTokStart);
          node.declaration = this.parseExportDefaultDeclaration();
          return this.finishNode(node, "ExportDefaultDeclaration");
        }
        if (this.shouldParseExportStatement()) {
          node.declaration = this.parseExportDeclaration(node);
          if (node.declaration.type === "VariableDeclaration") {
            this.checkVariableExport(exports3, node.declaration.declarations);
          } else {
            this.checkExport(exports3, node.declaration.id, node.declaration.id.start);
          }
          node.specifiers = [];
          node.source = null;
        } else {
          node.declaration = null;
          node.specifiers = this.parseExportSpecifiers(exports3);
          if (this.eatContextual("from")) {
            if (this.type !== types$1.string) {
              this.unexpected();
            }
            node.source = this.parseExprAtom();
          } else {
            for (var i2 = 0, list3 = node.specifiers; i2 < list3.length; i2 += 1) {
              var spec = list3[i2];
              this.checkUnreserved(spec.local);
              this.checkLocalExport(spec.local);
              if (spec.local.type === "Literal") {
                this.raise(spec.local.start, "A string literal cannot be used as an exported binding without `from`.");
              }
            }
            node.source = null;
          }
          this.semicolon();
        }
        return this.finishNode(node, "ExportNamedDeclaration");
      };
      pp$8.parseExportDeclaration = function(node) {
        return this.parseStatement(null);
      };
      pp$8.parseExportDefaultDeclaration = function() {
        var isAsync;
        if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {
          var fNode = this.startNode();
          this.next();
          if (isAsync) {
            this.next();
          }
          return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
        } else if (this.type === types$1._class) {
          var cNode = this.startNode();
          return this.parseClass(cNode, "nullableID");
        } else {
          var declaration = this.parseMaybeAssign();
          this.semicolon();
          return declaration;
        }
      };
      pp$8.checkExport = function(exports3, name, pos) {
        if (!exports3) {
          return;
        }
        if (typeof name !== "string") {
          name = name.type === "Identifier" ? name.name : name.value;
        }
        if (hasOwn(exports3, name)) {
          this.raiseRecoverable(pos, "Duplicate export '" + name + "'");
        }
        exports3[name] = true;
      };
      pp$8.checkPatternExport = function(exports3, pat) {
        var type = pat.type;
        if (type === "Identifier") {
          this.checkExport(exports3, pat, pat.start);
        } else if (type === "ObjectPattern") {
          for (var i2 = 0, list3 = pat.properties; i2 < list3.length; i2 += 1) {
            var prop = list3[i2];
            this.checkPatternExport(exports3, prop);
          }
        } else if (type === "ArrayPattern") {
          for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
            var elt = list$1[i$1];
            if (elt) {
              this.checkPatternExport(exports3, elt);
            }
          }
        } else if (type === "Property") {
          this.checkPatternExport(exports3, pat.value);
        } else if (type === "AssignmentPattern") {
          this.checkPatternExport(exports3, pat.left);
        } else if (type === "RestElement") {
          this.checkPatternExport(exports3, pat.argument);
        } else if (type === "ParenthesizedExpression") {
          this.checkPatternExport(exports3, pat.expression);
        }
      };
      pp$8.checkVariableExport = function(exports3, decls) {
        if (!exports3) {
          return;
        }
        for (var i2 = 0, list3 = decls; i2 < list3.length; i2 += 1) {
          var decl2 = list3[i2];
          this.checkPatternExport(exports3, decl2.id);
        }
      };
      pp$8.shouldParseExportStatement = function() {
        return this.type.keyword === "var" || this.type.keyword === "const" || this.type.keyword === "class" || this.type.keyword === "function" || this.isLet() || this.isAsyncFunction();
      };
      pp$8.parseExportSpecifier = function(exports3) {
        var node = this.startNode();
        node.local = this.parseModuleExportName();
        node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local;
        this.checkExport(exports3, node.exported, node.exported.start);
        return this.finishNode(node, "ExportSpecifier");
      };
      pp$8.parseExportSpecifiers = function(exports3) {
        var nodes = [], first = true;
        this.expect(types$1.braceL);
        while (!this.eat(types$1.braceR)) {
          if (!first) {
            this.expect(types$1.comma);
            if (this.afterTrailingComma(types$1.braceR)) {
              break;
            }
          } else {
            first = false;
          }
          nodes.push(this.parseExportSpecifier(exports3));
        }
        return nodes;
      };
      pp$8.parseImport = function(node) {
        this.next();
        if (this.type === types$1.string) {
          node.specifiers = empty$1;
          node.source = this.parseExprAtom();
        } else {
          node.specifiers = this.parseImportSpecifiers();
          this.expectContextual("from");
          node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();
        }
        this.semicolon();
        return this.finishNode(node, "ImportDeclaration");
      };
      pp$8.parseImportSpecifier = function() {
        var node = this.startNode();
        node.imported = this.parseModuleExportName();
        if (this.eatContextual("as")) {
          node.local = this.parseIdent();
        } else {
          this.checkUnreserved(node.imported);
          node.local = node.imported;
        }
        this.checkLValSimple(node.local, BIND_LEXICAL);
        return this.finishNode(node, "ImportSpecifier");
      };
      pp$8.parseImportDefaultSpecifier = function() {
        var node = this.startNode();
        node.local = this.parseIdent();
        this.checkLValSimple(node.local, BIND_LEXICAL);
        return this.finishNode(node, "ImportDefaultSpecifier");
      };
      pp$8.parseImportNamespaceSpecifier = function() {
        var node = this.startNode();
        this.next();
        this.expectContextual("as");
        node.local = this.parseIdent();
        this.checkLValSimple(node.local, BIND_LEXICAL);
        return this.finishNode(node, "ImportNamespaceSpecifier");
      };
      pp$8.parseImportSpecifiers = function() {
        var nodes = [], first = true;
        if (this.type === types$1.name) {
          nodes.push(this.parseImportDefaultSpecifier());
          if (!this.eat(types$1.comma)) {
            return nodes;
          }
        }
        if (this.type === types$1.star) {
          nodes.push(this.parseImportNamespaceSpecifier());
          return nodes;
        }
        this.expect(types$1.braceL);
        while (!this.eat(types$1.braceR)) {
          if (!first) {
            this.expect(types$1.comma);
            if (this.afterTrailingComma(types$1.braceR)) {
              break;
            }
          } else {
            first = false;
          }
          nodes.push(this.parseImportSpecifier());
        }
        return nodes;
      };
      pp$8.parseModuleExportName = function() {
        if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {
          var stringLiteral = this.parseLiteral(this.value);
          if (loneSurrogate.test(stringLiteral.value)) {
            this.raise(stringLiteral.start, "An export name cannot include a lone surrogate.");
          }
          return stringLiteral;
        }
        return this.parseIdent(true);
      };
      pp$8.adaptDirectivePrologue = function(statements) {
        for (var i2 = 0; i2 < statements.length && this.isDirectiveCandidate(statements[i2]); ++i2) {
          statements[i2].directive = statements[i2].expression.raw.slice(1, -1);
        }
      };
      pp$8.isDirectiveCandidate = function(statement) {
        return this.options.ecmaVersion >= 5 && statement.type === "ExpressionStatement" && statement.expression.type === "Literal" && typeof statement.expression.value === "string" && (this.input[statement.start] === '"' || this.input[statement.start] === "'");
      };
      var pp$7 = Parser.prototype;
      pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {
        if (this.options.ecmaVersion >= 6 && node) {
          switch (node.type) {
            case "Identifier":
              if (this.inAsync && node.name === "await") {
                this.raise(node.start, "Cannot use 'await' as identifier inside an async function");
              }
              break;
            case "ObjectPattern":
            case "ArrayPattern":
            case "AssignmentPattern":
            case "RestElement":
              break;
            case "ObjectExpression":
              node.type = "ObjectPattern";
              if (refDestructuringErrors) {
                this.checkPatternErrors(refDestructuringErrors, true);
              }
              for (var i2 = 0, list3 = node.properties; i2 < list3.length; i2 += 1) {
                var prop = list3[i2];
                this.toAssignable(prop, isBinding);
                if (prop.type === "RestElement" && (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")) {
                  this.raise(prop.argument.start, "Unexpected token");
                }
              }
              break;
            case "Property":
              if (node.kind !== "init") {
                this.raise(node.key.start, "Object pattern can't contain getter or setter");
              }
              this.toAssignable(node.value, isBinding);
              break;
            case "ArrayExpression":
              node.type = "ArrayPattern";
              if (refDestructuringErrors) {
                this.checkPatternErrors(refDestructuringErrors, true);
              }
              this.toAssignableList(node.elements, isBinding);
              break;
            case "SpreadElement":
              node.type = "RestElement";
              this.toAssignable(node.argument, isBinding);
              if (node.argument.type === "AssignmentPattern") {
                this.raise(node.argument.start, "Rest elements cannot have a default value");
              }
              break;
            case "AssignmentExpression":
              if (node.operator !== "=") {
                this.raise(node.left.end, "Only '=' operator can be used for specifying default value.");
              }
              node.type = "AssignmentPattern";
              delete node.operator;
              this.toAssignable(node.left, isBinding);
              break;
            case "ParenthesizedExpression":
              this.toAssignable(node.expression, isBinding, refDestructuringErrors);
              break;
            case "ChainExpression":
              this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side");
              break;
            case "MemberExpression":
              if (!isBinding) {
                break;
              }
            default:
              this.raise(node.start, "Assigning to rvalue");
          }
        } else if (refDestructuringErrors) {
          this.checkPatternErrors(refDestructuringErrors, true);
        }
        return node;
      };
      pp$7.toAssignableList = function(exprList, isBinding) {
        var end = exprList.length;
        for (var i2 = 0; i2 < end; i2++) {
          var elt = exprList[i2];
          if (elt) {
            this.toAssignable(elt, isBinding);
          }
        }
        if (end) {
          var last2 = exprList[end - 1];
          if (this.options.ecmaVersion === 6 && isBinding && last2 && last2.type === "RestElement" && last2.argument.type !== "Identifier") {
            this.unexpected(last2.argument.start);
          }
        }
        return exprList;
      };
      pp$7.parseSpread = function(refDestructuringErrors) {
        var node = this.startNode();
        this.next();
        node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
        return this.finishNode(node, "SpreadElement");
      };
      pp$7.parseRestBinding = function() {
        var node = this.startNode();
        this.next();
        if (this.options.ecmaVersion === 6 && this.type !== types$1.name) {
          this.unexpected();
        }
        node.argument = this.parseBindingAtom();
        return this.finishNode(node, "RestElement");
      };
      pp$7.parseBindingAtom = function() {
        if (this.options.ecmaVersion >= 6) {
          switch (this.type) {
            case types$1.bracketL:
              var node = this.startNode();
              this.next();
              node.elements = this.parseBindingList(types$1.bracketR, true, true);
              return this.finishNode(node, "ArrayPattern");
            case types$1.braceL:
              return this.parseObj(true);
          }
        }
        return this.parseIdent();
      };
      pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {
        var elts = [], first = true;
        while (!this.eat(close)) {
          if (first) {
            first = false;
          } else {
            this.expect(types$1.comma);
          }
          if (allowEmpty && this.type === types$1.comma) {
            elts.push(null);
          } else if (allowTrailingComma && this.afterTrailingComma(close)) {
            break;
          } else if (this.type === types$1.ellipsis) {
            var rest = this.parseRestBinding();
            this.parseBindingListItem(rest);
            elts.push(rest);
            if (this.type === types$1.comma) {
              this.raiseRecoverable(this.start, "Comma is not permitted after the rest element");
            }
            this.expect(close);
            break;
          } else {
            elts.push(this.parseAssignableListItem(allowModifiers));
          }
        }
        return elts;
      };
      pp$7.parseAssignableListItem = function(allowModifiers) {
        var elem = this.parseMaybeDefault(this.start, this.startLoc);
        this.parseBindingListItem(elem);
        return elem;
      };
      pp$7.parseBindingListItem = function(param) {
        return param;
      };
      pp$7.parseMaybeDefault = function(startPos, startLoc, left) {
        left = left || this.parseBindingAtom();
        if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) {
          return left;
        }
        var node = this.startNodeAt(startPos, startLoc);
        node.left = left;
        node.right = this.parseMaybeAssign();
        return this.finishNode(node, "AssignmentPattern");
      };
      pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {
        if (bindingType === void 0)
          bindingType = BIND_NONE;
        var isBind = bindingType !== BIND_NONE;
        switch (expr.type) {
          case "Identifier":
            if (this.strict && this.reservedWordsStrictBind.test(expr.name)) {
              this.raiseRecoverable(expr.start, (isBind ? "Binding " : "Assigning to ") + expr.name + " in strict mode");
            }
            if (isBind) {
              if (bindingType === BIND_LEXICAL && expr.name === "let") {
                this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name");
              }
              if (checkClashes) {
                if (hasOwn(checkClashes, expr.name)) {
                  this.raiseRecoverable(expr.start, "Argument name clash");
                }
                checkClashes[expr.name] = true;
              }
              if (bindingType !== BIND_OUTSIDE) {
                this.declareName(expr.name, bindingType, expr.start);
              }
            }
            break;
          case "ChainExpression":
            this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side");
            break;
          case "MemberExpression":
            if (isBind) {
              this.raiseRecoverable(expr.start, "Binding member expression");
            }
            break;
          case "ParenthesizedExpression":
            if (isBind) {
              this.raiseRecoverable(expr.start, "Binding parenthesized expression");
            }
            return this.checkLValSimple(expr.expression, bindingType, checkClashes);
          default:
            this.raise(expr.start, (isBind ? "Binding" : "Assigning to") + " rvalue");
        }
      };
      pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {
        if (bindingType === void 0)
          bindingType = BIND_NONE;
        switch (expr.type) {
          case "ObjectPattern":
            for (var i2 = 0, list3 = expr.properties; i2 < list3.length; i2 += 1) {
              var prop = list3[i2];
              this.checkLValInnerPattern(prop, bindingType, checkClashes);
            }
            break;
          case "ArrayPattern":
            for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
              var elem = list$1[i$1];
              if (elem) {
                this.checkLValInnerPattern(elem, bindingType, checkClashes);
              }
            }
            break;
          default:
            this.checkLValSimple(expr, bindingType, checkClashes);
        }
      };
      pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {
        if (bindingType === void 0)
          bindingType = BIND_NONE;
        switch (expr.type) {
          case "Property":
            this.checkLValInnerPattern(expr.value, bindingType, checkClashes);
            break;
          case "AssignmentPattern":
            this.checkLValPattern(expr.left, bindingType, checkClashes);
            break;
          case "RestElement":
            this.checkLValPattern(expr.argument, bindingType, checkClashes);
            break;
          default:
            this.checkLValPattern(expr, bindingType, checkClashes);
        }
      };
      var TokContext = function TokContext2(token, isExpr, preserveSpace, override, generator) {
        this.token = token;
        this.isExpr = !!isExpr;
        this.preserveSpace = !!preserveSpace;
        this.override = override;
        this.generator = !!generator;
      };
      var types = {
        b_stat: new TokContext("{", false),
        b_expr: new TokContext("{", true),
        b_tmpl: new TokContext("${", false),
        p_stat: new TokContext("(", false),
        p_expr: new TokContext("(", true),
        q_tmpl: new TokContext("`", true, true, function(p) {
          return p.tryReadTemplateToken();
        }),
        f_stat: new TokContext("function", false),
        f_expr: new TokContext("function", true),
        f_expr_gen: new TokContext("function", true, false, null, true),
        f_gen: new TokContext("function", false, false, null, true)
      };
      var pp$6 = Parser.prototype;
      pp$6.initialContext = function() {
        return [types.b_stat];
      };
      pp$6.curContext = function() {
        return this.context[this.context.length - 1];
      };
      pp$6.braceIsBlock = function(prevType) {
        var parent = this.curContext();
        if (parent === types.f_expr || parent === types.f_stat) {
          return true;
        }
        if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr)) {
          return !parent.isExpr;
        }
        if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed) {
          return lineBreak.test(this.input.slice(this.lastTokEnd, this.start));
        }
        if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow) {
          return true;
        }
        if (prevType === types$1.braceL) {
          return parent === types.b_stat;
        }
        if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name) {
          return false;
        }
        return !this.exprAllowed;
      };
      pp$6.inGeneratorContext = function() {
        for (var i2 = this.context.length - 1; i2 >= 1; i2--) {
          var context = this.context[i2];
          if (context.token === "function") {
            return context.generator;
          }
        }
        return false;
      };
      pp$6.updateContext = function(prevType) {
        var update, type = this.type;
        if (type.keyword && prevType === types$1.dot) {
          this.exprAllowed = false;
        } else if (update = type.updateContext) {
          update.call(this, prevType);
        } else {
          this.exprAllowed = type.beforeExpr;
        }
      };
      pp$6.overrideContext = function(tokenCtx) {
        if (this.curContext() !== tokenCtx) {
          this.context[this.context.length - 1] = tokenCtx;
        }
      };
      types$1.parenR.updateContext = types$1.braceR.updateContext = function() {
        if (this.context.length === 1) {
          this.exprAllowed = true;
          return;
        }
        var out = this.context.pop();
        if (out === types.b_stat && this.curContext().token === "function") {
          out = this.context.pop();
        }
        this.exprAllowed = !out.isExpr;
      };
      types$1.braceL.updateContext = function(prevType) {
        this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);
        this.exprAllowed = true;
      };
      types$1.dollarBraceL.updateContext = function() {
        this.context.push(types.b_tmpl);
        this.exprAllowed = true;
      };
      types$1.parenL.updateContext = function(prevType) {
        var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;
        this.context.push(statementParens ? types.p_stat : types.p_expr);
        this.exprAllowed = true;
      };
      types$1.incDec.updateContext = function() {
      };
      types$1._function.updateContext = types$1._class.updateContext = function(prevType) {
        if (prevType.beforeExpr && prevType !== types$1._else && !(prevType === types$1.semi && this.curContext() !== types.p_stat) && !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat)) {
          this.context.push(types.f_expr);
        } else {
          this.context.push(types.f_stat);
        }
        this.exprAllowed = false;
      };
      types$1.backQuote.updateContext = function() {
        if (this.curContext() === types.q_tmpl) {
          this.context.pop();
        } else {
          this.context.push(types.q_tmpl);
        }
        this.exprAllowed = false;
      };
      types$1.star.updateContext = function(prevType) {
        if (prevType === types$1._function) {
          var index = this.context.length - 1;
          if (this.context[index] === types.f_expr) {
            this.context[index] = types.f_expr_gen;
          } else {
            this.context[index] = types.f_gen;
          }
        }
        this.exprAllowed = true;
      };
      types$1.name.updateContext = function(prevType) {
        var allowed = false;
        if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {
          if (this.value === "of" && !this.exprAllowed || this.value === "yield" && this.inGeneratorContext()) {
            allowed = true;
          }
        }
        this.exprAllowed = allowed;
      };
      var pp$5 = Parser.prototype;
      pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {
        if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement") {
          return;
        }
        if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) {
          return;
        }
        var key = prop.key;
        var name;
        switch (key.type) {
          case "Identifier":
            name = key.name;
            break;
          case "Literal":
            name = String(key.value);
            break;
          default:
            return;
        }
        var kind = prop.kind;
        if (this.options.ecmaVersion >= 6) {
          if (name === "__proto__" && kind === "init") {
            if (propHash.proto) {
              if (refDestructuringErrors) {
                if (refDestructuringErrors.doubleProto < 0) {
                  refDestructuringErrors.doubleProto = key.start;
                }
              } else {
                this.raiseRecoverable(key.start, "Redefinition of __proto__ property");
              }
            }
            propHash.proto = true;
          }
          return;
        }
        name = "$" + name;
        var other = propHash[name];
        if (other) {
          var redefinition;
          if (kind === "init") {
            redefinition = this.strict && other.init || other.get || other.set;
          } else {
            redefinition = other.init || other[kind];
          }
          if (redefinition) {
            this.raiseRecoverable(key.start, "Redefinition of property");
          }
        } else {
          other = propHash[name] = {
            init: false,
            get: false,
            set: false
          };
        }
        other[kind] = true;
      };
      pp$5.parseExpression = function(forInit, refDestructuringErrors) {
        var startPos = this.start, startLoc = this.startLoc;
        var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);
        if (this.type === types$1.comma) {
          var node = this.startNodeAt(startPos, startLoc);
          node.expressions = [expr];
          while (this.eat(types$1.comma)) {
            node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors));
          }
          return this.finishNode(node, "SequenceExpression");
        }
        return expr;
      };
      pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {
        if (this.isContextual("yield")) {
          if (this.inGenerator) {
            return this.parseYield(forInit);
          } else {
            this.exprAllowed = false;
          }
        }
        var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;
        if (refDestructuringErrors) {
          oldParenAssign = refDestructuringErrors.parenthesizedAssign;
          oldTrailingComma = refDestructuringErrors.trailingComma;
          oldDoubleProto = refDestructuringErrors.doubleProto;
          refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;
        } else {
          refDestructuringErrors = new DestructuringErrors();
          ownDestructuringErrors = true;
        }
        var startPos = this.start, startLoc = this.startLoc;
        if (this.type === types$1.parenL || this.type === types$1.name) {
          this.potentialArrowAt = this.start;
          this.potentialArrowInForAwait = forInit === "await";
        }
        var left = this.parseMaybeConditional(forInit, refDestructuringErrors);
        if (afterLeftParse) {
          left = afterLeftParse.call(this, left, startPos, startLoc);
        }
        if (this.type.isAssign) {
          var node = this.startNodeAt(startPos, startLoc);
          node.operator = this.value;
          if (this.type === types$1.eq) {
            left = this.toAssignable(left, false, refDestructuringErrors);
          }
          if (!ownDestructuringErrors) {
            refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;
          }
          if (refDestructuringErrors.shorthandAssign >= left.start) {
            refDestructuringErrors.shorthandAssign = -1;
          }
          if (this.type === types$1.eq) {
            this.checkLValPattern(left);
          } else {
            this.checkLValSimple(left);
          }
          node.left = left;
          this.next();
          node.right = this.parseMaybeAssign(forInit);
          if (oldDoubleProto > -1) {
            refDestructuringErrors.doubleProto = oldDoubleProto;
          }
          return this.finishNode(node, "AssignmentExpression");
        } else {
          if (ownDestructuringErrors) {
            this.checkExpressionErrors(refDestructuringErrors, true);
          }
        }
        if (oldParenAssign > -1) {
          refDestructuringErrors.parenthesizedAssign = oldParenAssign;
        }
        if (oldTrailingComma > -1) {
          refDestructuringErrors.trailingComma = oldTrailingComma;
        }
        return left;
      };
      pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {
        var startPos = this.start, startLoc = this.startLoc;
        var expr = this.parseExprOps(forInit, refDestructuringErrors);
        if (this.checkExpressionErrors(refDestructuringErrors)) {
          return expr;
        }
        if (this.eat(types$1.question)) {
          var node = this.startNodeAt(startPos, startLoc);
          node.test = expr;
          node.consequent = this.parseMaybeAssign();
          this.expect(types$1.colon);
          node.alternate = this.parseMaybeAssign(forInit);
          return this.finishNode(node, "ConditionalExpression");
        }
        return expr;
      };
      pp$5.parseExprOps = function(forInit, refDestructuringErrors) {
        var startPos = this.start, startLoc = this.startLoc;
        var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);
        if (this.checkExpressionErrors(refDestructuringErrors)) {
          return expr;
        }
        return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit);
      };
      pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {
        var prec = this.type.binop;
        if (prec != null && (!forInit || this.type !== types$1._in)) {
          if (prec > minPrec) {
            var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;
            var coalesce = this.type === types$1.coalesce;
            if (coalesce) {
              prec = types$1.logicalAND.binop;
            }
            var op = this.value;
            this.next();
            var startPos = this.start, startLoc = this.startLoc;
            var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);
            var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);
            if (logical && this.type === types$1.coalesce || coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND)) {
              this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");
            }
            return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit);
          }
        }
        return left;
      };
      pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {
        if (right.type === "PrivateIdentifier") {
          this.raise(right.start, "Private identifier can only be left side of binary expression");
        }
        var node = this.startNodeAt(startPos, startLoc);
        node.left = left;
        node.operator = op;
        node.right = right;
        return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression");
      };
      pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {
        var startPos = this.start, startLoc = this.startLoc, expr;
        if (this.isContextual("await") && this.canAwait) {
          expr = this.parseAwait(forInit);
          sawUnary = true;
        } else if (this.type.prefix) {
          var node = this.startNode(), update = this.type === types$1.incDec;
          node.operator = this.value;
          node.prefix = true;
          this.next();
          node.argument = this.parseMaybeUnary(null, true, update, forInit);
          this.checkExpressionErrors(refDestructuringErrors, true);
          if (update) {
            this.checkLValSimple(node.argument);
          } else if (this.strict && node.operator === "delete" && node.argument.type === "Identifier") {
            this.raiseRecoverable(node.start, "Deleting local variable in strict mode");
          } else if (node.operator === "delete" && isPrivateFieldAccess(node.argument)) {
            this.raiseRecoverable(node.start, "Private fields can not be deleted");
          } else {
            sawUnary = true;
          }
          expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
        } else if (!sawUnary && this.type === types$1.privateId) {
          if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) {
            this.unexpected();
          }
          expr = this.parsePrivateIdent();
          if (this.type !== types$1._in) {
            this.unexpected();
          }
        } else {
          expr = this.parseExprSubscripts(refDestructuringErrors, forInit);
          if (this.checkExpressionErrors(refDestructuringErrors)) {
            return expr;
          }
          while (this.type.postfix && !this.canInsertSemicolon()) {
            var node$1 = this.startNodeAt(startPos, startLoc);
            node$1.operator = this.value;
            node$1.prefix = false;
            node$1.argument = expr;
            this.checkLValSimple(expr);
            this.next();
            expr = this.finishNode(node$1, "UpdateExpression");
          }
        }
        if (!incDec && this.eat(types$1.starstar)) {
          if (sawUnary) {
            this.unexpected(this.lastTokStart);
          } else {
            return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), "**", false);
          }
        } else {
          return expr;
        }
      };
      function isPrivateFieldAccess(node) {
        return node.type === "MemberExpression" && node.property.type === "PrivateIdentifier" || node.type === "ChainExpression" && isPrivateFieldAccess(node.expression);
      }
      pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {
        var startPos = this.start, startLoc = this.startLoc;
        var expr = this.parseExprAtom(refDestructuringErrors, forInit);
        if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")") {
          return expr;
        }
        var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);
        if (refDestructuringErrors && result.type === "MemberExpression") {
          if (refDestructuringErrors.parenthesizedAssign >= result.start) {
            refDestructuringErrors.parenthesizedAssign = -1;
          }
          if (refDestructuringErrors.parenthesizedBind >= result.start) {
            refDestructuringErrors.parenthesizedBind = -1;
          }
          if (refDestructuringErrors.trailingComma >= result.start) {
            refDestructuringErrors.trailingComma = -1;
          }
        }
        return result;
      };
      pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {
        var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start;
        var optionalChained = false;
        while (true) {
          var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);
          if (element.optional) {
            optionalChained = true;
          }
          if (element === base || element.type === "ArrowFunctionExpression") {
            if (optionalChained) {
              var chainNode = this.startNodeAt(startPos, startLoc);
              chainNode.expression = element;
              element = this.finishNode(chainNode, "ChainExpression");
            }
            return element;
          }
          base = element;
        }
      };
      pp$5.shouldParseAsyncArrow = function() {
        return !this.canInsertSemicolon() && this.eat(types$1.arrow);
      };
      pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {
        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit);
      };
      pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {
        var optionalSupported = this.options.ecmaVersion >= 11;
        var optional = optionalSupported && this.eat(types$1.questionDot);
        if (noCalls && optional) {
          this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions");
        }
        var computed = this.eat(types$1.bracketL);
        if (computed || optional && this.type !== types$1.parenL && this.type !== types$1.backQuote || this.eat(types$1.dot)) {
          var node = this.startNodeAt(startPos, startLoc);
          node.object = base;
          if (computed) {
            node.property = this.parseExpression();
            this.expect(types$1.bracketR);
          } else if (this.type === types$1.privateId && base.type !== "Super") {
            node.property = this.parsePrivateIdent();
          } else {
            node.property = this.parseIdent(this.options.allowReserved !== "never");
          }
          node.computed = !!computed;
          if (optionalSupported) {
            node.optional = optional;
          }
          base = this.finishNode(node, "MemberExpression");
        } else if (!noCalls && this.eat(types$1.parenL)) {
          var refDestructuringErrors = new DestructuringErrors(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
          this.yieldPos = 0;
          this.awaitPos = 0;
          this.awaitIdentPos = 0;
          var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);
          if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {
            this.checkPatternErrors(refDestructuringErrors, false);
            this.checkYieldAwaitInDefaultParams();
            if (this.awaitIdentPos > 0) {
              this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function");
            }
            this.yieldPos = oldYieldPos;
            this.awaitPos = oldAwaitPos;
            this.awaitIdentPos = oldAwaitIdentPos;
            return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit);
          }
          this.checkExpressionErrors(refDestructuringErrors, true);
          this.yieldPos = oldYieldPos || this.yieldPos;
          this.awaitPos = oldAwaitPos || this.awaitPos;
          this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
          var node$1 = this.startNodeAt(startPos, startLoc);
          node$1.callee = base;
          node$1.arguments = exprList;
          if (optionalSupported) {
            node$1.optional = optional;
          }
          base = this.finishNode(node$1, "CallExpression");
        } else if (this.type === types$1.backQuote) {
          if (optional || optionalChained) {
            this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions");
          }
          var node$2 = this.startNodeAt(startPos, startLoc);
          node$2.tag = base;
          node$2.quasi = this.parseTemplate({ isTagged: true });
          base = this.finishNode(node$2, "TaggedTemplateExpression");
        }
        return base;
      };
      pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {
        if (this.type === types$1.slash) {
          this.readRegexp();
        }
        var node, canBeArrow = this.potentialArrowAt === this.start;
        switch (this.type) {
          case types$1._super:
            if (!this.allowSuper) {
              this.raise(this.start, "'super' keyword outside a method");
            }
            node = this.startNode();
            this.next();
            if (this.type === types$1.parenL && !this.allowDirectSuper) {
              this.raise(node.start, "super() call outside constructor of a subclass");
            }
            if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL) {
              this.unexpected();
            }
            return this.finishNode(node, "Super");
          case types$1._this:
            node = this.startNode();
            this.next();
            return this.finishNode(node, "ThisExpression");
          case types$1.name:
            var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
            var id = this.parseIdent(false);
            if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types$1._function)) {
              this.overrideContext(types.f_expr);
              return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit);
            }
            if (canBeArrow && !this.canInsertSemicolon()) {
              if (this.eat(types$1.arrow)) {
                return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit);
              }
              if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types$1.name && !containsEsc && (!this.potentialArrowInForAwait || this.value !== "of" || this.containsEsc)) {
                id = this.parseIdent(false);
                if (this.canInsertSemicolon() || !this.eat(types$1.arrow)) {
                  this.unexpected();
                }
                return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit);
              }
            }
            return id;
          case types$1.regexp:
            var value = this.value;
            node = this.parseLiteral(value.value);
            node.regex = { pattern: value.pattern, flags: value.flags };
            return node;
          case types$1.num:
          case types$1.string:
            return this.parseLiteral(this.value);
          case types$1._null:
          case types$1._true:
          case types$1._false:
            node = this.startNode();
            node.value = this.type === types$1._null ? null : this.type === types$1._true;
            node.raw = this.type.keyword;
            this.next();
            return this.finishNode(node, "Literal");
          case types$1.parenL:
            var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);
            if (refDestructuringErrors) {
              if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) {
                refDestructuringErrors.parenthesizedAssign = start;
              }
              if (refDestructuringErrors.parenthesizedBind < 0) {
                refDestructuringErrors.parenthesizedBind = start;
              }
            }
            return expr;
          case types$1.bracketL:
            node = this.startNode();
            this.next();
            node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);
            return this.finishNode(node, "ArrayExpression");
          case types$1.braceL:
            this.overrideContext(types.b_expr);
            return this.parseObj(false, refDestructuringErrors);
          case types$1._function:
            node = this.startNode();
            this.next();
            return this.parseFunction(node, 0);
          case types$1._class:
            return this.parseClass(this.startNode(), false);
          case types$1._new:
            return this.parseNew();
          case types$1.backQuote:
            return this.parseTemplate();
          case types$1._import:
            if (this.options.ecmaVersion >= 11) {
              return this.parseExprImport(forNew);
            } else {
              return this.unexpected();
            }
          default:
            return this.parseExprAtomDefault();
        }
      };
      pp$5.parseExprAtomDefault = function() {
        this.unexpected();
      };
      pp$5.parseExprImport = function(forNew) {
        var node = this.startNode();
        if (this.containsEsc) {
          this.raiseRecoverable(this.start, "Escape sequence in keyword import");
        }
        var meta = this.parseIdent(true);
        if (this.type === types$1.parenL && !forNew) {
          return this.parseDynamicImport(node);
        } else if (this.type === types$1.dot) {
          node.meta = meta;
          return this.parseImportMeta(node);
        } else {
          this.unexpected();
        }
      };
      pp$5.parseDynamicImport = function(node) {
        this.next();
        node.source = this.parseMaybeAssign();
        if (!this.eat(types$1.parenR)) {
          var errorPos = this.start;
          if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {
            this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()");
          } else {
            this.unexpected(errorPos);
          }
        }
        return this.finishNode(node, "ImportExpression");
      };
      pp$5.parseImportMeta = function(node) {
        this.next();
        var containsEsc = this.containsEsc;
        node.property = this.parseIdent(true);
        if (node.property.name !== "meta") {
          this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'");
        }
        if (containsEsc) {
          this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters");
        }
        if (this.options.sourceType !== "module" && !this.options.allowImportExportEverywhere) {
          this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module");
        }
        return this.finishNode(node, "MetaProperty");
      };
      pp$5.parseLiteral = function(value) {
        var node = this.startNode();
        node.value = value;
        node.raw = this.input.slice(this.start, this.end);
        if (node.raw.charCodeAt(node.raw.length - 1) === 110) {
          node.bigint = node.raw.slice(0, -1).replace(/_/g, "");
        }
        this.next();
        return this.finishNode(node, "Literal");
      };
      pp$5.parseParenExpression = function() {
        this.expect(types$1.parenL);
        var val = this.parseExpression();
        this.expect(types$1.parenR);
        return val;
      };
      pp$5.shouldParseArrow = function(exprList) {
        return !this.canInsertSemicolon();
      };
      pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {
        var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
        if (this.options.ecmaVersion >= 6) {
          this.next();
          var innerStartPos = this.start, innerStartLoc = this.startLoc;
          var exprList = [], first = true, lastIsComma = false;
          var refDestructuringErrors = new DestructuringErrors(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
          this.yieldPos = 0;
          this.awaitPos = 0;
          while (this.type !== types$1.parenR) {
            first ? first = false : this.expect(types$1.comma);
            if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {
              lastIsComma = true;
              break;
            } else if (this.type === types$1.ellipsis) {
              spreadStart = this.start;
              exprList.push(this.parseParenItem(this.parseRestBinding()));
              if (this.type === types$1.comma) {
                this.raiseRecoverable(this.start, "Comma is not permitted after the rest element");
              }
              break;
            } else {
              exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
            }
          }
          var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;
          this.expect(types$1.parenR);
          if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {
            this.checkPatternErrors(refDestructuringErrors, false);
            this.checkYieldAwaitInDefaultParams();
            this.yieldPos = oldYieldPos;
            this.awaitPos = oldAwaitPos;
            return this.parseParenArrowList(startPos, startLoc, exprList, forInit);
          }
          if (!exprList.length || lastIsComma) {
            this.unexpected(this.lastTokStart);
          }
          if (spreadStart) {
            this.unexpected(spreadStart);
          }
          this.checkExpressionErrors(refDestructuringErrors, true);
          this.yieldPos = oldYieldPos || this.yieldPos;
          this.awaitPos = oldAwaitPos || this.awaitPos;
          if (exprList.length > 1) {
            val = this.startNodeAt(innerStartPos, innerStartLoc);
            val.expressions = exprList;
            this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
          } else {
            val = exprList[0];
          }
        } else {
          val = this.parseParenExpression();
        }
        if (this.options.preserveParens) {
          var par = this.startNodeAt(startPos, startLoc);
          par.expression = val;
          return this.finishNode(par, "ParenthesizedExpression");
        } else {
          return val;
        }
      };
      pp$5.parseParenItem = function(item) {
        return item;
      };
      pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {
        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit);
      };
      var empty = [];
      pp$5.parseNew = function() {
        if (this.containsEsc) {
          this.raiseRecoverable(this.start, "Escape sequence in keyword new");
        }
        var node = this.startNode();
        var meta = this.parseIdent(true);
        if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {
          node.meta = meta;
          var containsEsc = this.containsEsc;
          node.property = this.parseIdent(true);
          if (node.property.name !== "target") {
            this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'");
          }
          if (containsEsc) {
            this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters");
          }
          if (!this.allowNewDotTarget) {
            this.raiseRecoverable(node.start, "'new.target' can only be used in functions and class static block");
          }
          return this.finishNode(node, "MetaProperty");
        }
        var startPos = this.start, startLoc = this.startLoc;
        node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);
        if (this.eat(types$1.parenL)) {
          node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false);
        } else {
          node.arguments = empty;
        }
        return this.finishNode(node, "NewExpression");
      };
      pp$5.parseTemplateElement = function(ref2) {
        var isTagged = ref2.isTagged;
        var elem = this.startNode();
        if (this.type === types$1.invalidTemplate) {
          if (!isTagged) {
            this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
          }
          elem.value = {
            raw: this.value,
            cooked: null
          };
        } else {
          elem.value = {
            raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
            cooked: this.value
          };
        }
        this.next();
        elem.tail = this.type === types$1.backQuote;
        return this.finishNode(elem, "TemplateElement");
      };
      pp$5.parseTemplate = function(ref2) {
        if (ref2 === void 0)
          ref2 = {};
        var isTagged = ref2.isTagged;
        if (isTagged === void 0)
          isTagged = false;
        var node = this.startNode();
        this.next();
        node.expressions = [];
        var curElt = this.parseTemplateElement({ isTagged });
        node.quasis = [curElt];
        while (!curElt.tail) {
          if (this.type === types$1.eof) {
            this.raise(this.pos, "Unterminated template literal");
          }
          this.expect(types$1.dollarBraceL);
          node.expressions.push(this.parseExpression());
          this.expect(types$1.braceR);
          node.quasis.push(curElt = this.parseTemplateElement({ isTagged }));
        }
        this.next();
        return this.finishNode(node, "TemplateLiteral");
      };
      pp$5.isAsyncProp = function(prop) {
        return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" && (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === types$1.star) && !lineBreak.test(this.input.slice(this.lastTokEnd, this.start));
      };
      pp$5.parseObj = function(isPattern, refDestructuringErrors) {
        var node = this.startNode(), first = true, propHash = {};
        node.properties = [];
        this.next();
        while (!this.eat(types$1.braceR)) {
          if (!first) {
            this.expect(types$1.comma);
            if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) {
              break;
            }
          } else {
            first = false;
          }
          var prop = this.parseProperty(isPattern, refDestructuringErrors);
          if (!isPattern) {
            this.checkPropClash(prop, propHash, refDestructuringErrors);
          }
          node.properties.push(prop);
        }
        return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression");
      };
      pp$5.parseProperty = function(isPattern, refDestructuringErrors) {
        var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
        if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {
          if (isPattern) {
            prop.argument = this.parseIdent(false);
            if (this.type === types$1.comma) {
              this.raiseRecoverable(this.start, "Comma is not permitted after the rest element");
            }
            return this.finishNode(prop, "RestElement");
          }
          prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
          if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
            refDestructuringErrors.trailingComma = this.start;
          }
          return this.finishNode(prop, "SpreadElement");
        }
        if (this.options.ecmaVersion >= 6) {
          prop.method = false;
          prop.shorthand = false;
          if (isPattern || refDestructuringErrors) {
            startPos = this.start;
            startLoc = this.startLoc;
          }
          if (!isPattern) {
            isGenerator = this.eat(types$1.star);
          }
        }
        var containsEsc = this.containsEsc;
        this.parsePropertyName(prop);
        if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
          isAsync = true;
          isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);
          this.parsePropertyName(prop);
        } else {
          isAsync = false;
        }
        this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
        return this.finishNode(prop, "Property");
      };
      pp$5.parseGetterSetter = function(prop) {
        prop.kind = prop.key.name;
        this.parsePropertyName(prop);
        prop.value = this.parseMethod(false);
        var paramCount = prop.kind === "get" ? 0 : 1;
        if (prop.value.params.length !== paramCount) {
          var start = prop.value.start;
          if (prop.kind === "get") {
            this.raiseRecoverable(start, "getter should have no params");
          } else {
            this.raiseRecoverable(start, "setter should have exactly one param");
          }
        } else {
          if (prop.kind === "set" && prop.value.params[0].type === "RestElement") {
            this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params");
          }
        }
      };
      pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
        if ((isGenerator || isAsync) && this.type === types$1.colon) {
          this.unexpected();
        }
        if (this.eat(types$1.colon)) {
          prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
          prop.kind = "init";
        } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {
          if (isPattern) {
            this.unexpected();
          }
          prop.kind = "init";
          prop.method = true;
          prop.value = this.parseMethod(isGenerator, isAsync);
        } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {
          if (isGenerator || isAsync) {
            this.unexpected();
          }
          this.parseGetterSetter(prop);
        } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
          if (isGenerator || isAsync) {
            this.unexpected();
          }
          this.checkUnreserved(prop.key);
          if (prop.key.name === "await" && !this.awaitIdentPos) {
            this.awaitIdentPos = startPos;
          }
          prop.kind = "init";
          if (isPattern) {
            prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
          } else if (this.type === types$1.eq && refDestructuringErrors) {
            if (refDestructuringErrors.shorthandAssign < 0) {
              refDestructuringErrors.shorthandAssign = this.start;
            }
            prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
          } else {
            prop.value = this.copyNode(prop.key);
          }
          prop.shorthand = true;
        } else {
          this.unexpected();
        }
      };
      pp$5.parsePropertyName = function(prop) {
        if (this.options.ecmaVersion >= 6) {
          if (this.eat(types$1.bracketL)) {
            prop.computed = true;
            prop.key = this.parseMaybeAssign();
            this.expect(types$1.bracketR);
            return prop.key;
          } else {
            prop.computed = false;
          }
        }
        return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never");
      };
      pp$5.initFunction = function(node) {
        node.id = null;
        if (this.options.ecmaVersion >= 6) {
          node.generator = node.expression = false;
        }
        if (this.options.ecmaVersion >= 8) {
          node.async = false;
        }
      };
      pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
        var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
        this.initFunction(node);
        if (this.options.ecmaVersion >= 6) {
          node.generator = isGenerator;
        }
        if (this.options.ecmaVersion >= 8) {
          node.async = !!isAsync;
        }
        this.yieldPos = 0;
        this.awaitPos = 0;
        this.awaitIdentPos = 0;
        this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
        this.expect(types$1.parenL);
        node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);
        this.checkYieldAwaitInDefaultParams();
        this.parseFunctionBody(node, false, true, false);
        this.yieldPos = oldYieldPos;
        this.awaitPos = oldAwaitPos;
        this.awaitIdentPos = oldAwaitIdentPos;
        return this.finishNode(node, "FunctionExpression");
      };
      pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {
        var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
        this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
        this.initFunction(node);
        if (this.options.ecmaVersion >= 8) {
          node.async = !!isAsync;
        }
        this.yieldPos = 0;
        this.awaitPos = 0;
        this.awaitIdentPos = 0;
        node.params = this.toAssignableList(params, true);
        this.parseFunctionBody(node, true, false, forInit);
        this.yieldPos = oldYieldPos;
        this.awaitPos = oldAwaitPos;
        this.awaitIdentPos = oldAwaitIdentPos;
        return this.finishNode(node, "ArrowFunctionExpression");
      };
      pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {
        var isExpression = isArrowFunction && this.type !== types$1.braceL;
        var oldStrict = this.strict, useStrict = false;
        if (isExpression) {
          node.body = this.parseMaybeAssign(forInit);
          node.expression = true;
          this.checkParams(node, false);
        } else {
          var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
          if (!oldStrict || nonSimple) {
            useStrict = this.strictDirective(this.end);
            if (useStrict && nonSimple) {
              this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list");
            }
          }
          var oldLabels = this.labels;
          this.labels = [];
          if (useStrict) {
            this.strict = true;
          }
          this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
          if (this.strict && node.id) {
            this.checkLValSimple(node.id, BIND_OUTSIDE);
          }
          node.body = this.parseBlock(false, void 0, useStrict && !oldStrict);
          node.expression = false;
          this.adaptDirectivePrologue(node.body.body);
          this.labels = oldLabels;
        }
        this.exitScope();
      };
      pp$5.isSimpleParamList = function(params) {
        for (var i2 = 0, list3 = params; i2 < list3.length; i2 += 1) {
          var param = list3[i2];
          if (param.type !== "Identifier") {
            return false;
          }
        }
        return true;
      };
      pp$5.checkParams = function(node, allowDuplicates) {
        var nameHash = /* @__PURE__ */ Object.create(null);
        for (var i2 = 0, list3 = node.params; i2 < list3.length; i2 += 1) {
          var param = list3[i2];
          this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);
        }
      };
      pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
        var elts = [], first = true;
        while (!this.eat(close)) {
          if (!first) {
            this.expect(types$1.comma);
            if (allowTrailingComma && this.afterTrailingComma(close)) {
              break;
            }
          } else {
            first = false;
          }
          var elt = void 0;
          if (allowEmpty && this.type === types$1.comma) {
            elt = null;
          } else if (this.type === types$1.ellipsis) {
            elt = this.parseSpread(refDestructuringErrors);
            if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0) {
              refDestructuringErrors.trailingComma = this.start;
            }
          } else {
            elt = this.parseMaybeAssign(false, refDestructuringErrors);
          }
          elts.push(elt);
        }
        return elts;
      };
      pp$5.checkUnreserved = function(ref2) {
        var start = ref2.start;
        var end = ref2.end;
        var name = ref2.name;
        if (this.inGenerator && name === "yield") {
          this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator");
        }
        if (this.inAsync && name === "await") {
          this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function");
        }
        if (this.currentThisScope().inClassFieldInit && name === "arguments") {
          this.raiseRecoverable(start, "Cannot use 'arguments' in class field initializer");
        }
        if (this.inClassStaticBlock && (name === "arguments" || name === "await")) {
          this.raise(start, "Cannot use " + name + " in class static initialization block");
        }
        if (this.keywords.test(name)) {
          this.raise(start, "Unexpected keyword '" + name + "'");
        }
        if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf("\\") !== -1) {
          return;
        }
        var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
        if (re.test(name)) {
          if (!this.inAsync && name === "await") {
            this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function");
          }
          this.raiseRecoverable(start, "The keyword '" + name + "' is reserved");
        }
      };
      pp$5.parseIdent = function(liberal) {
        var node = this.parseIdentNode();
        this.next(!!liberal);
        this.finishNode(node, "Identifier");
        if (!liberal) {
          this.checkUnreserved(node);
          if (node.name === "await" && !this.awaitIdentPos) {
            this.awaitIdentPos = node.start;
          }
        }
        return node;
      };
      pp$5.parseIdentNode = function() {
        var node = this.startNode();
        if (this.type === types$1.name) {
          node.name = this.value;
        } else if (this.type.keyword) {
          node.name = this.type.keyword;
          if ((node.name === "class" || node.name === "function") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
            this.context.pop();
          }
        } else {
          this.unexpected();
        }
        return node;
      };
      pp$5.parsePrivateIdent = function() {
        var node = this.startNode();
        if (this.type === types$1.privateId) {
          node.name = this.value;
        } else {
          this.unexpected();
        }
        this.next();
        this.finishNode(node, "PrivateIdentifier");
        if (this.options.checkPrivateFields) {
          if (this.privateNameStack.length === 0) {
            this.raise(node.start, "Private field '#" + node.name + "' must be declared in an enclosing class");
          } else {
            this.privateNameStack[this.privateNameStack.length - 1].used.push(node);
          }
        }
        return node;
      };
      pp$5.parseYield = function(forInit) {
        if (!this.yieldPos) {
          this.yieldPos = this.start;
        }
        var node = this.startNode();
        this.next();
        if (this.type === types$1.semi || this.canInsertSemicolon() || this.type !== types$1.star && !this.type.startsExpr) {
          node.delegate = false;
          node.argument = null;
        } else {
          node.delegate = this.eat(types$1.star);
          node.argument = this.parseMaybeAssign(forInit);
        }
        return this.finishNode(node, "YieldExpression");
      };
      pp$5.parseAwait = function(forInit) {
        if (!this.awaitPos) {
          this.awaitPos = this.start;
        }
        var node = this.startNode();
        this.next();
        node.argument = this.parseMaybeUnary(null, true, false, forInit);
        return this.finishNode(node, "AwaitExpression");
      };
      var pp$4 = Parser.prototype;
      pp$4.raise = function(pos, message) {
        var loc = getLineInfo(this.input, pos);
        message += " (" + loc.line + ":" + loc.column + ")";
        var err = new SyntaxError(message);
        err.pos = pos;
        err.loc = loc;
        err.raisedAt = this.pos;
        throw err;
      };
      pp$4.raiseRecoverable = pp$4.raise;
      pp$4.curPosition = function() {
        if (this.options.locations) {
          return new Position(this.curLine, this.pos - this.lineStart);
        }
      };
      var pp$3 = Parser.prototype;
      var Scope = function Scope2(flags) {
        this.flags = flags;
        this.var = [];
        this.lexical = [];
        this.functions = [];
        this.inClassFieldInit = false;
      };
      pp$3.enterScope = function(flags) {
        this.scopeStack.push(new Scope(flags));
      };
      pp$3.exitScope = function() {
        this.scopeStack.pop();
      };
      pp$3.treatFunctionsAsVarInScope = function(scope) {
        return scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_TOP;
      };
      pp$3.declareName = function(name, bindingType, pos) {
        var redeclared = false;
        if (bindingType === BIND_LEXICAL) {
          var scope = this.currentScope();
          redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
          scope.lexical.push(name);
          if (this.inModule && scope.flags & SCOPE_TOP) {
            delete this.undefinedExports[name];
          }
        } else if (bindingType === BIND_SIMPLE_CATCH) {
          var scope$1 = this.currentScope();
          scope$1.lexical.push(name);
        } else if (bindingType === BIND_FUNCTION) {
          var scope$2 = this.currentScope();
          if (this.treatFunctionsAsVar) {
            redeclared = scope$2.lexical.indexOf(name) > -1;
          } else {
            redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1;
          }
          scope$2.functions.push(name);
        } else {
          for (var i2 = this.scopeStack.length - 1; i2 >= 0; --i2) {
            var scope$3 = this.scopeStack[i2];
            if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & SCOPE_SIMPLE_CATCH && scope$3.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
              redeclared = true;
              break;
            }
            scope$3.var.push(name);
            if (this.inModule && scope$3.flags & SCOPE_TOP) {
              delete this.undefinedExports[name];
            }
            if (scope$3.flags & SCOPE_VAR) {
              break;
            }
          }
        }
        if (redeclared) {
          this.raiseRecoverable(pos, "Identifier '" + name + "' has already been declared");
        }
      };
      pp$3.checkLocalExport = function(id) {
        if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1) {
          this.undefinedExports[id.name] = id;
        }
      };
      pp$3.currentScope = function() {
        return this.scopeStack[this.scopeStack.length - 1];
      };
      pp$3.currentVarScope = function() {
        for (var i2 = this.scopeStack.length - 1; ; i2--) {
          var scope = this.scopeStack[i2];
          if (scope.flags & SCOPE_VAR) {
            return scope;
          }
        }
      };
      pp$3.currentThisScope = function() {
        for (var i2 = this.scopeStack.length - 1; ; i2--) {
          var scope = this.scopeStack[i2];
          if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) {
            return scope;
          }
        }
      };
      var Node3 = function Node4(parser, pos, loc) {
        this.type = "";
        this.start = pos;
        this.end = 0;
        if (parser.options.locations) {
          this.loc = new SourceLocation(parser, loc);
        }
        if (parser.options.directSourceFile) {
          this.sourceFile = parser.options.directSourceFile;
        }
        if (parser.options.ranges) {
          this.range = [pos, 0];
        }
      };
      var pp$2 = Parser.prototype;
      pp$2.startNode = function() {
        return new Node3(this, this.start, this.startLoc);
      };
      pp$2.startNodeAt = function(pos, loc) {
        return new Node3(this, pos, loc);
      };
      function finishNodeAt(node, type, pos, loc) {
        node.type = type;
        node.end = pos;
        if (this.options.locations) {
          node.loc.end = loc;
        }
        if (this.options.ranges) {
          node.range[1] = pos;
        }
        return node;
      }
      pp$2.finishNode = function(node, type) {
        return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);
      };
      pp$2.finishNodeAt = function(node, type, pos, loc) {
        return finishNodeAt.call(this, node, type, pos, loc);
      };
      pp$2.copyNode = function(node) {
        var newNode = new Node3(this, node.start, this.startLoc);
        for (var prop in node) {
          newNode[prop] = node[prop];
        }
        return newNode;
      };
      var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
      var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
      var ecma11BinaryProperties = ecma10BinaryProperties;
      var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
      var ecma13BinaryProperties = ecma12BinaryProperties;
      var ecma14BinaryProperties = ecma13BinaryProperties;
      var unicodeBinaryProperties = {
        9: ecma9BinaryProperties,
        10: ecma10BinaryProperties,
        11: ecma11BinaryProperties,
        12: ecma12BinaryProperties,
        13: ecma13BinaryProperties,
        14: ecma14BinaryProperties
      };
      var ecma14BinaryPropertiesOfStrings = "Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji";
      var unicodeBinaryPropertiesOfStrings = {
        9: "",
        10: "",
        11: "",
        12: "",
        13: "",
        14: ecma14BinaryPropertiesOfStrings
      };
      var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
      var ecma9ScriptValues = "Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
      var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
      var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
      var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
      var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith";
      var ecma14ScriptValues = ecma13ScriptValues + " Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz";
      var unicodeScriptValues = {
        9: ecma9ScriptValues,
        10: ecma10ScriptValues,
        11: ecma11ScriptValues,
        12: ecma12ScriptValues,
        13: ecma13ScriptValues,
        14: ecma14ScriptValues
      };
      var data = {};
      function buildUnicodeData(ecmaVersion2) {
        var d = data[ecmaVersion2] = {
          binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion2] + " " + unicodeGeneralCategoryValues),
          binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion2]),
          nonBinary: {
            General_Category: wordsRegexp(unicodeGeneralCategoryValues),
            Script: wordsRegexp(unicodeScriptValues[ecmaVersion2])
          }
        };
        d.nonBinary.Script_Extensions = d.nonBinary.Script;
        d.nonBinary.gc = d.nonBinary.General_Category;
        d.nonBinary.sc = d.nonBinary.Script;
        d.nonBinary.scx = d.nonBinary.Script_Extensions;
      }
      for (var i = 0, list2 = [9, 10, 11, 12, 13, 14]; i < list2.length; i += 1) {
        var ecmaVersion = list2[i];
        buildUnicodeData(ecmaVersion);
      }
      var pp$1 = Parser.prototype;
      var RegExpValidationState = function RegExpValidationState2(parser) {
        this.parser = parser;
        this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "") + (parser.options.ecmaVersion >= 15 ? "v" : "");
        this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];
        this.source = "";
        this.flags = "";
        this.start = 0;
        this.switchU = false;
        this.switchV = false;
        this.switchN = false;
        this.pos = 0;
        this.lastIntValue = 0;
        this.lastStringValue = "";
        this.lastAssertionIsQuantifiable = false;
        this.numCapturingParens = 0;
        this.maxBackReference = 0;
        this.groupNames = [];
        this.backReferenceNames = [];
      };
      RegExpValidationState.prototype.reset = function reset(start, pattern, flags) {
        var unicodeSets = flags.indexOf("v") !== -1;
        var unicode = flags.indexOf("u") !== -1;
        this.start = start | 0;
        this.source = pattern + "";
        this.flags = flags;
        if (unicodeSets && this.parser.options.ecmaVersion >= 15) {
          this.switchU = true;
          this.switchV = true;
          this.switchN = true;
        } else {
          this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
          this.switchV = false;
          this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
        }
      };
      RegExpValidationState.prototype.raise = function raise(message) {
        this.parser.raiseRecoverable(this.start, "Invalid regular expression: /" + this.source + "/: " + message);
      };
      RegExpValidationState.prototype.at = function at(i2, forceU) {
        if (forceU === void 0)
          forceU = false;
        var s = this.source;
        var l = s.length;
        if (i2 >= l) {
          return -1;
        }
        var c = s.charCodeAt(i2);
        if (!(forceU || this.switchU) || c <= 55295 || c >= 57344 || i2 + 1 >= l) {
          return c;
        }
        var next = s.charCodeAt(i2 + 1);
        return next >= 56320 && next <= 57343 ? (c << 10) + next - 56613888 : c;
      };
      RegExpValidationState.prototype.nextIndex = function nextIndex(i2, forceU) {
        if (forceU === void 0)
          forceU = false;
        var s = this.source;
        var l = s.length;
        if (i2 >= l) {
          return l;
        }
        var c = s.charCodeAt(i2), next;
        if (!(forceU || this.switchU) || c <= 55295 || c >= 57344 || i2 + 1 >= l || (next = s.charCodeAt(i2 + 1)) < 56320 || next > 57343) {
          return i2 + 1;
        }
        return i2 + 2;
      };
      RegExpValidationState.prototype.current = function current(forceU) {
        if (forceU === void 0)
          forceU = false;
        return this.at(this.pos, forceU);
      };
      RegExpValidationState.prototype.lookahead = function lookahead(forceU) {
        if (forceU === void 0)
          forceU = false;
        return this.at(this.nextIndex(this.pos, forceU), forceU);
      };
      RegExpValidationState.prototype.advance = function advance(forceU) {
        if (forceU === void 0)
          forceU = false;
        this.pos = this.nextIndex(this.pos, forceU);
      };
      RegExpValidationState.prototype.eat = function eat(ch, forceU) {
        if (forceU === void 0)
          forceU = false;
        if (this.current(forceU) === ch) {
          this.advance(forceU);
          return true;
        }
        return false;
      };
      RegExpValidationState.prototype.eatChars = function eatChars(chs, forceU) {
        if (forceU === void 0)
          forceU = false;
        var pos = this.pos;
        for (var i2 = 0, list3 = chs; i2 < list3.length; i2 += 1) {
          var ch = list3[i2];
          var current = this.at(pos, forceU);
          if (current === -1 || current !== ch) {
            return false;
          }
          pos = this.nextIndex(pos, forceU);
        }
        this.pos = pos;
        return true;
      };
      pp$1.validateRegExpFlags = function(state) {
        var validFlags = state.validFlags;
        var flags = state.flags;
        var u = false;
        var v = false;
        for (var i2 = 0; i2 < flags.length; i2++) {
          var flag = flags.charAt(i2);
          if (validFlags.indexOf(flag) === -1) {
            this.raise(state.start, "Invalid regular expression flag");
          }
          if (flags.indexOf(flag, i2 + 1) > -1) {
            this.raise(state.start, "Duplicate regular expression flag");
          }
          if (flag === "u") {
            u = true;
          }
          if (flag === "v") {
            v = true;
          }
        }
        if (this.options.ecmaVersion >= 15 && u && v) {
          this.raise(state.start, "Invalid regular expression flag");
        }
      };
      pp$1.validateRegExpPattern = function(state) {
        this.regexp_pattern(state);
        if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
          state.switchN = true;
          this.regexp_pattern(state);
        }
      };
      pp$1.regexp_pattern = function(state) {
        state.pos = 0;
        state.lastIntValue = 0;
        state.lastStringValue = "";
        state.lastAssertionIsQuantifiable = false;
        state.numCapturingParens = 0;
        state.maxBackReference = 0;
        state.groupNames.length = 0;
        state.backReferenceNames.length = 0;
        this.regexp_disjunction(state);
        if (state.pos !== state.source.length) {
          if (state.eat(41)) {
            state.raise("Unmatched ')'");
          }
          if (state.eat(93) || state.eat(125)) {
            state.raise("Lone quantifier brackets");
          }
        }
        if (state.maxBackReference > state.numCapturingParens) {
          state.raise("Invalid escape");
        }
        for (var i2 = 0, list3 = state.backReferenceNames; i2 < list3.length; i2 += 1) {
          var name = list3[i2];
          if (state.groupNames.indexOf(name) === -1) {
            state.raise("Invalid named capture referenced");
          }
        }
      };
      pp$1.regexp_disjunction = function(state) {
        this.regexp_alternative(state);
        while (state.eat(124)) {
          this.regexp_alternative(state);
        }
        if (this.regexp_eatQuantifier(state, true)) {
          state.raise("Nothing to repeat");
        }
        if (state.eat(123)) {
          state.raise("Lone quantifier brackets");
        }
      };
      pp$1.regexp_alternative = function(state) {
        while (state.pos < state.source.length && this.regexp_eatTerm(state)) {
        }
      };
      pp$1.regexp_eatTerm = function(state) {
        if (this.regexp_eatAssertion(state)) {
          if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
            if (state.switchU) {
              state.raise("Invalid quantifier");
            }
          }
          return true;
        }
        if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
          this.regexp_eatQuantifier(state);
          return true;
        }
        return false;
      };
      pp$1.regexp_eatAssertion = function(state) {
        var start = state.pos;
        state.lastAssertionIsQuantifiable = false;
        if (state.eat(94) || state.eat(36)) {
          return true;
        }
        if (state.eat(92)) {
          if (state.eat(66) || state.eat(98)) {
            return true;
          }
          state.pos = start;
        }
        if (state.eat(40) && state.eat(63)) {
          var lookbehind = false;
          if (this.options.ecmaVersion >= 9) {
            lookbehind = state.eat(60);
          }
          if (state.eat(61) || state.eat(33)) {
            this.regexp_disjunction(state);
            if (!state.eat(41)) {
              state.raise("Unterminated group");
            }
            state.lastAssertionIsQuantifiable = !lookbehind;
            return true;
          }
        }
        state.pos = start;
        return false;
      };
      pp$1.regexp_eatQuantifier = function(state, noError) {
        if (noError === void 0)
          noError = false;
        if (this.regexp_eatQuantifierPrefix(state, noError)) {
          state.eat(63);
          return true;
        }
        return false;
      };
      pp$1.regexp_eatQuantifierPrefix = function(state, noError) {
        return state.eat(42) || state.eat(43) || state.eat(63) || this.regexp_eatBracedQuantifier(state, noError);
      };
      pp$1.regexp_eatBracedQuantifier = function(state, noError) {
        var start = state.pos;
        if (state.eat(123)) {
          var min = 0, max = -1;
          if (this.regexp_eatDecimalDigits(state)) {
            min = state.lastIntValue;
            if (state.eat(44) && this.regexp_eatDecimalDigits(state)) {
              max = state.lastIntValue;
            }
            if (state.eat(125)) {
              if (max !== -1 && max < min && !noError) {
                state.raise("numbers out of order in {} quantifier");
              }
              return true;
            }
          }
          if (state.switchU && !noError) {
            state.raise("Incomplete quantifier");
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatAtom = function(state) {
        return this.regexp_eatPatternCharacters(state) || state.eat(46) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state);
      };
      pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {
        var start = state.pos;
        if (state.eat(92)) {
          if (this.regexp_eatAtomEscape(state)) {
            return true;
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatUncapturingGroup = function(state) {
        var start = state.pos;
        if (state.eat(40)) {
          if (state.eat(63) && state.eat(58)) {
            this.regexp_disjunction(state);
            if (state.eat(41)) {
              return true;
            }
            state.raise("Unterminated group");
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatCapturingGroup = function(state) {
        if (state.eat(40)) {
          if (this.options.ecmaVersion >= 9) {
            this.regexp_groupSpecifier(state);
          } else if (state.current() === 63) {
            state.raise("Invalid group");
          }
          this.regexp_disjunction(state);
          if (state.eat(41)) {
            state.numCapturingParens += 1;
            return true;
          }
          state.raise("Unterminated group");
        }
        return false;
      };
      pp$1.regexp_eatExtendedAtom = function(state) {
        return state.eat(46) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state);
      };
      pp$1.regexp_eatInvalidBracedQuantifier = function(state) {
        if (this.regexp_eatBracedQuantifier(state, true)) {
          state.raise("Nothing to repeat");
        }
        return false;
      };
      pp$1.regexp_eatSyntaxCharacter = function(state) {
        var ch = state.current();
        if (isSyntaxCharacter(ch)) {
          state.lastIntValue = ch;
          state.advance();
          return true;
        }
        return false;
      };
      function isSyntaxCharacter(ch) {
        return ch === 36 || ch >= 40 && ch <= 43 || ch === 46 || ch === 63 || ch >= 91 && ch <= 94 || ch >= 123 && ch <= 125;
      }
      pp$1.regexp_eatPatternCharacters = function(state) {
        var start = state.pos;
        var ch = 0;
        while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
          state.advance();
        }
        return state.pos !== start;
      };
      pp$1.regexp_eatExtendedPatternCharacter = function(state) {
        var ch = state.current();
        if (ch !== -1 && ch !== 36 && !(ch >= 40 && ch <= 43) && ch !== 46 && ch !== 63 && ch !== 91 && ch !== 94 && ch !== 124) {
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_groupSpecifier = function(state) {
        if (state.eat(63)) {
          if (this.regexp_eatGroupName(state)) {
            if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
              state.raise("Duplicate capture group name");
            }
            state.groupNames.push(state.lastStringValue);
            return;
          }
          state.raise("Invalid group");
        }
      };
      pp$1.regexp_eatGroupName = function(state) {
        state.lastStringValue = "";
        if (state.eat(60)) {
          if (this.regexp_eatRegExpIdentifierName(state) && state.eat(62)) {
            return true;
          }
          state.raise("Invalid capture group name");
        }
        return false;
      };
      pp$1.regexp_eatRegExpIdentifierName = function(state) {
        state.lastStringValue = "";
        if (this.regexp_eatRegExpIdentifierStart(state)) {
          state.lastStringValue += codePointToString(state.lastIntValue);
          while (this.regexp_eatRegExpIdentifierPart(state)) {
            state.lastStringValue += codePointToString(state.lastIntValue);
          }
          return true;
        }
        return false;
      };
      pp$1.regexp_eatRegExpIdentifierStart = function(state) {
        var start = state.pos;
        var forceU = this.options.ecmaVersion >= 11;
        var ch = state.current(forceU);
        state.advance(forceU);
        if (ch === 92 && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
          ch = state.lastIntValue;
        }
        if (isRegExpIdentifierStart(ch)) {
          state.lastIntValue = ch;
          return true;
        }
        state.pos = start;
        return false;
      };
      function isRegExpIdentifierStart(ch) {
        return isIdentifierStart(ch, true) || ch === 36 || ch === 95;
      }
      pp$1.regexp_eatRegExpIdentifierPart = function(state) {
        var start = state.pos;
        var forceU = this.options.ecmaVersion >= 11;
        var ch = state.current(forceU);
        state.advance(forceU);
        if (ch === 92 && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
          ch = state.lastIntValue;
        }
        if (isRegExpIdentifierPart(ch)) {
          state.lastIntValue = ch;
          return true;
        }
        state.pos = start;
        return false;
      };
      function isRegExpIdentifierPart(ch) {
        return isIdentifierChar(ch, true) || ch === 36 || ch === 95 || ch === 8204 || ch === 8205;
      }
      pp$1.regexp_eatAtomEscape = function(state) {
        if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) {
          return true;
        }
        if (state.switchU) {
          if (state.current() === 99) {
            state.raise("Invalid unicode escape");
          }
          state.raise("Invalid escape");
        }
        return false;
      };
      pp$1.regexp_eatBackReference = function(state) {
        var start = state.pos;
        if (this.regexp_eatDecimalEscape(state)) {
          var n = state.lastIntValue;
          if (state.switchU) {
            if (n > state.maxBackReference) {
              state.maxBackReference = n;
            }
            return true;
          }
          if (n <= state.numCapturingParens) {
            return true;
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatKGroupName = function(state) {
        if (state.eat(107)) {
          if (this.regexp_eatGroupName(state)) {
            state.backReferenceNames.push(state.lastStringValue);
            return true;
          }
          state.raise("Invalid named reference");
        }
        return false;
      };
      pp$1.regexp_eatCharacterEscape = function(state) {
        return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);
      };
      pp$1.regexp_eatCControlLetter = function(state) {
        var start = state.pos;
        if (state.eat(99)) {
          if (this.regexp_eatControlLetter(state)) {
            return true;
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatZero = function(state) {
        if (state.current() === 48 && !isDecimalDigit(state.lookahead())) {
          state.lastIntValue = 0;
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_eatControlEscape = function(state) {
        var ch = state.current();
        if (ch === 116) {
          state.lastIntValue = 9;
          state.advance();
          return true;
        }
        if (ch === 110) {
          state.lastIntValue = 10;
          state.advance();
          return true;
        }
        if (ch === 118) {
          state.lastIntValue = 11;
          state.advance();
          return true;
        }
        if (ch === 102) {
          state.lastIntValue = 12;
          state.advance();
          return true;
        }
        if (ch === 114) {
          state.lastIntValue = 13;
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_eatControlLetter = function(state) {
        var ch = state.current();
        if (isControlLetter(ch)) {
          state.lastIntValue = ch % 32;
          state.advance();
          return true;
        }
        return false;
      };
      function isControlLetter(ch) {
        return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122;
      }
      pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {
        if (forceU === void 0)
          forceU = false;
        var start = state.pos;
        var switchU = forceU || state.switchU;
        if (state.eat(117)) {
          if (this.regexp_eatFixedHexDigits(state, 4)) {
            var lead = state.lastIntValue;
            if (switchU && lead >= 55296 && lead <= 56319) {
              var leadSurrogateEnd = state.pos;
              if (state.eat(92) && state.eat(117) && this.regexp_eatFixedHexDigits(state, 4)) {
                var trail = state.lastIntValue;
                if (trail >= 56320 && trail <= 57343) {
                  state.lastIntValue = (lead - 55296) * 1024 + (trail - 56320) + 65536;
                  return true;
                }
              }
              state.pos = leadSurrogateEnd;
              state.lastIntValue = lead;
            }
            return true;
          }
          if (switchU && state.eat(123) && this.regexp_eatHexDigits(state) && state.eat(125) && isValidUnicode(state.lastIntValue)) {
            return true;
          }
          if (switchU) {
            state.raise("Invalid unicode escape");
          }
          state.pos = start;
        }
        return false;
      };
      function isValidUnicode(ch) {
        return ch >= 0 && ch <= 1114111;
      }
      pp$1.regexp_eatIdentityEscape = function(state) {
        if (state.switchU) {
          if (this.regexp_eatSyntaxCharacter(state)) {
            return true;
          }
          if (state.eat(47)) {
            state.lastIntValue = 47;
            return true;
          }
          return false;
        }
        var ch = state.current();
        if (ch !== 99 && (!state.switchN || ch !== 107)) {
          state.lastIntValue = ch;
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_eatDecimalEscape = function(state) {
        state.lastIntValue = 0;
        var ch = state.current();
        if (ch >= 49 && ch <= 57) {
          do {
            state.lastIntValue = 10 * state.lastIntValue + (ch - 48);
            state.advance();
          } while ((ch = state.current()) >= 48 && ch <= 57);
          return true;
        }
        return false;
      };
      var CharSetNone = 0;
      var CharSetOk = 1;
      var CharSetString = 2;
      pp$1.regexp_eatCharacterClassEscape = function(state) {
        var ch = state.current();
        if (isCharacterClassEscape(ch)) {
          state.lastIntValue = -1;
          state.advance();
          return CharSetOk;
        }
        var negate = false;
        if (state.switchU && this.options.ecmaVersion >= 9 && ((negate = ch === 80) || ch === 112)) {
          state.lastIntValue = -1;
          state.advance();
          var result;
          if (state.eat(123) && (result = this.regexp_eatUnicodePropertyValueExpression(state)) && state.eat(125)) {
            if (negate && result === CharSetString) {
              state.raise("Invalid property name");
            }
            return result;
          }
          state.raise("Invalid property name");
        }
        return CharSetNone;
      };
      function isCharacterClassEscape(ch) {
        return ch === 100 || ch === 68 || ch === 115 || ch === 83 || ch === 119 || ch === 87;
      }
      pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {
        var start = state.pos;
        if (this.regexp_eatUnicodePropertyName(state) && state.eat(61)) {
          var name = state.lastStringValue;
          if (this.regexp_eatUnicodePropertyValue(state)) {
            var value = state.lastStringValue;
            this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
            return CharSetOk;
          }
        }
        state.pos = start;
        if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
          var nameOrValue = state.lastStringValue;
          return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
        }
        return CharSetNone;
      };
      pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
        if (!hasOwn(state.unicodeProperties.nonBinary, name)) {
          state.raise("Invalid property name");
        }
        if (!state.unicodeProperties.nonBinary[name].test(value)) {
          state.raise("Invalid property value");
        }
      };
      pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
        if (state.unicodeProperties.binary.test(nameOrValue)) {
          return CharSetOk;
        }
        if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) {
          return CharSetString;
        }
        state.raise("Invalid property name");
      };
      pp$1.regexp_eatUnicodePropertyName = function(state) {
        var ch = 0;
        state.lastStringValue = "";
        while (isUnicodePropertyNameCharacter(ch = state.current())) {
          state.lastStringValue += codePointToString(ch);
          state.advance();
        }
        return state.lastStringValue !== "";
      };
      function isUnicodePropertyNameCharacter(ch) {
        return isControlLetter(ch) || ch === 95;
      }
      pp$1.regexp_eatUnicodePropertyValue = function(state) {
        var ch = 0;
        state.lastStringValue = "";
        while (isUnicodePropertyValueCharacter(ch = state.current())) {
          state.lastStringValue += codePointToString(ch);
          state.advance();
        }
        return state.lastStringValue !== "";
      };
      function isUnicodePropertyValueCharacter(ch) {
        return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch);
      }
      pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
        return this.regexp_eatUnicodePropertyValue(state);
      };
      pp$1.regexp_eatCharacterClass = function(state) {
        if (state.eat(91)) {
          var negate = state.eat(94);
          var result = this.regexp_classContents(state);
          if (!state.eat(93)) {
            state.raise("Unterminated character class");
          }
          if (negate && result === CharSetString) {
            state.raise("Negated character class may contain strings");
          }
          return true;
        }
        return false;
      };
      pp$1.regexp_classContents = function(state) {
        if (state.current() === 93) {
          return CharSetOk;
        }
        if (state.switchV) {
          return this.regexp_classSetExpression(state);
        }
        this.regexp_nonEmptyClassRanges(state);
        return CharSetOk;
      };
      pp$1.regexp_nonEmptyClassRanges = function(state) {
        while (this.regexp_eatClassAtom(state)) {
          var left = state.lastIntValue;
          if (state.eat(45) && this.regexp_eatClassAtom(state)) {
            var right = state.lastIntValue;
            if (state.switchU && (left === -1 || right === -1)) {
              state.raise("Invalid character class");
            }
            if (left !== -1 && right !== -1 && left > right) {
              state.raise("Range out of order in character class");
            }
          }
        }
      };
      pp$1.regexp_eatClassAtom = function(state) {
        var start = state.pos;
        if (state.eat(92)) {
          if (this.regexp_eatClassEscape(state)) {
            return true;
          }
          if (state.switchU) {
            var ch$1 = state.current();
            if (ch$1 === 99 || isOctalDigit(ch$1)) {
              state.raise("Invalid class escape");
            }
            state.raise("Invalid escape");
          }
          state.pos = start;
        }
        var ch = state.current();
        if (ch !== 93) {
          state.lastIntValue = ch;
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_eatClassEscape = function(state) {
        var start = state.pos;
        if (state.eat(98)) {
          state.lastIntValue = 8;
          return true;
        }
        if (state.switchU && state.eat(45)) {
          state.lastIntValue = 45;
          return true;
        }
        if (!state.switchU && state.eat(99)) {
          if (this.regexp_eatClassControlLetter(state)) {
            return true;
          }
          state.pos = start;
        }
        return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state);
      };
      pp$1.regexp_classSetExpression = function(state) {
        var result = CharSetOk, subResult;
        if (this.regexp_eatClassSetRange(state))
          ;
        else if (subResult = this.regexp_eatClassSetOperand(state)) {
          if (subResult === CharSetString) {
            result = CharSetString;
          }
          var start = state.pos;
          while (state.eatChars([38, 38])) {
            if (state.current() !== 38 && (subResult = this.regexp_eatClassSetOperand(state))) {
              if (subResult !== CharSetString) {
                result = CharSetOk;
              }
              continue;
            }
            state.raise("Invalid character in character class");
          }
          if (start !== state.pos) {
            return result;
          }
          while (state.eatChars([45, 45])) {
            if (this.regexp_eatClassSetOperand(state)) {
              continue;
            }
            state.raise("Invalid character in character class");
          }
          if (start !== state.pos) {
            return result;
          }
        } else {
          state.raise("Invalid character in character class");
        }
        for (; ; ) {
          if (this.regexp_eatClassSetRange(state)) {
            continue;
          }
          subResult = this.regexp_eatClassSetOperand(state);
          if (!subResult) {
            return result;
          }
          if (subResult === CharSetString) {
            result = CharSetString;
          }
        }
      };
      pp$1.regexp_eatClassSetRange = function(state) {
        var start = state.pos;
        if (this.regexp_eatClassSetCharacter(state)) {
          var left = state.lastIntValue;
          if (state.eat(45) && this.regexp_eatClassSetCharacter(state)) {
            var right = state.lastIntValue;
            if (left !== -1 && right !== -1 && left > right) {
              state.raise("Range out of order in character class");
            }
            return true;
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatClassSetOperand = function(state) {
        if (this.regexp_eatClassSetCharacter(state)) {
          return CharSetOk;
        }
        return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state);
      };
      pp$1.regexp_eatNestedClass = function(state) {
        var start = state.pos;
        if (state.eat(91)) {
          var negate = state.eat(94);
          var result = this.regexp_classContents(state);
          if (state.eat(93)) {
            if (negate && result === CharSetString) {
              state.raise("Negated character class may contain strings");
            }
            return result;
          }
          state.pos = start;
        }
        if (state.eat(92)) {
          var result$1 = this.regexp_eatCharacterClassEscape(state);
          if (result$1) {
            return result$1;
          }
          state.pos = start;
        }
        return null;
      };
      pp$1.regexp_eatClassStringDisjunction = function(state) {
        var start = state.pos;
        if (state.eatChars([92, 113])) {
          if (state.eat(123)) {
            var result = this.regexp_classStringDisjunctionContents(state);
            if (state.eat(125)) {
              return result;
            }
          } else {
            state.raise("Invalid escape");
          }
          state.pos = start;
        }
        return null;
      };
      pp$1.regexp_classStringDisjunctionContents = function(state) {
        var result = this.regexp_classString(state);
        while (state.eat(124)) {
          if (this.regexp_classString(state) === CharSetString) {
            result = CharSetString;
          }
        }
        return result;
      };
      pp$1.regexp_classString = function(state) {
        var count = 0;
        while (this.regexp_eatClassSetCharacter(state)) {
          count++;
        }
        return count === 1 ? CharSetOk : CharSetString;
      };
      pp$1.regexp_eatClassSetCharacter = function(state) {
        var start = state.pos;
        if (state.eat(92)) {
          if (this.regexp_eatCharacterEscape(state) || this.regexp_eatClassSetReservedPunctuator(state)) {
            return true;
          }
          if (state.eat(98)) {
            state.lastIntValue = 8;
            return true;
          }
          state.pos = start;
          return false;
        }
        var ch = state.current();
        if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) {
          return false;
        }
        if (isClassSetSyntaxCharacter(ch)) {
          return false;
        }
        state.advance();
        state.lastIntValue = ch;
        return true;
      };
      function isClassSetReservedDoublePunctuatorCharacter(ch) {
        return ch === 33 || ch >= 35 && ch <= 38 || ch >= 42 && ch <= 44 || ch === 46 || ch >= 58 && ch <= 64 || ch === 94 || ch === 96 || ch === 126;
      }
      function isClassSetSyntaxCharacter(ch) {
        return ch === 40 || ch === 41 || ch === 45 || ch === 47 || ch >= 91 && ch <= 93 || ch >= 123 && ch <= 125;
      }
      pp$1.regexp_eatClassSetReservedPunctuator = function(state) {
        var ch = state.current();
        if (isClassSetReservedPunctuator(ch)) {
          state.lastIntValue = ch;
          state.advance();
          return true;
        }
        return false;
      };
      function isClassSetReservedPunctuator(ch) {
        return ch === 33 || ch === 35 || ch === 37 || ch === 38 || ch === 44 || ch === 45 || ch >= 58 && ch <= 62 || ch === 64 || ch === 96 || ch === 126;
      }
      pp$1.regexp_eatClassControlLetter = function(state) {
        var ch = state.current();
        if (isDecimalDigit(ch) || ch === 95) {
          state.lastIntValue = ch % 32;
          state.advance();
          return true;
        }
        return false;
      };
      pp$1.regexp_eatHexEscapeSequence = function(state) {
        var start = state.pos;
        if (state.eat(120)) {
          if (this.regexp_eatFixedHexDigits(state, 2)) {
            return true;
          }
          if (state.switchU) {
            state.raise("Invalid escape");
          }
          state.pos = start;
        }
        return false;
      };
      pp$1.regexp_eatDecimalDigits = function(state) {
        var start = state.pos;
        var ch = 0;
        state.lastIntValue = 0;
        while (isDecimalDigit(ch = state.current())) {
          state.lastIntValue = 10 * state.lastIntValue + (ch - 48);
          state.advance();
        }
        return state.pos !== start;
      };
      function isDecimalDigit(ch) {
        return ch >= 48 && ch <= 57;
      }
      pp$1.regexp_eatHexDigits = function(state) {
        var start = state.pos;
        var ch = 0;
        state.lastIntValue = 0;
        while (isHexDigit(ch = state.current())) {
          state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
          state.advance();
        }
        return state.pos !== start;
      };
      function isHexDigit(ch) {
        return ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102;
      }
      function hexToInt(ch) {
        if (ch >= 65 && ch <= 70) {
          return 10 + (ch - 65);
        }
        if (ch >= 97 && ch <= 102) {
          return 10 + (ch - 97);
        }
        return ch - 48;
      }
      pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {
        if (this.regexp_eatOctalDigit(state)) {
          var n1 = state.lastIntValue;
          if (this.regexp_eatOctalDigit(state)) {
            var n2 = state.lastIntValue;
            if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
              state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
            } else {
              state.lastIntValue = n1 * 8 + n2;
            }
          } else {
            state.lastIntValue = n1;
          }
          return true;
        }
        return false;
      };
      pp$1.regexp_eatOctalDigit = function(state) {
        var ch = state.current();
        if (isOctalDigit(ch)) {
          state.lastIntValue = ch - 48;
          state.advance();
          return true;
        }
        state.lastIntValue = 0;
        return false;
      };
      function isOctalDigit(ch) {
        return ch >= 48 && ch <= 55;
      }
      pp$1.regexp_eatFixedHexDigits = function(state, length) {
        var start = state.pos;
        state.lastIntValue = 0;
        for (var i2 = 0; i2 < length; ++i2) {
          var ch = state.current();
          if (!isHexDigit(ch)) {
            state.pos = start;
            return false;
          }
          state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
          state.advance();
        }
        return true;
      };
      var Token = function Token2(p) {
        this.type = p.type;
        this.value = p.value;
        this.start = p.start;
        this.end = p.end;
        if (p.options.locations) {
          this.loc = new SourceLocation(p, p.startLoc, p.endLoc);
        }
        if (p.options.ranges) {
          this.range = [p.start, p.end];
        }
      };
      var pp = Parser.prototype;
      pp.next = function(ignoreEscapeSequenceInKeyword) {
        if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) {
          this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword);
        }
        if (this.options.onToken) {
          this.options.onToken(new Token(this));
        }
        this.lastTokEnd = this.end;
        this.lastTokStart = this.start;
        this.lastTokEndLoc = this.endLoc;
        this.lastTokStartLoc = this.startLoc;
        this.nextToken();
      };
      pp.getToken = function() {
        this.next();
        return new Token(this);
      };
      if (typeof Symbol !== "undefined") {
        pp[Symbol.iterator] = function() {
          var this$1$1 = this;
          return {
            next: function() {
              var token = this$1$1.getToken();
              return {
                done: token.type === types$1.eof,
                value: token
              };
            }
          };
        };
      }
      pp.nextToken = function() {
        var curContext = this.curContext();
        if (!curContext || !curContext.preserveSpace) {
          this.skipSpace();
        }
        this.start = this.pos;
        if (this.options.locations) {
          this.startLoc = this.curPosition();
        }
        if (this.pos >= this.input.length) {
          return this.finishToken(types$1.eof);
        }
        if (curContext.override) {
          return curContext.override(this);
        } else {
          this.readToken(this.fullCharCodeAtPos());
        }
      };
      pp.readToken = function(code) {
        if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92) {
          return this.readWord();
        }
        return this.getTokenFromCode(code);
      };
      pp.fullCharCodeAtPos = function() {
        var code = this.input.charCodeAt(this.pos);
        if (code <= 55295 || code >= 56320) {
          return code;
        }
        var next = this.input.charCodeAt(this.pos + 1);
        return next <= 56319 || next >= 57344 ? code : (code << 10) + next - 56613888;
      };
      pp.skipBlockComment = function() {
        var startLoc = this.options.onComment && this.curPosition();
        var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
        if (end === -1) {
          this.raise(this.pos - 2, "Unterminated comment");
        }
        this.pos = end + 2;
        if (this.options.locations) {
          for (var nextBreak = void 0, pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1; ) {
            ++this.curLine;
            pos = this.lineStart = nextBreak;
          }
        }
        if (this.options.onComment) {
          this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());
        }
      };
      pp.skipLineComment = function(startSkip) {
        var start = this.pos;
        var startLoc = this.options.onComment && this.curPosition();
        var ch = this.input.charCodeAt(this.pos += startSkip);
        while (this.pos < this.input.length && !isNewLine(ch)) {
          ch = this.input.charCodeAt(++this.pos);
        }
        if (this.options.onComment) {
          this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());
        }
      };
      pp.skipSpace = function() {
        loop:
          while (this.pos < this.input.length) {
            var ch = this.input.charCodeAt(this.pos);
            switch (ch) {
              case 32:
              case 160:
                ++this.pos;
                break;
              case 13:
                if (this.input.charCodeAt(this.pos + 1) === 10) {
                  ++this.pos;
                }
              case 10:
              case 8232:
              case 8233:
                ++this.pos;
                if (this.options.locations) {
                  ++this.curLine;
                  this.lineStart = this.pos;
                }
                break;
              case 47:
                switch (this.input.charCodeAt(this.pos + 1)) {
                  case 42:
                    this.skipBlockComment();
                    break;
                  case 47:
                    this.skipLineComment(2);
                    break;
                  default:
                    break loop;
                }
                break;
              default:
                if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
                  ++this.pos;
                } else {
                  break loop;
                }
            }
          }
      };
      pp.finishToken = function(type, val) {
        this.end = this.pos;
        if (this.options.locations) {
          this.endLoc = this.curPosition();
        }
        var prevType = this.type;
        this.type = type;
        this.value = val;
        this.updateContext(prevType);
      };
      pp.readToken_dot = function() {
        var next = this.input.charCodeAt(this.pos + 1);
        if (next >= 48 && next <= 57) {
          return this.readNumber(true);
        }
        var next2 = this.input.charCodeAt(this.pos + 2);
        if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {
          this.pos += 3;
          return this.finishToken(types$1.ellipsis);
        } else {
          ++this.pos;
          return this.finishToken(types$1.dot);
        }
      };
      pp.readToken_slash = function() {
        var next = this.input.charCodeAt(this.pos + 1);
        if (this.exprAllowed) {
          ++this.pos;
          return this.readRegexp();
        }
        if (next === 61) {
          return this.finishOp(types$1.assign, 2);
        }
        return this.finishOp(types$1.slash, 1);
      };
      pp.readToken_mult_modulo_exp = function(code) {
        var next = this.input.charCodeAt(this.pos + 1);
        var size = 1;
        var tokentype = code === 42 ? types$1.star : types$1.modulo;
        if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
          ++size;
          tokentype = types$1.starstar;
          next = this.input.charCodeAt(this.pos + 2);
        }
        if (next === 61) {
          return this.finishOp(types$1.assign, size + 1);
        }
        return this.finishOp(tokentype, size);
      };
      pp.readToken_pipe_amp = function(code) {
        var next = this.input.charCodeAt(this.pos + 1);
        if (next === code) {
          if (this.options.ecmaVersion >= 12) {
            var next2 = this.input.charCodeAt(this.pos + 2);
            if (next2 === 61) {
              return this.finishOp(types$1.assign, 3);
            }
          }
          return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2);
        }
        if (next === 61) {
          return this.finishOp(types$1.assign, 2);
        }
        return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1);
      };
      pp.readToken_caret = function() {
        var next = this.input.charCodeAt(this.pos + 1);
        if (next === 61) {
          return this.finishOp(types$1.assign, 2);
        }
        return this.finishOp(types$1.bitwiseXOR, 1);
      };
      pp.readToken_plus_min = function(code) {
        var next = this.input.charCodeAt(this.pos + 1);
        if (next === code) {
          if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
            this.skipLineComment(3);
            this.skipSpace();
            return this.nextToken();
          }
          return this.finishOp(types$1.incDec, 2);
        }
        if (next === 61) {
          return this.finishOp(types$1.assign, 2);
        }
        return this.finishOp(types$1.plusMin, 1);
      };
      pp.readToken_lt_gt = function(code) {
        var next = this.input.charCodeAt(this.pos + 1);
        var size = 1;
        if (next === code) {
          size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
          if (this.input.charCodeAt(this.pos + size) === 61) {
            return this.finishOp(types$1.assign, size + 1);
          }
          return this.finishOp(types$1.bitShift, size);
        }
        if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {
          this.skipLineComment(4);
          this.skipSpace();
          return this.nextToken();
        }
        if (next === 61) {
          size = 2;
        }
        return this.finishOp(types$1.relational, size);
      };
      pp.readToken_eq_excl = function(code) {
        var next = this.input.charCodeAt(this.pos + 1);
        if (next === 61) {
          return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2);
        }
        if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) {
          this.pos += 2;
          return this.finishToken(types$1.arrow);
        }
        return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1);
      };
      pp.readToken_question = function() {
        var ecmaVersion2 = this.options.ecmaVersion;
        if (ecmaVersion2 >= 11) {
          var next = this.input.charCodeAt(this.pos + 1);
          if (next === 46) {
            var next2 = this.input.charCodeAt(this.pos + 2);
            if (next2 < 48 || next2 > 57) {
              return this.finishOp(types$1.questionDot, 2);
            }
          }
          if (next === 63) {
            if (ecmaVersion2 >= 12) {
              var next2$1 = this.input.charCodeAt(this.pos + 2);
              if (next2$1 === 61) {
                return this.finishOp(types$1.assign, 3);
              }
            }
            return this.finishOp(types$1.coalesce, 2);
          }
        }
        return this.finishOp(types$1.question, 1);
      };
      pp.readToken_numberSign = function() {
        var ecmaVersion2 = this.options.ecmaVersion;
        var code = 35;
        if (ecmaVersion2 >= 13) {
          ++this.pos;
          code = this.fullCharCodeAtPos();
          if (isIdentifierStart(code, true) || code === 92) {
            return this.finishToken(types$1.privateId, this.readWord1());
          }
        }
        this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'");
      };
      pp.getTokenFromCode = function(code) {
        switch (code) {
          case 46:
            return this.readToken_dot();
          case 40:
            ++this.pos;
            return this.finishToken(types$1.parenL);
          case 41:
            ++this.pos;
            return this.finishToken(types$1.parenR);
          case 59:
            ++this.pos;
            return this.finishToken(types$1.semi);
          case 44:
            ++this.pos;
            return this.finishToken(types$1.comma);
          case 91:
            ++this.pos;
            return this.finishToken(types$1.bracketL);
          case 93:
            ++this.pos;
            return this.finishToken(types$1.bracketR);
          case 123:
            ++this.pos;
            return this.finishToken(types$1.braceL);
          case 125:
            ++this.pos;
            return this.finishToken(types$1.braceR);
          case 58:
            ++this.pos;
            return this.finishToken(types$1.colon);
          case 96:
            if (this.options.ecmaVersion < 6) {
              break;
            }
            ++this.pos;
            return this.finishToken(types$1.backQuote);
          case 48:
            var next = this.input.charCodeAt(this.pos + 1);
            if (next === 120 || next === 88) {
              return this.readRadixNumber(16);
            }
            if (this.options.ecmaVersion >= 6) {
              if (next === 111 || next === 79) {
                return this.readRadixNumber(8);
              }
              if (next === 98 || next === 66) {
                return this.readRadixNumber(2);
              }
            }
          case 49:
          case 50:
          case 51:
          case 52:
          case 53:
          case 54:
          case 55:
          case 56:
          case 57:
            return this.readNumber(false);
          case 34:
          case 39:
            return this.readString(code);
          case 47:
            return this.readToken_slash();
          case 37:
          case 42:
            return this.readToken_mult_modulo_exp(code);
          case 124:
          case 38:
            return this.readToken_pipe_amp(code);
          case 94:
            return this.readToken_caret();
          case 43:
          case 45:
            return this.readToken_plus_min(code);
          case 60:
          case 62:
            return this.readToken_lt_gt(code);
          case 61:
          case 33:
            return this.readToken_eq_excl(code);
          case 63:
            return this.readToken_question();
          case 126:
            return this.finishOp(types$1.prefix, 1);
          case 35:
            return this.readToken_numberSign();
        }
        this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'");
      };
      pp.finishOp = function(type, size) {
        var str = this.input.slice(this.pos, this.pos + size);
        this.pos += size;
        return this.finishToken(type, str);
      };
      pp.readRegexp = function() {
        var escaped, inClass, start = this.pos;
        for (; ; ) {
          if (this.pos >= this.input.length) {
            this.raise(start, "Unterminated regular expression");
          }
          var ch = this.input.charAt(this.pos);
          if (lineBreak.test(ch)) {
            this.raise(start, "Unterminated regular expression");
          }
          if (!escaped) {
            if (ch === "[") {
              inClass = true;
            } else if (ch === "]" && inClass) {
              inClass = false;
            } else if (ch === "/" && !inClass) {
              break;
            }
            escaped = ch === "\\";
          } else {
            escaped = false;
          }
          ++this.pos;
        }
        var pattern = this.input.slice(start, this.pos);
        ++this.pos;
        var flagsStart = this.pos;
        var flags = this.readWord1();
        if (this.containsEsc) {
          this.unexpected(flagsStart);
        }
        var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
        state.reset(start, pattern, flags);
        this.validateRegExpFlags(state);
        this.validateRegExpPattern(state);
        var value = null;
        try {
          value = new RegExp(pattern, flags);
        } catch (e) {
        }
        return this.finishToken(types$1.regexp, { pattern, flags, value });
      };
      pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {
        var allowSeparators = this.options.ecmaVersion >= 12 && len === void 0;
        var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;
        var start = this.pos, total = 0, lastCode = 0;
        for (var i2 = 0, e = len == null ? Infinity : len; i2 < e; ++i2, ++this.pos) {
          var code = this.input.charCodeAt(this.pos), val = void 0;
          if (allowSeparators && code === 95) {
            if (isLegacyOctalNumericLiteral) {
              this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals");
            }
            if (lastCode === 95) {
              this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore");
            }
            if (i2 === 0) {
              this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits");
            }
            lastCode = code;
            continue;
          }
          if (code >= 97) {
            val = code - 97 + 10;
          } else if (code >= 65) {
            val = code - 65 + 10;
          } else if (code >= 48 && code <= 57) {
            val = code - 48;
          } else {
            val = Infinity;
          }
          if (val >= radix) {
            break;
          }
          lastCode = code;
          total = total * radix + val;
        }
        if (allowSeparators && lastCode === 95) {
          this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits");
        }
        if (this.pos === start || len != null && this.pos - start !== len) {
          return null;
        }
        return total;
      };
      function stringToNumber(str, isLegacyOctalNumericLiteral) {
        if (isLegacyOctalNumericLiteral) {
          return parseInt(str, 8);
        }
        return parseFloat(str.replace(/_/g, ""));
      }
      function stringToBigInt(str) {
        if (typeof BigInt !== "function") {
          return null;
        }
        return BigInt(str.replace(/_/g, ""));
      }
      pp.readRadixNumber = function(radix) {
        var start = this.pos;
        this.pos += 2;
        var val = this.readInt(radix);
        if (val == null) {
          this.raise(this.start + 2, "Expected number in radix " + radix);
        }
        if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
          val = stringToBigInt(this.input.slice(start, this.pos));
          ++this.pos;
        } else if (isIdentifierStart(this.fullCharCodeAtPos())) {
          this.raise(this.pos, "Identifier directly after number");
        }
        return this.finishToken(types$1.num, val);
      };
      pp.readNumber = function(startsWithDot) {
        var start = this.pos;
        if (!startsWithDot && this.readInt(10, void 0, true) === null) {
          this.raise(start, "Invalid number");
        }
        var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
        if (octal && this.strict) {
          this.raise(start, "Invalid number");
        }
        var next = this.input.charCodeAt(this.pos);
        if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
          var val$1 = stringToBigInt(this.input.slice(start, this.pos));
          ++this.pos;
          if (isIdentifierStart(this.fullCharCodeAtPos())) {
            this.raise(this.pos, "Identifier directly after number");
          }
          return this.finishToken(types$1.num, val$1);
        }
        if (octal && /[89]/.test(this.input.slice(start, this.pos))) {
          octal = false;
        }
        if (next === 46 && !octal) {
          ++this.pos;
          this.readInt(10);
          next = this.input.charCodeAt(this.pos);
        }
        if ((next === 69 || next === 101) && !octal) {
          next = this.input.charCodeAt(++this.pos);
          if (next === 43 || next === 45) {
            ++this.pos;
          }
          if (this.readInt(10) === null) {
            this.raise(start, "Invalid number");
          }
        }
        if (isIdentifierStart(this.fullCharCodeAtPos())) {
          this.raise(this.pos, "Identifier directly after number");
        }
        var val = stringToNumber(this.input.slice(start, this.pos), octal);
        return this.finishToken(types$1.num, val);
      };
      pp.readCodePoint = function() {
        var ch = this.input.charCodeAt(this.pos), code;
        if (ch === 123) {
          if (this.options.ecmaVersion < 6) {
            this.unexpected();
          }
          var codePos = ++this.pos;
          code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
          ++this.pos;
          if (code > 1114111) {
            this.invalidStringToken(codePos, "Code point out of bounds");
          }
        } else {
          code = this.readHexChar(4);
        }
        return code;
      };
      pp.readString = function(quote) {
        var out = "", chunkStart = ++this.pos;
        for (; ; ) {
          if (this.pos >= this.input.length) {
            this.raise(this.start, "Unterminated string constant");
          }
          var ch = this.input.charCodeAt(this.pos);
          if (ch === quote) {
            break;
          }
          if (ch === 92) {
            out += this.input.slice(chunkStart, this.pos);
            out += this.readEscapedChar(false);
            chunkStart = this.pos;
          } else if (ch === 8232 || ch === 8233) {
            if (this.options.ecmaVersion < 10) {
              this.raise(this.start, "Unterminated string constant");
            }
            ++this.pos;
            if (this.options.locations) {
              this.curLine++;
              this.lineStart = this.pos;
            }
          } else {
            if (isNewLine(ch)) {
              this.raise(this.start, "Unterminated string constant");
            }
            ++this.pos;
          }
        }
        out += this.input.slice(chunkStart, this.pos++);
        return this.finishToken(types$1.string, out);
      };
      var INVALID_TEMPLATE_ESCAPE_ERROR = {};
      pp.tryReadTemplateToken = function() {
        this.inTemplateElement = true;
        try {
          this.readTmplToken();
        } catch (err) {
          if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
            this.readInvalidTemplateToken();
          } else {
            throw err;
          }
        }
        this.inTemplateElement = false;
      };
      pp.invalidStringToken = function(position, message) {
        if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
          throw INVALID_TEMPLATE_ESCAPE_ERROR;
        } else {
          this.raise(position, message);
        }
      };
      pp.readTmplToken = function() {
        var out = "", chunkStart = this.pos;
        for (; ; ) {
          if (this.pos >= this.input.length) {
            this.raise(this.start, "Unterminated template");
          }
          var ch = this.input.charCodeAt(this.pos);
          if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) {
            if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {
              if (ch === 36) {
                this.pos += 2;
                return this.finishToken(types$1.dollarBraceL);
              } else {
                ++this.pos;
                return this.finishToken(types$1.backQuote);
              }
            }
            out += this.input.slice(chunkStart, this.pos);
            return this.finishToken(types$1.template, out);
          }
          if (ch === 92) {
            out += this.input.slice(chunkStart, this.pos);
            out += this.readEscapedChar(true);
            chunkStart = this.pos;
          } else if (isNewLine(ch)) {
            out += this.input.slice(chunkStart, this.pos);
            ++this.pos;
            switch (ch) {
              case 13:
                if (this.input.charCodeAt(this.pos) === 10) {
                  ++this.pos;
                }
              case 10:
                out += "\n";
                break;
              default:
                out += String.fromCharCode(ch);
                break;
            }
            if (this.options.locations) {
              ++this.curLine;
              this.lineStart = this.pos;
            }
            chunkStart = this.pos;
          } else {
            ++this.pos;
          }
        }
      };
      pp.readInvalidTemplateToken = function() {
        for (; this.pos < this.input.length; this.pos++) {
          switch (this.input[this.pos]) {
            case "\\":
              ++this.pos;
              break;
            case "$":
              if (this.input[this.pos + 1] !== "{") {
                break;
              }
            case "`":
              return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos));
          }
        }
        this.raise(this.start, "Unterminated template");
      };
      pp.readEscapedChar = function(inTemplate) {
        var ch = this.input.charCodeAt(++this.pos);
        ++this.pos;
        switch (ch) {
          case 110:
            return "\n";
          case 114:
            return "\r";
          case 120:
            return String.fromCharCode(this.readHexChar(2));
          case 117:
            return codePointToString(this.readCodePoint());
          case 116:
            return "	";
          case 98:
            return "\b";
          case 118:
            return "\v";
          case 102:
            return "\f";
          case 13:
            if (this.input.charCodeAt(this.pos) === 10) {
              ++this.pos;
            }
          case 10:
            if (this.options.locations) {
              this.lineStart = this.pos;
              ++this.curLine;
            }
            return "";
          case 56:
          case 57:
            if (this.strict) {
              this.invalidStringToken(this.pos - 1, "Invalid escape sequence");
            }
            if (inTemplate) {
              var codePos = this.pos - 1;
              this.invalidStringToken(codePos, "Invalid escape sequence in template string");
            }
          default:
            if (ch >= 48 && ch <= 55) {
              var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
              var octal = parseInt(octalStr, 8);
              if (octal > 255) {
                octalStr = octalStr.slice(0, -1);
                octal = parseInt(octalStr, 8);
              }
              this.pos += octalStr.length - 1;
              ch = this.input.charCodeAt(this.pos);
              if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
                this.invalidStringToken(this.pos - 1 - octalStr.length, inTemplate ? "Octal literal in template string" : "Octal literal in strict mode");
              }
              return String.fromCharCode(octal);
            }
            if (isNewLine(ch)) {
              return "";
            }
            return String.fromCharCode(ch);
        }
      };
      pp.readHexChar = function(len) {
        var codePos = this.pos;
        var n = this.readInt(16, len);
        if (n === null) {
          this.invalidStringToken(codePos, "Bad character escape sequence");
        }
        return n;
      };
      pp.readWord1 = function() {
        this.containsEsc = false;
        var word = "", first = true, chunkStart = this.pos;
        var astral = this.options.ecmaVersion >= 6;
        while (this.pos < this.input.length) {
          var ch = this.fullCharCodeAtPos();
          if (isIdentifierChar(ch, astral)) {
            this.pos += ch <= 65535 ? 1 : 2;
          } else if (ch === 92) {
            this.containsEsc = true;
            word += this.input.slice(chunkStart, this.pos);
            var escStart = this.pos;
            if (this.input.charCodeAt(++this.pos) !== 117) {
              this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX");
            }
            ++this.pos;
            var esc = this.readCodePoint();
            if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral)) {
              this.invalidStringToken(escStart, "Invalid Unicode escape");
            }
            word += codePointToString(esc);
            chunkStart = this.pos;
          } else {
            break;
          }
          first = false;
        }
        return word + this.input.slice(chunkStart, this.pos);
      };
      pp.readWord = function() {
        var word = this.readWord1();
        var type = types$1.name;
        if (this.keywords.test(word)) {
          type = keywords[word];
        }
        return this.finishToken(type, word);
      };
      var version = "8.10.0";
      Parser.acorn = {
        Parser,
        version,
        defaultOptions: defaultOptions2,
        Position,
        SourceLocation,
        getLineInfo,
        Node: Node3,
        TokenType,
        tokTypes: types$1,
        keywordTypes: keywords,
        TokContext,
        tokContexts: types,
        isIdentifierChar,
        isIdentifierStart,
        Token,
        isNewLine,
        lineBreak,
        lineBreakG,
        nonASCIIwhitespace
      };
      function parse2(input, options) {
        return Parser.parse(input, options);
      }
      function parseExpressionAt(input, pos, options) {
        return Parser.parseExpressionAt(input, pos, options);
      }
      function tokenizer(input, options) {
        return Parser.tokenizer(input, options);
      }
      exports2.Node = Node3;
      exports2.Parser = Parser;
      exports2.Position = Position;
      exports2.SourceLocation = SourceLocation;
      exports2.TokContext = TokContext;
      exports2.Token = Token;
      exports2.TokenType = TokenType;
      exports2.defaultOptions = defaultOptions2;
      exports2.getLineInfo = getLineInfo;
      exports2.isIdentifierChar = isIdentifierChar;
      exports2.isIdentifierStart = isIdentifierStart;
      exports2.isNewLine = isNewLine;
      exports2.keywordTypes = keywords;
      exports2.lineBreak = lineBreak;
      exports2.lineBreakG = lineBreakG;
      exports2.nonASCIIwhitespace = nonASCIIwhitespace;
      exports2.parse = parse2;
      exports2.parseExpressionAt = parseExpressionAt;
      exports2.tokContexts = types;
      exports2.tokTypes = types$1;
      exports2.tokenizer = tokenizer;
      exports2.version = version;
    });
  }
});

// node_modules/terser/dist/bundle.min.js
var require_bundle_min = __commonJS({
  "node_modules/terser/dist/bundle.min.js"(exports, module2) {
    (function(global2, factory) {
      typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports, require_source_map_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/source-map"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.Terser = {}, global2.sourceMap));
    })(exports, function(exports2, sourceMap) {
      "use strict";
      function characters(str) {
        return str.split("");
      }
      function member(name, array) {
        return array.includes(name);
      }
      class DefaultsError extends Error {
        constructor(msg, defs) {
          super();
          this.name = "DefaultsError";
          this.message = msg;
          this.defs = defs;
        }
      }
      function defaults(args, defs, croak) {
        if (args === true) {
          args = {};
        } else if (args != null && typeof args === "object") {
          args = { ...args };
        }
        const ret = args || {};
        if (croak) {
          for (const i in ret)
            if (HOP(ret, i) && !HOP(defs, i)) {
              throw new DefaultsError("`" + i + "` is not a supported option", defs);
            }
        }
        for (const i in defs)
          if (HOP(defs, i)) {
            if (!args || !HOP(args, i)) {
              ret[i] = defs[i];
            } else if (i === "ecma") {
              let ecma = args[i] | 0;
              if (ecma > 5 && ecma < 2015)
                ecma += 2009;
              ret[i] = ecma;
            } else {
              ret[i] = args && HOP(args, i) ? args[i] : defs[i];
            }
          }
        return ret;
      }
      function noop() {
      }
      function return_false() {
        return false;
      }
      function return_true() {
        return true;
      }
      function return_this() {
        return this;
      }
      function return_null() {
        return null;
      }
      var MAP = function() {
        function MAP2(a, tw, allow_splicing = true) {
          const new_a = [];
          for (let i = 0; i < a.length; ++i) {
            let item = a[i];
            let ret = item.transform(tw, allow_splicing);
            if (ret instanceof AST_Node) {
              new_a.push(ret);
            } else if (ret instanceof Splice) {
              new_a.push(...ret.v);
            }
          }
          return new_a;
        }
        MAP2.splice = function(val) {
          return new Splice(val);
        };
        MAP2.skip = {};
        function Splice(val) {
          this.v = val;
        }
        return MAP2;
      }();
      function make_node(ctor, orig, props) {
        if (!props)
          props = {};
        if (orig) {
          if (!props.start)
            props.start = orig.start;
          if (!props.end)
            props.end = orig.end;
        }
        return new ctor(props);
      }
      function push_uniq(array, el) {
        if (!array.includes(el))
          array.push(el);
      }
      function string_template(text, props) {
        return text.replace(/{(.+?)}/g, function(str, p) {
          return props && props[p];
        });
      }
      function remove2(array, el) {
        for (var i = array.length; --i >= 0; ) {
          if (array[i] === el)
            array.splice(i, 1);
        }
      }
      function mergeSort(array, cmp) {
        if (array.length < 2)
          return array.slice();
        function merge2(a, b) {
          var r = [], ai = 0, bi = 0, i = 0;
          while (ai < a.length && bi < b.length) {
            cmp(a[ai], b[bi]) <= 0 ? r[i++] = a[ai++] : r[i++] = b[bi++];
          }
          if (ai < a.length)
            r.push.apply(r, a.slice(ai));
          if (bi < b.length)
            r.push.apply(r, b.slice(bi));
          return r;
        }
        function _ms(a) {
          if (a.length <= 1)
            return a;
          var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
          left = _ms(left);
          right = _ms(right);
          return merge2(left, right);
        }
        return _ms(array);
      }
      function makePredicate(words) {
        if (!Array.isArray(words))
          words = words.split(" ");
        return new Set(words.sort());
      }
      function map_add(map, key, value) {
        if (map.has(key)) {
          map.get(key).push(value);
        } else {
          map.set(key, [value]);
        }
      }
      function map_from_object(obj) {
        var map = /* @__PURE__ */ new Map();
        for (var key in obj) {
          if (HOP(obj, key) && key.charAt(0) === "$") {
            map.set(key.substr(1), obj[key]);
          }
        }
        return map;
      }
      function map_to_object(map) {
        var obj = /* @__PURE__ */ Object.create(null);
        map.forEach(function(value, key) {
          obj["$" + key] = value;
        });
        return obj;
      }
      function HOP(obj, prop) {
        return Object.prototype.hasOwnProperty.call(obj, prop);
      }
      function keep_name(keep_setting, name) {
        return keep_setting === true || keep_setting instanceof RegExp && keep_setting.test(name);
      }
      var lineTerminatorEscape = {
        "\0": "0",
        "\n": "n",
        "\r": "r",
        "\u2028": "u2028",
        "\u2029": "u2029"
      };
      function regexp_source_fix(source) {
        return source.replace(/[\0\n\r\u2028\u2029]/g, function(match, offset) {
          var escaped = source[offset - 1] == "\\" && (source[offset - 2] != "\\" || /(?:^|[^\\])(?:\\{2})*$/.test(source.slice(0, offset - 1)));
          return (escaped ? "" : "\\") + lineTerminatorEscape[match];
        });
      }
      const re_safe_regexp = /^[\\/|\0\s\w^$.[\]()]*$/;
      const regexp_is_safe = (source) => re_safe_regexp.test(source);
      const all_flags = "dgimsuyv";
      function sort_regexp_flags(flags) {
        const existing_flags = new Set(flags.split(""));
        let out = "";
        for (const flag of all_flags) {
          if (existing_flags.has(flag)) {
            out += flag;
            existing_flags.delete(flag);
          }
        }
        if (existing_flags.size) {
          existing_flags.forEach((flag) => {
            out += flag;
          });
        }
        return out;
      }
      function has_annotation(node, annotation) {
        return node._annotations & annotation;
      }
      function set_annotation(node, annotation) {
        node._annotations |= annotation;
      }
      function clear_annotation(node, annotation) {
        node._annotations &= ~annotation;
      }
      var LATEST_RAW = "";
      var TEMPLATE_RAWS = /* @__PURE__ */ new Map();
      var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with";
      var KEYWORDS_ATOM = "false null true";
      var RESERVED_WORDS = "enum import super this " + KEYWORDS_ATOM + " " + KEYWORDS;
      var ALL_RESERVED_WORDS = "implements interface package private protected public static " + RESERVED_WORDS;
      var KEYWORDS_BEFORE_EXPRESSION = "return new delete throw else case yield await";
      KEYWORDS = makePredicate(KEYWORDS);
      RESERVED_WORDS = makePredicate(RESERVED_WORDS);
      KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);
      KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);
      ALL_RESERVED_WORDS = makePredicate(ALL_RESERVED_WORDS);
      var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^"));
      var RE_NUM_LITERAL = /[0-9a-f]/i;
      var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
      var RE_OCT_NUMBER = /^0[0-7]+$/;
      var RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;
      var RE_BIN_NUMBER = /^0b[01]+$/i;
      var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
      var RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i;
      var OPERATORS = makePredicate([
        "in",
        "instanceof",
        "typeof",
        "new",
        "void",
        "delete",
        "++",
        "--",
        "+",
        "-",
        "!",
        "~",
        "&",
        "|",
        "^",
        "*",
        "**",
        "/",
        "%",
        ">>",
        "<<",
        ">>>",
        "<",
        ">",
        "<=",
        ">=",
        "==",
        "===",
        "!=",
        "!==",
        "?",
        "=",
        "+=",
        "-=",
        "||=",
        "&&=",
        "??=",
        "/=",
        "*=",
        "**=",
        "%=",
        ">>=",
        "<<=",
        ">>>=",
        "|=",
        "^=",
        "&=",
        "&&",
        "??",
        "||"
      ]);
      var WHITESPACE_CHARS = makePredicate(characters(" \xA0\n\r	\f\v\u200B\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF"));
      var NEWLINE_CHARS = makePredicate(characters("\n\r\u2028\u2029"));
      var PUNC_AFTER_EXPRESSION = makePredicate(characters(";]),:"));
      var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,;:"));
      var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
      var UNICODE = {
        ID_Start: /[$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
        ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/
      };
      try {
        UNICODE = {
          ID_Start: new RegExp("[_$\\p{ID_Start}]", "u"),
          ID_Continue: new RegExp("[$\\u200C\\u200D\\p{ID_Continue}]+", "u")
        };
      } catch (e) {
      }
      function get_full_char(str, pos) {
        if (is_surrogate_pair_head(str.charCodeAt(pos))) {
          if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {
            return str.charAt(pos) + str.charAt(pos + 1);
          }
        } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) {
          if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) {
            return str.charAt(pos - 1) + str.charAt(pos);
          }
        }
        return str.charAt(pos);
      }
      function get_full_char_code(str, pos) {
        if (is_surrogate_pair_head(str.charCodeAt(pos))) {
          return 65536 + (str.charCodeAt(pos) - 55296 << 10) + str.charCodeAt(pos + 1) - 56320;
        }
        return str.charCodeAt(pos);
      }
      function get_full_char_length(str) {
        var surrogates = 0;
        for (var i = 0; i < str.length; i++) {
          if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) {
            surrogates++;
            i++;
          }
        }
        return str.length - surrogates;
      }
      function from_char_code(code) {
        if (code > 65535) {
          code -= 65536;
          return String.fromCharCode((code >> 10) + 55296) + String.fromCharCode(code % 1024 + 56320);
        }
        return String.fromCharCode(code);
      }
      function is_surrogate_pair_head(code) {
        return code >= 55296 && code <= 56319;
      }
      function is_surrogate_pair_tail(code) {
        return code >= 56320 && code <= 57343;
      }
      function is_digit(code) {
        return code >= 48 && code <= 57;
      }
      function is_identifier_start(ch) {
        return UNICODE.ID_Start.test(ch);
      }
      function is_identifier_char(ch) {
        return UNICODE.ID_Continue.test(ch);
      }
      const BASIC_IDENT = /^[a-z_$][a-z0-9_$]*$/i;
      function is_basic_identifier_string(str) {
        return BASIC_IDENT.test(str);
      }
      function is_identifier_string(str, allow_surrogates) {
        if (BASIC_IDENT.test(str)) {
          return true;
        }
        if (!allow_surrogates && /[\ud800-\udfff]/.test(str)) {
          return false;
        }
        var match = UNICODE.ID_Start.exec(str);
        if (!match || match.index !== 0) {
          return false;
        }
        str = str.slice(match[0].length);
        if (!str) {
          return true;
        }
        match = UNICODE.ID_Continue.exec(str);
        return !!match && match[0].length === str.length;
      }
      function parse_js_number(num, allow_e = true) {
        if (!allow_e && num.includes("e")) {
          return NaN;
        }
        if (RE_HEX_NUMBER.test(num)) {
          return parseInt(num.substr(2), 16);
        } else if (RE_OCT_NUMBER.test(num)) {
          return parseInt(num.substr(1), 8);
        } else if (RE_ES6_OCT_NUMBER.test(num)) {
          return parseInt(num.substr(2), 8);
        } else if (RE_BIN_NUMBER.test(num)) {
          return parseInt(num.substr(2), 2);
        } else if (RE_DEC_NUMBER.test(num)) {
          return parseFloat(num);
        } else {
          var val = parseFloat(num);
          if (val == num)
            return val;
        }
      }
      class JS_Parse_Error extends Error {
        constructor(message, filename, line, col, pos) {
          super();
          this.name = "SyntaxError";
          this.message = message;
          this.filename = filename;
          this.line = line;
          this.col = col;
          this.pos = pos;
        }
      }
      function js_error(message, filename, line, col, pos) {
        throw new JS_Parse_Error(message, filename, line, col, pos);
      }
      function is_token(token, type, val) {
        return token.type == type && (val == null || token.value == val);
      }
      var EX_EOF = {};
      function tokenizer($TEXT, filename, html5_comments, shebang) {
        var S = {
          text: $TEXT,
          filename,
          pos: 0,
          tokpos: 0,
          line: 1,
          tokline: 0,
          col: 0,
          tokcol: 0,
          newline_before: false,
          regex_allowed: false,
          brace_counter: 0,
          template_braces: [],
          comments_before: [],
          directives: {},
          directive_stack: []
        };
        function peek() {
          return get_full_char(S.text, S.pos);
        }
        function is_option_chain_op() {
          const must_be_dot = S.text.charCodeAt(S.pos + 1) === 46;
          if (!must_be_dot)
            return false;
          const cannot_be_digit = S.text.charCodeAt(S.pos + 2);
          return cannot_be_digit < 48 || cannot_be_digit > 57;
        }
        function next(signal_eof, in_string) {
          var ch = get_full_char(S.text, S.pos++);
          if (signal_eof && !ch)
            throw EX_EOF;
          if (NEWLINE_CHARS.has(ch)) {
            S.newline_before = S.newline_before || !in_string;
            ++S.line;
            S.col = 0;
            if (ch == "\r" && peek() == "\n") {
              ++S.pos;
              ch = "\n";
            }
          } else {
            if (ch.length > 1) {
              ++S.pos;
              ++S.col;
            }
            ++S.col;
          }
          return ch;
        }
        function forward(i) {
          while (i--)
            next();
        }
        function looking_at(str) {
          return S.text.substr(S.pos, str.length) == str;
        }
        function find_eol() {
          var text = S.text;
          for (var i = S.pos, n = S.text.length; i < n; ++i) {
            var ch = text[i];
            if (NEWLINE_CHARS.has(ch))
              return i;
          }
          return -1;
        }
        function find(what, signal_eof) {
          var pos = S.text.indexOf(what, S.pos);
          if (signal_eof && pos == -1)
            throw EX_EOF;
          return pos;
        }
        function start_token() {
          S.tokline = S.line;
          S.tokcol = S.col;
          S.tokpos = S.pos;
        }
        var prev_was_dot = false;
        var previous_token = null;
        function token(type, value, is_comment) {
          S.regex_allowed = type == "operator" && !UNARY_POSTFIX.has(value) || type == "keyword" && KEYWORDS_BEFORE_EXPRESSION.has(value) || type == "punc" && PUNC_BEFORE_EXPRESSION.has(value) || type == "arrow";
          if (type == "punc" && (value == "." || value == "?.")) {
            prev_was_dot = true;
          } else if (!is_comment) {
            prev_was_dot = false;
          }
          const line = S.tokline;
          const col = S.tokcol;
          const pos = S.tokpos;
          const nlb = S.newline_before;
          const file = filename;
          let comments_before = [];
          let comments_after = [];
          if (!is_comment) {
            comments_before = S.comments_before;
            comments_after = S.comments_before = [];
          }
          S.newline_before = false;
          const tok = new AST_Token(type, value, line, col, pos, nlb, comments_before, comments_after, file);
          if (!is_comment)
            previous_token = tok;
          return tok;
        }
        function skip_whitespace() {
          while (WHITESPACE_CHARS.has(peek()))
            next();
        }
        function read_while(pred) {
          var ret = "", ch, i = 0;
          while ((ch = peek()) && pred(ch, i++))
            ret += next();
          return ret;
        }
        function parse_error(err) {
          js_error(err, filename, S.tokline, S.tokcol, S.tokpos);
        }
        function read_num(prefix) {
          var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".", is_big_int = false, numeric_separator = false;
          var num = read_while(function(ch, i) {
            if (is_big_int)
              return false;
            var code = ch.charCodeAt(0);
            switch (code) {
              case 95:
                return numeric_separator = true;
              case 98:
              case 66:
                return has_x = true;
              case 111:
              case 79:
              case 120:
              case 88:
                return has_x ? false : has_x = true;
              case 101:
              case 69:
                return has_x ? true : has_e ? false : has_e = after_e = true;
              case 45:
                return after_e || i == 0 && !prefix;
              case 43:
                return after_e;
              case (after_e = false, 46):
                return !has_dot && !has_x && !has_e ? has_dot = true : false;
            }
            if (ch === "n") {
              is_big_int = true;
              return true;
            }
            return RE_NUM_LITERAL.test(ch);
          });
          if (prefix)
            num = prefix + num;
          LATEST_RAW = num;
          if (RE_OCT_NUMBER.test(num) && next_token.has_directive("use strict")) {
            parse_error("Legacy octal literals are not allowed in strict mode");
          }
          if (numeric_separator) {
            if (num.endsWith("_")) {
              parse_error("Numeric separators are not allowed at the end of numeric literals");
            } else if (num.includes("__")) {
              parse_error("Only one underscore is allowed as numeric separator");
            }
            num = num.replace(/_/g, "");
          }
          if (num.endsWith("n")) {
            const without_n = num.slice(0, -1);
            const allow_e = RE_HEX_NUMBER.test(without_n);
            const valid2 = parse_js_number(without_n, allow_e);
            if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid2))
              return token("big_int", without_n);
            parse_error("Invalid or unexpected token");
          }
          var valid = parse_js_number(num);
          if (!isNaN(valid)) {
            return token("num", valid);
          } else {
            parse_error("Invalid syntax: " + num);
          }
        }
        function is_octal(ch) {
          return ch >= "0" && ch <= "7";
        }
        function read_escaped_char(in_string, strict_hex, template_string) {
          var ch = next(true, in_string);
          switch (ch.charCodeAt(0)) {
            case 110:
              return "\n";
            case 114:
              return "\r";
            case 116:
              return "	";
            case 98:
              return "\b";
            case 118:
              return "\v";
            case 102:
              return "\f";
            case 120:
              return String.fromCharCode(hex_bytes(2, strict_hex));
            case 117:
              if (peek() == "{") {
                next(true);
                if (peek() === "}")
                  parse_error("Expecting hex-character between {}");
                while (peek() == "0")
                  next(true);
                var result, length = find("}", true) - S.pos;
                if (length > 6 || (result = hex_bytes(length, strict_hex)) > 1114111) {
                  parse_error("Unicode reference out of bounds");
                }
                next(true);
                return from_char_code(result);
              }
              return String.fromCharCode(hex_bytes(4, strict_hex));
            case 10:
              return "";
            case 13:
              if (peek() == "\n") {
                next(true, in_string);
                return "";
              }
          }
          if (is_octal(ch)) {
            if (template_string && strict_hex) {
              const represents_null_character = ch === "0" && !is_octal(peek());
              if (!represents_null_character) {
                parse_error("Octal escape sequences are not allowed in template strings");
              }
            }
            return read_octal_escape_sequence(ch, strict_hex);
          }
          return ch;
        }
        function read_octal_escape_sequence(ch, strict_octal) {
          var p = peek();
          if (p >= "0" && p <= "7") {
            ch += next(true);
            if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7")
              ch += next(true);
          }
          if (ch === "0")
            return "\0";
          if (ch.length > 0 && next_token.has_directive("use strict") && strict_octal)
            parse_error("Legacy octal escape sequences are not allowed in strict mode");
          return String.fromCharCode(parseInt(ch, 8));
        }
        function hex_bytes(n, strict_hex) {
          var num = 0;
          for (; n > 0; --n) {
            if (!strict_hex && isNaN(parseInt(peek(), 16))) {
              return parseInt(num, 16) || "";
            }
            var digit = next(true);
            if (isNaN(parseInt(digit, 16)))
              parse_error("Invalid hex-character pattern in string");
            num += digit;
          }
          return parseInt(num, 16);
        }
        var read_string = with_eof_error("Unterminated string constant", function() {
          const start_pos = S.pos;
          var quote = next(), ret = [];
          for (; ; ) {
            var ch = next(true, true);
            if (ch == "\\")
              ch = read_escaped_char(true, true);
            else if (ch == "\r" || ch == "\n")
              parse_error("Unterminated string constant");
            else if (ch == quote)
              break;
            ret.push(ch);
          }
          var tok = token("string", ret.join(""));
          LATEST_RAW = S.text.slice(start_pos, S.pos);
          tok.quote = quote;
          return tok;
        });
        var read_template_characters = with_eof_error("Unterminated template", function(begin) {
          if (begin) {
            S.template_braces.push(S.brace_counter);
          }
          var content = "", raw = "", ch, tok;
          next(true, true);
          while ((ch = next(true, true)) != "`") {
            if (ch == "\r") {
              if (peek() == "\n")
                ++S.pos;
              ch = "\n";
            } else if (ch == "$" && peek() == "{") {
              next(true, true);
              S.brace_counter++;
              tok = token(begin ? "template_head" : "template_substitution", content);
              TEMPLATE_RAWS.set(tok, raw);
              tok.template_end = false;
              return tok;
            }
            raw += ch;
            if (ch == "\\") {
              var tmp = S.pos;
              var prev_is_tag = previous_token && (previous_token.type === "name" || previous_token.type === "punc" && (previous_token.value === ")" || previous_token.value === "]"));
              ch = read_escaped_char(true, !prev_is_tag, true);
              raw += S.text.substr(tmp, S.pos - tmp);
            }
            content += ch;
          }
          S.template_braces.pop();
          tok = token(begin ? "template_head" : "template_substitution", content);
          TEMPLATE_RAWS.set(tok, raw);
          tok.template_end = true;
          return tok;
        });
        function skip_line_comment(type) {
          var regex_allowed = S.regex_allowed;
          var i = find_eol(), ret;
          if (i == -1) {
            ret = S.text.substr(S.pos);
            S.pos = S.text.length;
          } else {
            ret = S.text.substring(S.pos, i);
            S.pos = i;
          }
          S.col = S.tokcol + (S.pos - S.tokpos);
          S.comments_before.push(token(type, ret, true));
          S.regex_allowed = regex_allowed;
          return next_token;
        }
        var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function() {
          var regex_allowed = S.regex_allowed;
          var i = find("*/", true);
          var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, "\n");
          forward(get_full_char_length(text) + 2);
          S.comments_before.push(token("comment2", text, true));
          S.newline_before = S.newline_before || text.includes("\n");
          S.regex_allowed = regex_allowed;
          return next_token;
        });
        var read_name = with_eof_error("Unterminated identifier name", function() {
          var name = [], ch, escaped = false;
          var read_escaped_identifier_char = function() {
            escaped = true;
            next();
            if (peek() !== "u") {
              parse_error("Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}");
            }
            return read_escaped_char(false, true);
          };
          if ((ch = peek()) === "\\") {
            ch = read_escaped_identifier_char();
            if (!is_identifier_start(ch)) {
              parse_error("First identifier char is an invalid identifier char");
            }
          } else if (is_identifier_start(ch)) {
            next();
          } else {
            return "";
          }
          name.push(ch);
          while ((ch = peek()) != null) {
            if ((ch = peek()) === "\\") {
              ch = read_escaped_identifier_char();
              if (!is_identifier_char(ch)) {
                parse_error("Invalid escaped identifier char");
              }
            } else {
              if (!is_identifier_char(ch)) {
                break;
              }
              next();
            }
            name.push(ch);
          }
          const name_str = name.join("");
          if (RESERVED_WORDS.has(name_str) && escaped) {
            parse_error("Escaped characters are not allowed in keywords");
          }
          return name_str;
        });
        var read_regexp = with_eof_error("Unterminated regular expression", function(source) {
          var prev_backslash = false, ch, in_class = false;
          while (ch = next(true))
            if (NEWLINE_CHARS.has(ch)) {
              parse_error("Unexpected line terminator");
            } else if (prev_backslash) {
              source += "\\" + ch;
              prev_backslash = false;
            } else if (ch == "[") {
              in_class = true;
              source += ch;
            } else if (ch == "]" && in_class) {
              in_class = false;
              source += ch;
            } else if (ch == "/" && !in_class) {
              break;
            } else if (ch == "\\") {
              prev_backslash = true;
            } else {
              source += ch;
            }
          const flags = read_name();
          return token("regexp", "/" + source + "/" + flags);
        });
        function read_operator(prefix) {
          function grow(op) {
            if (!peek())
              return op;
            var bigger = op + peek();
            if (OPERATORS.has(bigger)) {
              next();
              return grow(bigger);
            } else {
              return op;
            }
          }
          return token("operator", grow(prefix || next()));
        }
        function handle_slash() {
          next();
          switch (peek()) {
            case "/":
              next();
              return skip_line_comment("comment1");
            case "*":
              next();
              return skip_multiline_comment();
          }
          return S.regex_allowed ? read_regexp("") : read_operator("/");
        }
        function handle_eq_sign() {
          next();
          if (peek() === ">") {
            next();
            return token("arrow", "=>");
          } else {
            return read_operator("=");
          }
        }
        function handle_dot() {
          next();
          if (is_digit(peek().charCodeAt(0))) {
            return read_num(".");
          }
          if (peek() === ".") {
            next();
            next();
            return token("expand", "...");
          }
          return token("punc", ".");
        }
        function read_word() {
          var word = read_name();
          if (prev_was_dot)
            return token("name", word);
          return KEYWORDS_ATOM.has(word) ? token("atom", word) : !KEYWORDS.has(word) ? token("name", word) : OPERATORS.has(word) ? token("operator", word) : token("keyword", word);
        }
        function read_private_word() {
          next();
          return token("privatename", read_name());
        }
        function with_eof_error(eof_error, cont) {
          return function(x) {
            try {
              return cont(x);
            } catch (ex) {
              if (ex === EX_EOF)
                parse_error(eof_error);
              else
                throw ex;
            }
          };
        }
        function next_token(force_regexp) {
          if (force_regexp != null)
            return read_regexp(force_regexp);
          if (shebang && S.pos == 0 && looking_at("#!")) {
            start_token();
            forward(2);
            skip_line_comment("comment5");
          }
          for (; ; ) {
            skip_whitespace();
            start_token();
            if (html5_comments) {
              if (looking_at("<!--")) {
                forward(4);
                skip_line_comment("comment3");
                continue;
              }
              if (looking_at("-->") && S.newline_before) {
                forward(3);
                skip_line_comment("comment4");
                continue;
              }
            }
            var ch = peek();
            if (!ch)
              return token("eof");
            var code = ch.charCodeAt(0);
            switch (code) {
              case 34:
              case 39:
                return read_string();
              case 46:
                return handle_dot();
              case 47: {
                var tok = handle_slash();
                if (tok === next_token)
                  continue;
                return tok;
              }
              case 61:
                return handle_eq_sign();
              case 63: {
                if (!is_option_chain_op())
                  break;
                next();
                next();
                return token("punc", "?.");
              }
              case 96:
                return read_template_characters(true);
              case 123:
                S.brace_counter++;
                break;
              case 125:
                S.brace_counter--;
                if (S.template_braces.length > 0 && S.template_braces[S.template_braces.length - 1] === S.brace_counter)
                  return read_template_characters(false);
                break;
            }
            if (is_digit(code))
              return read_num();
            if (PUNC_CHARS.has(ch))
              return token("punc", next());
            if (OPERATOR_CHARS.has(ch))
              return read_operator();
            if (code == 92 || is_identifier_start(ch))
              return read_word();
            if (code == 35)
              return read_private_word();
            break;
          }
          parse_error("Unexpected character '" + ch + "'");
        }
        next_token.next = next;
        next_token.peek = peek;
        next_token.context = function(nc) {
          if (nc)
            S = nc;
          return S;
        };
        next_token.add_directive = function(directive) {
          S.directive_stack[S.directive_stack.length - 1].push(directive);
          if (S.directives[directive] === void 0) {
            S.directives[directive] = 1;
          } else {
            S.directives[directive]++;
          }
        };
        next_token.push_directives_stack = function() {
          S.directive_stack.push([]);
        };
        next_token.pop_directives_stack = function() {
          var directives2 = S.directive_stack[S.directive_stack.length - 1];
          for (var i = 0; i < directives2.length; i++) {
            S.directives[directives2[i]]--;
          }
          S.directive_stack.pop();
        };
        next_token.has_directive = function(directive) {
          return S.directives[directive] > 0;
        };
        return next_token;
      }
      var UNARY_PREFIX = makePredicate([
        "typeof",
        "void",
        "delete",
        "--",
        "++",
        "!",
        "~",
        "-",
        "+"
      ]);
      var UNARY_POSTFIX = makePredicate(["--", "++"]);
      var ASSIGNMENT = makePredicate(["=", "+=", "-=", "??=", "&&=", "||=", "/=", "*=", "**=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="]);
      var LOGICAL_ASSIGNMENT = makePredicate(["??=", "&&=", "||="]);
      var PRECEDENCE = function(a, ret) {
        for (var i = 0; i < a.length; ++i) {
          var b = a[i];
          for (var j = 0; j < b.length; ++j) {
            ret[b[j]] = i + 1;
          }
        }
        return ret;
      }([
        ["||"],
        ["??"],
        ["&&"],
        ["|"],
        ["^"],
        ["&"],
        ["==", "===", "!=", "!=="],
        ["<", ">", "<=", ">=", "in", "instanceof"],
        [">>", "<<", ">>>"],
        ["+", "-"],
        ["*", "/", "%"],
        ["**"]
      ], {});
      var ATOMIC_START_TOKEN = makePredicate(["atom", "num", "big_int", "string", "regexp", "name"]);
      function parse2($TEXT, options) {
        const outer_comments_before_counts = /* @__PURE__ */ new WeakMap();
        options = defaults(options, {
          bare_returns: false,
          ecma: null,
          expression: false,
          filename: null,
          html5_comments: true,
          module: false,
          shebang: true,
          strict: false,
          toplevel: null
        }, true);
        var S = {
          input: typeof $TEXT == "string" ? tokenizer($TEXT, options.filename, options.html5_comments, options.shebang) : $TEXT,
          token: null,
          prev: null,
          peeked: null,
          in_function: 0,
          in_async: -1,
          in_generator: -1,
          in_directives: true,
          in_loop: 0,
          labels: []
        };
        S.token = next();
        function is(type, value) {
          return is_token(S.token, type, value);
        }
        function peek() {
          return S.peeked || (S.peeked = S.input());
        }
        function next() {
          S.prev = S.token;
          if (!S.peeked)
            peek();
          S.token = S.peeked;
          S.peeked = null;
          S.in_directives = S.in_directives && (S.token.type == "string" || is("punc", ";"));
          return S.token;
        }
        function prev() {
          return S.prev;
        }
        function croak(msg, line, col, pos) {
          var ctx = S.input.context();
          js_error(msg, ctx.filename, line != null ? line : ctx.tokline, col != null ? col : ctx.tokcol, pos != null ? pos : ctx.tokpos);
        }
        function token_error(token, msg) {
          croak(msg, token.line, token.col);
        }
        function unexpected(token) {
          if (token == null)
            token = S.token;
          token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
        }
        function expect_token(type, val) {
          if (is(type, val)) {
            return next();
          }
          token_error(S.token, "Unexpected token " + S.token.type + " \xAB" + S.token.value + "\xBB, expected " + type + " \xAB" + val + "\xBB");
        }
        function expect(punc) {
          return expect_token("punc", punc);
        }
        function has_newline_before(token) {
          return token.nlb || !token.comments_before.every((comment2) => !comment2.nlb);
        }
        function can_insert_semicolon() {
          return !options.strict && (is("eof") || is("punc", "}") || has_newline_before(S.token));
        }
        function is_in_generator() {
          return S.in_generator === S.in_function;
        }
        function is_in_async() {
          return S.in_async === S.in_function;
        }
        function can_await() {
          return S.in_async === S.in_function || S.in_function === 0 && S.input.has_directive("use strict");
        }
        function semicolon(optional) {
          if (is("punc", ";"))
            next();
          else if (!optional && !can_insert_semicolon())
            unexpected();
        }
        function parenthesised() {
          expect("(");
          var exp = expression(true);
          expect(")");
          return exp;
        }
        function embed_tokens(parser) {
          return function _embed_tokens_wrapper(...args) {
            const start = S.token;
            const expr = parser(...args);
            expr.start = start;
            expr.end = prev();
            return expr;
          };
        }
        function handle_regexp() {
          if (is("operator", "/") || is("operator", "/=")) {
            S.peeked = null;
            S.token = S.input(S.token.value.substr(1));
          }
        }
        var statement = embed_tokens(function statement2(is_export_default, is_for_body, is_if_body) {
          handle_regexp();
          switch (S.token.type) {
            case "string":
              if (S.in_directives) {
                var token = peek();
                if (!LATEST_RAW.includes("\\") && (is_token(token, "punc", ";") || is_token(token, "punc", "}") || has_newline_before(token) || is_token(token, "eof"))) {
                  S.input.add_directive(S.token.value);
                } else {
                  S.in_directives = false;
                }
              }
              var dir = S.in_directives, stat = simple_statement();
              return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;
            case "template_head":
            case "num":
            case "big_int":
            case "regexp":
            case "operator":
            case "atom":
              return simple_statement();
            case "name":
            case "privatename":
              if (is("privatename") && !S.in_class)
                croak("Private field must be used in an enclosing class");
              if (S.token.value == "async" && is_token(peek(), "keyword", "function")) {
                next();
                next();
                if (is_for_body) {
                  croak("functions are not allowed as the body of a loop");
                }
                return function_(AST_Defun, false, true, is_export_default);
              }
              if (S.token.value == "import" && !is_token(peek(), "punc", "(") && !is_token(peek(), "punc", ".")) {
                next();
                var node = import_statement();
                semicolon();
                return node;
              }
              return is_token(peek(), "punc", ":") ? labeled_statement() : simple_statement();
            case "punc":
              switch (S.token.value) {
                case "{":
                  return new AST_BlockStatement({
                    start: S.token,
                    body: block_(),
                    end: prev()
                  });
                case "[":
                case "(":
                  return simple_statement();
                case ";":
                  S.in_directives = false;
                  next();
                  return new AST_EmptyStatement();
                default:
                  unexpected();
              }
            case "keyword":
              switch (S.token.value) {
                case "break":
                  next();
                  return break_cont(AST_Break);
                case "continue":
                  next();
                  return break_cont(AST_Continue);
                case "debugger":
                  next();
                  semicolon();
                  return new AST_Debugger();
                case "do":
                  next();
                  var body = in_loop(statement2);
                  expect_token("keyword", "while");
                  var condition = parenthesised();
                  semicolon(true);
                  return new AST_Do({
                    body,
                    condition
                  });
                case "while":
                  next();
                  return new AST_While({
                    condition: parenthesised(),
                    body: in_loop(function() {
                      return statement2(false, true);
                    })
                  });
                case "for":
                  next();
                  return for_();
                case "class":
                  next();
                  if (is_for_body) {
                    croak("classes are not allowed as the body of a loop");
                  }
                  if (is_if_body) {
                    croak("classes are not allowed as the body of an if");
                  }
                  return class_(AST_DefClass, is_export_default);
                case "function":
                  next();
                  if (is_for_body) {
                    croak("functions are not allowed as the body of a loop");
                  }
                  return function_(AST_Defun, false, false, is_export_default);
                case "if":
                  next();
                  return if_();
                case "return":
                  if (S.in_function == 0 && !options.bare_returns)
                    croak("'return' outside of function");
                  next();
                  var value = null;
                  if (is("punc", ";")) {
                    next();
                  } else if (!can_insert_semicolon()) {
                    value = expression(true);
                    semicolon();
                  }
                  return new AST_Return({
                    value
                  });
                case "switch":
                  next();
                  return new AST_Switch({
                    expression: parenthesised(),
                    body: in_loop(switch_body_)
                  });
                case "throw":
                  next();
                  if (has_newline_before(S.token))
                    croak("Illegal newline after 'throw'");
                  var value = expression(true);
                  semicolon();
                  return new AST_Throw({
                    value
                  });
                case "try":
                  next();
                  return try_();
                case "var":
                  next();
                  var node = var_();
                  semicolon();
                  return node;
                case "let":
                  next();
                  var node = let_();
                  semicolon();
                  return node;
                case "const":
                  next();
                  var node = const_();
                  semicolon();
                  return node;
                case "with":
                  if (S.input.has_directive("use strict")) {
                    croak("Strict mode may not include a with statement");
                  }
                  next();
                  return new AST_With({
                    expression: parenthesised(),
                    body: statement2()
                  });
                case "export":
                  if (!is_token(peek(), "punc", "(")) {
                    next();
                    var node = export_statement();
                    if (is("punc", ";"))
                      semicolon();
                    return node;
                  }
              }
          }
          unexpected();
        });
        function labeled_statement() {
          var label = as_symbol(AST_Label);
          if (label.name === "await" && is_in_async()) {
            token_error(S.prev, "await cannot be used as label inside async function");
          }
          if (S.labels.some((l) => l.name === label.name)) {
            croak("Label " + label.name + " defined twice");
          }
          expect(":");
          S.labels.push(label);
          var stat = statement();
          S.labels.pop();
          if (!(stat instanceof AST_IterationStatement)) {
            label.references.forEach(function(ref) {
              if (ref instanceof AST_Continue) {
                ref = ref.label.start;
                croak("Continue label `" + label.name + "` refers to non-IterationStatement.", ref.line, ref.col, ref.pos);
              }
            });
          }
          return new AST_LabeledStatement({ body: stat, label });
        }
        function simple_statement(tmp) {
          return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });
        }
        function break_cont(type) {
          var label = null, ldef;
          if (!can_insert_semicolon()) {
            label = as_symbol(AST_LabelRef, true);
          }
          if (label != null) {
            ldef = S.labels.find((l) => l.name === label.name);
            if (!ldef)
              croak("Undefined label " + label.name);
            label.thedef = ldef;
          } else if (S.in_loop == 0)
            croak(type.TYPE + " not inside a loop or switch");
          semicolon();
          var stat = new type({ label });
          if (ldef)
            ldef.references.push(stat);
          return stat;
        }
        function for_() {
          var for_await_error = "`for await` invalid in this context";
          var await_tok = S.token;
          if (await_tok.type == "name" && await_tok.value == "await") {
            if (!can_await()) {
              token_error(await_tok, for_await_error);
            }
            next();
          } else {
            await_tok = false;
          }
          expect("(");
          var init = null;
          if (!is("punc", ";")) {
            init = is("keyword", "var") ? (next(), var_(true)) : is("keyword", "let") ? (next(), let_(true)) : is("keyword", "const") ? (next(), const_(true)) : expression(true, true);
            var is_in = is("operator", "in");
            var is_of = is("name", "of");
            if (await_tok && !is_of) {
              token_error(await_tok, for_await_error);
            }
            if (is_in || is_of) {
              if (init instanceof AST_Definitions) {
                if (init.definitions.length > 1)
                  token_error(init.start, "Only one variable declaration allowed in for..in loop");
              } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {
                token_error(init.start, "Invalid left-hand side in for..in loop");
              }
              next();
              if (is_in) {
                return for_in(init);
              } else {
                return for_of(init, !!await_tok);
              }
            }
          } else if (await_tok) {
            token_error(await_tok, for_await_error);
          }
          return regular_for(init);
        }
        function regular_for(init) {
          expect(";");
          var test = is("punc", ";") ? null : expression(true);
          expect(";");
          var step = is("punc", ")") ? null : expression(true);
          expect(")");
          return new AST_For({
            init,
            condition: test,
            step,
            body: in_loop(function() {
              return statement(false, true);
            })
          });
        }
        function for_of(init, is_await) {
          var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;
          var obj = expression(true);
          expect(")");
          return new AST_ForOf({
            await: is_await,
            init,
            name: lhs,
            object: obj,
            body: in_loop(function() {
              return statement(false, true);
            })
          });
        }
        function for_in(init) {
          var obj = expression(true);
          expect(")");
          return new AST_ForIn({
            init,
            object: obj,
            body: in_loop(function() {
              return statement(false, true);
            })
          });
        }
        var arrow_function = function(start, argnames, is_async) {
          if (has_newline_before(S.token)) {
            croak("Unexpected newline before arrow (=>)");
          }
          expect_token("arrow", "=>");
          var body = _function_body(is("punc", "{"), false, is_async);
          var end = body instanceof Array && body.length ? body[body.length - 1].end : body instanceof Array ? start : body.end;
          return new AST_Arrow({
            start,
            end,
            async: is_async,
            argnames,
            body
          });
        };
        var function_ = function(ctor, is_generator_property, is_async, is_export_default) {
          var in_statement = ctor === AST_Defun;
          var is_generator = is("operator", "*");
          if (is_generator) {
            next();
          }
          var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;
          if (in_statement && !name) {
            if (is_export_default) {
              ctor = AST_Function;
            } else {
              unexpected();
            }
          }
          if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))
            unexpected(prev());
          var args = [];
          var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);
          return new ctor({
            start: args.start,
            end: body.end,
            is_generator,
            async: is_async,
            name,
            argnames: args,
            body
          });
        };
        class UsedParametersTracker {
          constructor(is_parameter, strict, duplicates_ok = false) {
            this.is_parameter = is_parameter;
            this.duplicates_ok = duplicates_ok;
            this.parameters = /* @__PURE__ */ new Set();
            this.duplicate = null;
            this.default_assignment = false;
            this.spread = false;
            this.strict_mode = !!strict;
          }
          add_parameter(token) {
            if (this.parameters.has(token.value)) {
              if (this.duplicate === null) {
                this.duplicate = token;
              }
              this.check_strict();
            } else {
              this.parameters.add(token.value);
              if (this.is_parameter) {
                switch (token.value) {
                  case "arguments":
                  case "eval":
                  case "yield":
                    if (this.strict_mode) {
                      token_error(token, "Unexpected " + token.value + " identifier as parameter inside strict mode");
                    }
                    break;
                  default:
                    if (RESERVED_WORDS.has(token.value)) {
                      unexpected();
                    }
                }
              }
            }
          }
          mark_default_assignment(token) {
            if (this.default_assignment === false) {
              this.default_assignment = token;
            }
          }
          mark_spread(token) {
            if (this.spread === false) {
              this.spread = token;
            }
          }
          mark_strict_mode() {
            this.strict_mode = true;
          }
          is_strict() {
            return this.default_assignment !== false || this.spread !== false || this.strict_mode;
          }
          check_strict() {
            if (this.is_strict() && this.duplicate !== null && !this.duplicates_ok) {
              token_error(this.duplicate, "Parameter " + this.duplicate.value + " was used already");
            }
          }
        }
        function parameters(params) {
          var used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict"));
          expect("(");
          while (!is("punc", ")")) {
            var param = parameter(used_parameters);
            params.push(param);
            if (!is("punc", ")")) {
              expect(",");
            }
            if (param instanceof AST_Expansion) {
              break;
            }
          }
          next();
        }
        function parameter(used_parameters, symbol_type) {
          var param;
          var expand = false;
          if (used_parameters === void 0) {
            used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict"));
          }
          if (is("expand", "...")) {
            expand = S.token;
            used_parameters.mark_spread(S.token);
            next();
          }
          param = binding_element(used_parameters, symbol_type);
          if (is("operator", "=") && expand === false) {
            used_parameters.mark_default_assignment(S.token);
            next();
            param = new AST_DefaultAssign({
              start: param.start,
              left: param,
              operator: "=",
              right: expression(false),
              end: S.token
            });
          }
          if (expand !== false) {
            if (!is("punc", ")")) {
              unexpected();
            }
            param = new AST_Expansion({
              start: expand,
              expression: param,
              end: expand
            });
          }
          used_parameters.check_strict();
          return param;
        }
        function binding_element(used_parameters, symbol_type) {
          var elements = [];
          var first = true;
          var is_expand = false;
          var expand_token;
          var first_token = S.token;
          if (used_parameters === void 0) {
            const strict = S.input.has_directive("use strict");
            const duplicates_ok = symbol_type === AST_SymbolVar;
            used_parameters = new UsedParametersTracker(false, strict, duplicates_ok);
          }
          symbol_type = symbol_type === void 0 ? AST_SymbolFunarg : symbol_type;
          if (is("punc", "[")) {
            next();
            while (!is("punc", "]")) {
              if (first) {
                first = false;
              } else {
                expect(",");
              }
              if (is("expand", "...")) {
                is_expand = true;
                expand_token = S.token;
                used_parameters.mark_spread(S.token);
                next();
              }
              if (is("punc")) {
                switch (S.token.value) {
                  case ",":
                    elements.push(new AST_Hole({
                      start: S.token,
                      end: S.token
                    }));
                    continue;
                  case "]":
                    break;
                  case "[":
                  case "{":
                    elements.push(binding_element(used_parameters, symbol_type));
                    break;
                  default:
                    unexpected();
                }
              } else if (is("name")) {
                used_parameters.add_parameter(S.token);
                elements.push(as_symbol(symbol_type));
              } else {
                croak("Invalid function parameter");
              }
              if (is("operator", "=") && is_expand === false) {
                used_parameters.mark_default_assignment(S.token);
                next();
                elements[elements.length - 1] = new AST_DefaultAssign({
                  start: elements[elements.length - 1].start,
                  left: elements[elements.length - 1],
                  operator: "=",
                  right: expression(false),
                  end: S.token
                });
              }
              if (is_expand) {
                if (!is("punc", "]")) {
                  croak("Rest element must be last element");
                }
                elements[elements.length - 1] = new AST_Expansion({
                  start: expand_token,
                  expression: elements[elements.length - 1],
                  end: expand_token
                });
              }
            }
            expect("]");
            used_parameters.check_strict();
            return new AST_Destructuring({
              start: first_token,
              names: elements,
              is_array: true,
              end: prev()
            });
          } else if (is("punc", "{")) {
            next();
            while (!is("punc", "}")) {
              if (first) {
                first = false;
              } else {
                expect(",");
              }
              if (is("expand", "...")) {
                is_expand = true;
                expand_token = S.token;
                used_parameters.mark_spread(S.token);
                next();
              }
              if (is("name") && (is_token(peek(), "punc") || is_token(peek(), "operator")) && [",", "}", "="].includes(peek().value)) {
                used_parameters.add_parameter(S.token);
                var start = prev();
                var value = as_symbol(symbol_type);
                if (is_expand) {
                  elements.push(new AST_Expansion({
                    start: expand_token,
                    expression: value,
                    end: value.end
                  }));
                } else {
                  elements.push(new AST_ObjectKeyVal({
                    start,
                    key: value.name,
                    value,
                    end: value.end
                  }));
                }
              } else if (is("punc", "}")) {
                continue;
              } else {
                var property_token = S.token;
                var property = as_property_name();
                if (property === null) {
                  unexpected(prev());
                } else if (prev().type === "name" && !is("punc", ":")) {
                  elements.push(new AST_ObjectKeyVal({
                    start: prev(),
                    key: property,
                    value: new symbol_type({
                      start: prev(),
                      name: property,
                      end: prev()
                    }),
                    end: prev()
                  }));
                } else {
                  expect(":");
                  elements.push(new AST_ObjectKeyVal({
                    start: property_token,
                    quote: property_token.quote,
                    key: property,
                    value: binding_element(used_parameters, symbol_type),
                    end: prev()
                  }));
                }
              }
              if (is_expand) {
                if (!is("punc", "}")) {
                  croak("Rest element must be last element");
                }
              } else if (is("operator", "=")) {
                used_parameters.mark_default_assignment(S.token);
                next();
                elements[elements.length - 1].value = new AST_DefaultAssign({
                  start: elements[elements.length - 1].value.start,
                  left: elements[elements.length - 1].value,
                  operator: "=",
                  right: expression(false),
                  end: S.token
                });
              }
            }
            expect("}");
            used_parameters.check_strict();
            return new AST_Destructuring({
              start: first_token,
              names: elements,
              is_array: false,
              end: prev()
            });
          } else if (is("name")) {
            used_parameters.add_parameter(S.token);
            return as_symbol(symbol_type);
          } else {
            croak("Invalid function parameter");
          }
        }
        function params_or_seq_(allow_arrows, maybe_sequence) {
          var spread_token;
          var invalid_sequence;
          var trailing_comma;
          var a = [];
          expect("(");
          while (!is("punc", ")")) {
            if (spread_token)
              unexpected(spread_token);
            if (is("expand", "...")) {
              spread_token = S.token;
              if (maybe_sequence)
                invalid_sequence = S.token;
              next();
              a.push(new AST_Expansion({
                start: prev(),
                expression: expression(),
                end: S.token
              }));
            } else {
              a.push(expression());
            }
            if (!is("punc", ")")) {
              expect(",");
              if (is("punc", ")")) {
                trailing_comma = prev();
                if (maybe_sequence)
                  invalid_sequence = trailing_comma;
              }
            }
          }
          expect(")");
          if (allow_arrows && is("arrow", "=>")) {
            if (spread_token && trailing_comma)
              unexpected(trailing_comma);
          } else if (invalid_sequence) {
            unexpected(invalid_sequence);
          }
          return a;
        }
        function _function_body(block, generator, is_async, name, args) {
          var loop = S.in_loop;
          var labels = S.labels;
          var current_generator = S.in_generator;
          var current_async = S.in_async;
          ++S.in_function;
          if (generator)
            S.in_generator = S.in_function;
          if (is_async)
            S.in_async = S.in_function;
          if (args)
            parameters(args);
          if (block)
            S.in_directives = true;
          S.in_loop = 0;
          S.labels = [];
          if (block) {
            S.input.push_directives_stack();
            var a = block_();
            if (name)
              _verify_symbol(name);
            if (args)
              args.forEach(_verify_symbol);
            S.input.pop_directives_stack();
          } else {
            var a = [new AST_Return({
              start: S.token,
              value: expression(false),
              end: S.token
            })];
          }
          --S.in_function;
          S.in_loop = loop;
          S.labels = labels;
          S.in_generator = current_generator;
          S.in_async = current_async;
          return a;
        }
        function _await_expression() {
          if (!can_await()) {
            croak("Unexpected await expression outside async function", S.prev.line, S.prev.col, S.prev.pos);
          }
          return new AST_Await({
            start: prev(),
            end: S.token,
            expression: maybe_unary(true)
          });
        }
        function _yield_expression() {
          if (!is_in_generator()) {
            croak("Unexpected yield expression outside generator function", S.prev.line, S.prev.col, S.prev.pos);
          }
          var start = S.token;
          var star = false;
          var has_expression = true;
          if (can_insert_semicolon() || is("punc") && PUNC_AFTER_EXPRESSION.has(S.token.value)) {
            has_expression = false;
          } else if (is("operator", "*")) {
            star = true;
            next();
          }
          return new AST_Yield({
            start,
            is_star: star,
            expression: has_expression ? expression() : null,
            end: prev()
          });
        }
        function if_() {
          var cond = parenthesised(), body = statement(false, false, true), belse = null;
          if (is("keyword", "else")) {
            next();
            belse = statement(false, false, true);
          }
          return new AST_If({
            condition: cond,
            body,
            alternative: belse
          });
        }
        function block_() {
          expect("{");
          var a = [];
          while (!is("punc", "}")) {
            if (is("eof"))
              unexpected();
            a.push(statement());
          }
          next();
          return a;
        }
        function switch_body_() {
          expect("{");
          var a = [], cur = null, branch = null, tmp;
          while (!is("punc", "}")) {
            if (is("eof"))
              unexpected();
            if (is("keyword", "case")) {
              if (branch)
                branch.end = prev();
              cur = [];
              branch = new AST_Case({
                start: (tmp = S.token, next(), tmp),
                expression: expression(true),
                body: cur
              });
              a.push(branch);
              expect(":");
            } else if (is("keyword", "default")) {
              if (branch)
                branch.end = prev();
              cur = [];
              branch = new AST_Default({
                start: (tmp = S.token, next(), expect(":"), tmp),
                body: cur
              });
              a.push(branch);
            } else {
              if (!cur)
                unexpected();
              cur.push(statement());
            }
          }
          if (branch)
            branch.end = prev();
          next();
          return a;
        }
        function try_() {
          var body, bcatch = null, bfinally = null;
          body = new AST_TryBlock({
            start: S.token,
            body: block_(),
            end: prev()
          });
          if (is("keyword", "catch")) {
            var start = S.token;
            next();
            if (is("punc", "{")) {
              var name = null;
            } else {
              expect("(");
              var name = parameter(void 0, AST_SymbolCatch);
              expect(")");
            }
            bcatch = new AST_Catch({
              start,
              argname: name,
              body: block_(),
              end: prev()
            });
          }
          if (is("keyword", "finally")) {
            var start = S.token;
            next();
            bfinally = new AST_Finally({
              start,
              body: block_(),
              end: prev()
            });
          }
          if (!bcatch && !bfinally)
            croak("Missing catch/finally blocks");
          return new AST_Try({
            body,
            bcatch,
            bfinally
          });
        }
        function vardefs(no_in, kind) {
          var var_defs = [];
          var def;
          for (; ; ) {
            var sym_type = kind === "var" ? AST_SymbolVar : kind === "const" ? AST_SymbolConst : kind === "let" ? AST_SymbolLet : null;
            if (is("punc", "{") || is("punc", "[")) {
              def = new AST_VarDef({
                start: S.token,
                name: binding_element(void 0, sym_type),
                value: is("operator", "=") ? (expect_token("operator", "="), expression(false, no_in)) : null,
                end: prev()
              });
            } else {
              def = new AST_VarDef({
                start: S.token,
                name: as_symbol(sym_type),
                value: is("operator", "=") ? (next(), expression(false, no_in)) : !no_in && kind === "const" ? croak("Missing initializer in const declaration") : null,
                end: prev()
              });
              if (def.name.name == "import")
                croak("Unexpected token: import");
            }
            var_defs.push(def);
            if (!is("punc", ","))
              break;
            next();
          }
          return var_defs;
        }
        var var_ = function(no_in) {
          return new AST_Var({
            start: prev(),
            definitions: vardefs(no_in, "var"),
            end: prev()
          });
        };
        var let_ = function(no_in) {
          return new AST_Let({
            start: prev(),
            definitions: vardefs(no_in, "let"),
            end: prev()
          });
        };
        var const_ = function(no_in) {
          return new AST_Const({
            start: prev(),
            definitions: vardefs(no_in, "const"),
            end: prev()
          });
        };
        var new_ = function(allow_calls) {
          var start = S.token;
          expect_token("operator", "new");
          if (is("punc", ".")) {
            next();
            expect_token("name", "target");
            return subscripts(new AST_NewTarget({
              start,
              end: prev()
            }), allow_calls);
          }
          var newexp = expr_atom(false), args;
          if (is("punc", "(")) {
            next();
            args = expr_list(")", true);
          } else {
            args = [];
          }
          var call = new AST_New({
            start,
            expression: newexp,
            args,
            end: prev()
          });
          annotate(call);
          return subscripts(call, allow_calls);
        };
        function as_atom_node() {
          var tok = S.token, ret;
          switch (tok.type) {
            case "name":
              ret = _make_symbol(AST_SymbolRef);
              break;
            case "num":
              ret = new AST_Number({
                start: tok,
                end: tok,
                value: tok.value,
                raw: LATEST_RAW
              });
              break;
            case "big_int":
              ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });
              break;
            case "string":
              ret = new AST_String({
                start: tok,
                end: tok,
                value: tok.value,
                quote: tok.quote
              });
              annotate(ret);
              break;
            case "regexp":
              const [_, source, flags] = tok.value.match(/^\/(.*)\/(\w*)$/);
              ret = new AST_RegExp({ start: tok, end: tok, value: { source, flags } });
              break;
            case "atom":
              switch (tok.value) {
                case "false":
                  ret = new AST_False({ start: tok, end: tok });
                  break;
                case "true":
                  ret = new AST_True({ start: tok, end: tok });
                  break;
                case "null":
                  ret = new AST_Null({ start: tok, end: tok });
                  break;
              }
              break;
          }
          next();
          return ret;
        }
        function to_fun_args(ex, default_seen_above) {
          var insert_default = function(ex2, default_value) {
            if (default_value) {
              return new AST_DefaultAssign({
                start: ex2.start,
                left: ex2,
                operator: "=",
                right: default_value,
                end: default_value.end
              });
            }
            return ex2;
          };
          if (ex instanceof AST_Object) {
            return insert_default(new AST_Destructuring({
              start: ex.start,
              end: ex.end,
              is_array: false,
              names: ex.properties.map((prop) => to_fun_args(prop))
            }), default_seen_above);
          } else if (ex instanceof AST_ObjectKeyVal) {
            ex.value = to_fun_args(ex.value);
            return insert_default(ex, default_seen_above);
          } else if (ex instanceof AST_Hole) {
            return ex;
          } else if (ex instanceof AST_Destructuring) {
            ex.names = ex.names.map((name) => to_fun_args(name));
            return insert_default(ex, default_seen_above);
          } else if (ex instanceof AST_SymbolRef) {
            return insert_default(new AST_SymbolFunarg({
              name: ex.name,
              start: ex.start,
              end: ex.end
            }), default_seen_above);
          } else if (ex instanceof AST_Expansion) {
            ex.expression = to_fun_args(ex.expression);
            return insert_default(ex, default_seen_above);
          } else if (ex instanceof AST_Array) {
            return insert_default(new AST_Destructuring({
              start: ex.start,
              end: ex.end,
              is_array: true,
              names: ex.elements.map((elm) => to_fun_args(elm))
            }), default_seen_above);
          } else if (ex instanceof AST_Assign) {
            return insert_default(to_fun_args(ex.left, ex.right), default_seen_above);
          } else if (ex instanceof AST_DefaultAssign) {
            ex.left = to_fun_args(ex.left);
            return ex;
          } else {
            croak("Invalid function parameter", ex.start.line, ex.start.col);
          }
        }
        var expr_atom = function(allow_calls, allow_arrows) {
          if (is("operator", "new")) {
            return new_(allow_calls);
          }
          if (is("name", "import") && is_token(peek(), "punc", ".")) {
            return import_meta(allow_calls);
          }
          var start = S.token;
          var peeked;
          var async = is("name", "async") && (peeked = peek()).value != "[" && peeked.type != "arrow" && as_atom_node();
          if (is("punc")) {
            switch (S.token.value) {
              case "(":
                if (async && !allow_calls)
                  break;
                var exprs = params_or_seq_(allow_arrows, !async);
                if (allow_arrows && is("arrow", "=>")) {
                  return arrow_function(start, exprs.map((e) => to_fun_args(e)), !!async);
                }
                var ex = async ? new AST_Call({
                  expression: async,
                  args: exprs
                }) : to_expr_or_sequence(start, exprs);
                if (ex.start) {
                  const outer_comments_before = start.comments_before.length;
                  outer_comments_before_counts.set(start, outer_comments_before);
                  ex.start.comments_before.unshift(...start.comments_before);
                  start.comments_before = ex.start.comments_before;
                  if (outer_comments_before == 0 && start.comments_before.length > 0) {
                    var comment2 = start.comments_before[0];
                    if (!comment2.nlb) {
                      comment2.nlb = start.nlb;
                      start.nlb = false;
                    }
                  }
                  start.comments_after = ex.start.comments_after;
                }
                ex.start = start;
                var end = prev();
                if (ex.end) {
                  end.comments_before = ex.end.comments_before;
                  ex.end.comments_after.push(...end.comments_after);
                  end.comments_after = ex.end.comments_after;
                }
                ex.end = end;
                if (ex instanceof AST_Call)
                  annotate(ex);
                return subscripts(ex, allow_calls);
              case "[":
                return subscripts(array_(), allow_calls);
              case "{":
                return subscripts(object_or_destructuring_(), allow_calls);
            }
            if (!async)
              unexpected();
          }
          if (allow_arrows && is("name") && is_token(peek(), "arrow")) {
            var param = new AST_SymbolFunarg({
              name: S.token.value,
              start,
              end: start
            });
            next();
            return arrow_function(start, [param], !!async);
          }
          if (is("keyword", "function")) {
            next();
            var func = function_(AST_Function, false, !!async);
            func.start = start;
            func.end = prev();
            return subscripts(func, allow_calls);
          }
          if (async)
            return subscripts(async, allow_calls);
          if (is("keyword", "class")) {
            next();
            var cls = class_(AST_ClassExpression);
            cls.start = start;
            cls.end = prev();
            return subscripts(cls, allow_calls);
          }
          if (is("template_head")) {
            return subscripts(template_string(), allow_calls);
          }
          if (is("privatename")) {
            if (!S.in_class) {
              croak("Private field must be used in an enclosing class");
            }
            const start2 = S.token;
            const key = new AST_SymbolPrivateProperty({
              start: start2,
              name: start2.value,
              end: start2
            });
            next();
            expect_token("operator", "in");
            const private_in = new AST_PrivateIn({
              start: start2,
              key,
              value: subscripts(as_atom_node(), allow_calls),
              end: prev()
            });
            return subscripts(private_in, allow_calls);
          }
          if (ATOMIC_START_TOKEN.has(S.token.type)) {
            return subscripts(as_atom_node(), allow_calls);
          }
          unexpected();
        };
        function template_string() {
          var segments = [], start = S.token;
          segments.push(new AST_TemplateSegment({
            start: S.token,
            raw: TEMPLATE_RAWS.get(S.token),
            value: S.token.value,
            end: S.token
          }));
          while (!S.token.template_end) {
            next();
            handle_regexp();
            segments.push(expression(true));
            segments.push(new AST_TemplateSegment({
              start: S.token,
              raw: TEMPLATE_RAWS.get(S.token),
              value: S.token.value,
              end: S.token
            }));
          }
          next();
          return new AST_TemplateString({
            start,
            segments,
            end: S.token
          });
        }
        function expr_list(closing, allow_trailing_comma, allow_empty) {
          var first = true, a = [];
          while (!is("punc", closing)) {
            if (first)
              first = false;
            else
              expect(",");
            if (allow_trailing_comma && is("punc", closing))
              break;
            if (is("punc", ",") && allow_empty) {
              a.push(new AST_Hole({ start: S.token, end: S.token }));
            } else if (is("expand", "...")) {
              next();
              a.push(new AST_Expansion({ start: prev(), expression: expression(), end: S.token }));
            } else {
              a.push(expression(false));
            }
          }
          next();
          return a;
        }
        var array_ = embed_tokens(function() {
          expect("[");
          return new AST_Array({
            elements: expr_list("]", !options.strict, true)
          });
        });
        var create_accessor = embed_tokens((is_generator, is_async) => {
          return function_(AST_Accessor, is_generator, is_async);
        });
        var object_or_destructuring_ = embed_tokens(function object_or_destructuring_2() {
          var start = S.token, first = true, a = [];
          expect("{");
          while (!is("punc", "}")) {
            if (first)
              first = false;
            else
              expect(",");
            if (!options.strict && is("punc", "}"))
              break;
            start = S.token;
            if (start.type == "expand") {
              next();
              a.push(new AST_Expansion({
                start,
                expression: expression(false),
                end: prev()
              }));
              continue;
            }
            if (is("privatename")) {
              croak("private fields are not allowed in an object");
            }
            var name = as_property_name();
            var value;
            if (!is("punc", ":")) {
              var concise = concise_method_or_getset(name, start);
              if (concise) {
                a.push(concise);
                continue;
              }
              value = new AST_SymbolRef({
                start: prev(),
                name,
                end: prev()
              });
            } else if (name === null) {
              unexpected(prev());
            } else {
              next();
              value = expression(false);
            }
            if (is("operator", "=")) {
              next();
              value = new AST_Assign({
                start,
                left: value,
                operator: "=",
                right: expression(false),
                logical: false,
                end: prev()
              });
            }
            const kv = new AST_ObjectKeyVal({
              start,
              quote: start.quote,
              key: name instanceof AST_Node ? name : "" + name,
              value,
              end: prev()
            });
            a.push(annotate(kv));
          }
          next();
          return new AST_Object({ properties: a });
        });
        function class_(KindOfClass, is_export_default) {
          var start, method, class_name, extends_, a = [];
          S.input.push_directives_stack();
          S.input.add_directive("use strict");
          if (S.token.type == "name" && S.token.value != "extends") {
            class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);
          }
          if (KindOfClass === AST_DefClass && !class_name) {
            if (is_export_default) {
              KindOfClass = AST_ClassExpression;
            } else {
              unexpected();
            }
          }
          if (S.token.value == "extends") {
            next();
            extends_ = expression(true);
          }
          expect("{");
          const save_in_class = S.in_class;
          S.in_class = true;
          while (is("punc", ";")) {
            next();
          }
          while (!is("punc", "}")) {
            start = S.token;
            method = concise_method_or_getset(as_property_name(), start, true);
            if (!method) {
              unexpected();
            }
            a.push(method);
            while (is("punc", ";")) {
              next();
            }
          }
          S.in_class = save_in_class;
          S.input.pop_directives_stack();
          next();
          return new KindOfClass({
            start,
            name: class_name,
            extends: extends_,
            properties: a,
            end: prev()
          });
        }
        function concise_method_or_getset(name, start, is_class) {
          const get_symbol_ast = (name2, SymbolClass = AST_SymbolMethod) => {
            if (typeof name2 === "string" || typeof name2 === "number") {
              return new SymbolClass({
                start,
                name: "" + name2,
                end: prev()
              });
            } else if (name2 === null) {
              unexpected();
            }
            return name2;
          };
          const is_not_method_start = () => !is("punc", "(") && !is("punc", ",") && !is("punc", "}") && !is("punc", ";") && !is("operator", "=");
          var is_async = false;
          var is_static = false;
          var is_generator = false;
          var is_private = false;
          var accessor_type = null;
          if (is_class && name === "static" && is_not_method_start()) {
            const static_block = class_static_block();
            if (static_block != null) {
              return static_block;
            }
            is_static = true;
            name = as_property_name();
          }
          if (name === "async" && is_not_method_start()) {
            is_async = true;
            name = as_property_name();
          }
          if (prev().type === "operator" && prev().value === "*") {
            is_generator = true;
            name = as_property_name();
          }
          if ((name === "get" || name === "set") && is_not_method_start()) {
            accessor_type = name;
            name = as_property_name();
          }
          if (prev().type === "privatename") {
            is_private = true;
          }
          const property_token = prev();
          if (accessor_type != null) {
            if (!is_private) {
              const AccessorClass = accessor_type === "get" ? AST_ObjectGetter : AST_ObjectSetter;
              name = get_symbol_ast(name);
              return annotate(new AccessorClass({
                start,
                static: is_static,
                key: name,
                quote: name instanceof AST_SymbolMethod ? property_token.quote : void 0,
                value: create_accessor(),
                end: prev()
              }));
            } else {
              const AccessorClass = accessor_type === "get" ? AST_PrivateGetter : AST_PrivateSetter;
              return annotate(new AccessorClass({
                start,
                static: is_static,
                key: get_symbol_ast(name),
                value: create_accessor(),
                end: prev()
              }));
            }
          }
          if (is("punc", "(")) {
            name = get_symbol_ast(name);
            const AST_MethodVariant = is_private ? AST_PrivateMethod : AST_ConciseMethod;
            var node = new AST_MethodVariant({
              start,
              static: is_static,
              is_generator,
              async: is_async,
              key: name,
              quote: name instanceof AST_SymbolMethod ? property_token.quote : void 0,
              value: create_accessor(is_generator, is_async),
              end: prev()
            });
            return annotate(node);
          }
          if (is_class) {
            const key = get_symbol_ast(name, AST_SymbolClassProperty);
            const quote = key instanceof AST_SymbolClassProperty ? property_token.quote : void 0;
            const AST_ClassPropertyVariant = is_private ? AST_ClassPrivateProperty : AST_ClassProperty;
            if (is("operator", "=")) {
              next();
              return annotate(new AST_ClassPropertyVariant({
                start,
                static: is_static,
                quote,
                key,
                value: expression(false),
                end: prev()
              }));
            } else if (is("name") || is("privatename") || is("operator", "*") || is("punc", ";") || is("punc", "}")) {
              return annotate(new AST_ClassPropertyVariant({
                start,
                static: is_static,
                quote,
                key,
                end: prev()
              }));
            }
          }
        }
        function class_static_block() {
          if (!is("punc", "{")) {
            return null;
          }
          const start = S.token;
          const body = [];
          next();
          while (!is("punc", "}")) {
            body.push(statement());
          }
          next();
          return new AST_ClassStaticBlock({ start, body, end: prev() });
        }
        function maybe_import_assertion() {
          if (is("name", "assert") && !has_newline_before(S.token)) {
            next();
            return object_or_destructuring_();
          }
          return null;
        }
        function import_statement() {
          var start = prev();
          var imported_name;
          var imported_names;
          if (is("name")) {
            imported_name = as_symbol(AST_SymbolImport);
          }
          if (is("punc", ",")) {
            next();
          }
          imported_names = map_names(true);
          if (imported_names || imported_name) {
            expect_token("name", "from");
          }
          var mod_str = S.token;
          if (mod_str.type !== "string") {
            unexpected();
          }
          next();
          const assert_clause = maybe_import_assertion();
          return new AST_Import({
            start,
            imported_name,
            imported_names,
            module_name: new AST_String({
              start: mod_str,
              value: mod_str.value,
              quote: mod_str.quote,
              end: mod_str
            }),
            assert_clause,
            end: S.token
          });
        }
        function import_meta(allow_calls) {
          var start = S.token;
          expect_token("name", "import");
          expect_token("punc", ".");
          expect_token("name", "meta");
          return subscripts(new AST_ImportMeta({
            start,
            end: prev()
          }), allow_calls);
        }
        function map_name(is_import) {
          function make_symbol(type2, quote) {
            return new type2({
              name: as_property_name(),
              quote: quote || void 0,
              start: prev(),
              end: prev()
            });
          }
          var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
          var type = is_import ? AST_SymbolImport : AST_SymbolExport;
          var start = S.token;
          var foreign_name;
          var name;
          if (is_import) {
            foreign_name = make_symbol(foreign_type, start.quote);
          } else {
            name = make_symbol(type, start.quote);
          }
          if (is("name", "as")) {
            next();
            if (is_import) {
              name = make_symbol(type);
            } else {
              foreign_name = make_symbol(foreign_type, S.token.quote);
            }
          } else if (is_import) {
            name = new type(foreign_name);
          } else {
            foreign_name = new foreign_type(name);
          }
          return new AST_NameMapping({
            start,
            foreign_name,
            name,
            end: prev()
          });
        }
        function map_nameAsterisk(is_import, import_or_export_foreign_name) {
          var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
          var type = is_import ? AST_SymbolImport : AST_SymbolExport;
          var start = S.token;
          var name, foreign_name;
          var end = prev();
          if (is_import) {
            name = import_or_export_foreign_name;
          } else {
            foreign_name = import_or_export_foreign_name;
          }
          name = name || new type({
            start,
            name: "*",
            end
          });
          foreign_name = foreign_name || new foreign_type({
            start,
            name: "*",
            end
          });
          return new AST_NameMapping({
            start,
            foreign_name,
            name,
            end
          });
        }
        function map_names(is_import) {
          var names;
          if (is("punc", "{")) {
            next();
            names = [];
            while (!is("punc", "}")) {
              names.push(map_name(is_import));
              if (is("punc", ",")) {
                next();
              }
            }
            next();
          } else if (is("operator", "*")) {
            var name;
            next();
            if (is("name", "as")) {
              next();
              name = is_import ? as_symbol(AST_SymbolImport) : as_symbol_or_string(AST_SymbolExportForeign);
            }
            names = [map_nameAsterisk(is_import, name)];
          }
          return names;
        }
        function export_statement() {
          var start = S.token;
          var is_default;
          var exported_names;
          if (is("keyword", "default")) {
            is_default = true;
            next();
          } else if (exported_names = map_names(false)) {
            if (is("name", "from")) {
              next();
              var mod_str = S.token;
              if (mod_str.type !== "string") {
                unexpected();
              }
              next();
              const assert_clause = maybe_import_assertion();
              return new AST_Export({
                start,
                is_default,
                exported_names,
                module_name: new AST_String({
                  start: mod_str,
                  value: mod_str.value,
                  quote: mod_str.quote,
                  end: mod_str
                }),
                end: prev(),
                assert_clause
              });
            } else {
              return new AST_Export({
                start,
                is_default,
                exported_names,
                end: prev()
              });
            }
          }
          var node;
          var exported_value;
          var exported_definition;
          if (is("punc", "{") || is_default && (is("keyword", "class") || is("keyword", "function")) && is_token(peek(), "punc")) {
            exported_value = expression(false);
            semicolon();
          } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {
            unexpected(node.start);
          } else if (node instanceof AST_Definitions || node instanceof AST_Defun || node instanceof AST_DefClass) {
            exported_definition = node;
          } else if (node instanceof AST_ClassExpression || node instanceof AST_Function) {
            exported_value = node;
          } else if (node instanceof AST_SimpleStatement) {
            exported_value = node.body;
          } else {
            unexpected(node.start);
          }
          return new AST_Export({
            start,
            is_default,
            exported_value,
            exported_definition,
            end: prev(),
            assert_clause: null
          });
        }
        function as_property_name() {
          var tmp = S.token;
          switch (tmp.type) {
            case "punc":
              if (tmp.value === "[") {
                next();
                var ex = expression(false);
                expect("]");
                return ex;
              } else
                unexpected(tmp);
            case "operator":
              if (tmp.value === "*") {
                next();
                return null;
              }
              if (!["delete", "in", "instanceof", "new", "typeof", "void"].includes(tmp.value)) {
                unexpected(tmp);
              }
            case "name":
            case "privatename":
            case "string":
            case "num":
            case "big_int":
            case "keyword":
            case "atom":
              next();
              return tmp.value;
            default:
              unexpected(tmp);
          }
        }
        function as_name() {
          var tmp = S.token;
          if (tmp.type != "name" && tmp.type != "privatename")
            unexpected();
          next();
          return tmp.value;
        }
        function _make_symbol(type) {
          var name = S.token.value;
          return new (name == "this" ? AST_This : name == "super" ? AST_Super : type)({
            name: String(name),
            start: S.token,
            end: S.token
          });
        }
        function _verify_symbol(sym) {
          var name = sym.name;
          if (is_in_generator() && name == "yield") {
            token_error(sym.start, "Yield cannot be used as identifier inside generators");
          }
          if (S.input.has_directive("use strict")) {
            if (name == "yield") {
              token_error(sym.start, "Unexpected yield identifier inside strict mode");
            }
            if (sym instanceof AST_SymbolDeclaration && (name == "arguments" || name == "eval")) {
              token_error(sym.start, "Unexpected " + name + " in strict mode");
            }
          }
        }
        function as_symbol(type, noerror) {
          if (!is("name")) {
            if (!noerror)
              croak("Name expected");
            return null;
          }
          var sym = _make_symbol(type);
          _verify_symbol(sym);
          next();
          return sym;
        }
        function as_symbol_or_string(type) {
          if (!is("name")) {
            if (!is("string")) {
              croak("Name or string expected");
            }
            var tok = S.token;
            var ret = new type({
              start: tok,
              end: tok,
              name: tok.value,
              quote: tok.quote
            });
            next();
            return ret;
          }
          var sym = _make_symbol(type);
          _verify_symbol(sym);
          next();
          return sym;
        }
        function annotate(node, before_token = node.start) {
          var comments = before_token.comments_before;
          const comments_outside_parens = outer_comments_before_counts.get(before_token);
          var i = comments_outside_parens != null ? comments_outside_parens : comments.length;
          while (--i >= 0) {
            var comment2 = comments[i];
            if (/[@#]__/.test(comment2.value)) {
              if (/[@#]__PURE__/.test(comment2.value)) {
                set_annotation(node, _PURE);
                break;
              }
              if (/[@#]__INLINE__/.test(comment2.value)) {
                set_annotation(node, _INLINE);
                break;
              }
              if (/[@#]__NOINLINE__/.test(comment2.value)) {
                set_annotation(node, _NOINLINE);
                break;
              }
              if (/[@#]__KEY__/.test(comment2.value)) {
                set_annotation(node, _KEY);
                break;
              }
              if (/[@#]__MANGLE_PROP__/.test(comment2.value)) {
                set_annotation(node, _MANGLEPROP);
                break;
              }
            }
          }
          return node;
        }
        var subscripts = function(expr, allow_calls, is_chain) {
          var start = expr.start;
          if (is("punc", ".")) {
            next();
            if (is("privatename") && !S.in_class)
              croak("Private field must be used in an enclosing class");
            const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
            return annotate(subscripts(new AST_DotVariant({
              start,
              expression: expr,
              optional: false,
              property: as_name(),
              end: prev()
            }), allow_calls, is_chain));
          }
          if (is("punc", "[")) {
            next();
            var prop = expression(true);
            expect("]");
            return annotate(subscripts(new AST_Sub({
              start,
              expression: expr,
              optional: false,
              property: prop,
              end: prev()
            }), allow_calls, is_chain));
          }
          if (allow_calls && is("punc", "(")) {
            next();
            var call = new AST_Call({
              start,
              expression: expr,
              optional: false,
              args: call_args(),
              end: prev()
            });
            annotate(call);
            return subscripts(call, true, is_chain);
          }
          if (is("punc", "?.")) {
            next();
            let chain_contents;
            if (allow_calls && is("punc", "(")) {
              next();
              const call2 = new AST_Call({
                start,
                optional: true,
                expression: expr,
                args: call_args(),
                end: prev()
              });
              annotate(call2);
              chain_contents = subscripts(call2, true, true);
            } else if (is("name") || is("privatename")) {
              if (is("privatename") && !S.in_class)
                croak("Private field must be used in an enclosing class");
              const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
              chain_contents = annotate(subscripts(new AST_DotVariant({
                start,
                expression: expr,
                optional: true,
                property: as_name(),
                end: prev()
              }), allow_calls, true));
            } else if (is("punc", "[")) {
              next();
              const property = expression(true);
              expect("]");
              chain_contents = annotate(subscripts(new AST_Sub({
                start,
                expression: expr,
                optional: true,
                property,
                end: prev()
              }), allow_calls, true));
            }
            if (!chain_contents)
              unexpected();
            if (chain_contents instanceof AST_Chain)
              return chain_contents;
            return new AST_Chain({
              start,
              expression: chain_contents,
              end: prev()
            });
          }
          if (is("template_head")) {
            if (is_chain) {
              unexpected();
            }
            return subscripts(new AST_PrefixedTemplateString({
              start,
              prefix: expr,
              template_string: template_string(),
              end: prev()
            }), allow_calls);
          }
          return expr;
        };
        function call_args() {
          var args = [];
          while (!is("punc", ")")) {
            if (is("expand", "...")) {
              next();
              args.push(new AST_Expansion({
                start: prev(),
                expression: expression(false),
                end: prev()
              }));
            } else {
              args.push(expression(false));
            }
            if (!is("punc", ")")) {
              expect(",");
            }
          }
          next();
          return args;
        }
        var maybe_unary = function(allow_calls, allow_arrows) {
          var start = S.token;
          if (start.type == "name" && start.value == "await" && can_await()) {
            next();
            return _await_expression();
          }
          if (is("operator") && UNARY_PREFIX.has(start.value)) {
            next();
            handle_regexp();
            var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));
            ex.start = start;
            ex.end = prev();
            return ex;
          }
          var val = expr_atom(allow_calls, allow_arrows);
          while (is("operator") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) {
            if (val instanceof AST_Arrow)
              unexpected();
            val = make_unary(AST_UnaryPostfix, S.token, val);
            val.start = start;
            val.end = S.token;
            next();
          }
          return val;
        };
        function make_unary(ctor, token, expr) {
          var op = token.value;
          switch (op) {
            case "++":
            case "--":
              if (!is_assignable(expr))
                croak("Invalid use of " + op + " operator", token.line, token.col, token.pos);
              break;
            case "delete":
              if (expr instanceof AST_SymbolRef && S.input.has_directive("use strict"))
                croak("Calling delete on expression not allowed in strict mode", expr.start.line, expr.start.col, expr.start.pos);
              break;
          }
          return new ctor({ operator: op, expression: expr });
        }
        var expr_op = function(left, min_prec, no_in) {
          var op = is("operator") ? S.token.value : null;
          if (op == "in" && no_in)
            op = null;
          if (op == "**" && left instanceof AST_UnaryPrefix && !is_token(left.start, "punc", "(") && left.operator !== "--" && left.operator !== "++")
            unexpected(left.start);
          var prec = op != null ? PRECEDENCE[op] : null;
          if (prec != null && (prec > min_prec || op === "**" && min_prec === prec)) {
            next();
            var right = expr_op(maybe_unary(true), prec, no_in);
            return expr_op(new AST_Binary({
              start: left.start,
              left,
              operator: op,
              right,
              end: right.end
            }), min_prec, no_in);
          }
          return left;
        };
        function expr_ops(no_in) {
          return expr_op(maybe_unary(true, true), 0, no_in);
        }
        var maybe_conditional = function(no_in) {
          var start = S.token;
          var expr = expr_ops(no_in);
          if (is("operator", "?")) {
            next();
            var yes = expression(false);
            expect(":");
            return new AST_Conditional({
              start,
              condition: expr,
              consequent: yes,
              alternative: expression(false, no_in),
              end: prev()
            });
          }
          return expr;
        };
        function is_assignable(expr) {
          return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;
        }
        function to_destructuring(node) {
          if (node instanceof AST_Object) {
            node = new AST_Destructuring({
              start: node.start,
              names: node.properties.map(to_destructuring),
              is_array: false,
              end: node.end
            });
          } else if (node instanceof AST_Array) {
            var names = [];
            for (var i = 0; i < node.elements.length; i++) {
              if (node.elements[i] instanceof AST_Expansion) {
                if (i + 1 !== node.elements.length) {
                  token_error(node.elements[i].start, "Spread must the be last element in destructuring array");
                }
                node.elements[i].expression = to_destructuring(node.elements[i].expression);
              }
              names.push(to_destructuring(node.elements[i]));
            }
            node = new AST_Destructuring({
              start: node.start,
              names,
              is_array: true,
              end: node.end
            });
          } else if (node instanceof AST_ObjectProperty) {
            node.value = to_destructuring(node.value);
          } else if (node instanceof AST_Assign) {
            node = new AST_DefaultAssign({
              start: node.start,
              left: node.left,
              operator: "=",
              right: node.right,
              end: node.end
            });
          }
          return node;
        }
        var maybe_assign = function(no_in) {
          handle_regexp();
          var start = S.token;
          if (start.type == "name" && start.value == "yield") {
            if (is_in_generator()) {
              next();
              return _yield_expression();
            } else if (S.input.has_directive("use strict")) {
              token_error(S.token, "Unexpected yield identifier inside strict mode");
            }
          }
          var left = maybe_conditional(no_in);
          var val = S.token.value;
          if (is("operator") && ASSIGNMENT.has(val)) {
            if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {
              next();
              return new AST_Assign({
                start,
                left,
                operator: val,
                right: maybe_assign(no_in),
                logical: LOGICAL_ASSIGNMENT.has(val),
                end: prev()
              });
            }
            croak("Invalid assignment");
          }
          return left;
        };
        var to_expr_or_sequence = function(start, exprs) {
          if (exprs.length === 1) {
            return exprs[0];
          } else if (exprs.length > 1) {
            return new AST_Sequence({ start, expressions: exprs, end: peek() });
          } else {
            croak("Invalid parenthesized expression");
          }
        };
        var expression = function(commas, no_in) {
          var start = S.token;
          var exprs = [];
          while (true) {
            exprs.push(maybe_assign(no_in));
            if (!commas || !is("punc", ","))
              break;
            next();
            commas = true;
          }
          return to_expr_or_sequence(start, exprs);
        };
        function in_loop(cont) {
          ++S.in_loop;
          var ret = cont();
          --S.in_loop;
          return ret;
        }
        if (options.expression) {
          return expression(true);
        }
        return function parse_toplevel() {
          var start = S.token;
          var body = [];
          S.input.push_directives_stack();
          if (options.module)
            S.input.add_directive("use strict");
          while (!is("eof")) {
            body.push(statement());
          }
          S.input.pop_directives_stack();
          var end = prev();
          var toplevel = options.toplevel;
          if (toplevel) {
            toplevel.body = toplevel.body.concat(body);
            toplevel.end = end;
          } else {
            toplevel = new AST_Toplevel({ start, body, end });
          }
          TEMPLATE_RAWS = /* @__PURE__ */ new Map();
          return toplevel;
        }();
      }
      function DEFNODE(type, props, ctor, methods, base = AST_Node) {
        if (!props)
          props = [];
        else
          props = props.split(/\s+/);
        var self_props = props;
        if (base && base.PROPS)
          props = props.concat(base.PROPS);
        const proto = base && Object.create(base.prototype);
        if (proto) {
          ctor.prototype = proto;
          ctor.BASE = base;
        }
        if (base)
          base.SUBCLASSES.push(ctor);
        ctor.prototype.CTOR = ctor;
        ctor.prototype.constructor = ctor;
        ctor.PROPS = props || null;
        ctor.SELF_PROPS = self_props;
        ctor.SUBCLASSES = [];
        if (type) {
          ctor.prototype.TYPE = ctor.TYPE = type;
        }
        if (methods) {
          for (let i in methods)
            if (HOP(methods, i)) {
              if (i[0] === "$") {
                ctor[i.substr(1)] = methods[i];
              } else {
                ctor.prototype[i] = methods[i];
              }
            }
        }
        ctor.DEFMETHOD = function(name, method) {
          this.prototype[name] = method;
        };
        return ctor;
      }
      const has_tok_flag = (tok, flag) => Boolean(tok.flags & flag);
      const set_tok_flag = (tok, flag, truth) => {
        if (truth) {
          tok.flags |= flag;
        } else {
          tok.flags &= ~flag;
        }
      };
      const TOK_FLAG_NLB = 1;
      const TOK_FLAG_QUOTE_SINGLE = 2;
      const TOK_FLAG_QUOTE_EXISTS = 4;
      const TOK_FLAG_TEMPLATE_END = 8;
      class AST_Token {
        constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) {
          this.flags = nlb ? 1 : 0;
          this.type = type;
          this.value = value;
          this.line = line;
          this.col = col;
          this.pos = pos;
          this.comments_before = comments_before;
          this.comments_after = comments_after;
          this.file = file;
          Object.seal(this);
        }
        [Symbol.for("nodejs.util.inspect.custom")](_depth, options) {
          const special = (str) => options.stylize(str, "special");
          const quote = typeof this.value === "string" && this.value.includes("`") ? "'" : "`";
          const value = `${quote}${this.value}${quote}`;
          return `${special("[AST_Token")} ${value} at ${this.line}:${this.col}${special("]")}`;
        }
        get nlb() {
          return has_tok_flag(this, TOK_FLAG_NLB);
        }
        set nlb(new_nlb) {
          set_tok_flag(this, TOK_FLAG_NLB, new_nlb);
        }
        get quote() {
          return !has_tok_flag(this, TOK_FLAG_QUOTE_EXISTS) ? "" : has_tok_flag(this, TOK_FLAG_QUOTE_SINGLE) ? "'" : '"';
        }
        set quote(quote_type) {
          set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'");
          set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type);
        }
        get template_end() {
          return has_tok_flag(this, TOK_FLAG_TEMPLATE_END);
        }
        set template_end(new_template_end) {
          set_tok_flag(this, TOK_FLAG_TEMPLATE_END, new_template_end);
        }
      }
      var AST_Node = DEFNODE("Node", "start end", function AST_Node2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        _clone: function(deep) {
          if (deep) {
            var self2 = this.clone();
            return self2.transform(new TreeTransformer(function(node) {
              if (node !== self2) {
                return node.clone(true);
              }
            }));
          }
          return new this.CTOR(this);
        },
        clone: function(deep) {
          return this._clone(deep);
        },
        $documentation: "Base class of all AST nodes",
        $propdoc: {
          start: "[AST_Token] The first token of this node",
          end: "[AST_Token] The last token of this node"
        },
        _walk: function(visitor) {
          return visitor._visit(this);
        },
        walk: function(visitor) {
          return this._walk(visitor);
        },
        _children_backwards: () => {
        }
      }, null);
      var AST_Statement = DEFNODE("Statement", null, function AST_Statement2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class of all statements"
      });
      var AST_Debugger = DEFNODE("Debugger", null, function AST_Debugger2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Represents a debugger statement"
      }, AST_Statement);
      var AST_Directive = DEFNODE("Directive", "value quote", function AST_Directive2(props) {
        if (props) {
          this.value = props.value;
          this.quote = props.quote;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: 'Represents a directive, like "use strict";',
        $propdoc: {
          value: "[string] The value of this directive as a plain string (it's not an AST_String!)",
          quote: "[string] the original quote character"
        }
      }, AST_Statement);
      var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", function AST_SimpleStatement2(props) {
        if (props) {
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A statement consisting of an expression, i.e. a = 1 + 2",
        $propdoc: {
          body: "[AST_Node] an expression node (should not be instanceof AST_Statement)"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
        }
      }, AST_Statement);
      function walk_body(node, visitor) {
        const body = node.body;
        for (var i = 0, len = body.length; i < len; i++) {
          body[i]._walk(visitor);
        }
      }
      function clone_block_scope(deep) {
        var clone = this._clone(deep);
        if (this.block_scope) {
          clone.block_scope = this.block_scope.clone();
        }
        return clone;
      }
      var AST_Block = DEFNODE("Block", "body block_scope", function AST_Block2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A body of statements (usually braced)",
        $propdoc: {
          body: "[AST_Statement*] an array of statements",
          block_scope: "[AST_Scope] the block scope"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
        },
        clone: clone_block_scope
      }, AST_Statement);
      var AST_BlockStatement = DEFNODE("BlockStatement", null, function AST_BlockStatement2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A block statement"
      }, AST_Block);
      var AST_EmptyStatement = DEFNODE("EmptyStatement", null, function AST_EmptyStatement2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The empty statement (empty block or simply a semicolon)"
      }, AST_Statement);
      var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", function AST_StatementWithBody2(props) {
        if (props) {
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",
        $propdoc: {
          body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"
        }
      }, AST_Statement);
      var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", function AST_LabeledStatement2(props) {
        if (props) {
          this.label = props.label;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Statement with a label",
        $propdoc: {
          label: "[AST_Label] a label definition"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.label._walk(visitor);
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
          push2(this.label);
        },
        clone: function(deep) {
          var node = this._clone(deep);
          if (deep) {
            var label = node.label;
            var def = this.label;
            node.walk(new TreeWalker(function(node2) {
              if (node2 instanceof AST_LoopControl && node2.label && node2.label.thedef === def) {
                node2.label.thedef = label;
                label.references.push(node2);
              }
            }));
          }
          return node;
        }
      }, AST_StatementWithBody);
      var AST_IterationStatement = DEFNODE("IterationStatement", "block_scope", function AST_IterationStatement2(props) {
        if (props) {
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Internal class.  All loops inherit from it.",
        $propdoc: {
          block_scope: "[AST_Scope] the block scope for this iteration statement."
        },
        clone: clone_block_scope
      }, AST_StatementWithBody);
      var AST_DWLoop = DEFNODE("DWLoop", "condition", function AST_DWLoop2(props) {
        if (props) {
          this.condition = props.condition;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for do/while statements",
        $propdoc: {
          condition: "[AST_Node] the loop condition.  Should not be instanceof AST_Statement"
        }
      }, AST_IterationStatement);
      var AST_Do = DEFNODE("Do", null, function AST_Do2(props) {
        if (props) {
          this.condition = props.condition;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `do` statement",
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.body._walk(visitor);
            this.condition._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.condition);
          push2(this.body);
        }
      }, AST_DWLoop);
      var AST_While = DEFNODE("While", null, function AST_While2(props) {
        if (props) {
          this.condition = props.condition;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `while` statement",
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.condition._walk(visitor);
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
          push2(this.condition);
        }
      }, AST_DWLoop);
      var AST_For = DEFNODE("For", "init condition step", function AST_For2(props) {
        if (props) {
          this.init = props.init;
          this.condition = props.condition;
          this.step = props.step;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `for` statement",
        $propdoc: {
          init: "[AST_Node?] the `for` initialization code, or null if empty",
          condition: "[AST_Node?] the `for` termination clause, or null if empty",
          step: "[AST_Node?] the `for` update clause, or null if empty"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.init)
              this.init._walk(visitor);
            if (this.condition)
              this.condition._walk(visitor);
            if (this.step)
              this.step._walk(visitor);
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
          if (this.step)
            push2(this.step);
          if (this.condition)
            push2(this.condition);
          if (this.init)
            push2(this.init);
        }
      }, AST_IterationStatement);
      var AST_ForIn = DEFNODE("ForIn", "init object", function AST_ForIn2(props) {
        if (props) {
          this.init = props.init;
          this.object = props.object;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `for ... in` statement",
        $propdoc: {
          init: "[AST_Node] the `for/in` initialization code",
          object: "[AST_Node] the object that we're looping through"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.init._walk(visitor);
            this.object._walk(visitor);
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
          if (this.object)
            push2(this.object);
          if (this.init)
            push2(this.init);
        }
      }, AST_IterationStatement);
      var AST_ForOf = DEFNODE("ForOf", "await", function AST_ForOf2(props) {
        if (props) {
          this.await = props.await;
          this.init = props.init;
          this.object = props.object;
          this.block_scope = props.block_scope;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `for ... of` statement"
      }, AST_ForIn);
      var AST_With = DEFNODE("With", "expression", function AST_With2(props) {
        if (props) {
          this.expression = props.expression;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `with` statement",
        $propdoc: {
          expression: "[AST_Node] the `with` expression"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
            this.body._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.body);
          push2(this.expression);
        }
      }, AST_StatementWithBody);
      var AST_Scope = DEFNODE("Scope", "variables uses_with uses_eval parent_scope enclosed cname", function AST_Scope2(props) {
        if (props) {
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for all statements introducing a lexical scope",
        $propdoc: {
          variables: "[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope",
          uses_with: "[boolean/S] tells whether this scope uses the `with` statement",
          uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`",
          parent_scope: "[AST_Scope?/S] link to the parent scope",
          enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
          cname: "[integer/S] current index for mangling variables (used internally by the mangler)"
        },
        get_defun_scope: function() {
          var self2 = this;
          while (self2.is_block_scope()) {
            self2 = self2.parent_scope;
          }
          return self2;
        },
        clone: function(deep, toplevel) {
          var node = this._clone(deep);
          if (deep && this.variables && toplevel && !this._block_scope) {
            node.figure_out_scope({}, {
              toplevel,
              parent_scope: this.parent_scope
            });
          } else {
            if (this.variables)
              node.variables = new Map(this.variables);
            if (this.enclosed)
              node.enclosed = this.enclosed.slice();
            if (this._block_scope)
              node._block_scope = this._block_scope;
          }
          return node;
        },
        pinned: function() {
          return this.uses_eval || this.uses_with;
        }
      }, AST_Block);
      var AST_Toplevel = DEFNODE("Toplevel", "globals", function AST_Toplevel2(props) {
        if (props) {
          this.globals = props.globals;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The toplevel scope",
        $propdoc: {
          globals: "[Map/S] a map of name -> SymbolDef for all undeclared names"
        },
        wrap_commonjs: function(name) {
          var body = this.body;
          var wrapped_tl = "(function(exports){'$ORIG';})(typeof " + name + "=='undefined'?(" + name + "={}):" + name + ");";
          wrapped_tl = parse2(wrapped_tl);
          wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {
            if (node instanceof AST_Directive && node.value == "$ORIG") {
              return MAP.splice(body);
            }
          }));
          return wrapped_tl;
        },
        wrap_enclose: function(args_values) {
          if (typeof args_values != "string")
            args_values = "";
          var index = args_values.indexOf(":");
          if (index < 0)
            index = args_values.length;
          var body = this.body;
          return parse2([
            "(function(",
            args_values.slice(0, index),
            '){"$ORIG"})(',
            args_values.slice(index + 1),
            ")"
          ].join("")).transform(new TreeTransformer(function(node) {
            if (node instanceof AST_Directive && node.value == "$ORIG") {
              return MAP.splice(body);
            }
          }));
        }
      }, AST_Scope);
      var AST_Expansion = DEFNODE("Expansion", "expression", function AST_Expansion2(props) {
        if (props) {
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list",
        $propdoc: {
          expression: "[AST_Node] the thing to be expanded"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression.walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      });
      var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments is_generator async", function AST_Lambda2(props) {
        if (props) {
          this.name = props.name;
          this.argnames = props.argnames;
          this.uses_arguments = props.uses_arguments;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for functions",
        $propdoc: {
          name: "[AST_SymbolDeclaration?] the name of this function",
          argnames: "[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments",
          uses_arguments: "[boolean/S] tells whether this function accesses the arguments array",
          is_generator: "[boolean] is this a generator method",
          async: "[boolean] is this method async"
        },
        args_as_names: function() {
          var out = [];
          for (var i = 0; i < this.argnames.length; i++) {
            if (this.argnames[i] instanceof AST_Destructuring) {
              out.push(...this.argnames[i].all_symbols());
            } else {
              out.push(this.argnames[i]);
            }
          }
          return out;
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.name)
              this.name._walk(visitor);
            var argnames = this.argnames;
            for (var i = 0, len = argnames.length; i < len; i++) {
              argnames[i]._walk(visitor);
            }
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
          i = this.argnames.length;
          while (i--)
            push2(this.argnames[i]);
          if (this.name)
            push2(this.name);
        },
        is_braceless() {
          return this.body[0] instanceof AST_Return && this.body[0].value;
        },
        length_property() {
          let length = 0;
          for (const arg of this.argnames) {
            if (arg instanceof AST_SymbolFunarg || arg instanceof AST_Destructuring) {
              length++;
            }
          }
          return length;
        }
      }, AST_Scope);
      var AST_Accessor = DEFNODE("Accessor", null, function AST_Accessor2(props) {
        if (props) {
          this.name = props.name;
          this.argnames = props.argnames;
          this.uses_arguments = props.uses_arguments;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A setter/getter function.  The `name` property is always null."
      }, AST_Lambda);
      var AST_Function = DEFNODE("Function", null, function AST_Function2(props) {
        if (props) {
          this.name = props.name;
          this.argnames = props.argnames;
          this.uses_arguments = props.uses_arguments;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A function expression"
      }, AST_Lambda);
      var AST_Arrow = DEFNODE("Arrow", null, function AST_Arrow2(props) {
        if (props) {
          this.name = props.name;
          this.argnames = props.argnames;
          this.uses_arguments = props.uses_arguments;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An ES6 Arrow function ((a) => b)"
      }, AST_Lambda);
      var AST_Defun = DEFNODE("Defun", null, function AST_Defun2(props) {
        if (props) {
          this.name = props.name;
          this.argnames = props.argnames;
          this.uses_arguments = props.uses_arguments;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A function definition"
      }, AST_Lambda);
      var AST_Destructuring = DEFNODE("Destructuring", "names is_array", function AST_Destructuring2(props) {
        if (props) {
          this.names = props.names;
          this.is_array = props.is_array;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A destructuring of several names. Used in destructuring assignment and with destructuring function argument names",
        $propdoc: {
          "names": "[AST_Node*] Array of properties or elements",
          "is_array": "[Boolean] Whether the destructuring represents an object or array"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.names.forEach(function(name) {
              name._walk(visitor);
            });
          });
        },
        _children_backwards(push2) {
          let i = this.names.length;
          while (i--)
            push2(this.names[i]);
        },
        all_symbols: function() {
          var out = [];
          walk(this, (node) => {
            if (node instanceof AST_SymbolDeclaration) {
              out.push(node);
            }
            if (node instanceof AST_Lambda) {
              return true;
            }
          });
          return out;
        }
      });
      var AST_PrefixedTemplateString = DEFNODE("PrefixedTemplateString", "template_string prefix", function AST_PrefixedTemplateString2(props) {
        if (props) {
          this.template_string = props.template_string;
          this.prefix = props.prefix;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A templatestring with a prefix, such as String.raw`foobarbaz`",
        $propdoc: {
          template_string: "[AST_TemplateString] The template string",
          prefix: "[AST_Node] The prefix, which will get called."
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.prefix._walk(visitor);
            this.template_string._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.template_string);
          push2(this.prefix);
        }
      });
      var AST_TemplateString = DEFNODE("TemplateString", "segments", function AST_TemplateString2(props) {
        if (props) {
          this.segments = props.segments;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A template string literal",
        $propdoc: {
          segments: "[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment."
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.segments.forEach(function(seg) {
              seg._walk(visitor);
            });
          });
        },
        _children_backwards(push2) {
          let i = this.segments.length;
          while (i--)
            push2(this.segments[i]);
        }
      });
      var AST_TemplateSegment = DEFNODE("TemplateSegment", "value raw", function AST_TemplateSegment2(props) {
        if (props) {
          this.value = props.value;
          this.raw = props.raw;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A segment of a template string literal",
        $propdoc: {
          value: "Content of the segment",
          raw: "Raw source of the segment"
        }
      });
      var AST_Jump = DEFNODE("Jump", null, function AST_Jump2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for \u201Cjumps\u201D (for now that's `return`, `throw`, `break` and `continue`)"
      }, AST_Statement);
      var AST_Exit = DEFNODE("Exit", "value", function AST_Exit2(props) {
        if (props) {
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for \u201Cexits\u201D (`return` and `throw`)",
        $propdoc: {
          value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"
        },
        _walk: function(visitor) {
          return visitor._visit(this, this.value && function() {
            this.value._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.value)
            push2(this.value);
        }
      }, AST_Jump);
      var AST_Return = DEFNODE("Return", null, function AST_Return2(props) {
        if (props) {
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `return` statement"
      }, AST_Exit);
      var AST_Throw = DEFNODE("Throw", null, function AST_Throw2(props) {
        if (props) {
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `throw` statement"
      }, AST_Exit);
      var AST_LoopControl = DEFNODE("LoopControl", "label", function AST_LoopControl2(props) {
        if (props) {
          this.label = props.label;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for loop control statements (`break` and `continue`)",
        $propdoc: {
          label: "[AST_LabelRef?] the label, or null if none"
        },
        _walk: function(visitor) {
          return visitor._visit(this, this.label && function() {
            this.label._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.label)
            push2(this.label);
        }
      }, AST_Jump);
      var AST_Break = DEFNODE("Break", null, function AST_Break2(props) {
        if (props) {
          this.label = props.label;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `break` statement"
      }, AST_LoopControl);
      var AST_Continue = DEFNODE("Continue", null, function AST_Continue2(props) {
        if (props) {
          this.label = props.label;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `continue` statement"
      }, AST_LoopControl);
      var AST_Await = DEFNODE("Await", "expression", function AST_Await2(props) {
        if (props) {
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An `await` statement",
        $propdoc: {
          expression: "[AST_Node] the mandatory expression being awaited"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      });
      var AST_Yield = DEFNODE("Yield", "expression is_star", function AST_Yield2(props) {
        if (props) {
          this.expression = props.expression;
          this.is_star = props.is_star;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `yield` statement",
        $propdoc: {
          expression: "[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false",
          is_star: "[Boolean] Whether this is a yield or yield* statement"
        },
        _walk: function(visitor) {
          return visitor._visit(this, this.expression && function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.expression)
            push2(this.expression);
        }
      });
      var AST_If = DEFNODE("If", "condition alternative", function AST_If2(props) {
        if (props) {
          this.condition = props.condition;
          this.alternative = props.alternative;
          this.body = props.body;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `if` statement",
        $propdoc: {
          condition: "[AST_Node] the `if` condition",
          alternative: "[AST_Statement?] the `else` part, or null if not present"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.condition._walk(visitor);
            this.body._walk(visitor);
            if (this.alternative)
              this.alternative._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.alternative) {
            push2(this.alternative);
          }
          push2(this.body);
          push2(this.condition);
        }
      }, AST_StatementWithBody);
      var AST_Switch = DEFNODE("Switch", "expression", function AST_Switch2(props) {
        if (props) {
          this.expression = props.expression;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `switch` statement",
        $propdoc: {
          expression: "[AST_Node] the `switch` \u201Cdiscriminant\u201D"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
          push2(this.expression);
        }
      }, AST_Block);
      var AST_SwitchBranch = DEFNODE("SwitchBranch", null, function AST_SwitchBranch2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for `switch` branches"
      }, AST_Block);
      var AST_Default = DEFNODE("Default", null, function AST_Default2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `default` switch branch"
      }, AST_SwitchBranch);
      var AST_Case = DEFNODE("Case", "expression", function AST_Case2(props) {
        if (props) {
          this.expression = props.expression;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `case` switch branch",
        $propdoc: {
          expression: "[AST_Node] the `case` expression"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
          push2(this.expression);
        }
      }, AST_SwitchBranch);
      var AST_Try = DEFNODE("Try", "body bcatch bfinally", function AST_Try2(props) {
        if (props) {
          this.body = props.body;
          this.bcatch = props.bcatch;
          this.bfinally = props.bfinally;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `try` statement",
        $propdoc: {
          body: "[AST_TryBlock] the try block",
          bcatch: "[AST_Catch?] the catch block, or null if not present",
          bfinally: "[AST_Finally?] the finally block, or null if not present"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.body._walk(visitor);
            if (this.bcatch)
              this.bcatch._walk(visitor);
            if (this.bfinally)
              this.bfinally._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.bfinally)
            push2(this.bfinally);
          if (this.bcatch)
            push2(this.bcatch);
          push2(this.body);
        }
      }, AST_Statement);
      var AST_TryBlock = DEFNODE("TryBlock", null, function AST_TryBlock2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `try` block of a try statement"
      }, AST_Block);
      var AST_Catch = DEFNODE("Catch", "argname", function AST_Catch2(props) {
        if (props) {
          this.argname = props.argname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `catch` node; only makes sense as part of a `try` statement",
        $propdoc: {
          argname: "[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.argname)
              this.argname._walk(visitor);
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
          if (this.argname)
            push2(this.argname);
        }
      }, AST_Block);
      var AST_Finally = DEFNODE("Finally", null, function AST_Finally2(props) {
        if (props) {
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `finally` node; only makes sense as part of a `try` statement"
      }, AST_Block);
      var AST_Definitions = DEFNODE("Definitions", "definitions", function AST_Definitions2(props) {
        if (props) {
          this.definitions = props.definitions;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)",
        $propdoc: {
          definitions: "[AST_VarDef*] array of variable definitions"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            var definitions = this.definitions;
            for (var i = 0, len = definitions.length; i < len; i++) {
              definitions[i]._walk(visitor);
            }
          });
        },
        _children_backwards(push2) {
          let i = this.definitions.length;
          while (i--)
            push2(this.definitions[i]);
        }
      }, AST_Statement);
      var AST_Var = DEFNODE("Var", null, function AST_Var2(props) {
        if (props) {
          this.definitions = props.definitions;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `var` statement"
      }, AST_Definitions);
      var AST_Let = DEFNODE("Let", null, function AST_Let2(props) {
        if (props) {
          this.definitions = props.definitions;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `let` statement"
      }, AST_Definitions);
      var AST_Const = DEFNODE("Const", null, function AST_Const2(props) {
        if (props) {
          this.definitions = props.definitions;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A `const` statement"
      }, AST_Definitions);
      var AST_VarDef = DEFNODE("VarDef", "name value", function AST_VarDef2(props) {
        if (props) {
          this.name = props.name;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A variable declaration; only appears in a AST_Definitions node",
        $propdoc: {
          name: "[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable",
          value: "[AST_Node?] initializer, or null of there's no initializer"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.name._walk(visitor);
            if (this.value)
              this.value._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.value)
            push2(this.value);
          push2(this.name);
        },
        declarations_as_names() {
          if (this.name instanceof AST_SymbolDeclaration) {
            return [this];
          } else {
            return this.name.all_symbols();
          }
        }
      });
      var AST_NameMapping = DEFNODE("NameMapping", "foreign_name name", function AST_NameMapping2(props) {
        if (props) {
          this.foreign_name = props.foreign_name;
          this.name = props.name;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The part of the export/import statement that declare names from a module.",
        $propdoc: {
          foreign_name: "[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)",
          name: "[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module."
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.foreign_name._walk(visitor);
            this.name._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.name);
          push2(this.foreign_name);
        }
      });
      var AST_Import = DEFNODE("Import", "imported_name imported_names module_name assert_clause", function AST_Import2(props) {
        if (props) {
          this.imported_name = props.imported_name;
          this.imported_names = props.imported_names;
          this.module_name = props.module_name;
          this.assert_clause = props.assert_clause;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An `import` statement",
        $propdoc: {
          imported_name: "[AST_SymbolImport] The name of the variable holding the module's default export.",
          imported_names: "[AST_NameMapping*] The names of non-default imported variables",
          module_name: "[AST_String] String literal describing where this module came from",
          assert_clause: "[AST_Object?] The import assertion"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.imported_name) {
              this.imported_name._walk(visitor);
            }
            if (this.imported_names) {
              this.imported_names.forEach(function(name_import) {
                name_import._walk(visitor);
              });
            }
            this.module_name._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.module_name);
          if (this.imported_names) {
            let i = this.imported_names.length;
            while (i--)
              push2(this.imported_names[i]);
          }
          if (this.imported_name)
            push2(this.imported_name);
        }
      });
      var AST_ImportMeta = DEFNODE("ImportMeta", null, function AST_ImportMeta2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A reference to import.meta"
      });
      var AST_Export = DEFNODE("Export", "exported_definition exported_value is_default exported_names module_name assert_clause", function AST_Export2(props) {
        if (props) {
          this.exported_definition = props.exported_definition;
          this.exported_value = props.exported_value;
          this.is_default = props.is_default;
          this.exported_names = props.exported_names;
          this.module_name = props.module_name;
          this.assert_clause = props.assert_clause;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An `export` statement",
        $propdoc: {
          exported_definition: "[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition",
          exported_value: "[AST_Node?] An exported value",
          exported_names: "[AST_NameMapping*?] List of exported names",
          module_name: "[AST_String?] Name of the file to load exports from",
          is_default: "[Boolean] Whether this is the default exported value of this module",
          assert_clause: "[AST_Object?] The import assertion"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.exported_definition) {
              this.exported_definition._walk(visitor);
            }
            if (this.exported_value) {
              this.exported_value._walk(visitor);
            }
            if (this.exported_names) {
              this.exported_names.forEach(function(name_export) {
                name_export._walk(visitor);
              });
            }
            if (this.module_name) {
              this.module_name._walk(visitor);
            }
          });
        },
        _children_backwards(push2) {
          if (this.module_name)
            push2(this.module_name);
          if (this.exported_names) {
            let i = this.exported_names.length;
            while (i--)
              push2(this.exported_names[i]);
          }
          if (this.exported_value)
            push2(this.exported_value);
          if (this.exported_definition)
            push2(this.exported_definition);
        }
      }, AST_Statement);
      var AST_Call = DEFNODE("Call", "expression args optional _annotations", function AST_Call2(props) {
        if (props) {
          this.expression = props.expression;
          this.args = props.args;
          this.optional = props.optional;
          this._annotations = props._annotations;
          this.start = props.start;
          this.end = props.end;
          this.initialize();
        }
        this.flags = 0;
      }, {
        $documentation: "A function call expression",
        $propdoc: {
          expression: "[AST_Node] expression to invoke as function",
          args: "[AST_Node*] array of arguments",
          optional: "[boolean] whether this is an optional call (IE ?.() )",
          _annotations: "[number] bitfield containing information about the call"
        },
        initialize() {
          if (this._annotations == null)
            this._annotations = 0;
        },
        _walk(visitor) {
          return visitor._visit(this, function() {
            var args = this.args;
            for (var i = 0, len = args.length; i < len; i++) {
              args[i]._walk(visitor);
            }
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.args.length;
          while (i--)
            push2(this.args[i]);
          push2(this.expression);
        }
      });
      var AST_New = DEFNODE("New", null, function AST_New2(props) {
        if (props) {
          this.expression = props.expression;
          this.args = props.args;
          this.optional = props.optional;
          this._annotations = props._annotations;
          this.start = props.start;
          this.end = props.end;
          this.initialize();
        }
        this.flags = 0;
      }, {
        $documentation: "An object instantiation.  Derives from a function call since it has exactly the same properties"
      }, AST_Call);
      var AST_Sequence = DEFNODE("Sequence", "expressions", function AST_Sequence2(props) {
        if (props) {
          this.expressions = props.expressions;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A sequence expression (comma-separated expressions)",
        $propdoc: {
          expressions: "[AST_Node*] array of expressions (at least two)"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expressions.forEach(function(node) {
              node._walk(visitor);
            });
          });
        },
        _children_backwards(push2) {
          let i = this.expressions.length;
          while (i--)
            push2(this.expressions[i]);
        }
      });
      var AST_PropAccess = DEFNODE("PropAccess", "expression property optional", function AST_PropAccess2(props) {
        if (props) {
          this.expression = props.expression;
          this.property = props.property;
          this.optional = props.optional;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: 'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`',
        $propdoc: {
          expression: "[AST_Node] the \u201Ccontainer\u201D expression",
          property: "[AST_Node|string] the property to access.  For AST_Dot & AST_DotHash this is always a plain string, while for AST_Sub it's an arbitrary AST_Node",
          optional: "[boolean] whether this is an optional property access (IE ?.)"
        }
      });
      var AST_Dot = DEFNODE("Dot", "quote", function AST_Dot2(props) {
        if (props) {
          this.quote = props.quote;
          this.expression = props.expression;
          this.property = props.property;
          this.optional = props.optional;
          this._annotations = props._annotations;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A dotted property access expression",
        $propdoc: {
          quote: "[string] the original quote character when transformed from AST_Sub"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      }, AST_PropAccess);
      var AST_DotHash = DEFNODE("DotHash", "", function AST_DotHash2(props) {
        if (props) {
          this.expression = props.expression;
          this.property = props.property;
          this.optional = props.optional;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A dotted property access to a private property",
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      }, AST_PropAccess);
      var AST_Sub = DEFNODE("Sub", null, function AST_Sub2(props) {
        if (props) {
          this.expression = props.expression;
          this.property = props.property;
          this.optional = props.optional;
          this._annotations = props._annotations;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: 'Index-style property access, i.e. `a["foo"]`',
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
            this.property._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.property);
          push2(this.expression);
        }
      }, AST_PropAccess);
      var AST_Chain = DEFNODE("Chain", "expression", function AST_Chain2(props) {
        if (props) {
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A chain expression like a?.b?.(c)?.[d]",
        $propdoc: {
          expression: "[AST_Call|AST_Dot|AST_DotHash|AST_Sub] chain element."
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      });
      var AST_Unary = DEFNODE("Unary", "operator expression", function AST_Unary2(props) {
        if (props) {
          this.operator = props.operator;
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for unary expressions",
        $propdoc: {
          operator: "[string] the operator",
          expression: "[AST_Node] expression that this unary operator applies to"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.expression._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.expression);
        }
      });
      var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, function AST_UnaryPrefix2(props) {
        if (props) {
          this.operator = props.operator;
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`"
      }, AST_Unary);
      var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, function AST_UnaryPostfix2(props) {
        if (props) {
          this.operator = props.operator;
          this.expression = props.expression;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Unary postfix expression, i.e. `i++`"
      }, AST_Unary);
      var AST_Binary = DEFNODE("Binary", "operator left right", function AST_Binary2(props) {
        if (props) {
          this.operator = props.operator;
          this.left = props.left;
          this.right = props.right;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Binary expression, i.e. `a + b`",
        $propdoc: {
          left: "[AST_Node] left-hand side expression",
          operator: "[string] the operator",
          right: "[AST_Node] right-hand side expression"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.left._walk(visitor);
            this.right._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.right);
          push2(this.left);
        }
      });
      var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", function AST_Conditional2(props) {
        if (props) {
          this.condition = props.condition;
          this.consequent = props.consequent;
          this.alternative = props.alternative;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`",
        $propdoc: {
          condition: "[AST_Node]",
          consequent: "[AST_Node]",
          alternative: "[AST_Node]"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.condition._walk(visitor);
            this.consequent._walk(visitor);
            this.alternative._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.alternative);
          push2(this.consequent);
          push2(this.condition);
        }
      });
      var AST_Assign = DEFNODE("Assign", "logical", function AST_Assign2(props) {
        if (props) {
          this.logical = props.logical;
          this.operator = props.operator;
          this.left = props.left;
          this.right = props.right;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An assignment expression \u2014 `a = b + 5`",
        $propdoc: {
          logical: "Whether it's a logical assignment"
        }
      }, AST_Binary);
      var AST_DefaultAssign = DEFNODE("DefaultAssign", null, function AST_DefaultAssign2(props) {
        if (props) {
          this.operator = props.operator;
          this.left = props.left;
          this.right = props.right;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A default assignment expression like in `(a = 3) => a`"
      }, AST_Binary);
      var AST_Array = DEFNODE("Array", "elements", function AST_Array2(props) {
        if (props) {
          this.elements = props.elements;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An array literal",
        $propdoc: {
          elements: "[AST_Node*] array of elements"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            var elements = this.elements;
            for (var i = 0, len = elements.length; i < len; i++) {
              elements[i]._walk(visitor);
            }
          });
        },
        _children_backwards(push2) {
          let i = this.elements.length;
          while (i--)
            push2(this.elements[i]);
        }
      });
      var AST_Object = DEFNODE("Object", "properties", function AST_Object2(props) {
        if (props) {
          this.properties = props.properties;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An object literal",
        $propdoc: {
          properties: "[AST_ObjectProperty*] array of properties"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            var properties = this.properties;
            for (var i = 0, len = properties.length; i < len; i++) {
              properties[i]._walk(visitor);
            }
          });
        },
        _children_backwards(push2) {
          let i = this.properties.length;
          while (i--)
            push2(this.properties[i]);
        }
      });
      var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", function AST_ObjectProperty2(props) {
        if (props) {
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for literal object properties",
        $propdoc: {
          key: "[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.",
          value: "[AST_Node] property value.  For getters and setters this is an AST_Accessor."
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.key instanceof AST_Node)
              this.key._walk(visitor);
            this.value._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.value);
          if (this.key instanceof AST_Node)
            push2(this.key);
        }
      });
      var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", function AST_ObjectKeyVal2(props) {
        if (props) {
          this.quote = props.quote;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $documentation: "A key: value object property",
        $propdoc: {
          quote: "[string] the original quote character"
        },
        computed_key() {
          return this.key instanceof AST_Node;
        }
      }, AST_ObjectProperty);
      var AST_PrivateSetter = DEFNODE("PrivateSetter", "static", function AST_PrivateSetter2(props) {
        if (props) {
          this.static = props.static;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          static: "[boolean] whether this is a static private setter"
        },
        $documentation: "A private setter property",
        computed_key() {
          return false;
        }
      }, AST_ObjectProperty);
      var AST_PrivateGetter = DEFNODE("PrivateGetter", "static", function AST_PrivateGetter2(props) {
        if (props) {
          this.static = props.static;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          static: "[boolean] whether this is a static private getter"
        },
        $documentation: "A private getter property",
        computed_key() {
          return false;
        }
      }, AST_ObjectProperty);
      var AST_ObjectSetter = DEFNODE("ObjectSetter", "quote static", function AST_ObjectSetter2(props) {
        if (props) {
          this.quote = props.quote;
          this.static = props.static;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          quote: "[string|undefined] the original quote character, if any",
          static: "[boolean] whether this is a static setter (classes only)"
        },
        $documentation: "An object setter property",
        computed_key() {
          return !(this.key instanceof AST_SymbolMethod);
        }
      }, AST_ObjectProperty);
      var AST_ObjectGetter = DEFNODE("ObjectGetter", "quote static", function AST_ObjectGetter2(props) {
        if (props) {
          this.quote = props.quote;
          this.static = props.static;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          quote: "[string|undefined] the original quote character, if any",
          static: "[boolean] whether this is a static getter (classes only)"
        },
        $documentation: "An object getter property",
        computed_key() {
          return !(this.key instanceof AST_SymbolMethod);
        }
      }, AST_ObjectProperty);
      var AST_ConciseMethod = DEFNODE("ConciseMethod", "quote static is_generator async", function AST_ConciseMethod2(props) {
        if (props) {
          this.quote = props.quote;
          this.static = props.static;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          quote: "[string|undefined] the original quote character, if any",
          static: "[boolean] is this method static (classes only)",
          is_generator: "[boolean] is this a generator method",
          async: "[boolean] is this method async"
        },
        $documentation: "An ES6 concise method inside an object or class",
        computed_key() {
          return !(this.key instanceof AST_SymbolMethod);
        }
      }, AST_ObjectProperty);
      var AST_PrivateMethod = DEFNODE("PrivateMethod", "", function AST_PrivateMethod2(props) {
        if (props) {
          this.quote = props.quote;
          this.static = props.static;
          this.is_generator = props.is_generator;
          this.async = props.async;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A private class method inside a class"
      }, AST_ConciseMethod);
      var AST_Class = DEFNODE("Class", "name extends properties", function AST_Class2(props) {
        if (props) {
          this.name = props.name;
          this.extends = props.extends;
          this.properties = props.properties;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          name: "[AST_SymbolClass|AST_SymbolDefClass?] optional class name.",
          extends: "[AST_Node]? optional parent class",
          properties: "[AST_ObjectProperty*] array of properties"
        },
        $documentation: "An ES6 class",
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.name) {
              this.name._walk(visitor);
            }
            if (this.extends) {
              this.extends._walk(visitor);
            }
            this.properties.forEach((prop) => prop._walk(visitor));
          });
        },
        _children_backwards(push2) {
          let i = this.properties.length;
          while (i--)
            push2(this.properties[i]);
          if (this.extends)
            push2(this.extends);
          if (this.name)
            push2(this.name);
        },
        visit_nondeferred_class_parts(visitor) {
          if (this.extends) {
            this.extends._walk(visitor);
          }
          this.properties.forEach((prop) => {
            if (prop instanceof AST_ClassStaticBlock) {
              prop._walk(visitor);
              return;
            }
            if (prop.computed_key()) {
              visitor.push(prop);
              prop.key._walk(visitor);
              visitor.pop();
            }
            if ((prop instanceof AST_ClassPrivateProperty || prop instanceof AST_ClassProperty) && prop.static && prop.value) {
              visitor.push(prop);
              prop.value._walk(visitor);
              visitor.pop();
            }
          });
        },
        visit_deferred_class_parts(visitor) {
          this.properties.forEach((prop) => {
            if (prop instanceof AST_ConciseMethod) {
              prop.walk(visitor);
            } else if (prop instanceof AST_ClassProperty && !prop.static && prop.value) {
              visitor.push(prop);
              prop.value._walk(visitor);
              visitor.pop();
            }
          });
        }
      }, AST_Scope);
      var AST_ClassProperty = DEFNODE("ClassProperty", "static quote", function AST_ClassProperty2(props) {
        if (props) {
          this.static = props.static;
          this.quote = props.quote;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $documentation: "A class property",
        $propdoc: {
          static: "[boolean] whether this is a static key",
          quote: "[string] which quote is being used"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            if (this.key instanceof AST_Node)
              this.key._walk(visitor);
            if (this.value instanceof AST_Node)
              this.value._walk(visitor);
          });
        },
        _children_backwards(push2) {
          if (this.value instanceof AST_Node)
            push2(this.value);
          if (this.key instanceof AST_Node)
            push2(this.key);
        },
        computed_key() {
          return !(this.key instanceof AST_SymbolClassProperty);
        }
      }, AST_ObjectProperty);
      var AST_ClassPrivateProperty = DEFNODE("ClassPrivateProperty", "", function AST_ClassPrivateProperty2(props) {
        if (props) {
          this.static = props.static;
          this.quote = props.quote;
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A class property for a private property"
      }, AST_ClassProperty);
      var AST_PrivateIn = DEFNODE("PrivateIn", "key value", function AST_PrivateIn2(props) {
        if (props) {
          this.key = props.key;
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "An `in` binop when the key is private, eg #x in this",
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            this.key._walk(visitor);
            this.value._walk(visitor);
          });
        },
        _children_backwards(push2) {
          push2(this.value);
          push2(this.key);
        }
      });
      var AST_DefClass = DEFNODE("DefClass", null, function AST_DefClass2(props) {
        if (props) {
          this.name = props.name;
          this.extends = props.extends;
          this.properties = props.properties;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A class definition"
      }, AST_Class);
      var AST_ClassStaticBlock = DEFNODE("ClassStaticBlock", "body block_scope", function AST_ClassStaticBlock2(props) {
        this.body = props.body;
        this.block_scope = props.block_scope;
        this.start = props.start;
        this.end = props.end;
      }, {
        $documentation: "A block containing statements to be executed in the context of the class",
        $propdoc: {
          body: "[AST_Statement*] an array of statements"
        },
        _walk: function(visitor) {
          return visitor._visit(this, function() {
            walk_body(this, visitor);
          });
        },
        _children_backwards(push2) {
          let i = this.body.length;
          while (i--)
            push2(this.body[i]);
        },
        clone: clone_block_scope,
        computed_key: () => false
      }, AST_Scope);
      var AST_ClassExpression = DEFNODE("ClassExpression", null, function AST_ClassExpression2(props) {
        if (props) {
          this.name = props.name;
          this.extends = props.extends;
          this.properties = props.properties;
          this.variables = props.variables;
          this.uses_with = props.uses_with;
          this.uses_eval = props.uses_eval;
          this.parent_scope = props.parent_scope;
          this.enclosed = props.enclosed;
          this.cname = props.cname;
          this.body = props.body;
          this.block_scope = props.block_scope;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A class expression."
      }, AST_Class);
      var AST_Symbol = DEFNODE("Symbol", "scope name thedef", function AST_Symbol2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $propdoc: {
          name: "[string] name of this symbol",
          scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)",
          thedef: "[SymbolDef/S] the definition of this symbol"
        },
        $documentation: "Base class for all symbols"
      });
      var AST_NewTarget = DEFNODE("NewTarget", null, function AST_NewTarget2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A reference to new.target"
      });
      var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", function AST_SymbolDeclaration2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)"
      }, AST_Symbol);
      var AST_SymbolVar = DEFNODE("SymbolVar", null, function AST_SymbolVar2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol defining a variable"
      }, AST_SymbolDeclaration);
      var AST_SymbolBlockDeclaration = DEFNODE("SymbolBlockDeclaration", null, function AST_SymbolBlockDeclaration2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for block-scoped declaration symbols"
      }, AST_SymbolDeclaration);
      var AST_SymbolConst = DEFNODE("SymbolConst", null, function AST_SymbolConst2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A constant declaration"
      }, AST_SymbolBlockDeclaration);
      var AST_SymbolLet = DEFNODE("SymbolLet", null, function AST_SymbolLet2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A block-scoped `let` declaration"
      }, AST_SymbolBlockDeclaration);
      var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, function AST_SymbolFunarg2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming a function argument"
      }, AST_SymbolVar);
      var AST_SymbolDefun = DEFNODE("SymbolDefun", null, function AST_SymbolDefun2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol defining a function"
      }, AST_SymbolDeclaration);
      var AST_SymbolMethod = DEFNODE("SymbolMethod", null, function AST_SymbolMethod2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol in an object defining a method"
      }, AST_Symbol);
      var AST_SymbolClassProperty = DEFNODE("SymbolClassProperty", null, function AST_SymbolClassProperty2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol for a class property"
      }, AST_Symbol);
      var AST_SymbolLambda = DEFNODE("SymbolLambda", null, function AST_SymbolLambda2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming a function expression"
      }, AST_SymbolDeclaration);
      var AST_SymbolDefClass = DEFNODE("SymbolDefClass", null, function AST_SymbolDefClass2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class."
      }, AST_SymbolBlockDeclaration);
      var AST_SymbolClass = DEFNODE("SymbolClass", null, function AST_SymbolClass2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming a class's name. Lexically scoped to the class."
      }, AST_SymbolDeclaration);
      var AST_SymbolCatch = DEFNODE("SymbolCatch", null, function AST_SymbolCatch2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming the exception in catch"
      }, AST_SymbolBlockDeclaration);
      var AST_SymbolImport = DEFNODE("SymbolImport", null, function AST_SymbolImport2(props) {
        if (props) {
          this.init = props.init;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol referring to an imported name"
      }, AST_SymbolBlockDeclaration);
      var AST_SymbolImportForeign = DEFNODE("SymbolImportForeign", null, function AST_SymbolImportForeign2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.quote = props.quote;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes"
      }, AST_Symbol);
      var AST_Label = DEFNODE("Label", "references", function AST_Label2(props) {
        if (props) {
          this.references = props.references;
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
          this.initialize();
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol naming a label (declaration)",
        $propdoc: {
          references: "[AST_LoopControl*] a list of nodes referring to this label"
        },
        initialize: function() {
          this.references = [];
          this.thedef = this;
        }
      }, AST_Symbol);
      var AST_SymbolRef = DEFNODE("SymbolRef", null, function AST_SymbolRef2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Reference to some symbol (not definition/declaration)"
      }, AST_Symbol);
      var AST_SymbolExport = DEFNODE("SymbolExport", null, function AST_SymbolExport2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.quote = props.quote;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Symbol referring to a name to export"
      }, AST_SymbolRef);
      var AST_SymbolExportForeign = DEFNODE("SymbolExportForeign", null, function AST_SymbolExportForeign2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.quote = props.quote;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes"
      }, AST_Symbol);
      var AST_LabelRef = DEFNODE("LabelRef", null, function AST_LabelRef2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Reference to a label symbol"
      }, AST_Symbol);
      var AST_SymbolPrivateProperty = DEFNODE("SymbolPrivateProperty", null, function AST_SymbolPrivateProperty2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A symbol that refers to a private property"
      }, AST_Symbol);
      var AST_This = DEFNODE("This", null, function AST_This2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `this` symbol"
      }, AST_Symbol);
      var AST_Super = DEFNODE("Super", null, function AST_Super2(props) {
        if (props) {
          this.scope = props.scope;
          this.name = props.name;
          this.thedef = props.thedef;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `super` symbol"
      }, AST_This);
      var AST_Constant = DEFNODE("Constant", null, function AST_Constant2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for all constants",
        getValue: function() {
          return this.value;
        }
      });
      var AST_String = DEFNODE("String", "value quote", function AST_String2(props) {
        if (props) {
          this.value = props.value;
          this.quote = props.quote;
          this.start = props.start;
          this.end = props.end;
          this._annotations = props._annotations;
        }
        this.flags = 0;
      }, {
        $documentation: "A string literal",
        $propdoc: {
          value: "[string] the contents of this string",
          quote: "[string] the original quote character"
        }
      }, AST_Constant);
      var AST_Number = DEFNODE("Number", "value raw", function AST_Number2(props) {
        if (props) {
          this.value = props.value;
          this.raw = props.raw;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A number literal",
        $propdoc: {
          value: "[number] the numeric value",
          raw: "[string] numeric value as string"
        }
      }, AST_Constant);
      var AST_BigInt = DEFNODE("BigInt", "value", function AST_BigInt2(props) {
        if (props) {
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A big int literal",
        $propdoc: {
          value: "[string] big int value"
        }
      }, AST_Constant);
      var AST_RegExp = DEFNODE("RegExp", "value", function AST_RegExp2(props) {
        if (props) {
          this.value = props.value;
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A regexp literal",
        $propdoc: {
          value: "[RegExp] the actual regexp"
        }
      }, AST_Constant);
      var AST_Atom = DEFNODE("Atom", null, function AST_Atom2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for atoms"
      }, AST_Constant);
      var AST_Null = DEFNODE("Null", null, function AST_Null2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `null` atom",
        value: null
      }, AST_Atom);
      var AST_NaN = DEFNODE("NaN", null, function AST_NaN2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The impossible value",
        value: 0 / 0
      }, AST_Atom);
      var AST_Undefined = DEFNODE("Undefined", null, function AST_Undefined2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `undefined` value",
        value: function() {
        }()
      }, AST_Atom);
      var AST_Hole = DEFNODE("Hole", null, function AST_Hole2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "A hole in an array",
        value: function() {
        }()
      }, AST_Atom);
      var AST_Infinity = DEFNODE("Infinity", null, function AST_Infinity2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `Infinity` value",
        value: 1 / 0
      }, AST_Atom);
      var AST_Boolean = DEFNODE("Boolean", null, function AST_Boolean2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "Base class for booleans"
      }, AST_Atom);
      var AST_False = DEFNODE("False", null, function AST_False2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `false` atom",
        value: false
      }, AST_Boolean);
      var AST_True = DEFNODE("True", null, function AST_True2(props) {
        if (props) {
          this.start = props.start;
          this.end = props.end;
        }
        this.flags = 0;
      }, {
        $documentation: "The `true` atom",
        value: true
      }, AST_Boolean);
      function walk(node, cb, to_visit = [node]) {
        const push2 = to_visit.push.bind(to_visit);
        while (to_visit.length) {
          const node2 = to_visit.pop();
          const ret = cb(node2, to_visit);
          if (ret) {
            if (ret === walk_abort)
              return true;
            continue;
          }
          node2._children_backwards(push2);
        }
        return false;
      }
      function walk_parent(node, cb, initial_stack) {
        const to_visit = [node];
        const push2 = to_visit.push.bind(to_visit);
        const stack = initial_stack ? initial_stack.slice() : [];
        const parent_pop_indices = [];
        let current;
        const info = {
          parent: (n = 0) => {
            if (n === -1) {
              return current;
            }
            if (initial_stack && n >= stack.length) {
              n -= stack.length;
              return initial_stack[initial_stack.length - (n + 1)];
            }
            return stack[stack.length - (1 + n)];
          }
        };
        while (to_visit.length) {
          current = to_visit.pop();
          while (parent_pop_indices.length && to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]) {
            stack.pop();
            parent_pop_indices.pop();
          }
          const ret = cb(current, info);
          if (ret) {
            if (ret === walk_abort)
              return true;
            continue;
          }
          const visit_length = to_visit.length;
          current._children_backwards(push2);
          if (to_visit.length > visit_length) {
            stack.push(current);
            parent_pop_indices.push(visit_length - 1);
          }
        }
        return false;
      }
      const walk_abort = Symbol("abort walk");
      class TreeWalker {
        constructor(callback) {
          this.visit = callback;
          this.stack = [];
          this.directives = /* @__PURE__ */ Object.create(null);
        }
        _visit(node, descend) {
          this.push(node);
          var ret = this.visit(node, descend ? function() {
            descend.call(node);
          } : noop);
          if (!ret && descend) {
            descend.call(node);
          }
          this.pop();
          return ret;
        }
        parent(n) {
          return this.stack[this.stack.length - 2 - (n || 0)];
        }
        push(node) {
          if (node instanceof AST_Lambda) {
            this.directives = Object.create(this.directives);
          } else if (node instanceof AST_Directive && !this.directives[node.value]) {
            this.directives[node.value] = node;
          } else if (node instanceof AST_Class) {
            this.directives = Object.create(this.directives);
            if (!this.directives["use strict"]) {
              this.directives["use strict"] = node;
            }
          }
          this.stack.push(node);
        }
        pop() {
          var node = this.stack.pop();
          if (node instanceof AST_Lambda || node instanceof AST_Class) {
            this.directives = Object.getPrototypeOf(this.directives);
          }
        }
        self() {
          return this.stack[this.stack.length - 1];
        }
        find_parent(type) {
          var stack = this.stack;
          for (var i = stack.length; --i >= 0; ) {
            var x = stack[i];
            if (x instanceof type)
              return x;
          }
        }
        find_scope() {
          var stack = this.stack;
          for (var i = stack.length; --i >= 0; ) {
            const p = stack[i];
            if (p instanceof AST_Toplevel)
              return p;
            if (p instanceof AST_Lambda)
              return p;
            if (p.block_scope)
              return p.block_scope;
          }
        }
        has_directive(type) {
          var dir = this.directives[type];
          if (dir)
            return dir;
          var node = this.stack[this.stack.length - 1];
          if (node instanceof AST_Scope && node.body) {
            for (var i = 0; i < node.body.length; ++i) {
              var st = node.body[i];
              if (!(st instanceof AST_Directive))
                break;
              if (st.value == type)
                return st;
            }
          }
        }
        loopcontrol_target(node) {
          var stack = this.stack;
          if (node.label)
            for (var i = stack.length; --i >= 0; ) {
              var x = stack[i];
              if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)
                return x.body;
            }
          else
            for (var i = stack.length; --i >= 0; ) {
              var x = stack[i];
              if (x instanceof AST_IterationStatement || node instanceof AST_Break && x instanceof AST_Switch)
                return x;
            }
        }
      }
      class TreeTransformer extends TreeWalker {
        constructor(before, after) {
          super();
          this.before = before;
          this.after = after;
        }
      }
      const _PURE = 1;
      const _INLINE = 2;
      const _NOINLINE = 4;
      const _KEY = 8;
      const _MANGLEPROP = 16;
      function def_transform(node, descend) {
        node.DEFMETHOD("transform", function(tw, in_list) {
          let transformed = void 0;
          tw.push(this);
          if (tw.before)
            transformed = tw.before(this, descend, in_list);
          if (transformed === void 0) {
            transformed = this;
            descend(transformed, tw);
            if (tw.after) {
              const after_ret = tw.after(transformed, in_list);
              if (after_ret !== void 0)
                transformed = after_ret;
            }
          }
          tw.pop();
          return transformed;
        });
      }
      def_transform(AST_Node, noop);
      def_transform(AST_LabeledStatement, function(self2, tw) {
        self2.label = self2.label.transform(tw);
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_SimpleStatement, function(self2, tw) {
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_Block, function(self2, tw) {
        self2.body = MAP(self2.body, tw);
      });
      def_transform(AST_Do, function(self2, tw) {
        self2.body = self2.body.transform(tw);
        self2.condition = self2.condition.transform(tw);
      });
      def_transform(AST_While, function(self2, tw) {
        self2.condition = self2.condition.transform(tw);
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_For, function(self2, tw) {
        if (self2.init)
          self2.init = self2.init.transform(tw);
        if (self2.condition)
          self2.condition = self2.condition.transform(tw);
        if (self2.step)
          self2.step = self2.step.transform(tw);
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_ForIn, function(self2, tw) {
        self2.init = self2.init.transform(tw);
        self2.object = self2.object.transform(tw);
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_With, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
        self2.body = self2.body.transform(tw);
      });
      def_transform(AST_Exit, function(self2, tw) {
        if (self2.value)
          self2.value = self2.value.transform(tw);
      });
      def_transform(AST_LoopControl, function(self2, tw) {
        if (self2.label)
          self2.label = self2.label.transform(tw);
      });
      def_transform(AST_If, function(self2, tw) {
        self2.condition = self2.condition.transform(tw);
        self2.body = self2.body.transform(tw);
        if (self2.alternative)
          self2.alternative = self2.alternative.transform(tw);
      });
      def_transform(AST_Switch, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
        self2.body = MAP(self2.body, tw);
      });
      def_transform(AST_Case, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
        self2.body = MAP(self2.body, tw);
      });
      def_transform(AST_Try, function(self2, tw) {
        self2.body = self2.body.transform(tw);
        if (self2.bcatch)
          self2.bcatch = self2.bcatch.transform(tw);
        if (self2.bfinally)
          self2.bfinally = self2.bfinally.transform(tw);
      });
      def_transform(AST_Catch, function(self2, tw) {
        if (self2.argname)
          self2.argname = self2.argname.transform(tw);
        self2.body = MAP(self2.body, tw);
      });
      def_transform(AST_Definitions, function(self2, tw) {
        self2.definitions = MAP(self2.definitions, tw);
      });
      def_transform(AST_VarDef, function(self2, tw) {
        self2.name = self2.name.transform(tw);
        if (self2.value)
          self2.value = self2.value.transform(tw);
      });
      def_transform(AST_Destructuring, function(self2, tw) {
        self2.names = MAP(self2.names, tw);
      });
      def_transform(AST_Lambda, function(self2, tw) {
        if (self2.name)
          self2.name = self2.name.transform(tw);
        self2.argnames = MAP(self2.argnames, tw, false);
        if (self2.body instanceof AST_Node) {
          self2.body = self2.body.transform(tw);
        } else {
          self2.body = MAP(self2.body, tw);
        }
      });
      def_transform(AST_Call, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
        self2.args = MAP(self2.args, tw, false);
      });
      def_transform(AST_Sequence, function(self2, tw) {
        const result = MAP(self2.expressions, tw);
        self2.expressions = result.length ? result : [new AST_Number({ value: 0 })];
      });
      def_transform(AST_PropAccess, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_Sub, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
        self2.property = self2.property.transform(tw);
      });
      def_transform(AST_Chain, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_Yield, function(self2, tw) {
        if (self2.expression)
          self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_Await, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_Unary, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_Binary, function(self2, tw) {
        self2.left = self2.left.transform(tw);
        self2.right = self2.right.transform(tw);
      });
      def_transform(AST_PrivateIn, function(self2, tw) {
        self2.key = self2.key.transform(tw);
        self2.value = self2.value.transform(tw);
      });
      def_transform(AST_Conditional, function(self2, tw) {
        self2.condition = self2.condition.transform(tw);
        self2.consequent = self2.consequent.transform(tw);
        self2.alternative = self2.alternative.transform(tw);
      });
      def_transform(AST_Array, function(self2, tw) {
        self2.elements = MAP(self2.elements, tw);
      });
      def_transform(AST_Object, function(self2, tw) {
        self2.properties = MAP(self2.properties, tw);
      });
      def_transform(AST_ObjectProperty, function(self2, tw) {
        if (self2.key instanceof AST_Node) {
          self2.key = self2.key.transform(tw);
        }
        if (self2.value)
          self2.value = self2.value.transform(tw);
      });
      def_transform(AST_Class, function(self2, tw) {
        if (self2.name)
          self2.name = self2.name.transform(tw);
        if (self2.extends)
          self2.extends = self2.extends.transform(tw);
        self2.properties = MAP(self2.properties, tw);
      });
      def_transform(AST_ClassStaticBlock, function(self2, tw) {
        self2.body = MAP(self2.body, tw);
      });
      def_transform(AST_Expansion, function(self2, tw) {
        self2.expression = self2.expression.transform(tw);
      });
      def_transform(AST_NameMapping, function(self2, tw) {
        self2.foreign_name = self2.foreign_name.transform(tw);
        self2.name = self2.name.transform(tw);
      });
      def_transform(AST_Import, function(self2, tw) {
        if (self2.imported_name)
          self2.imported_name = self2.imported_name.transform(tw);
        if (self2.imported_names)
          MAP(self2.imported_names, tw);
        self2.module_name = self2.module_name.transform(tw);
      });
      def_transform(AST_Export, function(self2, tw) {
        if (self2.exported_definition)
          self2.exported_definition = self2.exported_definition.transform(tw);
        if (self2.exported_value)
          self2.exported_value = self2.exported_value.transform(tw);
        if (self2.exported_names)
          MAP(self2.exported_names, tw);
        if (self2.module_name)
          self2.module_name = self2.module_name.transform(tw);
      });
      def_transform(AST_TemplateString, function(self2, tw) {
        self2.segments = MAP(self2.segments, tw);
      });
      def_transform(AST_PrefixedTemplateString, function(self2, tw) {
        self2.prefix = self2.prefix.transform(tw);
        self2.template_string = self2.template_string.transform(tw);
      });
      (function() {
        var normalize_directives = function(body) {
          for (var i = 0; i < body.length; i++) {
            if (body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {
              body[i] = new AST_Directive({
                start: body[i].start,
                end: body[i].end,
                value: body[i].body.value
              });
            } else {
              return body;
            }
          }
          return body;
        };
        const assert_clause_from_moz = (assertions) => {
          if (assertions && assertions.length > 0) {
            return new AST_Object({
              start: my_start_token(assertions),
              end: my_end_token(assertions),
              properties: assertions.map((assertion_kv) => new AST_ObjectKeyVal({
                start: my_start_token(assertion_kv),
                end: my_end_token(assertion_kv),
                key: assertion_kv.key.name || assertion_kv.key.value,
                value: from_moz(assertion_kv.value)
              }))
            });
          }
          return null;
        };
        var MOZ_TO_ME = {
          Program: function(M) {
            return new AST_Toplevel({
              start: my_start_token(M),
              end: my_end_token(M),
              body: normalize_directives(M.body.map(from_moz))
            });
          },
          ArrayPattern: function(M) {
            return new AST_Destructuring({
              start: my_start_token(M),
              end: my_end_token(M),
              names: M.elements.map(function(elm) {
                if (elm === null) {
                  return new AST_Hole();
                }
                return from_moz(elm);
              }),
              is_array: true
            });
          },
          ObjectPattern: function(M) {
            return new AST_Destructuring({
              start: my_start_token(M),
              end: my_end_token(M),
              names: M.properties.map(from_moz),
              is_array: false
            });
          },
          AssignmentPattern: function(M) {
            return new AST_DefaultAssign({
              start: my_start_token(M),
              end: my_end_token(M),
              left: from_moz(M.left),
              operator: "=",
              right: from_moz(M.right)
            });
          },
          SpreadElement: function(M) {
            return new AST_Expansion({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.argument)
            });
          },
          RestElement: function(M) {
            return new AST_Expansion({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.argument)
            });
          },
          TemplateElement: function(M) {
            return new AST_TemplateSegment({
              start: my_start_token(M),
              end: my_end_token(M),
              value: M.value.cooked,
              raw: M.value.raw
            });
          },
          TemplateLiteral: function(M) {
            var segments = [];
            for (var i = 0; i < M.quasis.length; i++) {
              segments.push(from_moz(M.quasis[i]));
              if (M.expressions[i]) {
                segments.push(from_moz(M.expressions[i]));
              }
            }
            return new AST_TemplateString({
              start: my_start_token(M),
              end: my_end_token(M),
              segments
            });
          },
          TaggedTemplateExpression: function(M) {
            return new AST_PrefixedTemplateString({
              start: my_start_token(M),
              end: my_end_token(M),
              template_string: from_moz(M.quasi),
              prefix: from_moz(M.tag)
            });
          },
          FunctionDeclaration: function(M) {
            return new AST_Defun({
              start: my_start_token(M),
              end: my_end_token(M),
              name: from_moz(M.id),
              argnames: M.params.map(from_moz),
              is_generator: M.generator,
              async: M.async,
              body: normalize_directives(from_moz(M.body).body)
            });
          },
          FunctionExpression: function(M) {
            return new AST_Function({
              start: my_start_token(M),
              end: my_end_token(M),
              name: from_moz(M.id),
              argnames: M.params.map(from_moz),
              is_generator: M.generator,
              async: M.async,
              body: normalize_directives(from_moz(M.body).body)
            });
          },
          ArrowFunctionExpression: function(M) {
            const body = M.body.type === "BlockStatement" ? from_moz(M.body).body : [make_node(AST_Return, {}, { value: from_moz(M.body) })];
            return new AST_Arrow({
              start: my_start_token(M),
              end: my_end_token(M),
              argnames: M.params.map(from_moz),
              body,
              async: M.async
            });
          },
          ExpressionStatement: function(M) {
            return new AST_SimpleStatement({
              start: my_start_token(M),
              end: my_end_token(M),
              body: from_moz(M.expression)
            });
          },
          TryStatement: function(M) {
            var handlers = M.handlers || [M.handler];
            if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {
              throw new Error("Multiple catch clauses are not supported.");
            }
            return new AST_Try({
              start: my_start_token(M),
              end: my_end_token(M),
              body: new AST_TryBlock(from_moz(M.block)),
              bcatch: from_moz(handlers[0]),
              bfinally: M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null
            });
          },
          Property: function(M) {
            var key = M.key;
            var args = {
              start: my_start_token(key || M.value),
              end: my_end_token(M.value),
              key: key.type == "Identifier" ? key.name : key.value,
              value: from_moz(M.value)
            };
            if (M.computed) {
              args.key = from_moz(M.key);
            }
            if (M.method) {
              args.is_generator = M.value.generator;
              args.async = M.value.async;
              if (!M.computed) {
                args.key = new AST_SymbolMethod({ name: args.key });
              } else {
                args.key = from_moz(M.key);
              }
              return new AST_ConciseMethod(args);
            }
            if (M.kind == "init") {
              if (key.type != "Identifier" && key.type != "Literal") {
                args.key = from_moz(key);
              }
              return new AST_ObjectKeyVal(args);
            }
            if (typeof args.key === "string" || typeof args.key === "number") {
              args.key = new AST_SymbolMethod({
                name: args.key
              });
            }
            args.value = new AST_Accessor(args.value);
            if (M.kind == "get")
              return new AST_ObjectGetter(args);
            if (M.kind == "set")
              return new AST_ObjectSetter(args);
            if (M.kind == "method") {
              args.async = M.value.async;
              args.is_generator = M.value.generator;
              args.quote = M.computed ? '"' : null;
              return new AST_ConciseMethod(args);
            }
          },
          MethodDefinition: function(M) {
            const is_private = M.key.type === "PrivateIdentifier";
            const key = M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value });
            var args = {
              start: my_start_token(M),
              end: my_end_token(M),
              key,
              value: from_moz(M.value),
              static: M.static
            };
            if (M.kind == "get") {
              return new (is_private ? AST_PrivateGetter : AST_ObjectGetter)(args);
            }
            if (M.kind == "set") {
              return new (is_private ? AST_PrivateSetter : AST_ObjectSetter)(args);
            }
            args.is_generator = M.value.generator;
            args.async = M.value.async;
            return new (is_private ? AST_PrivateMethod : AST_ConciseMethod)(args);
          },
          FieldDefinition: function(M) {
            let key;
            if (M.computed) {
              key = from_moz(M.key);
            } else {
              if (M.key.type !== "Identifier")
                throw new Error("Non-Identifier key in FieldDefinition");
              key = from_moz(M.key);
            }
            return new AST_ClassProperty({
              start: my_start_token(M),
              end: my_end_token(M),
              key,
              value: from_moz(M.value),
              static: M.static
            });
          },
          PropertyDefinition: function(M) {
            let key;
            if (M.computed) {
              key = from_moz(M.key);
            } else if (M.key.type === "PrivateIdentifier") {
              return new AST_ClassPrivateProperty({
                start: my_start_token(M),
                end: my_end_token(M),
                key: from_moz(M.key),
                value: from_moz(M.value),
                static: M.static
              });
            } else {
              if (M.key.type !== "Identifier") {
                throw new Error("Non-Identifier key in PropertyDefinition");
              }
              key = from_moz(M.key);
            }
            return new AST_ClassProperty({
              start: my_start_token(M),
              end: my_end_token(M),
              key,
              value: from_moz(M.value),
              static: M.static
            });
          },
          PrivateIdentifier: function(M) {
            return new AST_SymbolPrivateProperty({
              start: my_start_token(M),
              end: my_end_token(M),
              name: M.name
            });
          },
          StaticBlock: function(M) {
            return new AST_ClassStaticBlock({
              start: my_start_token(M),
              end: my_end_token(M),
              body: M.body.map(from_moz)
            });
          },
          ArrayExpression: function(M) {
            return new AST_Array({
              start: my_start_token(M),
              end: my_end_token(M),
              elements: M.elements.map(function(elem) {
                return elem === null ? new AST_Hole() : from_moz(elem);
              })
            });
          },
          ObjectExpression: function(M) {
            return new AST_Object({
              start: my_start_token(M),
              end: my_end_token(M),
              properties: M.properties.map(function(prop) {
                if (prop.type === "SpreadElement") {
                  return from_moz(prop);
                }
                prop.type = "Property";
                return from_moz(prop);
              })
            });
          },
          SequenceExpression: function(M) {
            return new AST_Sequence({
              start: my_start_token(M),
              end: my_end_token(M),
              expressions: M.expressions.map(from_moz)
            });
          },
          MemberExpression: function(M) {
            if (M.property.type === "PrivateIdentifier") {
              return new AST_DotHash({
                start: my_start_token(M),
                end: my_end_token(M),
                property: M.property.name,
                expression: from_moz(M.object),
                optional: M.optional || false
              });
            }
            return new (M.computed ? AST_Sub : AST_Dot)({
              start: my_start_token(M),
              end: my_end_token(M),
              property: M.computed ? from_moz(M.property) : M.property.name,
              expression: from_moz(M.object),
              optional: M.optional || false
            });
          },
          ChainExpression: function(M) {
            return new AST_Chain({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.expression)
            });
          },
          SwitchCase: function(M) {
            return new (M.test ? AST_Case : AST_Default)({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.test),
              body: M.consequent.map(from_moz)
            });
          },
          VariableDeclaration: function(M) {
            return new (M.kind === "const" ? AST_Const : M.kind === "let" ? AST_Let : AST_Var)({
              start: my_start_token(M),
              end: my_end_token(M),
              definitions: M.declarations.map(from_moz)
            });
          },
          ImportDeclaration: function(M) {
            var imported_name = null;
            var imported_names = null;
            M.specifiers.forEach(function(specifier) {
              if (specifier.type === "ImportSpecifier" || specifier.type === "ImportNamespaceSpecifier") {
                if (!imported_names) {
                  imported_names = [];
                }
                imported_names.push(from_moz(specifier));
              } else if (specifier.type === "ImportDefaultSpecifier") {
                imported_name = from_moz(specifier);
              }
            });
            return new AST_Import({
              start: my_start_token(M),
              end: my_end_token(M),
              imported_name,
              imported_names,
              module_name: from_moz(M.source),
              assert_clause: assert_clause_from_moz(M.assertions)
            });
          },
          ImportSpecifier: function(M) {
            return new AST_NameMapping({
              start: my_start_token(M),
              end: my_end_token(M),
              foreign_name: from_moz(M.imported),
              name: from_moz(M.local)
            });
          },
          ImportDefaultSpecifier: function(M) {
            return from_moz(M.local);
          },
          ImportNamespaceSpecifier: function(M) {
            return new AST_NameMapping({
              start: my_start_token(M),
              end: my_end_token(M),
              foreign_name: new AST_SymbolImportForeign({ name: "*" }),
              name: from_moz(M.local)
            });
          },
          ExportAllDeclaration: function(M) {
            var foreign_name = M.exported == null ? new AST_SymbolExportForeign({ name: "*" }) : from_moz(M.exported);
            return new AST_Export({
              start: my_start_token(M),
              end: my_end_token(M),
              exported_names: [
                new AST_NameMapping({
                  name: new AST_SymbolExportForeign({ name: "*" }),
                  foreign_name
                })
              ],
              module_name: from_moz(M.source),
              assert_clause: assert_clause_from_moz(M.assertions)
            });
          },
          ExportNamedDeclaration: function(M) {
            return new AST_Export({
              start: my_start_token(M),
              end: my_end_token(M),
              exported_definition: from_moz(M.declaration),
              exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function(specifier) {
                return from_moz(specifier);
              }) : null,
              module_name: from_moz(M.source),
              assert_clause: assert_clause_from_moz(M.assertions)
            });
          },
          ExportDefaultDeclaration: function(M) {
            return new AST_Export({
              start: my_start_token(M),
              end: my_end_token(M),
              exported_value: from_moz(M.declaration),
              is_default: true
            });
          },
          ExportSpecifier: function(M) {
            return new AST_NameMapping({
              foreign_name: from_moz(M.exported),
              name: from_moz(M.local)
            });
          },
          Literal: function(M) {
            var val = M.value, args = {
              start: my_start_token(M),
              end: my_end_token(M)
            };
            var rx = M.regex;
            if (rx && rx.pattern) {
              args.value = {
                source: rx.pattern,
                flags: rx.flags
              };
              return new AST_RegExp(args);
            } else if (rx) {
              const rx_source = M.raw || val;
              const match = rx_source.match(/^\/(.*)\/(\w*)$/);
              if (!match)
                throw new Error("Invalid regex source " + rx_source);
              const [_, source, flags] = match;
              args.value = { source, flags };
              return new AST_RegExp(args);
            }
            if (val === null)
              return new AST_Null(args);
            switch (typeof val) {
              case "string":
                args.quote = '"';
                var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
                if (p.type == "ImportSpecifier") {
                  args.name = val;
                  return new AST_SymbolImportForeign(args);
                } else if (p.type == "ExportSpecifier") {
                  args.name = val;
                  if (M == p.exported) {
                    return new AST_SymbolExportForeign(args);
                  } else {
                    return new AST_SymbolExport(args);
                  }
                } else if (p.type == "ExportAllDeclaration" && M == p.exported) {
                  args.name = val;
                  return new AST_SymbolExportForeign(args);
                }
                args.value = val;
                return new AST_String(args);
              case "number":
                args.value = val;
                args.raw = M.raw || val.toString();
                return new AST_Number(args);
              case "boolean":
                return new (val ? AST_True : AST_False)(args);
            }
          },
          MetaProperty: function(M) {
            if (M.meta.name === "new" && M.property.name === "target") {
              return new AST_NewTarget({
                start: my_start_token(M),
                end: my_end_token(M)
              });
            } else if (M.meta.name === "import" && M.property.name === "meta") {
              return new AST_ImportMeta({
                start: my_start_token(M),
                end: my_end_token(M)
              });
            }
          },
          Identifier: function(M) {
            var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
            return new (p.type == "LabeledStatement" ? AST_Label : p.type == "VariableDeclarator" && p.id === M ? p.kind == "const" ? AST_SymbolConst : p.kind == "let" ? AST_SymbolLet : AST_SymbolVar : /Import.*Specifier/.test(p.type) ? p.local === M ? AST_SymbolImport : AST_SymbolImportForeign : p.type == "ExportSpecifier" ? p.local === M ? AST_SymbolExport : AST_SymbolExportForeign : p.type == "FunctionExpression" ? p.id === M ? AST_SymbolLambda : AST_SymbolFunarg : p.type == "FunctionDeclaration" ? p.id === M ? AST_SymbolDefun : AST_SymbolFunarg : p.type == "ArrowFunctionExpression" ? p.params.includes(M) ? AST_SymbolFunarg : AST_SymbolRef : p.type == "ClassExpression" ? p.id === M ? AST_SymbolClass : AST_SymbolRef : p.type == "Property" ? p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod : p.type == "PropertyDefinition" || p.type === "FieldDefinition" ? p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty : p.type == "ClassDeclaration" ? p.id === M ? AST_SymbolDefClass : AST_SymbolRef : p.type == "MethodDefinition" ? p.computed ? AST_SymbolRef : AST_SymbolMethod : p.type == "CatchClause" ? AST_SymbolCatch : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef : AST_SymbolRef)({
              start: my_start_token(M),
              end: my_end_token(M),
              name: M.name
            });
          },
          BigIntLiteral(M) {
            return new AST_BigInt({
              start: my_start_token(M),
              end: my_end_token(M),
              value: M.value
            });
          },
          EmptyStatement: function(M) {
            return new AST_EmptyStatement({
              start: my_start_token(M),
              end: my_end_token(M)
            });
          },
          BlockStatement: function(M) {
            return new AST_BlockStatement({
              start: my_start_token(M),
              end: my_end_token(M),
              body: M.body.map(from_moz)
            });
          },
          IfStatement: function(M) {
            return new AST_If({
              start: my_start_token(M),
              end: my_end_token(M),
              condition: from_moz(M.test),
              body: from_moz(M.consequent),
              alternative: from_moz(M.alternate)
            });
          },
          LabeledStatement: function(M) {
            return new AST_LabeledStatement({
              start: my_start_token(M),
              end: my_end_token(M),
              label: from_moz(M.label),
              body: from_moz(M.body)
            });
          },
          BreakStatement: function(M) {
            return new AST_Break({
              start: my_start_token(M),
              end: my_end_token(M),
              label: from_moz(M.label)
            });
          },
          ContinueStatement: function(M) {
            return new AST_Continue({
              start: my_start_token(M),
              end: my_end_token(M),
              label: from_moz(M.label)
            });
          },
          WithStatement: function(M) {
            return new AST_With({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.object),
              body: from_moz(M.body)
            });
          },
          SwitchStatement: function(M) {
            return new AST_Switch({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.discriminant),
              body: M.cases.map(from_moz)
            });
          },
          ReturnStatement: function(M) {
            return new AST_Return({
              start: my_start_token(M),
              end: my_end_token(M),
              value: from_moz(M.argument)
            });
          },
          ThrowStatement: function(M) {
            return new AST_Throw({
              start: my_start_token(M),
              end: my_end_token(M),
              value: from_moz(M.argument)
            });
          },
          WhileStatement: function(M) {
            return new AST_While({
              start: my_start_token(M),
              end: my_end_token(M),
              condition: from_moz(M.test),
              body: from_moz(M.body)
            });
          },
          DoWhileStatement: function(M) {
            return new AST_Do({
              start: my_start_token(M),
              end: my_end_token(M),
              condition: from_moz(M.test),
              body: from_moz(M.body)
            });
          },
          ForStatement: function(M) {
            return new AST_For({
              start: my_start_token(M),
              end: my_end_token(M),
              init: from_moz(M.init),
              condition: from_moz(M.test),
              step: from_moz(M.update),
              body: from_moz(M.body)
            });
          },
          ForInStatement: function(M) {
            return new AST_ForIn({
              start: my_start_token(M),
              end: my_end_token(M),
              init: from_moz(M.left),
              object: from_moz(M.right),
              body: from_moz(M.body)
            });
          },
          ForOfStatement: function(M) {
            return new AST_ForOf({
              start: my_start_token(M),
              end: my_end_token(M),
              init: from_moz(M.left),
              object: from_moz(M.right),
              body: from_moz(M.body),
              await: M.await
            });
          },
          AwaitExpression: function(M) {
            return new AST_Await({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.argument)
            });
          },
          YieldExpression: function(M) {
            return new AST_Yield({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.argument),
              is_star: M.delegate
            });
          },
          DebuggerStatement: function(M) {
            return new AST_Debugger({
              start: my_start_token(M),
              end: my_end_token(M)
            });
          },
          VariableDeclarator: function(M) {
            return new AST_VarDef({
              start: my_start_token(M),
              end: my_end_token(M),
              name: from_moz(M.id),
              value: from_moz(M.init)
            });
          },
          CatchClause: function(M) {
            return new AST_Catch({
              start: my_start_token(M),
              end: my_end_token(M),
              argname: from_moz(M.param),
              body: from_moz(M.body).body
            });
          },
          ThisExpression: function(M) {
            return new AST_This({
              start: my_start_token(M),
              end: my_end_token(M)
            });
          },
          Super: function(M) {
            return new AST_Super({
              start: my_start_token(M),
              end: my_end_token(M)
            });
          },
          BinaryExpression: function(M) {
            if (M.left.type === "PrivateIdentifier") {
              return new AST_PrivateIn({
                start: my_start_token(M),
                end: my_end_token(M),
                key: new AST_SymbolPrivateProperty({
                  start: my_start_token(M.left),
                  end: my_end_token(M.left),
                  name: M.left.name
                }),
                value: from_moz(M.right)
              });
            }
            return new AST_Binary({
              start: my_start_token(M),
              end: my_end_token(M),
              operator: M.operator,
              left: from_moz(M.left),
              right: from_moz(M.right)
            });
          },
          LogicalExpression: function(M) {
            return new AST_Binary({
              start: my_start_token(M),
              end: my_end_token(M),
              operator: M.operator,
              left: from_moz(M.left),
              right: from_moz(M.right)
            });
          },
          AssignmentExpression: function(M) {
            return new AST_Assign({
              start: my_start_token(M),
              end: my_end_token(M),
              operator: M.operator,
              left: from_moz(M.left),
              right: from_moz(M.right)
            });
          },
          ConditionalExpression: function(M) {
            return new AST_Conditional({
              start: my_start_token(M),
              end: my_end_token(M),
              condition: from_moz(M.test),
              consequent: from_moz(M.consequent),
              alternative: from_moz(M.alternate)
            });
          },
          NewExpression: function(M) {
            return new AST_New({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.callee),
              args: M.arguments.map(from_moz)
            });
          },
          CallExpression: function(M) {
            return new AST_Call({
              start: my_start_token(M),
              end: my_end_token(M),
              expression: from_moz(M.callee),
              optional: M.optional,
              args: M.arguments.map(from_moz)
            });
          }
        };
        MOZ_TO_ME.UpdateExpression = MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {
          var prefix = "prefix" in M ? M.prefix : M.type == "UnaryExpression" ? true : false;
          return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({
            start: my_start_token(M),
            end: my_end_token(M),
            operator: M.operator,
            expression: from_moz(M.argument)
          });
        };
        MOZ_TO_ME.ClassDeclaration = MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {
          return new (M.type === "ClassDeclaration" ? AST_DefClass : AST_ClassExpression)({
            start: my_start_token(M),
            end: my_end_token(M),
            name: from_moz(M.id),
            extends: from_moz(M.superClass),
            properties: M.body.body.map(from_moz)
          });
        };
        def_to_moz(AST_EmptyStatement, function To_Moz_EmptyStatement() {
          return {
            type: "EmptyStatement"
          };
        });
        def_to_moz(AST_BlockStatement, function To_Moz_BlockStatement(M) {
          return {
            type: "BlockStatement",
            body: M.body.map(to_moz)
          };
        });
        def_to_moz(AST_If, function To_Moz_IfStatement(M) {
          return {
            type: "IfStatement",
            test: to_moz(M.condition),
            consequent: to_moz(M.body),
            alternate: to_moz(M.alternative)
          };
        });
        def_to_moz(AST_LabeledStatement, function To_Moz_LabeledStatement(M) {
          return {
            type: "LabeledStatement",
            label: to_moz(M.label),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_Break, function To_Moz_BreakStatement(M) {
          return {
            type: "BreakStatement",
            label: to_moz(M.label)
          };
        });
        def_to_moz(AST_Continue, function To_Moz_ContinueStatement(M) {
          return {
            type: "ContinueStatement",
            label: to_moz(M.label)
          };
        });
        def_to_moz(AST_With, function To_Moz_WithStatement(M) {
          return {
            type: "WithStatement",
            object: to_moz(M.expression),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_Switch, function To_Moz_SwitchStatement(M) {
          return {
            type: "SwitchStatement",
            discriminant: to_moz(M.expression),
            cases: M.body.map(to_moz)
          };
        });
        def_to_moz(AST_Return, function To_Moz_ReturnStatement(M) {
          return {
            type: "ReturnStatement",
            argument: to_moz(M.value)
          };
        });
        def_to_moz(AST_Throw, function To_Moz_ThrowStatement(M) {
          return {
            type: "ThrowStatement",
            argument: to_moz(M.value)
          };
        });
        def_to_moz(AST_While, function To_Moz_WhileStatement(M) {
          return {
            type: "WhileStatement",
            test: to_moz(M.condition),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_Do, function To_Moz_DoWhileStatement(M) {
          return {
            type: "DoWhileStatement",
            test: to_moz(M.condition),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_For, function To_Moz_ForStatement(M) {
          return {
            type: "ForStatement",
            init: to_moz(M.init),
            test: to_moz(M.condition),
            update: to_moz(M.step),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_ForIn, function To_Moz_ForInStatement(M) {
          return {
            type: "ForInStatement",
            left: to_moz(M.init),
            right: to_moz(M.object),
            body: to_moz(M.body)
          };
        });
        def_to_moz(AST_ForOf, function To_Moz_ForOfStatement(M) {
          return {
            type: "ForOfStatement",
            left: to_moz(M.init),
            right: to_moz(M.object),
            body: to_moz(M.body),
            await: M.await
          };
        });
        def_to_moz(AST_Await, function To_Moz_AwaitExpression(M) {
          return {
            type: "AwaitExpression",
            argument: to_moz(M.expression)
          };
        });
        def_to_moz(AST_Yield, function To_Moz_YieldExpression(M) {
          return {
            type: "YieldExpression",
            argument: to_moz(M.expression),
            delegate: M.is_star
          };
        });
        def_to_moz(AST_Debugger, function To_Moz_DebuggerStatement() {
          return {
            type: "DebuggerStatement"
          };
        });
        def_to_moz(AST_VarDef, function To_Moz_VariableDeclarator(M) {
          return {
            type: "VariableDeclarator",
            id: to_moz(M.name),
            init: to_moz(M.value)
          };
        });
        def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
          return {
            type: "CatchClause",
            param: to_moz(M.argname),
            body: to_moz_block(M)
          };
        });
        def_to_moz(AST_This, function To_Moz_ThisExpression() {
          return {
            type: "ThisExpression"
          };
        });
        def_to_moz(AST_Super, function To_Moz_Super() {
          return {
            type: "Super"
          };
        });
        def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
          return {
            type: "BinaryExpression",
            operator: M.operator,
            left: to_moz(M.left),
            right: to_moz(M.right)
          };
        });
        def_to_moz(AST_Binary, function To_Moz_LogicalExpression(M) {
          return {
            type: "LogicalExpression",
            operator: M.operator,
            left: to_moz(M.left),
            right: to_moz(M.right)
          };
        });
        def_to_moz(AST_Assign, function To_Moz_AssignmentExpression(M) {
          return {
            type: "AssignmentExpression",
            operator: M.operator,
            left: to_moz(M.left),
            right: to_moz(M.right)
          };
        });
        def_to_moz(AST_Conditional, function To_Moz_ConditionalExpression(M) {
          return {
            type: "ConditionalExpression",
            test: to_moz(M.condition),
            consequent: to_moz(M.consequent),
            alternate: to_moz(M.alternative)
          };
        });
        def_to_moz(AST_New, function To_Moz_NewExpression(M) {
          return {
            type: "NewExpression",
            callee: to_moz(M.expression),
            arguments: M.args.map(to_moz)
          };
        });
        def_to_moz(AST_Call, function To_Moz_CallExpression(M) {
          return {
            type: "CallExpression",
            callee: to_moz(M.expression),
            optional: M.optional,
            arguments: M.args.map(to_moz)
          };
        });
        def_to_moz(AST_Toplevel, function To_Moz_Program(M) {
          return to_moz_scope("Program", M);
        });
        def_to_moz(AST_Expansion, function To_Moz_Spread(M) {
          return {
            type: to_moz_in_destructuring() ? "RestElement" : "SpreadElement",
            argument: to_moz(M.expression)
          };
        });
        def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {
          return {
            type: "TaggedTemplateExpression",
            tag: to_moz(M.prefix),
            quasi: to_moz(M.template_string)
          };
        });
        def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {
          var quasis = [];
          var expressions = [];
          for (var i = 0; i < M.segments.length; i++) {
            if (i % 2 !== 0) {
              expressions.push(to_moz(M.segments[i]));
            } else {
              quasis.push({
                type: "TemplateElement",
                value: {
                  raw: M.segments[i].raw,
                  cooked: M.segments[i].value
                },
                tail: i === M.segments.length - 1
              });
            }
          }
          return {
            type: "TemplateLiteral",
            quasis,
            expressions
          };
        });
        def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {
          return {
            type: "FunctionDeclaration",
            id: to_moz(M.name),
            params: M.argnames.map(to_moz),
            generator: M.is_generator,
            async: M.async,
            body: to_moz_scope("BlockStatement", M)
          };
        });
        def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {
          var is_generator = parent.is_generator !== void 0 ? parent.is_generator : M.is_generator;
          return {
            type: "FunctionExpression",
            id: to_moz(M.name),
            params: M.argnames.map(to_moz),
            generator: is_generator,
            async: M.async,
            body: to_moz_scope("BlockStatement", M)
          };
        });
        def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {
          var body = {
            type: "BlockStatement",
            body: M.body.map(to_moz)
          };
          return {
            type: "ArrowFunctionExpression",
            params: M.argnames.map(to_moz),
            async: M.async,
            body
          };
        });
        def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {
          if (M.is_array) {
            return {
              type: "ArrayPattern",
              elements: M.names.map(to_moz)
            };
          }
          return {
            type: "ObjectPattern",
            properties: M.names.map(to_moz)
          };
        });
        def_to_moz(AST_Directive, function To_Moz_Directive(M) {
          return {
            type: "ExpressionStatement",
            expression: {
              type: "Literal",
              value: M.value,
              raw: M.print_to_string()
            },
            directive: M.value
          };
        });
        def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {
          return {
            type: "ExpressionStatement",
            expression: to_moz(M.body)
          };
        });
        def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {
          return {
            type: "SwitchCase",
            test: to_moz(M.expression),
            consequent: M.body.map(to_moz)
          };
        });
        def_to_moz(AST_Try, function To_Moz_TryStatement(M) {
          return {
            type: "TryStatement",
            block: to_moz_block(M.body),
            handler: to_moz(M.bcatch),
            guardedHandlers: [],
            finalizer: to_moz(M.bfinally)
          };
        });
        def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
          return {
            type: "CatchClause",
            param: to_moz(M.argname),
            guard: null,
            body: to_moz_block(M)
          };
        });
        def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {
          return {
            type: "VariableDeclaration",
            kind: M instanceof AST_Const ? "const" : M instanceof AST_Let ? "let" : "var",
            declarations: M.definitions.map(to_moz)
          };
        });
        const assert_clause_to_moz = (assert_clause) => {
          const assertions = [];
          if (assert_clause) {
            for (const { key, value } of assert_clause.properties) {
              const key_moz = is_basic_identifier_string(key) ? { type: "Identifier", name: key } : { type: "Literal", value: key, raw: JSON.stringify(key) };
              assertions.push({
                type: "ImportAttribute",
                key: key_moz,
                value: to_moz(value)
              });
            }
          }
          return assertions;
        };
        def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {
          if (M.exported_names) {
            var first_exported = M.exported_names[0];
            var first_exported_name = first_exported.name;
            if (first_exported_name.name === "*" && !first_exported_name.quote) {
              var foreign_name = first_exported.foreign_name;
              var exported = foreign_name.name === "*" && !foreign_name.quote ? null : to_moz(foreign_name);
              return {
                type: "ExportAllDeclaration",
                source: to_moz(M.module_name),
                exported,
                assertions: assert_clause_to_moz(M.assert_clause)
              };
            }
            return {
              type: "ExportNamedDeclaration",
              specifiers: M.exported_names.map(function(name_mapping) {
                return {
                  type: "ExportSpecifier",
                  exported: to_moz(name_mapping.foreign_name),
                  local: to_moz(name_mapping.name)
                };
              }),
              declaration: to_moz(M.exported_definition),
              source: to_moz(M.module_name),
              assertions: assert_clause_to_moz(M.assert_clause)
            };
          }
          return {
            type: M.is_default ? "ExportDefaultDeclaration" : "ExportNamedDeclaration",
            declaration: to_moz(M.exported_value || M.exported_definition)
          };
        });
        def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {
          var specifiers = [];
          if (M.imported_name) {
            specifiers.push({
              type: "ImportDefaultSpecifier",
              local: to_moz(M.imported_name)
            });
          }
          if (M.imported_names) {
            var first_imported_foreign_name = M.imported_names[0].foreign_name;
            if (first_imported_foreign_name.name === "*" && !first_imported_foreign_name.quote) {
              specifiers.push({
                type: "ImportNamespaceSpecifier",
                local: to_moz(M.imported_names[0].name)
              });
            } else {
              M.imported_names.forEach(function(name_mapping) {
                specifiers.push({
                  type: "ImportSpecifier",
                  local: to_moz(name_mapping.name),
                  imported: to_moz(name_mapping.foreign_name)
                });
              });
            }
          }
          return {
            type: "ImportDeclaration",
            specifiers,
            source: to_moz(M.module_name),
            assertions: assert_clause_to_moz(M.assert_clause)
          };
        });
        def_to_moz(AST_ImportMeta, function To_Moz_MetaProperty() {
          return {
            type: "MetaProperty",
            meta: {
              type: "Identifier",
              name: "import"
            },
            property: {
              type: "Identifier",
              name: "meta"
            }
          };
        });
        def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {
          return {
            type: "SequenceExpression",
            expressions: M.expressions.map(to_moz)
          };
        });
        def_to_moz(AST_DotHash, function To_Moz_PrivateMemberExpression(M) {
          return {
            type: "MemberExpression",
            object: to_moz(M.expression),
            computed: false,
            property: {
              type: "PrivateIdentifier",
              name: M.property
            },
            optional: M.optional
          };
        });
        def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {
          var isComputed = M instanceof AST_Sub;
          return {
            type: "MemberExpression",
            object: to_moz(M.expression),
            computed: isComputed,
            property: isComputed ? to_moz(M.property) : { type: "Identifier", name: M.property },
            optional: M.optional
          };
        });
        def_to_moz(AST_Chain, function To_Moz_ChainExpression(M) {
          return {
            type: "ChainExpression",
            expression: to_moz(M.expression)
          };
        });
        def_to_moz(AST_Unary, function To_Moz_Unary(M) {
          return {
            type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression",
            operator: M.operator,
            prefix: M instanceof AST_UnaryPrefix,
            argument: to_moz(M.expression)
          };
        });
        def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
          if (M.operator == "=" && to_moz_in_destructuring()) {
            return {
              type: "AssignmentPattern",
              left: to_moz(M.left),
              right: to_moz(M.right)
            };
          }
          const type = M.operator == "&&" || M.operator == "||" || M.operator === "??" ? "LogicalExpression" : "BinaryExpression";
          return {
            type,
            left: to_moz(M.left),
            operator: M.operator,
            right: to_moz(M.right)
          };
        });
        def_to_moz(AST_PrivateIn, function To_Moz_BinaryExpression_PrivateIn(M) {
          return {
            type: "BinaryExpression",
            left: { type: "PrivateIdentifier", name: M.key.name },
            operator: "in",
            right: to_moz(M.value)
          };
        });
        def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {
          return {
            type: "ArrayExpression",
            elements: M.elements.map(to_moz)
          };
        });
        def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {
          return {
            type: "ObjectExpression",
            properties: M.properties.map(to_moz)
          };
        });
        def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {
          var key = M.key instanceof AST_Node ? to_moz(M.key) : {
            type: "Identifier",
            value: M.key
          };
          if (typeof M.key === "number") {
            key = {
              type: "Literal",
              value: Number(M.key)
            };
          }
          if (typeof M.key === "string") {
            key = {
              type: "Identifier",
              name: M.key
            };
          }
          var kind;
          var string_or_num = typeof M.key === "string" || typeof M.key === "number";
          var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;
          if (M instanceof AST_ObjectKeyVal) {
            kind = "init";
            computed = !string_or_num;
          } else if (M instanceof AST_ObjectGetter) {
            kind = "get";
          } else if (M instanceof AST_ObjectSetter) {
            kind = "set";
          }
          if (M instanceof AST_PrivateGetter || M instanceof AST_PrivateSetter) {
            const kind2 = M instanceof AST_PrivateGetter ? "get" : "set";
            return {
              type: "MethodDefinition",
              computed: false,
              kind: kind2,
              static: M.static,
              key: {
                type: "PrivateIdentifier",
                name: M.key.name
              },
              value: to_moz(M.value)
            };
          }
          if (M instanceof AST_ClassPrivateProperty) {
            return {
              type: "PropertyDefinition",
              key: {
                type: "PrivateIdentifier",
                name: M.key.name
              },
              value: to_moz(M.value),
              computed: false,
              static: M.static
            };
          }
          if (M instanceof AST_ClassProperty) {
            return {
              type: "PropertyDefinition",
              key,
              value: to_moz(M.value),
              computed,
              static: M.static
            };
          }
          if (parent instanceof AST_Class) {
            return {
              type: "MethodDefinition",
              computed,
              kind,
              static: M.static,
              key: to_moz(M.key),
              value: to_moz(M.value)
            };
          }
          return {
            type: "Property",
            computed,
            kind,
            key,
            value: to_moz(M.value)
          };
        });
        def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {
          if (parent instanceof AST_Object) {
            return {
              type: "Property",
              computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
              kind: "init",
              method: true,
              shorthand: false,
              key: to_moz(M.key),
              value: to_moz(M.value)
            };
          }
          const key = M instanceof AST_PrivateMethod ? {
            type: "PrivateIdentifier",
            name: M.key.name
          } : to_moz(M.key);
          return {
            type: "MethodDefinition",
            kind: M.key === "constructor" ? "constructor" : "method",
            key,
            value: to_moz(M.value),
            computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
            static: M.static
          };
        });
        def_to_moz(AST_Class, function To_Moz_Class(M) {
          var type = M instanceof AST_ClassExpression ? "ClassExpression" : "ClassDeclaration";
          return {
            type,
            superClass: to_moz(M.extends),
            id: M.name ? to_moz(M.name) : null,
            body: {
              type: "ClassBody",
              body: M.properties.map(to_moz)
            }
          };
        });
        def_to_moz(AST_ClassStaticBlock, function To_Moz_StaticBlock(M) {
          return {
            type: "StaticBlock",
            body: M.body.map(to_moz)
          };
        });
        def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() {
          return {
            type: "MetaProperty",
            meta: {
              type: "Identifier",
              name: "new"
            },
            property: {
              type: "Identifier",
              name: "target"
            }
          };
        });
        def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {
          if (M instanceof AST_SymbolMethod && parent.quote || (M instanceof AST_SymbolImportForeign || M instanceof AST_SymbolExportForeign || M instanceof AST_SymbolExport) && M.quote) {
            return {
              type: "Literal",
              value: M.name
            };
          }
          var def = M.definition();
          return {
            type: "Identifier",
            name: def ? def.mangled_name || def.name : M.name
          };
        });
        def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {
          const pattern = M.value.source;
          const flags = M.value.flags;
          return {
            type: "Literal",
            value: null,
            raw: M.print_to_string(),
            regex: { pattern, flags }
          };
        });
        def_to_moz(AST_Constant, function To_Moz_Literal(M) {
          var value = M.value;
          return {
            type: "Literal",
            value,
            raw: M.raw || M.print_to_string()
          };
        });
        def_to_moz(AST_Atom, function To_Moz_Atom(M) {
          return {
            type: "Identifier",
            name: String(M.value)
          };
        });
        def_to_moz(AST_BigInt, (M) => ({
          type: "BigIntLiteral",
          value: M.value
        }));
        AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
        AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
        AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() {
          return null;
        });
        AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast);
        AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast);
        function my_start_token(moznode) {
          var loc = moznode.loc, start = loc && loc.start;
          var range = moznode.range;
          return new AST_Token("", "", start && start.line || 0, start && start.column || 0, range ? range[0] : moznode.start, false, [], [], loc && loc.source);
        }
        function my_end_token(moznode) {
          var loc = moznode.loc, end = loc && loc.end;
          var range = moznode.range;
          return new AST_Token("", "", end && end.line || 0, end && end.column || 0, range ? range[0] : moznode.end, false, [], [], loc && loc.source);
        }
        var FROM_MOZ_STACK = null;
        function from_moz(node) {
          FROM_MOZ_STACK.push(node);
          var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
          FROM_MOZ_STACK.pop();
          return ret;
        }
        AST_Node.from_mozilla_ast = function(node) {
          var save_stack = FROM_MOZ_STACK;
          FROM_MOZ_STACK = [];
          var ast = from_moz(node);
          FROM_MOZ_STACK = save_stack;
          return ast;
        };
        function set_moz_loc(mynode, moznode) {
          var start = mynode.start;
          var end = mynode.end;
          if (!(start && end)) {
            return moznode;
          }
          if (start.pos != null && end.endpos != null) {
            moznode.range = [start.pos, end.endpos];
          }
          if (start.line) {
            moznode.loc = {
              start: { line: start.line, column: start.col },
              end: end.endline ? { line: end.endline, column: end.endcol } : null
            };
            if (start.file) {
              moznode.loc.source = start.file;
            }
          }
          return moznode;
        }
        function def_to_moz(mytype, handler) {
          mytype.DEFMETHOD("to_mozilla_ast", function(parent) {
            return set_moz_loc(this, handler(this, parent));
          });
        }
        var TO_MOZ_STACK = null;
        function to_moz(node) {
          if (TO_MOZ_STACK === null) {
            TO_MOZ_STACK = [];
          }
          TO_MOZ_STACK.push(node);
          var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;
          TO_MOZ_STACK.pop();
          if (TO_MOZ_STACK.length === 0) {
            TO_MOZ_STACK = null;
          }
          return ast;
        }
        function to_moz_in_destructuring() {
          var i = TO_MOZ_STACK.length;
          while (i--) {
            if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {
              return true;
            }
          }
          return false;
        }
        function to_moz_block(node) {
          return {
            type: "BlockStatement",
            body: node.body.map(to_moz)
          };
        }
        function to_moz_scope(type, node) {
          var body = node.body.map(to_moz);
          if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {
            body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));
          }
          return {
            type,
            body
          };
        }
      })();
      function first_in_statement(stack) {
        let node = stack.parent(-1);
        for (let i = 0, p; p = stack.parent(i); i++) {
          if (p instanceof AST_Statement && p.body === node)
            return true;
          if (p instanceof AST_Sequence && p.expressions[0] === node || p.TYPE === "Call" && p.expression === node || p instanceof AST_PrefixedTemplateString && p.prefix === node || p instanceof AST_Dot && p.expression === node || p instanceof AST_Sub && p.expression === node || p instanceof AST_Chain && p.expression === node || p instanceof AST_Conditional && p.condition === node || p instanceof AST_Binary && p.left === node || p instanceof AST_UnaryPostfix && p.expression === node) {
            node = p;
          } else {
            return false;
          }
        }
      }
      function left_is_object(node) {
        if (node instanceof AST_Object)
          return true;
        if (node instanceof AST_Sequence)
          return left_is_object(node.expressions[0]);
        if (node.TYPE === "Call")
          return left_is_object(node.expression);
        if (node instanceof AST_PrefixedTemplateString)
          return left_is_object(node.prefix);
        if (node instanceof AST_Dot || node instanceof AST_Sub)
          return left_is_object(node.expression);
        if (node instanceof AST_Chain)
          return left_is_object(node.expression);
        if (node instanceof AST_Conditional)
          return left_is_object(node.condition);
        if (node instanceof AST_Binary)
          return left_is_object(node.left);
        if (node instanceof AST_UnaryPostfix)
          return left_is_object(node.expression);
        return false;
      }
      const CODE_LINE_BREAK = 10;
      const CODE_SPACE = 32;
      const r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/;
      function is_some_comments(comment2) {
        return (comment2.type === "comment2" || comment2.type === "comment1") && /@preserve|@copyright|@lic|@cc_on|^\**!/i.test(comment2.value);
      }
      const ROPE_COMMIT_WHEN = 8 * 1e3;
      class Rope {
        constructor() {
          this.committed = "";
          this.current = "";
        }
        append(str) {
          if (this.current.length > ROPE_COMMIT_WHEN) {
            this.committed += this.current + str;
            this.current = "";
          } else {
            this.current += str;
          }
        }
        insertAt(char, index) {
          const { committed, current } = this;
          if (index < committed.length) {
            this.committed = committed.slice(0, index) + char + committed.slice(index);
          } else if (index === committed.length) {
            this.committed += char;
          } else {
            index -= committed.length;
            this.committed += current.slice(0, index) + char;
            this.current = current.slice(index);
          }
        }
        charAt(index) {
          const { committed } = this;
          if (index < committed.length)
            return committed[index];
          return this.current[index - committed.length];
        }
        charCodeAt(index) {
          const { committed } = this;
          if (index < committed.length)
            return committed.charCodeAt(index);
          return this.current.charCodeAt(index - committed.length);
        }
        length() {
          return this.committed.length + this.current.length;
        }
        expectDirective() {
          let ch, n = this.length();
          if (n <= 0)
            return true;
          while ((ch = this.charCodeAt(--n)) && (ch == CODE_SPACE || ch == CODE_LINE_BREAK))
            ;
          return !ch || ch === 59 || ch === 123;
        }
        hasNLB() {
          let n = this.length() - 1;
          while (n >= 0) {
            const code = this.charCodeAt(n--);
            if (code === CODE_LINE_BREAK)
              return true;
            if (code !== CODE_SPACE)
              return false;
          }
          return true;
        }
        toString() {
          return this.committed + this.current;
        }
      }
      function OutputStream(options) {
        var readonly = !options;
        options = defaults(options, {
          ascii_only: false,
          beautify: false,
          braces: false,
          comments: "some",
          ecma: 5,
          ie8: false,
          indent_level: 4,
          indent_start: 0,
          inline_script: true,
          keep_numbers: false,
          keep_quoted_props: false,
          max_line_len: false,
          preamble: null,
          preserve_annotations: false,
          quote_keys: false,
          quote_style: 0,
          safari10: false,
          semicolons: true,
          shebang: true,
          shorthand: void 0,
          source_map: null,
          webkit: false,
          width: 80,
          wrap_iife: false,
          wrap_func_args: true,
          _destroy_ast: false
        }, true);
        if (options.shorthand === void 0)
          options.shorthand = options.ecma > 5;
        var comment_filter = return_false;
        if (options.comments) {
          let comments = options.comments;
          if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) {
            var regex_pos = options.comments.lastIndexOf("/");
            comments = new RegExp(options.comments.substr(1, regex_pos - 1), options.comments.substr(regex_pos + 1));
          }
          if (comments instanceof RegExp) {
            comment_filter = function(comment2) {
              return comment2.type != "comment5" && comments.test(comment2.value);
            };
          } else if (typeof comments === "function") {
            comment_filter = function(comment2) {
              return comment2.type != "comment5" && comments(this, comment2);
            };
          } else if (comments === "some") {
            comment_filter = is_some_comments;
          } else {
            comment_filter = return_true;
          }
        }
        if (options.preserve_annotations) {
          let prev_comment_filter = comment_filter;
          comment_filter = function(comment2) {
            return r_annotation.test(comment2.value) || prev_comment_filter.apply(this, arguments);
          };
        }
        var indentation = 0;
        var current_col = 0;
        var current_line = 1;
        var current_pos = 0;
        var OUTPUT = new Rope();
        let printed_comments = /* @__PURE__ */ new Set();
        var to_utf8 = options.ascii_only ? function(str, identifier = false, regexp = false) {
          if (options.ecma >= 2015 && !options.safari10 && !regexp) {
            str = str.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function(ch) {
              var code = get_full_char_code(ch, 0).toString(16);
              return "\\u{" + code + "}";
            });
          }
          return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
            var code = ch.charCodeAt(0).toString(16);
            if (code.length <= 2 && !identifier) {
              while (code.length < 2)
                code = "0" + code;
              return "\\x" + code;
            } else {
              while (code.length < 4)
                code = "0" + code;
              return "\\u" + code;
            }
          });
        } : function(str) {
          return str.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g, function(match, lone) {
            if (lone) {
              return "\\u" + lone.charCodeAt(0).toString(16);
            }
            return match;
          });
        };
        function make_string(str, quote) {
          var dq = 0, sq = 0;
          str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g, function(s, i) {
            switch (s) {
              case '"':
                ++dq;
                return '"';
              case "'":
                ++sq;
                return "'";
              case "\\":
                return "\\\\";
              case "\n":
                return "\\n";
              case "\r":
                return "\\r";
              case "	":
                return "\\t";
              case "\b":
                return "\\b";
              case "\f":
                return "\\f";
              case "\v":
                return options.ie8 ? "\\x0B" : "\\v";
              case "\u2028":
                return "\\u2028";
              case "\u2029":
                return "\\u2029";
              case "\uFEFF":
                return "\\ufeff";
              case "\0":
                return /[0-9]/.test(get_full_char(str, i + 1)) ? "\\x00" : "\\0";
            }
            return s;
          });
          function quote_single() {
            return "'" + str.replace(/\x27/g, "\\'") + "'";
          }
          function quote_double() {
            return '"' + str.replace(/\x22/g, '\\"') + '"';
          }
          function quote_template() {
            return "`" + str.replace(/`/g, "\\`") + "`";
          }
          str = to_utf8(str);
          if (quote === "`")
            return quote_template();
          switch (options.quote_style) {
            case 1:
              return quote_single();
            case 2:
              return quote_double();
            case 3:
              return quote == "'" ? quote_single() : quote_double();
            default:
              return dq > sq ? quote_single() : quote_double();
          }
        }
        function encode_string(str, quote) {
          var ret = make_string(str, quote);
          if (options.inline_script) {
            ret = ret.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi, "<\\/$1$2");
            ret = ret.replace(/\x3c!--/g, "\\x3c!--");
            ret = ret.replace(/--\x3e/g, "--\\x3e");
          }
          return ret;
        }
        function make_name(name) {
          name = name.toString();
          name = to_utf8(name, true);
          return name;
        }
        function make_indent(back) {
          return " ".repeat(options.indent_start + indentation - back * options.indent_level);
        }
        var has_parens = false;
        var might_need_space = false;
        var might_need_semicolon = false;
        var might_add_newline = 0;
        var need_newline_indented = false;
        var need_space = false;
        var newline_insert = -1;
        var last2 = "";
        var mapping_token, mapping_name, mappings = options.source_map && [];
        var do_add_mapping = mappings ? function() {
          mappings.forEach(function(mapping) {
            try {
              let { name, token } = mapping;
              if (name !== false) {
                if (token.type == "name" || token.type === "privatename") {
                  name = token.value;
                } else if (name instanceof AST_Symbol) {
                  name = token.type === "string" ? token.value : name.name;
                }
              }
              options.source_map.add(mapping.token.file, mapping.line, mapping.col, mapping.token.line, mapping.token.col, is_basic_identifier_string(name) ? name : void 0);
            } catch (ex) {
            }
          });
          mappings = [];
        } : noop;
        var ensure_line_len = options.max_line_len ? function() {
          if (current_col > options.max_line_len) {
            if (might_add_newline) {
              OUTPUT.insertAt("\n", might_add_newline);
              const len_after_newline = OUTPUT.length() - might_add_newline - 1;
              if (mappings) {
                var delta = len_after_newline - current_col;
                mappings.forEach(function(mapping) {
                  mapping.line++;
                  mapping.col += delta;
                });
              }
              current_line++;
              current_pos++;
              current_col = len_after_newline;
            }
          }
          if (might_add_newline) {
            might_add_newline = 0;
            do_add_mapping();
          }
        } : noop;
        var requireSemicolonChars = makePredicate("( [ + * / - , . `");
        function print(str) {
          str = String(str);
          var ch = get_full_char(str, 0);
          if (need_newline_indented && ch) {
            need_newline_indented = false;
            if (ch !== "\n") {
              print("\n");
              indent();
            }
          }
          if (need_space && ch) {
            need_space = false;
            if (!/[\s;})]/.test(ch)) {
              space();
            }
          }
          newline_insert = -1;
          var prev = last2.charAt(last2.length - 1);
          if (might_need_semicolon) {
            might_need_semicolon = false;
            if (prev === ":" && ch === "}" || (!ch || !";}".includes(ch)) && prev !== ";") {
              if (options.semicolons || requireSemicolonChars.has(ch)) {
                OUTPUT.append(";");
                current_col++;
                current_pos++;
              } else {
                ensure_line_len();
                if (current_col > 0) {
                  OUTPUT.append("\n");
                  current_pos++;
                  current_line++;
                  current_col = 0;
                }
                if (/^\s+$/.test(str)) {
                  might_need_semicolon = true;
                }
              }
              if (!options.beautify)
                might_need_space = false;
            }
          }
          if (might_need_space) {
            if (is_identifier_char(prev) && (is_identifier_char(ch) || ch == "\\") || ch == "/" && ch == prev || (ch == "+" || ch == "-") && ch == last2) {
              OUTPUT.append(" ");
              current_col++;
              current_pos++;
            }
            might_need_space = false;
          }
          if (mapping_token) {
            mappings.push({
              token: mapping_token,
              name: mapping_name,
              line: current_line,
              col: current_col
            });
            mapping_token = false;
            if (!might_add_newline)
              do_add_mapping();
          }
          OUTPUT.append(str);
          has_parens = str[str.length - 1] == "(";
          current_pos += str.length;
          var a = str.split(/\r?\n/), n = a.length - 1;
          current_line += n;
          current_col += a[0].length;
          if (n > 0) {
            ensure_line_len();
            current_col = a[n].length;
          }
          last2 = str;
        }
        var star = function() {
          print("*");
        };
        var space = options.beautify ? function() {
          print(" ");
        } : function() {
          might_need_space = true;
        };
        var indent = options.beautify ? function(half) {
          if (options.beautify) {
            print(make_indent(half ? 0.5 : 0));
          }
        } : noop;
        var with_indent = options.beautify ? function(col, cont) {
          if (col === true)
            col = next_indent();
          var save_indentation = indentation;
          indentation = col;
          var ret = cont();
          indentation = save_indentation;
          return ret;
        } : function(col, cont) {
          return cont();
        };
        var newline = options.beautify ? function() {
          if (newline_insert < 0)
            return print("\n");
          if (OUTPUT.charAt(newline_insert) != "\n") {
            OUTPUT.insertAt("\n", newline_insert);
            current_pos++;
            current_line++;
          }
          newline_insert++;
        } : options.max_line_len ? function() {
          ensure_line_len();
          might_add_newline = OUTPUT.length();
        } : noop;
        var semicolon = options.beautify ? function() {
          print(";");
        } : function() {
          might_need_semicolon = true;
        };
        function force_semicolon() {
          might_need_semicolon = false;
          print(";");
        }
        function next_indent() {
          return indentation + options.indent_level;
        }
        function with_block(cont) {
          var ret;
          print("{");
          newline();
          with_indent(next_indent(), function() {
            ret = cont();
          });
          indent();
          print("}");
          return ret;
        }
        function with_parens(cont) {
          print("(");
          var ret = cont();
          print(")");
          return ret;
        }
        function with_square(cont) {
          print("[");
          var ret = cont();
          print("]");
          return ret;
        }
        function comma() {
          print(",");
          space();
        }
        function colon() {
          print(":");
          space();
        }
        var add_mapping = mappings ? function(token, name) {
          mapping_token = token;
          mapping_name = name;
        } : noop;
        function get() {
          if (might_add_newline) {
            ensure_line_len();
          }
          return OUTPUT.toString();
        }
        function filter_comment(comment2) {
          if (!options.preserve_annotations) {
            comment2 = comment2.replace(r_annotation, " ");
          }
          if (/^\s*$/.test(comment2)) {
            return "";
          }
          return comment2.replace(/(<\s*\/\s*)(script)/i, "<\\/$2");
        }
        function prepend_comments(node) {
          var self2 = this;
          var start = node.start;
          if (!start)
            return;
          var printed_comments2 = self2.printed_comments;
          const keyword_with_value = node instanceof AST_Exit && node.value || (node instanceof AST_Await || node instanceof AST_Yield) && node.expression;
          if (start.comments_before && printed_comments2.has(start.comments_before)) {
            if (keyword_with_value) {
              start.comments_before = [];
            } else {
              return;
            }
          }
          var comments = start.comments_before;
          if (!comments) {
            comments = start.comments_before = [];
          }
          printed_comments2.add(comments);
          if (keyword_with_value) {
            var tw = new TreeWalker(function(node2) {
              var parent = tw.parent();
              if (parent instanceof AST_Exit || parent instanceof AST_Await || parent instanceof AST_Yield || parent instanceof AST_Binary && parent.left === node2 || parent.TYPE == "Call" && parent.expression === node2 || parent instanceof AST_Conditional && parent.condition === node2 || parent instanceof AST_Dot && parent.expression === node2 || parent instanceof AST_Sequence && parent.expressions[0] === node2 || parent instanceof AST_Sub && parent.expression === node2 || parent instanceof AST_UnaryPostfix) {
                if (!node2.start)
                  return;
                var text = node2.start.comments_before;
                if (text && !printed_comments2.has(text)) {
                  printed_comments2.add(text);
                  comments = comments.concat(text);
                }
              } else {
                return true;
              }
            });
            tw.push(node);
            keyword_with_value.walk(tw);
          }
          if (current_pos == 0) {
            if (comments.length > 0 && options.shebang && comments[0].type === "comment5" && !printed_comments2.has(comments[0])) {
              print("#!" + comments.shift().value + "\n");
              indent();
            }
            var preamble = options.preamble;
            if (preamble) {
              print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n"));
            }
          }
          comments = comments.filter(comment_filter, node).filter((c) => !printed_comments2.has(c));
          if (comments.length == 0)
            return;
          var last_nlb = OUTPUT.hasNLB();
          comments.forEach(function(c, i) {
            printed_comments2.add(c);
            if (!last_nlb) {
              if (c.nlb) {
                print("\n");
                indent();
                last_nlb = true;
              } else if (i > 0) {
                space();
              }
            }
            if (/comment[134]/.test(c.type)) {
              var value = filter_comment(c.value);
              if (value) {
                print("//" + value + "\n");
                indent();
              }
              last_nlb = true;
            } else if (c.type == "comment2") {
              var value = filter_comment(c.value);
              if (value) {
                print("/*" + value + "*/");
              }
              last_nlb = false;
            }
          });
          if (!last_nlb) {
            if (start.nlb) {
              print("\n");
              indent();
            } else {
              space();
            }
          }
        }
        function append_comments(node, tail) {
          var self2 = this;
          var token = node.end;
          if (!token)
            return;
          var printed_comments2 = self2.printed_comments;
          var comments = token[tail ? "comments_before" : "comments_after"];
          if (!comments || printed_comments2.has(comments))
            return;
          if (!(node instanceof AST_Statement || comments.every((c) => !/comment[134]/.test(c.type))))
            return;
          printed_comments2.add(comments);
          var insert = OUTPUT.length();
          comments.filter(comment_filter, node).forEach(function(c, i) {
            if (printed_comments2.has(c))
              return;
            printed_comments2.add(c);
            need_space = false;
            if (need_newline_indented) {
              print("\n");
              indent();
              need_newline_indented = false;
            } else if (c.nlb && (i > 0 || !OUTPUT.hasNLB())) {
              print("\n");
              indent();
            } else if (i > 0 || !tail) {
              space();
            }
            if (/comment[134]/.test(c.type)) {
              const value = filter_comment(c.value);
              if (value) {
                print("//" + value);
              }
              need_newline_indented = true;
            } else if (c.type == "comment2") {
              const value = filter_comment(c.value);
              if (value) {
                print("/*" + value + "*/");
              }
              need_space = true;
            }
          });
          if (OUTPUT.length() > insert)
            newline_insert = insert;
        }
        const gc_scope = options["_destroy_ast"] ? function gc_scope2(scope) {
          scope.body.length = 0;
          scope.argnames.length = 0;
        } : noop;
        var stack = [];
        return {
          get,
          toString: get,
          indent,
          in_directive: false,
          use_asm: null,
          active_scope: null,
          indentation: function() {
            return indentation;
          },
          current_width: function() {
            return current_col - indentation;
          },
          should_break: function() {
            return options.width && this.current_width() >= options.width;
          },
          has_parens: function() {
            return has_parens;
          },
          newline,
          print,
          star,
          space,
          comma,
          colon,
          last: function() {
            return last2;
          },
          semicolon,
          force_semicolon,
          to_utf8,
          print_name: function(name) {
            print(make_name(name));
          },
          print_string: function(str, quote, escape_directive) {
            var encoded = encode_string(str, quote);
            if (escape_directive === true && !encoded.includes("\\")) {
              if (!OUTPUT.expectDirective()) {
                force_semicolon();
              }
              force_semicolon();
            }
            print(encoded);
          },
          print_template_string_chars: function(str) {
            var encoded = encode_string(str, "`").replace(/\${/g, "\\${");
            return print(encoded.substr(1, encoded.length - 2));
          },
          encode_string,
          next_indent,
          with_indent,
          with_block,
          with_parens,
          with_square,
          add_mapping,
          option: function(opt) {
            return options[opt];
          },
          gc_scope,
          printed_comments,
          prepend_comments: readonly ? noop : prepend_comments,
          append_comments: readonly || comment_filter === return_false ? noop : append_comments,
          line: function() {
            return current_line;
          },
          col: function() {
            return current_col;
          },
          pos: function() {
            return current_pos;
          },
          push_node: function(node) {
            stack.push(node);
          },
          pop_node: function() {
            return stack.pop();
          },
          parent: function(n) {
            return stack[stack.length - 2 - (n || 0)];
          }
        };
      }
      (function() {
        function DEFPRINT(nodetype, generator) {
          nodetype.DEFMETHOD("_codegen", generator);
        }
        AST_Node.DEFMETHOD("print", function(output, force_parens) {
          var self2 = this, generator = self2._codegen;
          if (self2 instanceof AST_Scope) {
            output.active_scope = self2;
          } else if (!output.use_asm && self2 instanceof AST_Directive && self2.value == "use asm") {
            output.use_asm = output.active_scope;
          }
          function doit() {
            output.prepend_comments(self2);
            self2.add_source_map(output);
            generator(self2, output);
            output.append_comments(self2);
          }
          output.push_node(self2);
          if (force_parens || self2.needs_parens(output)) {
            output.with_parens(doit);
          } else {
            doit();
          }
          output.pop_node();
          if (self2 === output.use_asm) {
            output.use_asm = null;
          }
        });
        AST_Node.DEFMETHOD("_print", AST_Node.prototype.print);
        AST_Node.DEFMETHOD("print_to_string", function(options) {
          var output = OutputStream(options);
          this.print(output);
          return output.get();
        });
        function PARENS(nodetype, func) {
          if (Array.isArray(nodetype)) {
            nodetype.forEach(function(nodetype2) {
              PARENS(nodetype2, func);
            });
          } else {
            nodetype.DEFMETHOD("needs_parens", func);
          }
        }
        PARENS(AST_Node, return_false);
        PARENS(AST_Function, function(output) {
          if (!output.has_parens() && first_in_statement(output)) {
            return true;
          }
          if (output.option("webkit")) {
            var p = output.parent();
            if (p instanceof AST_PropAccess && p.expression === this) {
              return true;
            }
          }
          if (output.option("wrap_iife")) {
            var p = output.parent();
            if (p instanceof AST_Call && p.expression === this) {
              return true;
            }
          }
          if (output.option("wrap_func_args")) {
            var p = output.parent();
            if (p instanceof AST_Call && p.args.includes(this)) {
              return true;
            }
          }
          return false;
        });
        PARENS(AST_Arrow, function(output) {
          var p = output.parent();
          if (output.option("wrap_func_args") && p instanceof AST_Call && p.args.includes(this)) {
            return true;
          }
          return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Conditional && p.condition === this;
        });
        PARENS(AST_Object, function(output) {
          return !output.has_parens() && first_in_statement(output);
        });
        PARENS(AST_ClassExpression, first_in_statement);
        PARENS(AST_Unary, function(output) {
          var p = output.parent();
          return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Call && p.expression === this || p instanceof AST_Binary && p.operator === "**" && this instanceof AST_UnaryPrefix && p.left === this && this.operator !== "++" && this.operator !== "--";
        });
        PARENS(AST_Await, function(output) {
          var p = output.parent();
          return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Call && p.expression === this || p instanceof AST_Binary && p.operator === "**" && p.left === this || output.option("safari10") && p instanceof AST_UnaryPrefix;
        });
        PARENS(AST_Sequence, function(output) {
          var p = output.parent();
          return p instanceof AST_Call || p instanceof AST_Unary || p instanceof AST_Binary || p instanceof AST_VarDef || p instanceof AST_PropAccess || p instanceof AST_Array || p instanceof AST_ObjectProperty || p instanceof AST_Conditional || p instanceof AST_Arrow || p instanceof AST_DefaultAssign || p instanceof AST_Expansion || p instanceof AST_ForOf && this === p.object || p instanceof AST_Yield || p instanceof AST_Export;
        });
        PARENS(AST_Binary, function(output) {
          var p = output.parent();
          if (p instanceof AST_Call && p.expression === this)
            return true;
          if (p instanceof AST_Unary)
            return true;
          if (p instanceof AST_PropAccess && p.expression === this)
            return true;
          if (p instanceof AST_Binary) {
            const po = p.operator;
            const so = this.operator;
            if (so === "??" && (po === "||" || po === "&&")) {
              return true;
            }
            if (po === "??" && (so === "||" || so === "&&")) {
              return true;
            }
            const pp = PRECEDENCE[po];
            const sp = PRECEDENCE[so];
            if (pp > sp || pp == sp && (this === p.right || po == "**")) {
              return true;
            }
          }
        });
        PARENS(AST_Yield, function(output) {
          var p = output.parent();
          if (p instanceof AST_Binary && p.operator !== "=")
            return true;
          if (p instanceof AST_Call && p.expression === this)
            return true;
          if (p instanceof AST_Conditional && p.condition === this)
            return true;
          if (p instanceof AST_Unary)
            return true;
          if (p instanceof AST_PropAccess && p.expression === this)
            return true;
        });
        PARENS(AST_Chain, function(output) {
          var p = output.parent();
          if (!(p instanceof AST_Call || p instanceof AST_PropAccess))
            return false;
          return p.expression === this;
        });
        PARENS(AST_PropAccess, function(output) {
          var p = output.parent();
          if (p instanceof AST_New && p.expression === this) {
            return walk(this, (node) => {
              if (node instanceof AST_Scope)
                return true;
              if (node instanceof AST_Call) {
                return walk_abort;
              }
            });
          }
        });
        PARENS(AST_Call, function(output) {
          var p = output.parent(), p1;
          if (p instanceof AST_New && p.expression === this || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)
            return true;
          return this.expression instanceof AST_Function && p instanceof AST_PropAccess && p.expression === this && (p1 = output.parent(1)) instanceof AST_Assign && p1.left === p;
        });
        PARENS(AST_New, function(output) {
          var p = output.parent();
          if (this.args.length === 0 && (p instanceof AST_PropAccess || p instanceof AST_Call && p.expression === this || p instanceof AST_PrefixedTemplateString && p.prefix === this))
            return true;
        });
        PARENS(AST_Number, function(output) {
          var p = output.parent();
          if (p instanceof AST_PropAccess && p.expression === this) {
            var value = this.getValue();
            if (value < 0 || /^0/.test(make_num(value))) {
              return true;
            }
          }
        });
        PARENS(AST_BigInt, function(output) {
          var p = output.parent();
          if (p instanceof AST_PropAccess && p.expression === this) {
            var value = this.getValue();
            if (value.startsWith("-")) {
              return true;
            }
          }
        });
        PARENS([AST_Assign, AST_Conditional], function(output) {
          var p = output.parent();
          if (p instanceof AST_Unary)
            return true;
          if (p instanceof AST_Binary && !(p instanceof AST_Assign))
            return true;
          if (p instanceof AST_Call && p.expression === this)
            return true;
          if (p instanceof AST_Conditional && p.condition === this)
            return true;
          if (p instanceof AST_PropAccess && p.expression === this)
            return true;
          if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)
            return true;
        });
        DEFPRINT(AST_Directive, function(self2, output) {
          output.print_string(self2.value, self2.quote);
          output.semicolon();
        });
        DEFPRINT(AST_Expansion, function(self2, output) {
          output.print("...");
          self2.expression.print(output);
        });
        DEFPRINT(AST_Destructuring, function(self2, output) {
          output.print(self2.is_array ? "[" : "{");
          var len = self2.names.length;
          self2.names.forEach(function(name, i) {
            if (i > 0)
              output.comma();
            name.print(output);
            if (i == len - 1 && name instanceof AST_Hole)
              output.comma();
          });
          output.print(self2.is_array ? "]" : "}");
        });
        DEFPRINT(AST_Debugger, function(self2, output) {
          output.print("debugger");
          output.semicolon();
        });
        function display_body(body, is_toplevel, output, allow_directives) {
          var last2 = body.length - 1;
          output.in_directive = allow_directives;
          body.forEach(function(stmt, i) {
            if (output.in_directive === true && !(stmt instanceof AST_Directive || stmt instanceof AST_EmptyStatement || stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)) {
              output.in_directive = false;
            }
            if (!(stmt instanceof AST_EmptyStatement)) {
              output.indent();
              stmt.print(output);
              if (!(i == last2 && is_toplevel)) {
                output.newline();
                if (is_toplevel)
                  output.newline();
              }
            }
            if (output.in_directive === true && stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String) {
              output.in_directive = false;
            }
          });
          output.in_directive = false;
        }
        AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output) {
          print_maybe_braced_body(this.body, output);
        });
        DEFPRINT(AST_Statement, function(self2, output) {
          self2.body.print(output);
          output.semicolon();
        });
        DEFPRINT(AST_Toplevel, function(self2, output) {
          display_body(self2.body, true, output, true);
          output.print("");
        });
        DEFPRINT(AST_LabeledStatement, function(self2, output) {
          self2.label.print(output);
          output.colon();
          self2.body.print(output);
        });
        DEFPRINT(AST_SimpleStatement, function(self2, output) {
          self2.body.print(output);
          output.semicolon();
        });
        function print_braced_empty(self2, output) {
          output.print("{");
          output.with_indent(output.next_indent(), function() {
            output.append_comments(self2, true);
          });
          output.add_mapping(self2.end);
          output.print("}");
        }
        function print_braced(self2, output, allow_directives) {
          if (self2.body.length > 0) {
            output.with_block(function() {
              display_body(self2.body, false, output, allow_directives);
              output.add_mapping(self2.end);
            });
          } else
            print_braced_empty(self2, output);
        }
        DEFPRINT(AST_BlockStatement, function(self2, output) {
          print_braced(self2, output);
        });
        DEFPRINT(AST_EmptyStatement, function(self2, output) {
          output.semicolon();
        });
        DEFPRINT(AST_Do, function(self2, output) {
          output.print("do");
          output.space();
          make_block(self2.body, output);
          output.space();
          output.print("while");
          output.space();
          output.with_parens(function() {
            self2.condition.print(output);
          });
          output.semicolon();
        });
        DEFPRINT(AST_While, function(self2, output) {
          output.print("while");
          output.space();
          output.with_parens(function() {
            self2.condition.print(output);
          });
          output.space();
          self2._do_print_body(output);
        });
        DEFPRINT(AST_For, function(self2, output) {
          output.print("for");
          output.space();
          output.with_parens(function() {
            if (self2.init) {
              if (self2.init instanceof AST_Definitions) {
                self2.init.print(output);
              } else {
                parenthesize_for_noin(self2.init, output, true);
              }
              output.print(";");
              output.space();
            } else {
              output.print(";");
            }
            if (self2.condition) {
              self2.condition.print(output);
              output.print(";");
              output.space();
            } else {
              output.print(";");
            }
            if (self2.step) {
              self2.step.print(output);
            }
          });
          output.space();
          self2._do_print_body(output);
        });
        DEFPRINT(AST_ForIn, function(self2, output) {
          output.print("for");
          if (self2.await) {
            output.space();
            output.print("await");
          }
          output.space();
          output.with_parens(function() {
            self2.init.print(output);
            output.space();
            output.print(self2 instanceof AST_ForOf ? "of" : "in");
            output.space();
            self2.object.print(output);
          });
          output.space();
          self2._do_print_body(output);
        });
        DEFPRINT(AST_With, function(self2, output) {
          output.print("with");
          output.space();
          output.with_parens(function() {
            self2.expression.print(output);
          });
          output.space();
          self2._do_print_body(output);
        });
        AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword) {
          var self2 = this;
          if (!nokeyword) {
            if (self2.async) {
              output.print("async");
              output.space();
            }
            output.print("function");
            if (self2.is_generator) {
              output.star();
            }
            if (self2.name) {
              output.space();
            }
          }
          if (self2.name instanceof AST_Symbol) {
            self2.name.print(output);
          } else if (nokeyword && self2.name instanceof AST_Node) {
            output.with_square(function() {
              self2.name.print(output);
            });
          }
          output.with_parens(function() {
            self2.argnames.forEach(function(arg, i) {
              if (i)
                output.comma();
              arg.print(output);
            });
          });
          output.space();
          print_braced(self2, output, true);
        });
        DEFPRINT(AST_Lambda, function(self2, output) {
          self2._do_print(output);
          output.gc_scope(self2);
        });
        DEFPRINT(AST_PrefixedTemplateString, function(self2, output) {
          var tag = self2.prefix;
          var parenthesize_tag = tag instanceof AST_Lambda || tag instanceof AST_Binary || tag instanceof AST_Conditional || tag instanceof AST_Sequence || tag instanceof AST_Unary || tag instanceof AST_Dot && tag.expression instanceof AST_Object;
          if (parenthesize_tag)
            output.print("(");
          self2.prefix.print(output);
          if (parenthesize_tag)
            output.print(")");
          self2.template_string.print(output);
        });
        DEFPRINT(AST_TemplateString, function(self2, output) {
          var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;
          output.print("`");
          for (var i = 0; i < self2.segments.length; i++) {
            if (!(self2.segments[i] instanceof AST_TemplateSegment)) {
              output.print("${");
              self2.segments[i].print(output);
              output.print("}");
            } else if (is_tagged) {
              output.print(self2.segments[i].raw);
            } else {
              output.print_template_string_chars(self2.segments[i].value);
            }
          }
          output.print("`");
        });
        DEFPRINT(AST_TemplateSegment, function(self2, output) {
          output.print_template_string_chars(self2.value);
        });
        AST_Arrow.DEFMETHOD("_do_print", function(output) {
          var self2 = this;
          var parent = output.parent();
          var needs_parens = parent instanceof AST_Binary && !(parent instanceof AST_Assign) || parent instanceof AST_Unary || parent instanceof AST_Call && self2 === parent.expression;
          if (needs_parens) {
            output.print("(");
          }
          if (self2.async) {
            output.print("async");
            output.space();
          }
          if (self2.argnames.length === 1 && self2.argnames[0] instanceof AST_Symbol) {
            self2.argnames[0].print(output);
          } else {
            output.with_parens(function() {
              self2.argnames.forEach(function(arg, i) {
                if (i)
                  output.comma();
                arg.print(output);
              });
            });
          }
          output.space();
          output.print("=>");
          output.space();
          const first_statement = self2.body[0];
          if (self2.body.length === 1 && first_statement instanceof AST_Return) {
            const returned = first_statement.value;
            if (!returned) {
              output.print("{}");
            } else if (left_is_object(returned)) {
              output.print("(");
              returned.print(output);
              output.print(")");
            } else {
              returned.print(output);
            }
          } else {
            print_braced(self2, output);
          }
          if (needs_parens) {
            output.print(")");
          }
          output.gc_scope(self2);
        });
        AST_Exit.DEFMETHOD("_do_print", function(output, kind) {
          output.print(kind);
          if (this.value) {
            output.space();
            const comments = this.value.start.comments_before;
            if (comments && comments.length && !output.printed_comments.has(comments)) {
              output.print("(");
              this.value.print(output);
              output.print(")");
            } else {
              this.value.print(output);
            }
          }
          output.semicolon();
        });
        DEFPRINT(AST_Return, function(self2, output) {
          self2._do_print(output, "return");
        });
        DEFPRINT(AST_Throw, function(self2, output) {
          self2._do_print(output, "throw");
        });
        DEFPRINT(AST_Yield, function(self2, output) {
          var star = self2.is_star ? "*" : "";
          output.print("yield" + star);
          if (self2.expression) {
            output.space();
            self2.expression.print(output);
          }
        });
        DEFPRINT(AST_Await, function(self2, output) {
          output.print("await");
          output.space();
          var e = self2.expression;
          var parens = !(e instanceof AST_Call || e instanceof AST_SymbolRef || e instanceof AST_PropAccess || e instanceof AST_Unary || e instanceof AST_Constant || e instanceof AST_Await || e instanceof AST_Object);
          if (parens)
            output.print("(");
          self2.expression.print(output);
          if (parens)
            output.print(")");
        });
        AST_LoopControl.DEFMETHOD("_do_print", function(output, kind) {
          output.print(kind);
          if (this.label) {
            output.space();
            this.label.print(output);
          }
          output.semicolon();
        });
        DEFPRINT(AST_Break, function(self2, output) {
          self2._do_print(output, "break");
        });
        DEFPRINT(AST_Continue, function(self2, output) {
          self2._do_print(output, "continue");
        });
        function make_then(self2, output) {
          var b = self2.body;
          if (output.option("braces") || output.option("ie8") && b instanceof AST_Do)
            return make_block(b, output);
          if (!b)
            return output.force_semicolon();
          while (true) {
            if (b instanceof AST_If) {
              if (!b.alternative) {
                make_block(self2.body, output);
                return;
              }
              b = b.alternative;
            } else if (b instanceof AST_StatementWithBody) {
              b = b.body;
            } else
              break;
          }
          print_maybe_braced_body(self2.body, output);
        }
        DEFPRINT(AST_If, function(self2, output) {
          output.print("if");
          output.space();
          output.with_parens(function() {
            self2.condition.print(output);
          });
          output.space();
          if (self2.alternative) {
            make_then(self2, output);
            output.space();
            output.print("else");
            output.space();
            if (self2.alternative instanceof AST_If)
              self2.alternative.print(output);
            else
              print_maybe_braced_body(self2.alternative, output);
          } else {
            self2._do_print_body(output);
          }
        });
        DEFPRINT(AST_Switch, function(self2, output) {
          output.print("switch");
          output.space();
          output.with_parens(function() {
            self2.expression.print(output);
          });
          output.space();
          var last2 = self2.body.length - 1;
          if (last2 < 0)
            print_braced_empty(self2, output);
          else
            output.with_block(function() {
              self2.body.forEach(function(branch, i) {
                output.indent(true);
                branch.print(output);
                if (i < last2 && branch.body.length > 0)
                  output.newline();
              });
            });
        });
        AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output) {
          output.newline();
          this.body.forEach(function(stmt) {
            output.indent();
            stmt.print(output);
            output.newline();
          });
        });
        DEFPRINT(AST_Default, function(self2, output) {
          output.print("default:");
          self2._do_print_body(output);
        });
        DEFPRINT(AST_Case, function(self2, output) {
          output.print("case");
          output.space();
          self2.expression.print(output);
          output.print(":");
          self2._do_print_body(output);
        });
        DEFPRINT(AST_Try, function(self2, output) {
          output.print("try");
          output.space();
          self2.body.print(output);
          if (self2.bcatch) {
            output.space();
            self2.bcatch.print(output);
          }
          if (self2.bfinally) {
            output.space();
            self2.bfinally.print(output);
          }
        });
        DEFPRINT(AST_TryBlock, function(self2, output) {
          print_braced(self2, output);
        });
        DEFPRINT(AST_Catch, function(self2, output) {
          output.print("catch");
          if (self2.argname) {
            output.space();
            output.with_parens(function() {
              self2.argname.print(output);
            });
          }
          output.space();
          print_braced(self2, output);
        });
        DEFPRINT(AST_Finally, function(self2, output) {
          output.print("finally");
          output.space();
          print_braced(self2, output);
        });
        AST_Definitions.DEFMETHOD("_do_print", function(output, kind) {
          output.print(kind);
          output.space();
          this.definitions.forEach(function(def, i) {
            if (i)
              output.comma();
            def.print(output);
          });
          var p = output.parent();
          var in_for = p instanceof AST_For || p instanceof AST_ForIn;
          var output_semicolon = !in_for || p && p.init !== this;
          if (output_semicolon)
            output.semicolon();
        });
        DEFPRINT(AST_Let, function(self2, output) {
          self2._do_print(output, "let");
        });
        DEFPRINT(AST_Var, function(self2, output) {
          self2._do_print(output, "var");
        });
        DEFPRINT(AST_Const, function(self2, output) {
          self2._do_print(output, "const");
        });
        DEFPRINT(AST_Import, function(self2, output) {
          output.print("import");
          output.space();
          if (self2.imported_name) {
            self2.imported_name.print(output);
          }
          if (self2.imported_name && self2.imported_names) {
            output.print(",");
            output.space();
          }
          if (self2.imported_names) {
            if (self2.imported_names.length === 1 && self2.imported_names[0].foreign_name.name === "*" && !self2.imported_names[0].foreign_name.quote) {
              self2.imported_names[0].print(output);
            } else {
              output.print("{");
              self2.imported_names.forEach(function(name_import, i) {
                output.space();
                name_import.print(output);
                if (i < self2.imported_names.length - 1) {
                  output.print(",");
                }
              });
              output.space();
              output.print("}");
            }
          }
          if (self2.imported_name || self2.imported_names) {
            output.space();
            output.print("from");
            output.space();
          }
          self2.module_name.print(output);
          if (self2.assert_clause) {
            output.print("assert");
            self2.assert_clause.print(output);
          }
          output.semicolon();
        });
        DEFPRINT(AST_ImportMeta, function(self2, output) {
          output.print("import.meta");
        });
        DEFPRINT(AST_NameMapping, function(self2, output) {
          var is_import = output.parent() instanceof AST_Import;
          var definition = self2.name.definition();
          var foreign_name = self2.foreign_name;
          var names_are_different = (definition && definition.mangled_name || self2.name.name) !== foreign_name.name;
          if (!names_are_different && foreign_name.name === "*" && foreign_name.quote != self2.name.quote) {
            names_are_different = true;
          }
          var foreign_name_is_name = foreign_name.quote == null;
          if (names_are_different) {
            if (is_import) {
              if (foreign_name_is_name) {
                output.print(foreign_name.name);
              } else {
                output.print_string(foreign_name.name, foreign_name.quote);
              }
            } else {
              if (self2.name.quote == null) {
                self2.name.print(output);
              } else {
                output.print_string(self2.name.name, self2.name.quote);
              }
            }
            output.space();
            output.print("as");
            output.space();
            if (is_import) {
              self2.name.print(output);
            } else {
              if (foreign_name_is_name) {
                output.print(foreign_name.name);
              } else {
                output.print_string(foreign_name.name, foreign_name.quote);
              }
            }
          } else {
            if (self2.name.quote == null) {
              self2.name.print(output);
            } else {
              output.print_string(self2.name.name, self2.name.quote);
            }
          }
        });
        DEFPRINT(AST_Export, function(self2, output) {
          output.print("export");
          output.space();
          if (self2.is_default) {
            output.print("default");
            output.space();
          }
          if (self2.exported_names) {
            if (self2.exported_names.length === 1 && self2.exported_names[0].name.name === "*" && !self2.exported_names[0].name.quote) {
              self2.exported_names[0].print(output);
            } else {
              output.print("{");
              self2.exported_names.forEach(function(name_export, i) {
                output.space();
                name_export.print(output);
                if (i < self2.exported_names.length - 1) {
                  output.print(",");
                }
              });
              output.space();
              output.print("}");
            }
          } else if (self2.exported_value) {
            self2.exported_value.print(output);
          } else if (self2.exported_definition) {
            self2.exported_definition.print(output);
            if (self2.exported_definition instanceof AST_Definitions)
              return;
          }
          if (self2.module_name) {
            output.space();
            output.print("from");
            output.space();
            self2.module_name.print(output);
          }
          if (self2.assert_clause) {
            output.print("assert");
            self2.assert_clause.print(output);
          }
          if (self2.exported_value && !(self2.exported_value instanceof AST_Defun || self2.exported_value instanceof AST_Function || self2.exported_value instanceof AST_Class) || self2.module_name || self2.exported_names) {
            output.semicolon();
          }
        });
        function parenthesize_for_noin(node, output, noin) {
          var parens = false;
          if (noin) {
            parens = walk(node, (node2) => {
              if (node2 instanceof AST_Scope && !(node2 instanceof AST_Arrow)) {
                return true;
              }
              if (node2 instanceof AST_Binary && node2.operator == "in" || node2 instanceof AST_PrivateIn) {
                return walk_abort;
              }
            });
          }
          node.print(output, parens);
        }
        DEFPRINT(AST_VarDef, function(self2, output) {
          self2.name.print(output);
          if (self2.value) {
            output.space();
            output.print("=");
            output.space();
            var p = output.parent(1);
            var noin = p instanceof AST_For || p instanceof AST_ForIn;
            parenthesize_for_noin(self2.value, output, noin);
          }
        });
        DEFPRINT(AST_Call, function(self2, output) {
          self2.expression.print(output);
          if (self2 instanceof AST_New && self2.args.length === 0)
            return;
          if (self2.expression instanceof AST_Call || self2.expression instanceof AST_Lambda) {
            output.add_mapping(self2.start);
          }
          if (self2.optional)
            output.print("?.");
          output.with_parens(function() {
            self2.args.forEach(function(expr, i) {
              if (i)
                output.comma();
              expr.print(output);
            });
          });
        });
        DEFPRINT(AST_New, function(self2, output) {
          output.print("new");
          output.space();
          AST_Call.prototype._codegen(self2, output);
        });
        AST_Sequence.DEFMETHOD("_do_print", function(output) {
          this.expressions.forEach(function(node, index) {
            if (index > 0) {
              output.comma();
              if (output.should_break()) {
                output.newline();
                output.indent();
              }
            }
            node.print(output);
          });
        });
        DEFPRINT(AST_Sequence, function(self2, output) {
          self2._do_print(output);
        });
        DEFPRINT(AST_Dot, function(self2, output) {
          var expr = self2.expression;
          expr.print(output);
          var prop = self2.property;
          var print_computed = ALL_RESERVED_WORDS.has(prop) ? output.option("ie8") : !is_identifier_string(prop, output.option("ecma") >= 2015 && !output.option("safari10"));
          if (self2.optional)
            output.print("?.");
          if (print_computed) {
            output.print("[");
            output.add_mapping(self2.end);
            output.print_string(prop);
            output.print("]");
          } else {
            if (expr instanceof AST_Number && expr.getValue() >= 0) {
              if (!/[xa-f.)]/i.test(output.last())) {
                output.print(".");
              }
            }
            if (!self2.optional)
              output.print(".");
            output.add_mapping(self2.end);
            output.print_name(prop);
          }
        });
        DEFPRINT(AST_DotHash, function(self2, output) {
          var expr = self2.expression;
          expr.print(output);
          var prop = self2.property;
          if (self2.optional)
            output.print("?");
          output.print(".#");
          output.add_mapping(self2.end);
          output.print_name(prop);
        });
        DEFPRINT(AST_Sub, function(self2, output) {
          self2.expression.print(output);
          if (self2.optional)
            output.print("?.");
          output.print("[");
          self2.property.print(output);
          output.print("]");
        });
        DEFPRINT(AST_Chain, function(self2, output) {
          self2.expression.print(output);
        });
        DEFPRINT(AST_UnaryPrefix, function(self2, output) {
          var op = self2.operator;
          if (op === "--" && output.last().endsWith("!")) {
            output.print(" ");
          }
          output.print(op);
          if (/^[a-z]/i.test(op) || /[+-]$/.test(op) && self2.expression instanceof AST_UnaryPrefix && /^[+-]/.test(self2.expression.operator)) {
            output.space();
          }
          self2.expression.print(output);
        });
        DEFPRINT(AST_UnaryPostfix, function(self2, output) {
          self2.expression.print(output);
          output.print(self2.operator);
        });
        DEFPRINT(AST_Binary, function(self2, output) {
          var op = self2.operator;
          self2.left.print(output);
          if (op[0] == ">" && output.last().endsWith("--")) {
            output.print(" ");
          } else {
            output.space();
          }
          output.print(op);
          output.space();
          self2.right.print(output);
        });
        DEFPRINT(AST_Conditional, function(self2, output) {
          self2.condition.print(output);
          output.space();
          output.print("?");
          output.space();
          self2.consequent.print(output);
          output.space();
          output.colon();
          self2.alternative.print(output);
        });
        DEFPRINT(AST_Array, function(self2, output) {
          output.with_square(function() {
            var a = self2.elements, len = a.length;
            if (len > 0)
              output.space();
            a.forEach(function(exp, i) {
              if (i)
                output.comma();
              exp.print(output);
              if (i === len - 1 && exp instanceof AST_Hole)
                output.comma();
            });
            if (len > 0)
              output.space();
          });
        });
        DEFPRINT(AST_Object, function(self2, output) {
          if (self2.properties.length > 0)
            output.with_block(function() {
              self2.properties.forEach(function(prop, i) {
                if (i) {
                  output.print(",");
                  output.newline();
                }
                output.indent();
                prop.print(output);
              });
              output.newline();
            });
          else
            print_braced_empty(self2, output);
        });
        DEFPRINT(AST_Class, function(self2, output) {
          output.print("class");
          output.space();
          if (self2.name) {
            self2.name.print(output);
            output.space();
          }
          if (self2.extends) {
            var parens = !(self2.extends instanceof AST_SymbolRef) && !(self2.extends instanceof AST_PropAccess) && !(self2.extends instanceof AST_ClassExpression) && !(self2.extends instanceof AST_Function);
            output.print("extends");
            if (parens) {
              output.print("(");
            } else {
              output.space();
            }
            self2.extends.print(output);
            if (parens) {
              output.print(")");
            } else {
              output.space();
            }
          }
          if (self2.properties.length > 0)
            output.with_block(function() {
              self2.properties.forEach(function(prop, i) {
                if (i) {
                  output.newline();
                }
                output.indent();
                prop.print(output);
              });
              output.newline();
            });
          else
            output.print("{}");
        });
        DEFPRINT(AST_NewTarget, function(self2, output) {
          output.print("new.target");
        });
        function print_property_name(key, quote, output) {
          if (output.option("quote_keys")) {
            output.print_string(key);
            return false;
          }
          if ("" + +key == key && key >= 0) {
            if (output.option("keep_numbers")) {
              output.print(key);
              return false;
            }
            output.print(make_num(key));
            return false;
          }
          var print_string = ALL_RESERVED_WORDS.has(key) ? output.option("ie8") : output.option("ecma") < 2015 || output.option("safari10") ? !is_basic_identifier_string(key) : !is_identifier_string(key, true);
          if (print_string || quote && output.option("keep_quoted_props")) {
            output.print_string(key, quote);
            return false;
          }
          output.print_name(key);
          return true;
        }
        DEFPRINT(AST_ObjectKeyVal, function(self2, output) {
          function get_name(self3) {
            var def = self3.definition();
            return def ? def.mangled_name || def.name : self3.name;
          }
          const try_shorthand = output.option("shorthand") && !(self2.key instanceof AST_Node);
          if (try_shorthand && self2.value instanceof AST_Symbol && get_name(self2.value) === self2.key && !ALL_RESERVED_WORDS.has(self2.key)) {
            const was_shorthand = print_property_name(self2.key, self2.quote, output);
            if (!was_shorthand) {
              output.colon();
              self2.value.print(output);
            }
          } else if (try_shorthand && self2.value instanceof AST_DefaultAssign && self2.value.left instanceof AST_Symbol && get_name(self2.value.left) === self2.key) {
            const was_shorthand = print_property_name(self2.key, self2.quote, output);
            if (!was_shorthand) {
              output.colon();
              self2.value.left.print(output);
            }
            output.space();
            output.print("=");
            output.space();
            self2.value.right.print(output);
          } else {
            if (!(self2.key instanceof AST_Node)) {
              print_property_name(self2.key, self2.quote, output);
            } else {
              output.with_square(function() {
                self2.key.print(output);
              });
            }
            output.colon();
            self2.value.print(output);
          }
        });
        DEFPRINT(AST_ClassPrivateProperty, (self2, output) => {
          if (self2.static) {
            output.print("static");
            output.space();
          }
          output.print("#");
          print_property_name(self2.key.name, self2.quote, output);
          if (self2.value) {
            output.print("=");
            self2.value.print(output);
          }
          output.semicolon();
        });
        DEFPRINT(AST_ClassProperty, (self2, output) => {
          if (self2.static) {
            output.print("static");
            output.space();
          }
          if (self2.key instanceof AST_SymbolClassProperty) {
            print_property_name(self2.key.name, self2.quote, output);
          } else {
            output.print("[");
            self2.key.print(output);
            output.print("]");
          }
          if (self2.value) {
            output.print("=");
            self2.value.print(output);
          }
          output.semicolon();
        });
        AST_ObjectProperty.DEFMETHOD("_print_getter_setter", function(type, is_private, output) {
          var self2 = this;
          if (self2.static) {
            output.print("static");
            output.space();
          }
          if (type) {
            output.print(type);
            output.space();
          }
          if (self2.key instanceof AST_SymbolMethod) {
            if (is_private)
              output.print("#");
            print_property_name(self2.key.name, self2.quote, output);
            self2.key.add_source_map(output);
          } else {
            output.with_square(function() {
              self2.key.print(output);
            });
          }
          self2.value._do_print(output, true);
        });
        DEFPRINT(AST_ObjectSetter, function(self2, output) {
          self2._print_getter_setter("set", false, output);
        });
        DEFPRINT(AST_ObjectGetter, function(self2, output) {
          self2._print_getter_setter("get", false, output);
        });
        DEFPRINT(AST_PrivateSetter, function(self2, output) {
          self2._print_getter_setter("set", true, output);
        });
        DEFPRINT(AST_PrivateGetter, function(self2, output) {
          self2._print_getter_setter("get", true, output);
        });
        DEFPRINT(AST_PrivateMethod, function(self2, output) {
          var type;
          if (self2.is_generator && self2.async) {
            type = "async*";
          } else if (self2.is_generator) {
            type = "*";
          } else if (self2.async) {
            type = "async";
          }
          self2._print_getter_setter(type, true, output);
        });
        DEFPRINT(AST_PrivateIn, function(self2, output) {
          self2.key.print(output);
          output.space();
          output.print("in");
          output.space();
          self2.value.print(output);
        });
        DEFPRINT(AST_SymbolPrivateProperty, function(self2, output) {
          output.print("#" + self2.name);
        });
        DEFPRINT(AST_ConciseMethod, function(self2, output) {
          var type;
          if (self2.is_generator && self2.async) {
            type = "async*";
          } else if (self2.is_generator) {
            type = "*";
          } else if (self2.async) {
            type = "async";
          }
          self2._print_getter_setter(type, false, output);
        });
        DEFPRINT(AST_ClassStaticBlock, function(self2, output) {
          output.print("static");
          output.space();
          print_braced(self2, output);
        });
        AST_Symbol.DEFMETHOD("_do_print", function(output) {
          var def = this.definition();
          output.print_name(def ? def.mangled_name || def.name : this.name);
        });
        DEFPRINT(AST_Symbol, function(self2, output) {
          self2._do_print(output);
        });
        DEFPRINT(AST_Hole, noop);
        DEFPRINT(AST_This, function(self2, output) {
          output.print("this");
        });
        DEFPRINT(AST_Super, function(self2, output) {
          output.print("super");
        });
        DEFPRINT(AST_Constant, function(self2, output) {
          output.print(self2.getValue());
        });
        DEFPRINT(AST_String, function(self2, output) {
          output.print_string(self2.getValue(), self2.quote, output.in_directive);
        });
        DEFPRINT(AST_Number, function(self2, output) {
          if ((output.option("keep_numbers") || output.use_asm) && self2.raw) {
            output.print(self2.raw);
          } else {
            output.print(make_num(self2.getValue()));
          }
        });
        DEFPRINT(AST_BigInt, function(self2, output) {
          output.print(self2.getValue() + "n");
        });
        const r_slash_script = /(<\s*\/\s*script)/i;
        const r_starts_with_script = /^\s*script/i;
        const slash_script_replace = (_, $1) => $1.replace("/", "\\/");
        DEFPRINT(AST_RegExp, function(self2, output) {
          let { source, flags } = self2.getValue();
          source = regexp_source_fix(source);
          flags = flags ? sort_regexp_flags(flags) : "";
          source = source.replace(r_slash_script, slash_script_replace);
          if (r_starts_with_script.test(source) && output.last().endsWith("<")) {
            output.print(" ");
          }
          output.print(output.to_utf8(`/${source}/${flags}`, false, true));
          const parent = output.parent();
          if (parent instanceof AST_Binary && /^\w/.test(parent.operator) && parent.left === self2) {
            output.print(" ");
          }
        });
        function print_maybe_braced_body(stat, output) {
          if (output.option("braces")) {
            make_block(stat, output);
          } else {
            if (!stat || stat instanceof AST_EmptyStatement)
              output.force_semicolon();
            else if (stat instanceof AST_Let || stat instanceof AST_Const || stat instanceof AST_Class)
              make_block(stat, output);
            else
              stat.print(output);
          }
        }
        function best_of2(a) {
          var best = a[0], len = best.length;
          for (var i = 1; i < a.length; ++i) {
            if (a[i].length < len) {
              best = a[i];
              len = best.length;
            }
          }
          return best;
        }
        function make_num(num) {
          var str = num.toString(10).replace(/^0\./, ".").replace("e+", "e");
          var candidates = [str];
          if (Math.floor(num) === num) {
            if (num < 0) {
              candidates.push("-0x" + (-num).toString(16).toLowerCase());
            } else {
              candidates.push("0x" + num.toString(16).toLowerCase());
            }
          }
          var match, len, digits;
          if (match = /^\.0+/.exec(str)) {
            len = match[0].length;
            digits = str.slice(len);
            candidates.push(digits + "e-" + (digits.length + len - 1));
          } else if (match = /0+$/.exec(str)) {
            len = match[0].length;
            candidates.push(str.slice(0, -len) + "e" + len);
          } else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) {
            candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length));
          }
          return best_of2(candidates);
        }
        function make_block(stmt, output) {
          if (!stmt || stmt instanceof AST_EmptyStatement)
            output.print("{}");
          else if (stmt instanceof AST_BlockStatement)
            stmt.print(output);
          else
            output.with_block(function() {
              output.indent();
              stmt.print(output);
              output.newline();
            });
        }
        function DEFMAP(nodetype, generator) {
          nodetype.forEach(function(nodetype2) {
            nodetype2.DEFMETHOD("add_source_map", generator);
          });
        }
        DEFMAP([
          AST_Node,
          AST_LabeledStatement,
          AST_Toplevel
        ], noop);
        DEFMAP([
          AST_Array,
          AST_BlockStatement,
          AST_Catch,
          AST_Class,
          AST_Constant,
          AST_Debugger,
          AST_Definitions,
          AST_Directive,
          AST_Finally,
          AST_Jump,
          AST_Lambda,
          AST_New,
          AST_Object,
          AST_StatementWithBody,
          AST_Symbol,
          AST_Switch,
          AST_SwitchBranch,
          AST_TemplateString,
          AST_TemplateSegment,
          AST_Try
        ], function(output) {
          output.add_mapping(this.start);
        });
        DEFMAP([
          AST_ObjectGetter,
          AST_ObjectSetter,
          AST_PrivateGetter,
          AST_PrivateSetter,
          AST_ConciseMethod,
          AST_PrivateMethod
        ], function(output) {
          output.add_mapping(this.start, false);
        });
        DEFMAP([
          AST_SymbolMethod,
          AST_SymbolPrivateProperty
        ], function(output) {
          const tok_type = this.end && this.end.type;
          if (tok_type === "name" || tok_type === "privatename") {
            output.add_mapping(this.end, this.name);
          } else {
            output.add_mapping(this.end);
          }
        });
        DEFMAP([AST_ObjectProperty], function(output) {
          output.add_mapping(this.start, this.key);
        });
      })();
      const shallow_cmp = (node1, node2) => {
        return node1 === null && node2 === null || node1.TYPE === node2.TYPE && node1.shallow_cmp(node2);
      };
      const equivalent_to = (tree1, tree2) => {
        if (!shallow_cmp(tree1, tree2))
          return false;
        const walk_1_state = [tree1];
        const walk_2_state = [tree2];
        const walk_1_push = walk_1_state.push.bind(walk_1_state);
        const walk_2_push = walk_2_state.push.bind(walk_2_state);
        while (walk_1_state.length && walk_2_state.length) {
          const node_1 = walk_1_state.pop();
          const node_2 = walk_2_state.pop();
          if (!shallow_cmp(node_1, node_2))
            return false;
          node_1._children_backwards(walk_1_push);
          node_2._children_backwards(walk_2_push);
          if (walk_1_state.length !== walk_2_state.length) {
            return false;
          }
        }
        return walk_1_state.length == 0 && walk_2_state.length == 0;
      };
      const pass_through = () => true;
      AST_Node.prototype.shallow_cmp = function() {
        throw new Error("did not find a shallow_cmp function for " + this.constructor.name);
      };
      AST_Debugger.prototype.shallow_cmp = pass_through;
      AST_Directive.prototype.shallow_cmp = function(other) {
        return this.value === other.value;
      };
      AST_SimpleStatement.prototype.shallow_cmp = pass_through;
      AST_Block.prototype.shallow_cmp = pass_through;
      AST_EmptyStatement.prototype.shallow_cmp = pass_through;
      AST_LabeledStatement.prototype.shallow_cmp = function(other) {
        return this.label.name === other.label.name;
      };
      AST_Do.prototype.shallow_cmp = pass_through;
      AST_While.prototype.shallow_cmp = pass_through;
      AST_For.prototype.shallow_cmp = function(other) {
        return (this.init == null ? other.init == null : this.init === other.init) && (this.condition == null ? other.condition == null : this.condition === other.condition) && (this.step == null ? other.step == null : this.step === other.step);
      };
      AST_ForIn.prototype.shallow_cmp = pass_through;
      AST_ForOf.prototype.shallow_cmp = pass_through;
      AST_With.prototype.shallow_cmp = pass_through;
      AST_Toplevel.prototype.shallow_cmp = pass_through;
      AST_Expansion.prototype.shallow_cmp = pass_through;
      AST_Lambda.prototype.shallow_cmp = function(other) {
        return this.is_generator === other.is_generator && this.async === other.async;
      };
      AST_Destructuring.prototype.shallow_cmp = function(other) {
        return this.is_array === other.is_array;
      };
      AST_PrefixedTemplateString.prototype.shallow_cmp = pass_through;
      AST_TemplateString.prototype.shallow_cmp = pass_through;
      AST_TemplateSegment.prototype.shallow_cmp = function(other) {
        return this.value === other.value;
      };
      AST_Jump.prototype.shallow_cmp = pass_through;
      AST_LoopControl.prototype.shallow_cmp = pass_through;
      AST_Await.prototype.shallow_cmp = pass_through;
      AST_Yield.prototype.shallow_cmp = function(other) {
        return this.is_star === other.is_star;
      };
      AST_If.prototype.shallow_cmp = function(other) {
        return this.alternative == null ? other.alternative == null : this.alternative === other.alternative;
      };
      AST_Switch.prototype.shallow_cmp = pass_through;
      AST_SwitchBranch.prototype.shallow_cmp = pass_through;
      AST_Try.prototype.shallow_cmp = function(other) {
        return this.body === other.body && (this.bcatch == null ? other.bcatch == null : this.bcatch === other.bcatch) && (this.bfinally == null ? other.bfinally == null : this.bfinally === other.bfinally);
      };
      AST_Catch.prototype.shallow_cmp = function(other) {
        return this.argname == null ? other.argname == null : this.argname === other.argname;
      };
      AST_Finally.prototype.shallow_cmp = pass_through;
      AST_Definitions.prototype.shallow_cmp = pass_through;
      AST_VarDef.prototype.shallow_cmp = function(other) {
        return this.value == null ? other.value == null : this.value === other.value;
      };
      AST_NameMapping.prototype.shallow_cmp = pass_through;
      AST_Import.prototype.shallow_cmp = function(other) {
        return (this.imported_name == null ? other.imported_name == null : this.imported_name === other.imported_name) && (this.imported_names == null ? other.imported_names == null : this.imported_names === other.imported_names);
      };
      AST_ImportMeta.prototype.shallow_cmp = pass_through;
      AST_Export.prototype.shallow_cmp = function(other) {
        return (this.exported_definition == null ? other.exported_definition == null : this.exported_definition === other.exported_definition) && (this.exported_value == null ? other.exported_value == null : this.exported_value === other.exported_value) && (this.exported_names == null ? other.exported_names == null : this.exported_names === other.exported_names) && this.module_name === other.module_name && this.is_default === other.is_default;
      };
      AST_Call.prototype.shallow_cmp = pass_through;
      AST_Sequence.prototype.shallow_cmp = pass_through;
      AST_PropAccess.prototype.shallow_cmp = pass_through;
      AST_Chain.prototype.shallow_cmp = pass_through;
      AST_Dot.prototype.shallow_cmp = function(other) {
        return this.property === other.property;
      };
      AST_DotHash.prototype.shallow_cmp = function(other) {
        return this.property === other.property;
      };
      AST_Unary.prototype.shallow_cmp = function(other) {
        return this.operator === other.operator;
      };
      AST_Binary.prototype.shallow_cmp = function(other) {
        return this.operator === other.operator;
      };
      AST_Conditional.prototype.shallow_cmp = pass_through;
      AST_Array.prototype.shallow_cmp = pass_through;
      AST_Object.prototype.shallow_cmp = pass_through;
      AST_ObjectProperty.prototype.shallow_cmp = pass_through;
      AST_ObjectKeyVal.prototype.shallow_cmp = function(other) {
        return this.key === other.key;
      };
      AST_ObjectSetter.prototype.shallow_cmp = function(other) {
        return this.static === other.static;
      };
      AST_ObjectGetter.prototype.shallow_cmp = function(other) {
        return this.static === other.static;
      };
      AST_ConciseMethod.prototype.shallow_cmp = function(other) {
        return this.static === other.static && this.is_generator === other.is_generator && this.async === other.async;
      };
      AST_Class.prototype.shallow_cmp = function(other) {
        return (this.name == null ? other.name == null : this.name === other.name) && (this.extends == null ? other.extends == null : this.extends === other.extends);
      };
      AST_ClassProperty.prototype.shallow_cmp = function(other) {
        return this.static === other.static;
      };
      AST_Symbol.prototype.shallow_cmp = function(other) {
        return this.name === other.name;
      };
      AST_NewTarget.prototype.shallow_cmp = pass_through;
      AST_This.prototype.shallow_cmp = pass_through;
      AST_Super.prototype.shallow_cmp = pass_through;
      AST_String.prototype.shallow_cmp = function(other) {
        return this.value === other.value;
      };
      AST_Number.prototype.shallow_cmp = function(other) {
        return this.value === other.value;
      };
      AST_BigInt.prototype.shallow_cmp = function(other) {
        return this.value === other.value;
      };
      AST_RegExp.prototype.shallow_cmp = function(other) {
        return this.value.flags === other.value.flags && this.value.source === other.value.source;
      };
      AST_Atom.prototype.shallow_cmp = pass_through;
      const MASK_EXPORT_DONT_MANGLE = 1 << 0;
      const MASK_EXPORT_WANT_MANGLE = 1 << 1;
      let function_defs = null;
      let unmangleable_names = null;
      let scopes_with_block_defuns = null;
      class SymbolDef {
        constructor(scope, orig, init) {
          this.name = orig.name;
          this.orig = [orig];
          this.init = init;
          this.eliminated = 0;
          this.assignments = 0;
          this.scope = scope;
          this.replaced = 0;
          this.global = false;
          this.export = 0;
          this.mangled_name = null;
          this.undeclared = false;
          this.id = SymbolDef.next_id++;
          this.chained = false;
          this.direct_access = false;
          this.escaped = 0;
          this.recursive_refs = 0;
          this.references = [];
          this.should_replace = void 0;
          this.single_use = false;
          this.fixed = false;
          Object.seal(this);
        }
        fixed_value() {
          if (!this.fixed || this.fixed instanceof AST_Node)
            return this.fixed;
          return this.fixed();
        }
        unmangleable(options) {
          if (!options)
            options = {};
          if (function_defs && function_defs.has(this.id) && keep_name(options.keep_fnames, this.orig[0].name))
            return true;
          return this.global && !options.toplevel || this.export & MASK_EXPORT_DONT_MANGLE || this.undeclared || !options.eval && this.scope.pinned() || (this.orig[0] instanceof AST_SymbolLambda || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name) || this.orig[0] instanceof AST_SymbolMethod || (this.orig[0] instanceof AST_SymbolClass || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name);
        }
        mangle(options) {
          const cache = options.cache && options.cache.props;
          if (this.global && cache && cache.has(this.name)) {
            this.mangled_name = cache.get(this.name);
          } else if (!this.mangled_name && !this.unmangleable(options)) {
            var s = this.scope;
            var sym = this.orig[0];
            if (options.ie8 && sym instanceof AST_SymbolLambda)
              s = s.parent_scope;
            const redefinition = redefined_catch_def(this);
            this.mangled_name = redefinition ? redefinition.mangled_name || redefinition.name : s.next_mangled(options, this);
            if (this.global && cache) {
              cache.set(this.name, this.mangled_name);
            }
          }
        }
      }
      SymbolDef.next_id = 1;
      function redefined_catch_def(def) {
        if (def.orig[0] instanceof AST_SymbolCatch && def.scope.is_block_scope()) {
          return def.scope.get_defun_scope().variables.get(def.name);
        }
      }
      AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null, toplevel = this } = {}) {
        options = defaults(options, {
          cache: null,
          ie8: false,
          safari10: false,
          module: false
        });
        if (!(toplevel instanceof AST_Toplevel)) {
          throw new Error("Invalid toplevel scope");
        }
        var scope = this.parent_scope = parent_scope;
        var labels = /* @__PURE__ */ new Map();
        var defun = null;
        var in_destructuring = null;
        var for_scopes = [];
        var tw = new TreeWalker((node, descend) => {
          if (node.is_block_scope()) {
            const save_scope2 = scope;
            node.block_scope = scope = new AST_Scope(node);
            scope._block_scope = true;
            scope.init_scope_vars(save_scope2);
            scope.uses_with = save_scope2.uses_with;
            scope.uses_eval = save_scope2.uses_eval;
            if (options.safari10) {
              if (node instanceof AST_For || node instanceof AST_ForIn || node instanceof AST_ForOf) {
                for_scopes.push(scope);
              }
            }
            if (node instanceof AST_Switch) {
              const the_block_scope = scope;
              scope = save_scope2;
              node.expression.walk(tw);
              scope = the_block_scope;
              for (let i = 0; i < node.body.length; i++) {
                node.body[i].walk(tw);
              }
            } else {
              descend();
            }
            scope = save_scope2;
            return true;
          }
          if (node instanceof AST_Destructuring) {
            const save_destructuring = in_destructuring;
            in_destructuring = node;
            descend();
            in_destructuring = save_destructuring;
            return true;
          }
          if (node instanceof AST_Scope) {
            node.init_scope_vars(scope);
            var save_scope = scope;
            var save_defun = defun;
            var save_labels = labels;
            defun = scope = node;
            labels = /* @__PURE__ */ new Map();
            descend();
            scope = save_scope;
            defun = save_defun;
            labels = save_labels;
            return true;
          }
          if (node instanceof AST_LabeledStatement) {
            var l = node.label;
            if (labels.has(l.name)) {
              throw new Error(string_template("Label {name} defined twice", l));
            }
            labels.set(l.name, l);
            descend();
            labels.delete(l.name);
            return true;
          }
          if (node instanceof AST_With) {
            for (var s = scope; s; s = s.parent_scope)
              s.uses_with = true;
            return;
          }
          if (node instanceof AST_Symbol) {
            node.scope = scope;
          }
          if (node instanceof AST_Label) {
            node.thedef = node;
            node.references = [];
          }
          if (node instanceof AST_SymbolLambda) {
            defun.def_function(node, node.name == "arguments" ? void 0 : defun);
          } else if (node instanceof AST_SymbolDefun) {
            const closest_scope = defun.parent_scope;
            node.scope = tw.directives["use strict"] ? closest_scope : closest_scope.get_defun_scope();
            mark_export(node.scope.def_function(node, defun), 1);
          } else if (node instanceof AST_SymbolClass) {
            mark_export(defun.def_variable(node, defun), 1);
          } else if (node instanceof AST_SymbolImport) {
            scope.def_variable(node);
          } else if (node instanceof AST_SymbolDefClass) {
            mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1);
          } else if (node instanceof AST_SymbolVar || node instanceof AST_SymbolLet || node instanceof AST_SymbolConst || node instanceof AST_SymbolCatch) {
            var def;
            if (node instanceof AST_SymbolBlockDeclaration) {
              def = scope.def_variable(node, null);
            } else {
              def = defun.def_variable(node, node.TYPE == "SymbolVar" ? null : void 0);
            }
            if (!def.orig.every((sym2) => {
              if (sym2 === node)
                return true;
              if (node instanceof AST_SymbolBlockDeclaration) {
                return sym2 instanceof AST_SymbolLambda;
              }
              return !(sym2 instanceof AST_SymbolLet || sym2 instanceof AST_SymbolConst);
            })) {
              js_error(`"${node.name}" is redeclared`, node.start.file, node.start.line, node.start.col, node.start.pos);
            }
            if (!(node instanceof AST_SymbolFunarg))
              mark_export(def, 2);
            if (defun !== scope) {
              node.mark_enclosed();
              var def = scope.find_variable(node);
              if (node.thedef !== def) {
                node.thedef = def;
                node.reference();
              }
            }
          } else if (node instanceof AST_LabelRef) {
            var sym = labels.get(node.name);
            if (!sym)
              throw new Error(string_template("Undefined label {name} [{line},{col}]", {
                name: node.name,
                line: node.start.line,
                col: node.start.col
              }));
            node.thedef = sym;
          }
          if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) {
            js_error(`"${node.TYPE}" statement may only appear at the top level`, node.start.file, node.start.line, node.start.col, node.start.pos);
          }
        });
        if (options.module) {
          tw.directives["use strict"] = true;
        }
        this.walk(tw);
        function mark_export(def, level) {
          if (in_destructuring) {
            var i = 0;
            do {
              level++;
            } while (tw.parent(i++) !== in_destructuring);
          }
          var node = tw.parent(level);
          if (def.export = node instanceof AST_Export ? MASK_EXPORT_DONT_MANGLE : 0) {
            var exported = node.exported_definition;
            if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) {
              def.export = MASK_EXPORT_WANT_MANGLE;
            }
          }
        }
        const is_toplevel = this instanceof AST_Toplevel;
        if (is_toplevel) {
          this.globals = /* @__PURE__ */ new Map();
        }
        var tw = new TreeWalker((node) => {
          if (node instanceof AST_LoopControl && node.label) {
            node.label.thedef.references.push(node);
            return true;
          }
          if (node instanceof AST_SymbolRef) {
            var name = node.name;
            if (name == "eval" && tw.parent() instanceof AST_Call) {
              for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {
                s.uses_eval = true;
              }
            }
            var sym;
            if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name || !(sym = node.scope.find_variable(name))) {
              sym = toplevel.def_global(node);
              if (node instanceof AST_SymbolExport)
                sym.export = MASK_EXPORT_DONT_MANGLE;
            } else if (sym.scope instanceof AST_Lambda && name == "arguments") {
              sym.scope.get_defun_scope().uses_arguments = true;
            }
            node.thedef = sym;
            node.reference();
            if (node.scope.is_block_scope() && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) {
              node.scope = node.scope.get_defun_scope();
            }
            return true;
          }
          var def;
          if (node instanceof AST_SymbolCatch && (def = redefined_catch_def(node.definition()))) {
            var s = node.scope;
            while (s) {
              push_uniq(s.enclosed, def);
              if (s === def.scope)
                break;
              s = s.parent_scope;
            }
          }
        });
        this.walk(tw);
        if (options.ie8 || options.safari10) {
          walk(this, (node) => {
            if (node instanceof AST_SymbolCatch) {
              var name = node.name;
              var refs = node.thedef.references;
              var scope2 = node.scope.get_defun_scope();
              var def = scope2.find_variable(name) || toplevel.globals.get(name) || scope2.def_variable(node);
              refs.forEach(function(ref) {
                ref.thedef = def;
                ref.reference();
              });
              node.thedef = def;
              node.reference();
              return true;
            }
          });
        }
        if (options.safari10) {
          for (const scope2 of for_scopes) {
            scope2.parent_scope.variables.forEach(function(def) {
              push_uniq(scope2.enclosed, def);
            });
          }
        }
      });
      AST_Toplevel.DEFMETHOD("def_global", function(node) {
        var globals = this.globals, name = node.name;
        if (globals.has(name)) {
          return globals.get(name);
        } else {
          var g = new SymbolDef(this, node);
          g.undeclared = true;
          g.global = true;
          globals.set(name, g);
          return g;
        }
      });
      AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope) {
        this.variables = /* @__PURE__ */ new Map();
        this.uses_with = false;
        this.uses_eval = false;
        this.parent_scope = parent_scope;
        this.enclosed = [];
        this.cname = -1;
      });
      AST_Scope.DEFMETHOD("conflicting_def", function(name) {
        return this.enclosed.find((def) => def.name === name) || this.variables.has(name) || this.parent_scope && this.parent_scope.conflicting_def(name);
      });
      AST_Scope.DEFMETHOD("conflicting_def_shallow", function(name) {
        return this.enclosed.find((def) => def.name === name) || this.variables.has(name);
      });
      AST_Scope.DEFMETHOD("add_child_scope", function(scope) {
        if (scope.parent_scope === this)
          return;
        scope.parent_scope = this;
        if (scope instanceof AST_Arrow && !this.uses_arguments) {
          this.uses_arguments = walk(scope, (node) => {
            if (node instanceof AST_SymbolRef && node.scope instanceof AST_Lambda && node.name === "arguments") {
              return walk_abort;
            }
            if (node instanceof AST_Lambda && !(node instanceof AST_Arrow)) {
              return true;
            }
          });
        }
        this.uses_with = this.uses_with || scope.uses_with;
        this.uses_eval = this.uses_eval || scope.uses_eval;
        const scope_ancestry = (() => {
          const ancestry = [];
          let cur = this;
          do {
            ancestry.push(cur);
          } while (cur = cur.parent_scope);
          ancestry.reverse();
          return ancestry;
        })();
        const new_scope_enclosed_set = new Set(scope.enclosed);
        const to_enclose = [];
        for (const scope_topdown of scope_ancestry) {
          to_enclose.forEach((e) => push_uniq(scope_topdown.enclosed, e));
          for (const def of scope_topdown.variables.values()) {
            if (new_scope_enclosed_set.has(def)) {
              push_uniq(to_enclose, def);
              push_uniq(scope_topdown.enclosed, def);
            }
          }
        }
      });
      function find_scopes_visible_from(scopes) {
        const found_scopes = /* @__PURE__ */ new Set();
        for (const scope of new Set(scopes)) {
          (function bubble_up(scope2) {
            if (scope2 == null || found_scopes.has(scope2))
              return;
            found_scopes.add(scope2);
            bubble_up(scope2.parent_scope);
          })(scope);
        }
        return [...found_scopes];
      }
      AST_Scope.DEFMETHOD("create_symbol", function(SymClass, {
        source,
        tentative_name,
        scope,
        conflict_scopes = [scope],
        init = null
      } = {}) {
        let symbol_name;
        conflict_scopes = find_scopes_visible_from(conflict_scopes);
        if (tentative_name) {
          tentative_name = symbol_name = tentative_name.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, "_");
          let i = 0;
          while (conflict_scopes.find((s) => s.conflicting_def_shallow(symbol_name))) {
            symbol_name = tentative_name + "$" + i++;
          }
        }
        if (!symbol_name) {
          throw new Error("No symbol name could be generated in create_symbol()");
        }
        const symbol = make_node(SymClass, source, {
          name: symbol_name,
          scope
        });
        this.def_variable(symbol, init || null);
        symbol.mark_enclosed();
        return symbol;
      });
      AST_Node.DEFMETHOD("is_block_scope", return_false);
      AST_Class.DEFMETHOD("is_block_scope", return_false);
      AST_Lambda.DEFMETHOD("is_block_scope", return_false);
      AST_Toplevel.DEFMETHOD("is_block_scope", return_false);
      AST_SwitchBranch.DEFMETHOD("is_block_scope", return_false);
      AST_Block.DEFMETHOD("is_block_scope", return_true);
      AST_Scope.DEFMETHOD("is_block_scope", function() {
        return this._block_scope || false;
      });
      AST_IterationStatement.DEFMETHOD("is_block_scope", return_true);
      AST_Lambda.DEFMETHOD("init_scope_vars", function() {
        AST_Scope.prototype.init_scope_vars.apply(this, arguments);
        this.uses_arguments = false;
        this.def_variable(new AST_SymbolFunarg({
          name: "arguments",
          start: this.start,
          end: this.end
        }));
      });
      AST_Arrow.DEFMETHOD("init_scope_vars", function() {
        AST_Scope.prototype.init_scope_vars.apply(this, arguments);
        this.uses_arguments = false;
      });
      AST_Symbol.DEFMETHOD("mark_enclosed", function() {
        var def = this.definition();
        var s = this.scope;
        while (s) {
          push_uniq(s.enclosed, def);
          if (s === def.scope)
            break;
          s = s.parent_scope;
        }
      });
      AST_Symbol.DEFMETHOD("reference", function() {
        this.definition().references.push(this);
        this.mark_enclosed();
      });
      AST_Scope.DEFMETHOD("find_variable", function(name) {
        if (name instanceof AST_Symbol)
          name = name.name;
        return this.variables.get(name) || this.parent_scope && this.parent_scope.find_variable(name);
      });
      AST_Scope.DEFMETHOD("def_function", function(symbol, init) {
        var def = this.def_variable(symbol, init);
        if (!def.init || def.init instanceof AST_Defun)
          def.init = init;
        return def;
      });
      AST_Scope.DEFMETHOD("def_variable", function(symbol, init) {
        var def = this.variables.get(symbol.name);
        if (def) {
          def.orig.push(symbol);
          if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {
            def.init = init;
          }
        } else {
          def = new SymbolDef(this, symbol, init);
          this.variables.set(symbol.name, def);
          def.global = !this.parent_scope;
        }
        return symbol.thedef = def;
      });
      function next_mangled(scope, options) {
        let defun_scope;
        if (scopes_with_block_defuns && (defun_scope = scope.get_defun_scope()) && scopes_with_block_defuns.has(defun_scope)) {
          scope = defun_scope;
        }
        var ext = scope.enclosed;
        var nth_identifier = options.nth_identifier;
        out:
          while (true) {
            var m = nth_identifier.get(++scope.cname);
            if (ALL_RESERVED_WORDS.has(m))
              continue;
            if (options.reserved.has(m))
              continue;
            if (unmangleable_names && unmangleable_names.has(m))
              continue out;
            for (let i = ext.length; --i >= 0; ) {
              const def = ext[i];
              const name = def.mangled_name || def.unmangleable(options) && def.name;
              if (m == name)
                continue out;
            }
            return m;
          }
      }
      AST_Scope.DEFMETHOD("next_mangled", function(options) {
        return next_mangled(this, options);
      });
      AST_Toplevel.DEFMETHOD("next_mangled", function(options) {
        let name;
        const mangled_names = this.mangled_names;
        do {
          name = next_mangled(this, options);
        } while (mangled_names.has(name));
        return name;
      });
      AST_Function.DEFMETHOD("next_mangled", function(options, def) {
        var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();
        var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;
        while (true) {
          var name = next_mangled(this, options);
          if (!tricky_name || tricky_name != name)
            return name;
        }
      });
      AST_Symbol.DEFMETHOD("unmangleable", function(options) {
        var def = this.definition();
        return !def || def.unmangleable(options);
      });
      AST_Label.DEFMETHOD("unmangleable", return_false);
      AST_Symbol.DEFMETHOD("unreferenced", function() {
        return !this.definition().references.length && !this.scope.pinned();
      });
      AST_Symbol.DEFMETHOD("definition", function() {
        return this.thedef;
      });
      AST_Symbol.DEFMETHOD("global", function() {
        return this.thedef.global;
      });
      function format_mangler_options(options) {
        options = defaults(options, {
          eval: false,
          nth_identifier: base54,
          ie8: false,
          keep_classnames: false,
          keep_fnames: false,
          module: false,
          reserved: [],
          toplevel: false
        });
        if (options.module)
          options.toplevel = true;
        if (!Array.isArray(options.reserved) && !(options.reserved instanceof Set)) {
          options.reserved = [];
        }
        options.reserved = new Set(options.reserved);
        options.reserved.add("arguments");
        return options;
      }
      AST_Toplevel.DEFMETHOD("mangle_names", function(options) {
        options = format_mangler_options(options);
        var nth_identifier = options.nth_identifier;
        var lname = -1;
        var to_mangle = [];
        if (options.keep_fnames) {
          function_defs = /* @__PURE__ */ new Set();
        }
        const mangled_names = this.mangled_names = /* @__PURE__ */ new Set();
        unmangleable_names = /* @__PURE__ */ new Set();
        if (options.cache) {
          this.globals.forEach(collect);
          if (options.cache.props) {
            options.cache.props.forEach(function(mangled_name) {
              mangled_names.add(mangled_name);
            });
          }
        }
        var tw = new TreeWalker(function(node, descend) {
          if (node instanceof AST_LabeledStatement) {
            var save_nesting = lname;
            descend();
            lname = save_nesting;
            return true;
          }
          if (node instanceof AST_Defun && !(tw.parent() instanceof AST_Scope)) {
            scopes_with_block_defuns = scopes_with_block_defuns || /* @__PURE__ */ new Set();
            scopes_with_block_defuns.add(node.parent_scope.get_defun_scope());
          }
          if (node instanceof AST_Scope) {
            node.variables.forEach(collect);
            return;
          }
          if (node.is_block_scope()) {
            node.block_scope.variables.forEach(collect);
            return;
          }
          if (function_defs && node instanceof AST_VarDef && node.value instanceof AST_Lambda && !node.value.name && keep_name(options.keep_fnames, node.name.name)) {
            function_defs.add(node.name.definition().id);
            return;
          }
          if (node instanceof AST_Label) {
            let name;
            do {
              name = nth_identifier.get(++lname);
            } while (ALL_RESERVED_WORDS.has(name));
            node.mangled_name = name;
            return true;
          }
          if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) {
            to_mangle.push(node.definition());
            return;
          }
        });
        this.walk(tw);
        if (options.keep_fnames || options.keep_classnames) {
          to_mangle.forEach((def) => {
            if (def.name.length < 6 && def.unmangleable(options)) {
              unmangleable_names.add(def.name);
            }
          });
        }
        to_mangle.forEach((def) => {
          def.mangle(options);
        });
        function_defs = null;
        unmangleable_names = null;
        scopes_with_block_defuns = null;
        function collect(symbol) {
          if (symbol.export & MASK_EXPORT_DONT_MANGLE) {
            unmangleable_names.add(symbol.name);
          } else if (!options.reserved.has(symbol.name)) {
            to_mangle.push(symbol);
          }
        }
      });
      AST_Toplevel.DEFMETHOD("find_colliding_names", function(options) {
        const cache = options.cache && options.cache.props;
        const avoid = /* @__PURE__ */ new Set();
        options.reserved.forEach(to_avoid);
        this.globals.forEach(add_def);
        this.walk(new TreeWalker(function(node) {
          if (node instanceof AST_Scope)
            node.variables.forEach(add_def);
          if (node instanceof AST_SymbolCatch)
            add_def(node.definition());
        }));
        return avoid;
        function to_avoid(name) {
          avoid.add(name);
        }
        function add_def(def) {
          var name = def.name;
          if (def.global && cache && cache.has(name))
            name = cache.get(name);
          else if (!def.unmangleable(options))
            return;
          to_avoid(name);
        }
      });
      AST_Toplevel.DEFMETHOD("expand_names", function(options) {
        options = format_mangler_options(options);
        var nth_identifier = options.nth_identifier;
        if (nth_identifier.reset && nth_identifier.sort) {
          nth_identifier.reset();
          nth_identifier.sort();
        }
        var avoid = this.find_colliding_names(options);
        var cname = 0;
        this.globals.forEach(rename);
        this.walk(new TreeWalker(function(node) {
          if (node instanceof AST_Scope)
            node.variables.forEach(rename);
          if (node instanceof AST_SymbolCatch)
            rename(node.definition());
        }));
        function next_name() {
          var name;
          do {
            name = nth_identifier.get(cname++);
          } while (avoid.has(name) || ALL_RESERVED_WORDS.has(name));
          return name;
        }
        function rename(def) {
          if (def.global && options.cache)
            return;
          if (def.unmangleable(options))
            return;
          if (options.reserved.has(def.name))
            return;
          const redefinition = redefined_catch_def(def);
          const name = def.name = redefinition ? redefinition.name : next_name();
          def.orig.forEach(function(sym) {
            sym.name = name;
          });
          def.references.forEach(function(sym) {
            sym.name = name;
          });
        }
      });
      AST_Node.DEFMETHOD("tail_node", return_this);
      AST_Sequence.DEFMETHOD("tail_node", function() {
        return this.expressions[this.expressions.length - 1];
      });
      AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options) {
        options = format_mangler_options(options);
        var nth_identifier = options.nth_identifier;
        if (!nth_identifier.reset || !nth_identifier.consider || !nth_identifier.sort) {
          return;
        }
        nth_identifier.reset();
        try {
          AST_Node.prototype.print = function(stream, force_parens) {
            this._print(stream, force_parens);
            if (this instanceof AST_Symbol && !this.unmangleable(options)) {
              nth_identifier.consider(this.name, -1);
            } else if (options.properties) {
              if (this instanceof AST_DotHash) {
                nth_identifier.consider("#" + this.property, -1);
              } else if (this instanceof AST_Dot) {
                nth_identifier.consider(this.property, -1);
              } else if (this instanceof AST_Sub) {
                skip_string(this.property);
              }
            }
          };
          nth_identifier.consider(this.print_to_string(), 1);
        } finally {
          AST_Node.prototype.print = AST_Node.prototype._print;
        }
        nth_identifier.sort();
        function skip_string(node) {
          if (node instanceof AST_String) {
            nth_identifier.consider(node.value, -1);
          } else if (node instanceof AST_Conditional) {
            skip_string(node.consequent);
            skip_string(node.alternative);
          } else if (node instanceof AST_Sequence) {
            skip_string(node.tail_node());
          }
        }
      });
      const base54 = (() => {
        const leading = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split("");
        const digits = "0123456789".split("");
        let chars;
        let frequency;
        function reset() {
          frequency = /* @__PURE__ */ new Map();
          leading.forEach(function(ch) {
            frequency.set(ch, 0);
          });
          digits.forEach(function(ch) {
            frequency.set(ch, 0);
          });
        }
        function consider(str, delta) {
          for (var i = str.length; --i >= 0; ) {
            frequency.set(str[i], frequency.get(str[i]) + delta);
          }
        }
        function compare(a, b) {
          return frequency.get(b) - frequency.get(a);
        }
        function sort() {
          chars = mergeSort(leading, compare).concat(mergeSort(digits, compare));
        }
        reset();
        sort();
        function base542(num) {
          var ret = "", base = 54;
          num++;
          do {
            num--;
            ret += chars[num % base];
            num = Math.floor(num / base);
            base = 64;
          } while (num > 0);
          return ret;
        }
        return {
          get: base542,
          consider,
          reset,
          sort
        };
      })();
      let mangle_options = void 0;
      AST_Node.prototype.size = function(compressor, stack) {
        mangle_options = compressor && compressor._mangle_options;
        let size = 0;
        walk_parent(this, (node, info) => {
          size += node._size(info);
          if (node instanceof AST_Arrow && node.is_braceless()) {
            size += node.body[0].value._size(info);
            return true;
          }
        }, stack || compressor && compressor.stack);
        mangle_options = void 0;
        return size;
      };
      AST_Node.prototype._size = () => 0;
      AST_Debugger.prototype._size = () => 8;
      AST_Directive.prototype._size = function() {
        return 2 + this.value.length;
      };
      const list_overhead = (array) => array.length && array.length - 1;
      AST_Block.prototype._size = function() {
        return 2 + list_overhead(this.body);
      };
      AST_Toplevel.prototype._size = function() {
        return list_overhead(this.body);
      };
      AST_EmptyStatement.prototype._size = () => 1;
      AST_LabeledStatement.prototype._size = () => 2;
      AST_Do.prototype._size = () => 9;
      AST_While.prototype._size = () => 7;
      AST_For.prototype._size = () => 8;
      AST_ForIn.prototype._size = () => 8;
      AST_With.prototype._size = () => 6;
      AST_Expansion.prototype._size = () => 3;
      const lambda_modifiers = (func) => (func.is_generator ? 1 : 0) + (func.async ? 6 : 0);
      AST_Accessor.prototype._size = function() {
        return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body);
      };
      AST_Function.prototype._size = function(info) {
        const first = !!first_in_statement(info);
        return first * 2 + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body);
      };
      AST_Defun.prototype._size = function() {
        return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body);
      };
      AST_Arrow.prototype._size = function() {
        let args_and_arrow = 2 + list_overhead(this.argnames);
        if (!(this.argnames.length === 1 && this.argnames[0] instanceof AST_Symbol)) {
          args_and_arrow += 2;
        }
        const body_overhead = this.is_braceless() ? 0 : list_overhead(this.body) + 2;
        return lambda_modifiers(this) + args_and_arrow + body_overhead;
      };
      AST_Destructuring.prototype._size = () => 2;
      AST_TemplateString.prototype._size = function() {
        return 2 + Math.floor(this.segments.length / 2) * 3;
      };
      AST_TemplateSegment.prototype._size = function() {
        return this.value.length;
      };
      AST_Return.prototype._size = function() {
        return this.value ? 7 : 6;
      };
      AST_Throw.prototype._size = () => 6;
      AST_Break.prototype._size = function() {
        return this.label ? 6 : 5;
      };
      AST_Continue.prototype._size = function() {
        return this.label ? 9 : 8;
      };
      AST_If.prototype._size = () => 4;
      AST_Switch.prototype._size = function() {
        return 8 + list_overhead(this.body);
      };
      AST_Case.prototype._size = function() {
        return 5 + list_overhead(this.body);
      };
      AST_Default.prototype._size = function() {
        return 8 + list_overhead(this.body);
      };
      AST_Try.prototype._size = () => 3;
      AST_Catch.prototype._size = function() {
        let size = 7 + list_overhead(this.body);
        if (this.argname) {
          size += 2;
        }
        return size;
      };
      AST_Finally.prototype._size = function() {
        return 7 + list_overhead(this.body);
      };
      AST_Var.prototype._size = function() {
        return 4 + list_overhead(this.definitions);
      };
      AST_Let.prototype._size = function() {
        return 4 + list_overhead(this.definitions);
      };
      AST_Const.prototype._size = function() {
        return 6 + list_overhead(this.definitions);
      };
      AST_VarDef.prototype._size = function() {
        return this.value ? 1 : 0;
      };
      AST_NameMapping.prototype._size = function() {
        return this.name ? 4 : 0;
      };
      AST_Import.prototype._size = function() {
        let size = 6;
        if (this.imported_name)
          size += 1;
        if (this.imported_name || this.imported_names)
          size += 5;
        if (this.imported_names) {
          size += 2 + list_overhead(this.imported_names);
        }
        return size;
      };
      AST_ImportMeta.prototype._size = () => 11;
      AST_Export.prototype._size = function() {
        let size = 7 + (this.is_default ? 8 : 0);
        if (this.exported_value) {
          size += this.exported_value._size();
        }
        if (this.exported_names) {
          size += 2 + list_overhead(this.exported_names);
        }
        if (this.module_name) {
          size += 5;
        }
        return size;
      };
      AST_Call.prototype._size = function() {
        if (this.optional) {
          return 4 + list_overhead(this.args);
        }
        return 2 + list_overhead(this.args);
      };
      AST_New.prototype._size = function() {
        return 6 + list_overhead(this.args);
      };
      AST_Sequence.prototype._size = function() {
        return list_overhead(this.expressions);
      };
      AST_Dot.prototype._size = function() {
        if (this.optional) {
          return this.property.length + 2;
        }
        return this.property.length + 1;
      };
      AST_DotHash.prototype._size = function() {
        if (this.optional) {
          return this.property.length + 3;
        }
        return this.property.length + 2;
      };
      AST_Sub.prototype._size = function() {
        return this.optional ? 4 : 2;
      };
      AST_Unary.prototype._size = function() {
        if (this.operator === "typeof")
          return 7;
        if (this.operator === "void")
          return 5;
        return this.operator.length;
      };
      AST_Binary.prototype._size = function(info) {
        if (this.operator === "in")
          return 4;
        let size = this.operator.length;
        if ((this.operator === "+" || this.operator === "-") && this.right instanceof AST_Unary && this.right.operator === this.operator) {
          size += 1;
        }
        if (this.needs_parens(info)) {
          size += 2;
        }
        return size;
      };
      AST_Conditional.prototype._size = () => 3;
      AST_Array.prototype._size = function() {
        return 2 + list_overhead(this.elements);
      };
      AST_Object.prototype._size = function(info) {
        let base = 2;
        if (first_in_statement(info)) {
          base += 2;
        }
        return base + list_overhead(this.properties);
      };
      const key_size = (key) => typeof key === "string" ? key.length : 0;
      AST_ObjectKeyVal.prototype._size = function() {
        return key_size(this.key) + 1;
      };
      const static_size = (is_static) => is_static ? 7 : 0;
      AST_ObjectGetter.prototype._size = function() {
        return 5 + static_size(this.static) + key_size(this.key);
      };
      AST_ObjectSetter.prototype._size = function() {
        return 5 + static_size(this.static) + key_size(this.key);
      };
      AST_ConciseMethod.prototype._size = function() {
        return static_size(this.static) + key_size(this.key) + lambda_modifiers(this);
      };
      AST_PrivateMethod.prototype._size = function() {
        return AST_ConciseMethod.prototype._size.call(this) + 1;
      };
      AST_PrivateGetter.prototype._size = AST_PrivateSetter.prototype._size = function() {
        return AST_ConciseMethod.prototype._size.call(this) + 4;
      };
      AST_PrivateIn.prototype._size = function() {
        return 5;
      };
      AST_Class.prototype._size = function() {
        return (this.name ? 8 : 7) + (this.extends ? 8 : 0);
      };
      AST_ClassStaticBlock.prototype._size = function() {
        return 7 + list_overhead(this.body);
      };
      AST_ClassProperty.prototype._size = function() {
        return static_size(this.static) + (typeof this.key === "string" ? this.key.length + 2 : 0) + (this.value ? 1 : 0);
      };
      AST_ClassPrivateProperty.prototype._size = function() {
        return AST_ClassProperty.prototype._size.call(this) + 1;
      };
      AST_Symbol.prototype._size = function() {
        if (!(mangle_options && this.thedef && !this.thedef.unmangleable(mangle_options))) {
          return this.name.length;
        } else {
          return 1;
        }
      };
      AST_SymbolClassProperty.prototype._size = function() {
        return this.name.length;
      };
      AST_SymbolRef.prototype._size = AST_SymbolDeclaration.prototype._size = function() {
        if (this.name === "arguments")
          return 9;
        return AST_Symbol.prototype._size.call(this);
      };
      AST_NewTarget.prototype._size = () => 10;
      AST_SymbolImportForeign.prototype._size = function() {
        return this.name.length;
      };
      AST_SymbolExportForeign.prototype._size = function() {
        return this.name.length;
      };
      AST_This.prototype._size = () => 4;
      AST_Super.prototype._size = () => 5;
      AST_String.prototype._size = function() {
        return this.value.length + 2;
      };
      AST_Number.prototype._size = function() {
        const { value } = this;
        if (value === 0)
          return 1;
        if (value > 0 && Math.floor(value) === value) {
          return Math.floor(Math.log10(value) + 1);
        }
        return value.toString().length;
      };
      AST_BigInt.prototype._size = function() {
        return this.value.length;
      };
      AST_RegExp.prototype._size = function() {
        return this.value.toString().length;
      };
      AST_Null.prototype._size = () => 4;
      AST_NaN.prototype._size = () => 3;
      AST_Undefined.prototype._size = () => 6;
      AST_Hole.prototype._size = () => 0;
      AST_Infinity.prototype._size = () => 8;
      AST_True.prototype._size = () => 4;
      AST_False.prototype._size = () => 5;
      AST_Await.prototype._size = () => 6;
      AST_Yield.prototype._size = () => 6;
      const UNUSED = 1;
      const TRUTHY = 2;
      const FALSY = 4;
      const UNDEFINED = 8;
      const INLINED = 16;
      const WRITE_ONLY = 32;
      const SQUEEZED = 256;
      const OPTIMIZED = 512;
      const TOP = 1024;
      const CLEAR_BETWEEN_PASSES = SQUEEZED | OPTIMIZED | TOP;
      const has_flag = (node, flag) => node.flags & flag;
      const set_flag = (node, flag) => {
        node.flags |= flag;
      };
      const clear_flag = (node, flag) => {
        node.flags &= ~flag;
      };
      function merge_sequence(array, node) {
        if (node instanceof AST_Sequence) {
          array.push(...node.expressions);
        } else {
          array.push(node);
        }
        return array;
      }
      function make_sequence(orig, expressions) {
        if (expressions.length == 1)
          return expressions[0];
        if (expressions.length == 0)
          throw new Error("trying to create a sequence with length zero!");
        return make_node(AST_Sequence, orig, {
          expressions: expressions.reduce(merge_sequence, [])
        });
      }
      function make_node_from_constant(val, orig) {
        switch (typeof val) {
          case "string":
            return make_node(AST_String, orig, {
              value: val
            });
          case "number":
            if (isNaN(val))
              return make_node(AST_NaN, orig);
            if (isFinite(val)) {
              return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {
                operator: "-",
                expression: make_node(AST_Number, orig, { value: -val })
              }) : make_node(AST_Number, orig, { value: val });
            }
            return val < 0 ? make_node(AST_UnaryPrefix, orig, {
              operator: "-",
              expression: make_node(AST_Infinity, orig)
            }) : make_node(AST_Infinity, orig);
          case "boolean":
            return make_node(val ? AST_True : AST_False, orig);
          case "undefined":
            return make_node(AST_Undefined, orig);
          default:
            if (val === null) {
              return make_node(AST_Null, orig, { value: null });
            }
            if (val instanceof RegExp) {
              return make_node(AST_RegExp, orig, {
                value: {
                  source: regexp_source_fix(val.source),
                  flags: val.flags
                }
              });
            }
            throw new Error(string_template("Can't handle constant of type: {type}", {
              type: typeof val
            }));
        }
      }
      function best_of_expression(ast1, ast2) {
        return ast1.size() > ast2.size() ? ast2 : ast1;
      }
      function best_of_statement(ast1, ast2) {
        return best_of_expression(make_node(AST_SimpleStatement, ast1, {
          body: ast1
        }), make_node(AST_SimpleStatement, ast2, {
          body: ast2
        })).body;
      }
      function best_of(compressor, ast1, ast2) {
        if (first_in_statement(compressor)) {
          return best_of_statement(ast1, ast2);
        } else {
          return best_of_expression(ast1, ast2);
        }
      }
      function get_simple_key(key) {
        if (key instanceof AST_Constant) {
          return key.getValue();
        }
        if (key instanceof AST_UnaryPrefix && key.operator == "void" && key.expression instanceof AST_Constant) {
          return;
        }
        return key;
      }
      function read_property(obj, key) {
        key = get_simple_key(key);
        if (key instanceof AST_Node)
          return;
        var value;
        if (obj instanceof AST_Array) {
          var elements = obj.elements;
          if (key == "length")
            return make_node_from_constant(elements.length, obj);
          if (typeof key == "number" && key in elements)
            value = elements[key];
        } else if (obj instanceof AST_Object) {
          key = "" + key;
          var props = obj.properties;
          for (var i = props.length; --i >= 0; ) {
            var prop = props[i];
            if (!(prop instanceof AST_ObjectKeyVal))
              return;
            if (!value && props[i].key === key)
              value = props[i].value;
          }
        }
        return value instanceof AST_SymbolRef && value.fixed_value() || value;
      }
      function has_break_or_continue(loop, parent) {
        var found = false;
        var tw = new TreeWalker(function(node) {
          if (found || node instanceof AST_Scope)
            return true;
          if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) {
            return found = true;
          }
        });
        if (parent instanceof AST_LabeledStatement)
          tw.push(parent);
        tw.push(loop);
        loop.body.walk(tw);
        return found;
      }
      function maintain_this_binding(parent, orig, val) {
        if (parent instanceof AST_UnaryPrefix && parent.operator == "delete" || parent instanceof AST_Call && parent.expression === orig && (val instanceof AST_Chain || val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == "eval")) {
          const zero = make_node(AST_Number, orig, { value: 0 });
          return make_sequence(orig, [zero, val]);
        } else {
          return val;
        }
      }
      function is_func_expr(node) {
        return node instanceof AST_Arrow || node instanceof AST_Function;
      }
      function is_iife_call(node) {
        if (node.TYPE != "Call")
          return false;
        return node.expression instanceof AST_Function || is_iife_call(node.expression);
      }
      function is_empty(thing) {
        if (thing === null)
          return true;
        if (thing instanceof AST_EmptyStatement)
          return true;
        if (thing instanceof AST_BlockStatement)
          return thing.body.length == 0;
        return false;
      }
      const identifier_atom = makePredicate("Infinity NaN undefined");
      function is_identifier_atom(node) {
        return node instanceof AST_Infinity || node instanceof AST_NaN || node instanceof AST_Undefined;
      }
      function is_ref_of(ref, type) {
        if (!(ref instanceof AST_SymbolRef))
          return false;
        var orig = ref.definition().orig;
        for (var i = orig.length; --i >= 0; ) {
          if (orig[i] instanceof type)
            return true;
        }
      }
      function can_be_evicted_from_block(node) {
        return !(node instanceof AST_DefClass || node instanceof AST_Defun || node instanceof AST_Let || node instanceof AST_Const || node instanceof AST_Export || node instanceof AST_Import);
      }
      function as_statement_array(thing) {
        if (thing === null)
          return [];
        if (thing instanceof AST_BlockStatement)
          return thing.body;
        if (thing instanceof AST_EmptyStatement)
          return [];
        if (thing instanceof AST_Statement)
          return [thing];
        throw new Error("Can't convert thing to statement array");
      }
      function is_reachable(scope_node, defs) {
        const find_ref = (node) => {
          if (node instanceof AST_SymbolRef && defs.includes(node.definition())) {
            return walk_abort;
          }
        };
        return walk_parent(scope_node, (node, info) => {
          if (node instanceof AST_Scope && node !== scope_node) {
            var parent = info.parent();
            if (parent instanceof AST_Call && parent.expression === node && !(node.async || node.is_generator)) {
              return;
            }
            if (walk(node, find_ref))
              return walk_abort;
            return true;
          }
        });
      }
      function is_recursive_ref(compressor, def) {
        var node;
        for (var i = 0; node = compressor.parent(i); i++) {
          if (node instanceof AST_Lambda || node instanceof AST_Class) {
            var name = node.name;
            if (name && name.definition() === def) {
              return true;
            }
          }
        }
        return false;
      }
      function retain_top_func(fn, compressor) {
        return compressor.top_retain && fn instanceof AST_Defun && has_flag(fn, TOP) && fn.name && compressor.top_retain(fn.name.definition());
      }
      function make_nested_lookup(obj) {
        const out = /* @__PURE__ */ new Map();
        for (var key of Object.keys(obj)) {
          out.set(key, makePredicate(obj[key]));
        }
        const does_have = (global_name, fname) => {
          const inner_map = out.get(global_name);
          return inner_map != null && inner_map.has(fname);
        };
        return does_have;
      }
      const pure_prop_access_globals = /* @__PURE__ */ new Set([
        "Number",
        "String",
        "Array",
        "Object",
        "Function",
        "Promise"
      ]);
      const object_methods = [
        "constructor",
        "toString",
        "valueOf"
      ];
      const is_pure_native_method = make_nested_lookup({
        Array: [
          "at",
          "flat",
          "includes",
          "indexOf",
          "join",
          "lastIndexOf",
          "slice",
          ...object_methods
        ],
        Boolean: object_methods,
        Function: object_methods,
        Number: [
          "toExponential",
          "toFixed",
          "toPrecision",
          ...object_methods
        ],
        Object: object_methods,
        RegExp: [
          "test",
          ...object_methods
        ],
        String: [
          "at",
          "charAt",
          "charCodeAt",
          "charPointAt",
          "concat",
          "endsWith",
          "fromCharCode",
          "fromCodePoint",
          "includes",
          "indexOf",
          "italics",
          "lastIndexOf",
          "localeCompare",
          "match",
          "matchAll",
          "normalize",
          "padStart",
          "padEnd",
          "repeat",
          "replace",
          "replaceAll",
          "search",
          "slice",
          "split",
          "startsWith",
          "substr",
          "substring",
          "repeat",
          "toLocaleLowerCase",
          "toLocaleUpperCase",
          "toLowerCase",
          "toUpperCase",
          "trim",
          "trimEnd",
          "trimStart",
          ...object_methods
        ]
      });
      const is_pure_native_fn = make_nested_lookup({
        Array: [
          "isArray"
        ],
        Math: [
          "abs",
          "acos",
          "asin",
          "atan",
          "ceil",
          "cos",
          "exp",
          "floor",
          "log",
          "round",
          "sin",
          "sqrt",
          "tan",
          "atan2",
          "pow",
          "max",
          "min"
        ],
        Number: [
          "isFinite",
          "isNaN"
        ],
        Object: [
          "create",
          "getOwnPropertyDescriptor",
          "getOwnPropertyNames",
          "getPrototypeOf",
          "isExtensible",
          "isFrozen",
          "isSealed",
          "hasOwn",
          "keys"
        ],
        String: [
          "fromCharCode"
        ]
      });
      const is_pure_native_value = make_nested_lookup({
        Math: [
          "E",
          "LN10",
          "LN2",
          "LOG2E",
          "LOG10E",
          "PI",
          "SQRT1_2",
          "SQRT2"
        ],
        Number: [
          "MAX_VALUE",
          "MIN_VALUE",
          "NaN",
          "NEGATIVE_INFINITY",
          "POSITIVE_INFINITY"
        ]
      });
      const is_undeclared_ref = (node) => node instanceof AST_SymbolRef && node.definition().undeclared;
      const lazy_op = makePredicate("&& || ??");
      const unary_side_effects = makePredicate("delete ++ --");
      (function(def_is_boolean) {
        const unary_bool = makePredicate("! delete");
        const binary_bool = makePredicate("in instanceof == != === !== < <= >= >");
        def_is_boolean(AST_Node, return_false);
        def_is_boolean(AST_UnaryPrefix, function() {
          return unary_bool.has(this.operator);
        });
        def_is_boolean(AST_Binary, function() {
          return binary_bool.has(this.operator) || lazy_op.has(this.operator) && this.left.is_boolean() && this.right.is_boolean();
        });
        def_is_boolean(AST_Conditional, function() {
          return this.consequent.is_boolean() && this.alternative.is_boolean();
        });
        def_is_boolean(AST_Assign, function() {
          return this.operator == "=" && this.right.is_boolean();
        });
        def_is_boolean(AST_Sequence, function() {
          return this.tail_node().is_boolean();
        });
        def_is_boolean(AST_True, return_true);
        def_is_boolean(AST_False, return_true);
      })(function(node, func) {
        node.DEFMETHOD("is_boolean", func);
      });
      (function(def_is_number) {
        def_is_number(AST_Node, return_false);
        def_is_number(AST_Number, return_true);
        const unary = makePredicate("+ - ~ ++ --");
        def_is_number(AST_Unary, function() {
          return unary.has(this.operator) && !(this.expression instanceof AST_BigInt);
        });
        const numeric_ops = makePredicate("- * / % & | ^ << >> >>>");
        def_is_number(AST_Binary, function(compressor) {
          return numeric_ops.has(this.operator) || this.operator == "+" && this.left.is_number(compressor) && this.right.is_number(compressor);
        });
        def_is_number(AST_Assign, function(compressor) {
          return numeric_ops.has(this.operator.slice(0, -1)) || this.operator == "=" && this.right.is_number(compressor);
        });
        def_is_number(AST_Sequence, function(compressor) {
          return this.tail_node().is_number(compressor);
        });
        def_is_number(AST_Conditional, function(compressor) {
          return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);
        });
      })(function(node, func) {
        node.DEFMETHOD("is_number", func);
      });
      (function(def_is_string) {
        def_is_string(AST_Node, return_false);
        def_is_string(AST_String, return_true);
        def_is_string(AST_TemplateString, return_true);
        def_is_string(AST_UnaryPrefix, function() {
          return this.operator == "typeof";
        });
        def_is_string(AST_Binary, function(compressor) {
          return this.operator == "+" && (this.left.is_string(compressor) || this.right.is_string(compressor));
        });
        def_is_string(AST_Assign, function(compressor) {
          return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor);
        });
        def_is_string(AST_Sequence, function(compressor) {
          return this.tail_node().is_string(compressor);
        });
        def_is_string(AST_Conditional, function(compressor) {
          return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);
        });
      })(function(node, func) {
        node.DEFMETHOD("is_string", func);
      });
      function is_undefined(node, compressor) {
        return has_flag(node, UNDEFINED) || node instanceof AST_Undefined || node instanceof AST_UnaryPrefix && node.operator == "void" && !node.expression.has_side_effects(compressor);
      }
      function is_null_or_undefined(node, compressor) {
        let fixed;
        return node instanceof AST_Null || is_undefined(node, compressor) || node instanceof AST_SymbolRef && (fixed = node.definition().fixed) instanceof AST_Node && is_nullish(fixed, compressor);
      }
      function is_nullish_shortcircuited(node, compressor) {
        if (node instanceof AST_PropAccess || node instanceof AST_Call) {
          return node.optional && is_null_or_undefined(node.expression, compressor) || is_nullish_shortcircuited(node.expression, compressor);
        }
        if (node instanceof AST_Chain)
          return is_nullish_shortcircuited(node.expression, compressor);
        return false;
      }
      function is_nullish(node, compressor) {
        if (is_null_or_undefined(node, compressor))
          return true;
        return is_nullish_shortcircuited(node, compressor);
      }
      (function(def_has_side_effects) {
        def_has_side_effects(AST_Node, return_true);
        def_has_side_effects(AST_EmptyStatement, return_false);
        def_has_side_effects(AST_Constant, return_false);
        def_has_side_effects(AST_This, return_false);
        function any(list2, compressor) {
          for (var i = list2.length; --i >= 0; )
            if (list2[i].has_side_effects(compressor))
              return true;
          return false;
        }
        def_has_side_effects(AST_Block, function(compressor) {
          return any(this.body, compressor);
        });
        def_has_side_effects(AST_Call, function(compressor) {
          if (!this.is_callee_pure(compressor) && (!this.expression.is_call_pure(compressor) || this.expression.has_side_effects(compressor))) {
            return true;
          }
          return any(this.args, compressor);
        });
        def_has_side_effects(AST_Switch, function(compressor) {
          return this.expression.has_side_effects(compressor) || any(this.body, compressor);
        });
        def_has_side_effects(AST_Case, function(compressor) {
          return this.expression.has_side_effects(compressor) || any(this.body, compressor);
        });
        def_has_side_effects(AST_Try, function(compressor) {
          return this.body.has_side_effects(compressor) || this.bcatch && this.bcatch.has_side_effects(compressor) || this.bfinally && this.bfinally.has_side_effects(compressor);
        });
        def_has_side_effects(AST_If, function(compressor) {
          return this.condition.has_side_effects(compressor) || this.body && this.body.has_side_effects(compressor) || this.alternative && this.alternative.has_side_effects(compressor);
        });
        def_has_side_effects(AST_ImportMeta, return_false);
        def_has_side_effects(AST_LabeledStatement, function(compressor) {
          return this.body.has_side_effects(compressor);
        });
        def_has_side_effects(AST_SimpleStatement, function(compressor) {
          return this.body.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Lambda, return_false);
        def_has_side_effects(AST_Class, function(compressor) {
          if (this.extends && this.extends.has_side_effects(compressor)) {
            return true;
          }
          return any(this.properties, compressor);
        });
        def_has_side_effects(AST_ClassStaticBlock, function(compressor) {
          return any(this.body, compressor);
        });
        def_has_side_effects(AST_Binary, function(compressor) {
          return this.left.has_side_effects(compressor) || this.right.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Assign, return_true);
        def_has_side_effects(AST_Conditional, function(compressor) {
          return this.condition.has_side_effects(compressor) || this.consequent.has_side_effects(compressor) || this.alternative.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Unary, function(compressor) {
          return unary_side_effects.has(this.operator) || this.expression.has_side_effects(compressor);
        });
        def_has_side_effects(AST_SymbolRef, function(compressor) {
          return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
        });
        def_has_side_effects(AST_SymbolClassProperty, return_false);
        def_has_side_effects(AST_SymbolDeclaration, return_false);
        def_has_side_effects(AST_Object, function(compressor) {
          return any(this.properties, compressor);
        });
        def_has_side_effects(AST_ObjectProperty, function(compressor) {
          return this.computed_key() && this.key.has_side_effects(compressor) || this.value && this.value.has_side_effects(compressor);
        });
        def_has_side_effects(AST_ClassProperty, function(compressor) {
          return this.computed_key() && this.key.has_side_effects(compressor) || this.static && this.value && this.value.has_side_effects(compressor);
        });
        def_has_side_effects(AST_ConciseMethod, function(compressor) {
          return this.computed_key() && this.key.has_side_effects(compressor);
        });
        def_has_side_effects(AST_ObjectGetter, function(compressor) {
          return this.computed_key() && this.key.has_side_effects(compressor);
        });
        def_has_side_effects(AST_ObjectSetter, function(compressor) {
          return this.computed_key() && this.key.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Array, function(compressor) {
          return any(this.elements, compressor);
        });
        def_has_side_effects(AST_Dot, function(compressor) {
          if (is_nullish(this, compressor)) {
            return this.expression.has_side_effects(compressor);
          }
          if (!this.optional && this.expression.may_throw_on_access(compressor)) {
            return true;
          }
          return this.expression.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Sub, function(compressor) {
          if (is_nullish(this, compressor)) {
            return this.expression.has_side_effects(compressor);
          }
          if (!this.optional && this.expression.may_throw_on_access(compressor)) {
            return true;
          }
          var property = this.property.has_side_effects(compressor);
          if (property && this.optional)
            return true;
          return property || this.expression.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Chain, function(compressor) {
          return this.expression.has_side_effects(compressor);
        });
        def_has_side_effects(AST_Sequence, function(compressor) {
          return any(this.expressions, compressor);
        });
        def_has_side_effects(AST_Definitions, function(compressor) {
          return any(this.definitions, compressor);
        });
        def_has_side_effects(AST_VarDef, function() {
          return this.value;
        });
        def_has_side_effects(AST_TemplateSegment, return_false);
        def_has_side_effects(AST_TemplateString, function(compressor) {
          return any(this.segments, compressor);
        });
      })(function(node, func) {
        node.DEFMETHOD("has_side_effects", func);
      });
      (function(def_may_throw) {
        def_may_throw(AST_Node, return_true);
        def_may_throw(AST_Constant, return_false);
        def_may_throw(AST_EmptyStatement, return_false);
        def_may_throw(AST_Lambda, return_false);
        def_may_throw(AST_SymbolDeclaration, return_false);
        def_may_throw(AST_This, return_false);
        def_may_throw(AST_ImportMeta, return_false);
        function any(list2, compressor) {
          for (var i = list2.length; --i >= 0; )
            if (list2[i].may_throw(compressor))
              return true;
          return false;
        }
        def_may_throw(AST_Class, function(compressor) {
          if (this.extends && this.extends.may_throw(compressor))
            return true;
          return any(this.properties, compressor);
        });
        def_may_throw(AST_ClassStaticBlock, function(compressor) {
          return any(this.body, compressor);
        });
        def_may_throw(AST_Array, function(compressor) {
          return any(this.elements, compressor);
        });
        def_may_throw(AST_Assign, function(compressor) {
          if (this.right.may_throw(compressor))
            return true;
          if (!compressor.has_directive("use strict") && this.operator == "=" && this.left instanceof AST_SymbolRef) {
            return false;
          }
          return this.left.may_throw(compressor);
        });
        def_may_throw(AST_Binary, function(compressor) {
          return this.left.may_throw(compressor) || this.right.may_throw(compressor);
        });
        def_may_throw(AST_Block, function(compressor) {
          return any(this.body, compressor);
        });
        def_may_throw(AST_Call, function(compressor) {
          if (is_nullish(this, compressor))
            return false;
          if (any(this.args, compressor))
            return true;
          if (this.is_callee_pure(compressor))
            return false;
          if (this.expression.may_throw(compressor))
            return true;
          return !(this.expression instanceof AST_Lambda) || any(this.expression.body, compressor);
        });
        def_may_throw(AST_Case, function(compressor) {
          return this.expression.may_throw(compressor) || any(this.body, compressor);
        });
        def_may_throw(AST_Conditional, function(compressor) {
          return this.condition.may_throw(compressor) || this.consequent.may_throw(compressor) || this.alternative.may_throw(compressor);
        });
        def_may_throw(AST_Definitions, function(compressor) {
          return any(this.definitions, compressor);
        });
        def_may_throw(AST_If, function(compressor) {
          return this.condition.may_throw(compressor) || this.body && this.body.may_throw(compressor) || this.alternative && this.alternative.may_throw(compressor);
        });
        def_may_throw(AST_LabeledStatement, function(compressor) {
          return this.body.may_throw(compressor);
        });
        def_may_throw(AST_Object, function(compressor) {
          return any(this.properties, compressor);
        });
        def_may_throw(AST_ObjectProperty, function(compressor) {
          return this.value ? this.value.may_throw(compressor) : false;
        });
        def_may_throw(AST_ClassProperty, function(compressor) {
          return this.computed_key() && this.key.may_throw(compressor) || this.static && this.value && this.value.may_throw(compressor);
        });
        def_may_throw(AST_ConciseMethod, function(compressor) {
          return this.computed_key() && this.key.may_throw(compressor);
        });
        def_may_throw(AST_ObjectGetter, function(compressor) {
          return this.computed_key() && this.key.may_throw(compressor);
        });
        def_may_throw(AST_ObjectSetter, function(compressor) {
          return this.computed_key() && this.key.may_throw(compressor);
        });
        def_may_throw(AST_Return, function(compressor) {
          return this.value && this.value.may_throw(compressor);
        });
        def_may_throw(AST_Sequence, function(compressor) {
          return any(this.expressions, compressor);
        });
        def_may_throw(AST_SimpleStatement, function(compressor) {
          return this.body.may_throw(compressor);
        });
        def_may_throw(AST_Dot, function(compressor) {
          if (is_nullish(this, compressor))
            return false;
          return !this.optional && this.expression.may_throw_on_access(compressor) || this.expression.may_throw(compressor);
        });
        def_may_throw(AST_Sub, function(compressor) {
          if (is_nullish(this, compressor))
            return false;
          return !this.optional && this.expression.may_throw_on_access(compressor) || this.expression.may_throw(compressor) || this.property.may_throw(compressor);
        });
        def_may_throw(AST_Chain, function(compressor) {
          return this.expression.may_throw(compressor);
        });
        def_may_throw(AST_Switch, function(compressor) {
          return this.expression.may_throw(compressor) || any(this.body, compressor);
        });
        def_may_throw(AST_SymbolRef, function(compressor) {
          return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
        });
        def_may_throw(AST_SymbolClassProperty, return_false);
        def_may_throw(AST_Try, function(compressor) {
          return this.bcatch ? this.bcatch.may_throw(compressor) : this.body.may_throw(compressor) || this.bfinally && this.bfinally.may_throw(compressor);
        });
        def_may_throw(AST_Unary, function(compressor) {
          if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
            return false;
          return this.expression.may_throw(compressor);
        });
        def_may_throw(AST_VarDef, function(compressor) {
          if (!this.value)
            return false;
          return this.value.may_throw(compressor);
        });
      })(function(node, func) {
        node.DEFMETHOD("may_throw", func);
      });
      (function(def_is_constant_expression) {
        function all_refs_local(scope) {
          let result = true;
          walk(this, (node) => {
            if (node instanceof AST_SymbolRef) {
              if (has_flag(this, INLINED)) {
                result = false;
                return walk_abort;
              }
              var def = node.definition();
              if (member(def, this.enclosed) && !this.variables.has(def.name)) {
                if (scope) {
                  var scope_def = scope.find_variable(node);
                  if (def.undeclared ? !scope_def : scope_def === def) {
                    result = "f";
                    return true;
                  }
                }
                result = false;
                return walk_abort;
              }
              return true;
            }
            if (node instanceof AST_This && this instanceof AST_Arrow) {
              result = false;
              return walk_abort;
            }
          });
          return result;
        }
        def_is_constant_expression(AST_Node, return_false);
        def_is_constant_expression(AST_Constant, return_true);
        def_is_constant_expression(AST_Class, function(scope) {
          if (this.extends && !this.extends.is_constant_expression(scope)) {
            return false;
          }
          for (const prop of this.properties) {
            if (prop.computed_key() && !prop.key.is_constant_expression(scope)) {
              return false;
            }
            if (prop.static && prop.value && !prop.value.is_constant_expression(scope)) {
              return false;
            }
            if (prop instanceof AST_ClassStaticBlock) {
              return false;
            }
          }
          return all_refs_local.call(this, scope);
        });
        def_is_constant_expression(AST_Lambda, all_refs_local);
        def_is_constant_expression(AST_Unary, function() {
          return this.expression.is_constant_expression();
        });
        def_is_constant_expression(AST_Binary, function() {
          return this.left.is_constant_expression() && this.right.is_constant_expression();
        });
        def_is_constant_expression(AST_Array, function() {
          return this.elements.every((l) => l.is_constant_expression());
        });
        def_is_constant_expression(AST_Object, function() {
          return this.properties.every((l) => l.is_constant_expression());
        });
        def_is_constant_expression(AST_ObjectProperty, function() {
          return !!(!(this.key instanceof AST_Node) && this.value && this.value.is_constant_expression());
        });
      })(function(node, func) {
        node.DEFMETHOD("is_constant_expression", func);
      });
      (function(def_may_throw_on_access) {
        AST_Node.DEFMETHOD("may_throw_on_access", function(compressor) {
          return !compressor.option("pure_getters") || this._dot_throw(compressor);
        });
        function is_strict(compressor) {
          return /strict/.test(compressor.option("pure_getters"));
        }
        def_may_throw_on_access(AST_Node, is_strict);
        def_may_throw_on_access(AST_Null, return_true);
        def_may_throw_on_access(AST_Undefined, return_true);
        def_may_throw_on_access(AST_Constant, return_false);
        def_may_throw_on_access(AST_Array, return_false);
        def_may_throw_on_access(AST_Object, function(compressor) {
          if (!is_strict(compressor))
            return false;
          for (var i = this.properties.length; --i >= 0; )
            if (this.properties[i]._dot_throw(compressor))
              return true;
          return false;
        });
        def_may_throw_on_access(AST_Class, return_false);
        def_may_throw_on_access(AST_ObjectProperty, return_false);
        def_may_throw_on_access(AST_ObjectGetter, return_true);
        def_may_throw_on_access(AST_Expansion, function(compressor) {
          return this.expression._dot_throw(compressor);
        });
        def_may_throw_on_access(AST_Function, return_false);
        def_may_throw_on_access(AST_Arrow, return_false);
        def_may_throw_on_access(AST_UnaryPostfix, return_false);
        def_may_throw_on_access(AST_UnaryPrefix, function() {
          return this.operator == "void";
        });
        def_may_throw_on_access(AST_Binary, function(compressor) {
          return (this.operator == "&&" || this.operator == "||" || this.operator == "??") && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor));
        });
        def_may_throw_on_access(AST_Assign, function(compressor) {
          if (this.logical)
            return true;
          return this.operator == "=" && this.right._dot_throw(compressor);
        });
        def_may_throw_on_access(AST_Conditional, function(compressor) {
          return this.consequent._dot_throw(compressor) || this.alternative._dot_throw(compressor);
        });
        def_may_throw_on_access(AST_Dot, function(compressor) {
          if (!is_strict(compressor))
            return false;
          if (this.property == "prototype") {
            return !(this.expression instanceof AST_Function || this.expression instanceof AST_Class);
          }
          return true;
        });
        def_may_throw_on_access(AST_Chain, function(compressor) {
          return this.expression._dot_throw(compressor);
        });
        def_may_throw_on_access(AST_Sequence, function(compressor) {
          return this.tail_node()._dot_throw(compressor);
        });
        def_may_throw_on_access(AST_SymbolRef, function(compressor) {
          if (this.name === "arguments" && this.scope instanceof AST_Lambda)
            return false;
          if (has_flag(this, UNDEFINED))
            return true;
          if (!is_strict(compressor))
            return false;
          if (is_undeclared_ref(this) && this.is_declared(compressor))
            return false;
          if (this.is_immutable())
            return false;
          var fixed = this.fixed_value();
          return !fixed || fixed._dot_throw(compressor);
        });
      })(function(node, func) {
        node.DEFMETHOD("_dot_throw", func);
      });
      function is_lhs(node, parent) {
        if (parent instanceof AST_Unary && unary_side_effects.has(parent.operator))
          return parent.expression;
        if (parent instanceof AST_Assign && parent.left === node)
          return node;
        if (parent instanceof AST_ForIn && parent.init === node)
          return node;
      }
      (function(def_negate) {
        function basic_negation(exp) {
          return make_node(AST_UnaryPrefix, exp, {
            operator: "!",
            expression: exp
          });
        }
        function best(orig, alt, first_in_statement2) {
          var negated = basic_negation(orig);
          if (first_in_statement2) {
            var stat = make_node(AST_SimpleStatement, alt, {
              body: alt
            });
            return best_of_expression(negated, stat) === stat ? alt : negated;
          }
          return best_of_expression(negated, alt);
        }
        def_negate(AST_Node, function() {
          return basic_negation(this);
        });
        def_negate(AST_Statement, function() {
          throw new Error("Cannot negate a statement");
        });
        def_negate(AST_Function, function() {
          return basic_negation(this);
        });
        def_negate(AST_Class, function() {
          return basic_negation(this);
        });
        def_negate(AST_Arrow, function() {
          return basic_negation(this);
        });
        def_negate(AST_UnaryPrefix, function() {
          if (this.operator == "!")
            return this.expression;
          return basic_negation(this);
        });
        def_negate(AST_Sequence, function(compressor) {
          var expressions = this.expressions.slice();
          expressions.push(expressions.pop().negate(compressor));
          return make_sequence(this, expressions);
        });
        def_negate(AST_Conditional, function(compressor, first_in_statement2) {
          var self2 = this.clone();
          self2.consequent = self2.consequent.negate(compressor);
          self2.alternative = self2.alternative.negate(compressor);
          return best(this, self2, first_in_statement2);
        });
        def_negate(AST_Binary, function(compressor, first_in_statement2) {
          var self2 = this.clone(), op = this.operator;
          if (compressor.option("unsafe_comps")) {
            switch (op) {
              case "<=":
                self2.operator = ">";
                return self2;
              case "<":
                self2.operator = ">=";
                return self2;
              case ">=":
                self2.operator = "<";
                return self2;
              case ">":
                self2.operator = "<=";
                return self2;
            }
          }
          switch (op) {
            case "==":
              self2.operator = "!=";
              return self2;
            case "!=":
              self2.operator = "==";
              return self2;
            case "===":
              self2.operator = "!==";
              return self2;
            case "!==":
              self2.operator = "===";
              return self2;
            case "&&":
              self2.operator = "||";
              self2.left = self2.left.negate(compressor, first_in_statement2);
              self2.right = self2.right.negate(compressor);
              return best(this, self2, first_in_statement2);
            case "||":
              self2.operator = "&&";
              self2.left = self2.left.negate(compressor, first_in_statement2);
              self2.right = self2.right.negate(compressor);
              return best(this, self2, first_in_statement2);
          }
          return basic_negation(this);
        });
      })(function(node, func) {
        node.DEFMETHOD("negate", function(compressor, first_in_statement2) {
          return func.call(this, compressor, first_in_statement2);
        });
      });
      var global_pure_fns = makePredicate("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError");
      AST_Call.DEFMETHOD("is_callee_pure", function(compressor) {
        if (compressor.option("unsafe")) {
          var expr = this.expression;
          var first_arg = this.args && this.args[0] && this.args[0].evaluate(compressor);
          if (expr.expression && expr.expression.name === "hasOwnProperty" && (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) {
            return false;
          }
          if (is_undeclared_ref(expr) && global_pure_fns.has(expr.name))
            return true;
          if (expr instanceof AST_Dot && is_undeclared_ref(expr.expression) && is_pure_native_fn(expr.expression.name, expr.property)) {
            return true;
          }
        }
        if (this instanceof AST_New && compressor.option("pure_new")) {
          return true;
        }
        if (compressor.option("side_effects") && has_annotation(this, _PURE)) {
          return true;
        }
        return !compressor.pure_funcs(this);
      });
      AST_Node.DEFMETHOD("is_call_pure", return_false);
      AST_Dot.DEFMETHOD("is_call_pure", function(compressor) {
        if (!compressor.option("unsafe"))
          return;
        const expr = this.expression;
        let native_obj;
        if (expr instanceof AST_Array) {
          native_obj = "Array";
        } else if (expr.is_boolean()) {
          native_obj = "Boolean";
        } else if (expr.is_number(compressor)) {
          native_obj = "Number";
        } else if (expr instanceof AST_RegExp) {
          native_obj = "RegExp";
        } else if (expr.is_string(compressor)) {
          native_obj = "String";
        } else if (!this.may_throw_on_access(compressor)) {
          native_obj = "Object";
        }
        return native_obj != null && is_pure_native_method(native_obj, this.property);
      });
      const aborts = (thing) => thing && thing.aborts();
      (function(def_aborts) {
        def_aborts(AST_Statement, return_null);
        def_aborts(AST_Jump, return_this);
        function block_aborts() {
          for (var i = 0; i < this.body.length; i++) {
            if (aborts(this.body[i])) {
              return this.body[i];
            }
          }
          return null;
        }
        def_aborts(AST_Import, return_null);
        def_aborts(AST_BlockStatement, block_aborts);
        def_aborts(AST_SwitchBranch, block_aborts);
        def_aborts(AST_DefClass, function() {
          for (const prop of this.properties) {
            if (prop instanceof AST_ClassStaticBlock) {
              if (prop.aborts())
                return prop;
            }
          }
          return null;
        });
        def_aborts(AST_ClassStaticBlock, block_aborts);
        def_aborts(AST_If, function() {
          return this.alternative && aborts(this.body) && aborts(this.alternative) && this;
        });
      })(function(node, func) {
        node.DEFMETHOD("aborts", func);
      });
      AST_Node.DEFMETHOD("contains_this", function() {
        return walk(this, (node) => {
          if (node instanceof AST_This)
            return walk_abort;
          if (node !== this && node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
            return true;
          }
        });
      });
      function is_modified(compressor, tw, node, value, level, immutable) {
        var parent = tw.parent(level);
        var lhs = is_lhs(node, parent);
        if (lhs)
          return lhs;
        if (!immutable && parent instanceof AST_Call && parent.expression === node && !(value instanceof AST_Arrow) && !(value instanceof AST_Class) && !parent.is_callee_pure(compressor) && (!(value instanceof AST_Function) || !(parent instanceof AST_New) && value.contains_this())) {
          return true;
        }
        if (parent instanceof AST_Array) {
          return is_modified(compressor, tw, parent, parent, level + 1);
        }
        if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
          var obj = tw.parent(level + 1);
          return is_modified(compressor, tw, obj, obj, level + 2);
        }
        if (parent instanceof AST_PropAccess && parent.expression === node) {
          var prop = read_property(value, parent.property);
          return !immutable && is_modified(compressor, tw, parent, prop, level + 1);
        }
      }
      function def_eval(node, func) {
        node.DEFMETHOD("_eval", func);
      }
      const nullish = Symbol("This AST_Chain is nullish");
      AST_Node.DEFMETHOD("evaluate", function(compressor) {
        if (!compressor.option("evaluate"))
          return this;
        var val = this._eval(compressor, 1);
        if (!val || val instanceof RegExp)
          return val;
        if (typeof val == "function" || typeof val == "object" || val == nullish)
          return this;
        if (typeof val === "string") {
          const unevaluated_size = this.size(compressor);
          if (val.length + 2 > unevaluated_size)
            return this;
        }
        return val;
      });
      var unaryPrefix = makePredicate("! ~ - + void");
      AST_Node.DEFMETHOD("is_constant", function() {
        if (this instanceof AST_Constant) {
          return !(this instanceof AST_RegExp);
        } else {
          return this instanceof AST_UnaryPrefix && this.expression instanceof AST_Constant && unaryPrefix.has(this.operator);
        }
      });
      def_eval(AST_Statement, function() {
        throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start));
      });
      def_eval(AST_Lambda, return_this);
      def_eval(AST_Class, return_this);
      def_eval(AST_Node, return_this);
      def_eval(AST_Constant, function() {
        return this.getValue();
      });
      def_eval(AST_BigInt, return_this);
      def_eval(AST_RegExp, function(compressor) {
        let evaluated = compressor.evaluated_regexps.get(this.value);
        if (evaluated === void 0 && regexp_is_safe(this.value.source)) {
          try {
            const { source, flags } = this.value;
            evaluated = new RegExp(source, flags);
          } catch (e) {
            evaluated = null;
          }
          compressor.evaluated_regexps.set(this.value, evaluated);
        }
        return evaluated || this;
      });
      def_eval(AST_TemplateString, function() {
        if (this.segments.length !== 1)
          return this;
        return this.segments[0].value;
      });
      def_eval(AST_Function, function(compressor) {
        if (compressor.option("unsafe")) {
          var fn = function() {
          };
          fn.node = this;
          fn.toString = () => this.print_to_string();
          return fn;
        }
        return this;
      });
      def_eval(AST_Array, function(compressor, depth) {
        if (compressor.option("unsafe")) {
          var elements = [];
          for (var i = 0, len = this.elements.length; i < len; i++) {
            var element = this.elements[i];
            var value = element._eval(compressor, depth);
            if (element === value)
              return this;
            elements.push(value);
          }
          return elements;
        }
        return this;
      });
      def_eval(AST_Object, function(compressor, depth) {
        if (compressor.option("unsafe")) {
          var val = {};
          for (var i = 0, len = this.properties.length; i < len; i++) {
            var prop = this.properties[i];
            if (prop instanceof AST_Expansion)
              return this;
            var key = prop.key;
            if (key instanceof AST_Symbol) {
              key = key.name;
            } else if (key instanceof AST_Node) {
              key = key._eval(compressor, depth);
              if (key === prop.key)
                return this;
            }
            if (typeof Object.prototype[key] === "function") {
              return this;
            }
            if (prop.value instanceof AST_Function)
              continue;
            val[key] = prop.value._eval(compressor, depth);
            if (val[key] === prop.value)
              return this;
          }
          return val;
        }
        return this;
      });
      var non_converting_unary = makePredicate("! typeof void");
      def_eval(AST_UnaryPrefix, function(compressor, depth) {
        var e = this.expression;
        if (compressor.option("typeofs") && this.operator == "typeof" && (e instanceof AST_Lambda || e instanceof AST_SymbolRef && e.fixed_value() instanceof AST_Lambda)) {
          return "function";
        }
        if (!non_converting_unary.has(this.operator))
          depth++;
        e = e._eval(compressor, depth);
        if (e === this.expression)
          return this;
        switch (this.operator) {
          case "!":
            return !e;
          case "typeof":
            if (e instanceof RegExp)
              return this;
            return typeof e;
          case "void":
            return void 0;
          case "~":
            return ~e;
          case "-":
            return -e;
          case "+":
            return +e;
        }
        return this;
      });
      var non_converting_binary = makePredicate("&& || ?? === !==");
      const identity_comparison = makePredicate("== != === !==");
      const has_identity = (value) => typeof value === "object" || typeof value === "function" || typeof value === "symbol";
      def_eval(AST_Binary, function(compressor, depth) {
        if (!non_converting_binary.has(this.operator))
          depth++;
        var left = this.left._eval(compressor, depth);
        if (left === this.left)
          return this;
        var right = this.right._eval(compressor, depth);
        if (right === this.right)
          return this;
        var result;
        if (left != null && right != null && identity_comparison.has(this.operator) && has_identity(left) && has_identity(right) && typeof left === typeof right) {
          return this;
        }
        switch (this.operator) {
          case "&&":
            result = left && right;
            break;
          case "||":
            result = left || right;
            break;
          case "??":
            result = left != null ? left : right;
            break;
          case "|":
            result = left | right;
            break;
          case "&":
            result = left & right;
            break;
          case "^":
            result = left ^ right;
            break;
          case "+":
            result = left + right;
            break;
          case "*":
            result = left * right;
            break;
          case "**":
            result = Math.pow(left, right);
            break;
          case "/":
            result = left / right;
            break;
          case "%":
            result = left % right;
            break;
          case "-":
            result = left - right;
            break;
          case "<<":
            result = left << right;
            break;
          case ">>":
            result = left >> right;
            break;
          case ">>>":
            result = left >>> right;
            break;
          case "==":
            result = left == right;
            break;
          case "===":
            result = left === right;
            break;
          case "!=":
            result = left != right;
            break;
          case "!==":
            result = left !== right;
            break;
          case "<":
            result = left < right;
            break;
          case "<=":
            result = left <= right;
            break;
          case ">":
            result = left > right;
            break;
          case ">=":
            result = left >= right;
            break;
          default:
            return this;
        }
        if (isNaN(result) && compressor.find_parent(AST_With)) {
          return this;
        }
        return result;
      });
      def_eval(AST_Conditional, function(compressor, depth) {
        var condition = this.condition._eval(compressor, depth);
        if (condition === this.condition)
          return this;
        var node = condition ? this.consequent : this.alternative;
        var value = node._eval(compressor, depth);
        return value === node ? this : value;
      });
      const reentrant_ref_eval = /* @__PURE__ */ new Set();
      def_eval(AST_SymbolRef, function(compressor, depth) {
        if (reentrant_ref_eval.has(this))
          return this;
        var fixed = this.fixed_value();
        if (!fixed)
          return this;
        reentrant_ref_eval.add(this);
        const value = fixed._eval(compressor, depth);
        reentrant_ref_eval.delete(this);
        if (value === fixed)
          return this;
        if (value && typeof value == "object") {
          var escaped = this.definition().escaped;
          if (escaped && depth > escaped)
            return this;
        }
        return value;
      });
      const global_objs = { Array, Math, Number, Object, String };
      const regexp_flags = /* @__PURE__ */ new Set([
        "dotAll",
        "global",
        "ignoreCase",
        "multiline",
        "sticky",
        "unicode"
      ]);
      def_eval(AST_PropAccess, function(compressor, depth) {
        let obj = this.expression._eval(compressor, depth + 1);
        if (obj === nullish || this.optional && obj == null)
          return nullish;
        if (this.property === "length") {
          if (typeof obj === "string") {
            return obj.length;
          }
          const is_spreadless_array = obj instanceof AST_Array && obj.elements.every((el) => !(el instanceof AST_Expansion));
          if (is_spreadless_array && obj.elements.every((el) => !el.has_side_effects(compressor))) {
            return obj.elements.length;
          }
        }
        if (compressor.option("unsafe")) {
          var key = this.property;
          if (key instanceof AST_Node) {
            key = key._eval(compressor, depth);
            if (key === this.property)
              return this;
          }
          var exp = this.expression;
          if (is_undeclared_ref(exp)) {
            var aa;
            var first_arg = exp.name === "hasOwnProperty" && key === "call" && (aa = compressor.parent() && compressor.parent().args) && (aa && aa[0] && aa[0].evaluate(compressor));
            first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
            if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {
              return this.clone();
            }
            if (!is_pure_native_value(exp.name, key))
              return this;
            obj = global_objs[exp.name];
          } else {
            if (obj instanceof RegExp) {
              if (key == "source") {
                return regexp_source_fix(obj.source);
              } else if (key == "flags" || regexp_flags.has(key)) {
                return obj[key];
              }
            }
            if (!obj || obj === exp || !HOP(obj, key))
              return this;
            if (typeof obj == "function")
              switch (key) {
                case "name":
                  return obj.node.name ? obj.node.name.name : "";
                case "length":
                  return obj.node.length_property();
                default:
                  return this;
              }
          }
          return obj[key];
        }
        return this;
      });
      def_eval(AST_Chain, function(compressor, depth) {
        const evaluated = this.expression._eval(compressor, depth);
        return evaluated === nullish ? void 0 : evaluated === this.expression ? this : evaluated;
      });
      def_eval(AST_Call, function(compressor, depth) {
        var exp = this.expression;
        const callee = exp._eval(compressor, depth);
        if (callee === nullish || this.optional && callee == null)
          return nullish;
        if (compressor.option("unsafe") && exp instanceof AST_PropAccess) {
          var key = exp.property;
          if (key instanceof AST_Node) {
            key = key._eval(compressor, depth);
            if (key === exp.property)
              return this;
          }
          var val;
          var e = exp.expression;
          if (is_undeclared_ref(e)) {
            var first_arg = e.name === "hasOwnProperty" && key === "call" && (this.args[0] && this.args[0].evaluate(compressor));
            first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
            if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {
              return this.clone();
            }
            if (!is_pure_native_fn(e.name, key))
              return this;
            val = global_objs[e.name];
          } else {
            val = e._eval(compressor, depth + 1);
            if (val === e || !val)
              return this;
            if (!is_pure_native_method(val.constructor.name, key))
              return this;
          }
          var args = [];
          for (var i = 0, len = this.args.length; i < len; i++) {
            var arg = this.args[i];
            var value = arg._eval(compressor, depth);
            if (arg === value)
              return this;
            if (arg instanceof AST_Lambda)
              return this;
            args.push(value);
          }
          try {
            return val[key].apply(val, args);
          } catch (ex) {
          }
        }
        return this;
      });
      def_eval(AST_New, return_this);
      function def_drop_side_effect_free(node, func) {
        node.DEFMETHOD("drop_side_effect_free", func);
      }
      function trim(nodes, compressor, first_in_statement2) {
        var len = nodes.length;
        if (!len)
          return null;
        var ret = [], changed = false;
        for (var i = 0; i < len; i++) {
          var node = nodes[i].drop_side_effect_free(compressor, first_in_statement2);
          changed |= node !== nodes[i];
          if (node) {
            ret.push(node);
            first_in_statement2 = false;
          }
        }
        return changed ? ret.length ? ret : null : nodes;
      }
      def_drop_side_effect_free(AST_Node, return_this);
      def_drop_side_effect_free(AST_Constant, return_null);
      def_drop_side_effect_free(AST_This, return_null);
      def_drop_side_effect_free(AST_Call, function(compressor, first_in_statement2) {
        if (is_nullish_shortcircuited(this, compressor)) {
          return this.expression.drop_side_effect_free(compressor, first_in_statement2);
        }
        if (!this.is_callee_pure(compressor)) {
          if (this.expression.is_call_pure(compressor)) {
            var exprs = this.args.slice();
            exprs.unshift(this.expression.expression);
            exprs = trim(exprs, compressor, first_in_statement2);
            return exprs && make_sequence(this, exprs);
          }
          if (is_func_expr(this.expression) && (!this.expression.name || !this.expression.name.definition().references.length)) {
            var node = this.clone();
            node.expression.process_expression(false, compressor);
            return node;
          }
          return this;
        }
        var args = trim(this.args, compressor, first_in_statement2);
        return args && make_sequence(this, args);
      });
      def_drop_side_effect_free(AST_Accessor, return_null);
      def_drop_side_effect_free(AST_Function, return_null);
      def_drop_side_effect_free(AST_Arrow, return_null);
      def_drop_side_effect_free(AST_Class, function(compressor) {
        const with_effects = [];
        const trimmed_extends = this.extends && this.extends.drop_side_effect_free(compressor);
        if (trimmed_extends)
          with_effects.push(trimmed_extends);
        for (const prop of this.properties) {
          if (prop instanceof AST_ClassStaticBlock) {
            if (prop.has_side_effects(compressor)) {
              return this;
            }
          } else {
            const trimmed_prop = prop.drop_side_effect_free(compressor);
            if (trimmed_prop) {
              if (trimmed_prop.contains_this())
                return this;
              with_effects.push(trimmed_prop);
            }
          }
        }
        if (!with_effects.length)
          return null;
        const exprs = make_sequence(this, with_effects);
        if (this instanceof AST_DefClass) {
          return make_node(AST_SimpleStatement, this, { body: exprs });
        } else {
          return exprs;
        }
      });
      def_drop_side_effect_free(AST_ClassProperty, function(compressor) {
        const key = this.computed_key() && this.key.drop_side_effect_free(compressor);
        const value = this.static && this.value && this.value.drop_side_effect_free(compressor);
        if (key && value)
          return make_sequence(this, [key, value]);
        return key || value || null;
      });
      def_drop_side_effect_free(AST_Binary, function(compressor, first_in_statement2) {
        var right = this.right.drop_side_effect_free(compressor);
        if (!right)
          return this.left.drop_side_effect_free(compressor, first_in_statement2);
        if (lazy_op.has(this.operator)) {
          if (right === this.right)
            return this;
          var node = this.clone();
          node.right = right;
          return node;
        } else {
          var left = this.left.drop_side_effect_free(compressor, first_in_statement2);
          if (!left)
            return this.right.drop_side_effect_free(compressor, first_in_statement2);
          return make_sequence(this, [left, right]);
        }
      });
      def_drop_side_effect_free(AST_Assign, function(compressor) {
        if (this.logical)
          return this;
        var left = this.left;
        if (left.has_side_effects(compressor) || compressor.has_directive("use strict") && left instanceof AST_PropAccess && left.expression.is_constant()) {
          return this;
        }
        set_flag(this, WRITE_ONLY);
        while (left instanceof AST_PropAccess) {
          left = left.expression;
        }
        if (left.is_constant_expression(compressor.find_parent(AST_Scope))) {
          return this.right.drop_side_effect_free(compressor);
        }
        return this;
      });
      def_drop_side_effect_free(AST_Conditional, function(compressor) {
        var consequent = this.consequent.drop_side_effect_free(compressor);
        var alternative = this.alternative.drop_side_effect_free(compressor);
        if (consequent === this.consequent && alternative === this.alternative)
          return this;
        if (!consequent)
          return alternative ? make_node(AST_Binary, this, {
            operator: "||",
            left: this.condition,
            right: alternative
          }) : this.condition.drop_side_effect_free(compressor);
        if (!alternative)
          return make_node(AST_Binary, this, {
            operator: "&&",
            left: this.condition,
            right: consequent
          });
        var node = this.clone();
        node.consequent = consequent;
        node.alternative = alternative;
        return node;
      });
      def_drop_side_effect_free(AST_Unary, function(compressor, first_in_statement2) {
        if (unary_side_effects.has(this.operator)) {
          if (!this.expression.has_side_effects(compressor)) {
            set_flag(this, WRITE_ONLY);
          } else {
            clear_flag(this, WRITE_ONLY);
          }
          return this;
        }
        if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
          return null;
        var expression = this.expression.drop_side_effect_free(compressor, first_in_statement2);
        if (first_in_statement2 && expression && is_iife_call(expression)) {
          if (expression === this.expression && this.operator == "!")
            return this;
          return expression.negate(compressor, first_in_statement2);
        }
        return expression;
      });
      def_drop_side_effect_free(AST_SymbolRef, function(compressor) {
        const safe_access = this.is_declared(compressor) || pure_prop_access_globals.has(this.name);
        return safe_access ? null : this;
      });
      def_drop_side_effect_free(AST_Object, function(compressor, first_in_statement2) {
        var values = trim(this.properties, compressor, first_in_statement2);
        return values && make_sequence(this, values);
      });
      def_drop_side_effect_free(AST_ObjectProperty, function(compressor, first_in_statement2) {
        const computed_key = this instanceof AST_ObjectKeyVal && this.key instanceof AST_Node;
        const key = computed_key && this.key.drop_side_effect_free(compressor, first_in_statement2);
        const value = this.value && this.value.drop_side_effect_free(compressor, first_in_statement2);
        if (key && value) {
          return make_sequence(this, [key, value]);
        }
        return key || value;
      });
      def_drop_side_effect_free(AST_ConciseMethod, function() {
        return this.computed_key() ? this.key : null;
      });
      def_drop_side_effect_free(AST_ObjectGetter, function() {
        return this.computed_key() ? this.key : null;
      });
      def_drop_side_effect_free(AST_ObjectSetter, function() {
        return this.computed_key() ? this.key : null;
      });
      def_drop_side_effect_free(AST_Array, function(compressor, first_in_statement2) {
        var values = trim(this.elements, compressor, first_in_statement2);
        return values && make_sequence(this, values);
      });
      def_drop_side_effect_free(AST_Dot, function(compressor, first_in_statement2) {
        if (is_nullish_shortcircuited(this, compressor)) {
          return this.expression.drop_side_effect_free(compressor, first_in_statement2);
        }
        if (!this.optional && this.expression.may_throw_on_access(compressor)) {
          return this;
        }
        return this.expression.drop_side_effect_free(compressor, first_in_statement2);
      });
      def_drop_side_effect_free(AST_Sub, function(compressor, first_in_statement2) {
        if (is_nullish_shortcircuited(this, compressor)) {
          return this.expression.drop_side_effect_free(compressor, first_in_statement2);
        }
        if (!this.optional && this.expression.may_throw_on_access(compressor)) {
          return this;
        }
        var property = this.property.drop_side_effect_free(compressor);
        if (property && this.optional)
          return this;
        var expression = this.expression.drop_side_effect_free(compressor, first_in_statement2);
        if (expression && property)
          return make_sequence(this, [expression, property]);
        return expression || property;
      });
      def_drop_side_effect_free(AST_Chain, function(compressor, first_in_statement2) {
        return this.expression.drop_side_effect_free(compressor, first_in_statement2);
      });
      def_drop_side_effect_free(AST_Sequence, function(compressor) {
        var last2 = this.tail_node();
        var expr = last2.drop_side_effect_free(compressor);
        if (expr === last2)
          return this;
        var expressions = this.expressions.slice(0, -1);
        if (expr)
          expressions.push(expr);
        if (!expressions.length) {
          return make_node(AST_Number, this, { value: 0 });
        }
        return make_sequence(this, expressions);
      });
      def_drop_side_effect_free(AST_Expansion, function(compressor, first_in_statement2) {
        return this.expression.drop_side_effect_free(compressor, first_in_statement2);
      });
      def_drop_side_effect_free(AST_TemplateSegment, return_null);
      def_drop_side_effect_free(AST_TemplateString, function(compressor) {
        var values = trim(this.segments, compressor, first_in_statement);
        return values && make_sequence(this, values);
      });
      const r_keep_assign = /keep_assign/;
      AST_Scope.DEFMETHOD("drop_unused", function(compressor) {
        if (!compressor.option("unused"))
          return;
        if (compressor.has_directive("use asm"))
          return;
        if (!this.variables)
          return;
        var self2 = this;
        if (self2.pinned())
          return;
        var drop_funcs = !(self2 instanceof AST_Toplevel) || compressor.toplevel.funcs;
        var drop_vars = !(self2 instanceof AST_Toplevel) || compressor.toplevel.vars;
        const assign_as_unused = r_keep_assign.test(compressor.option("unused")) ? return_false : function(node) {
          if (node instanceof AST_Assign && !node.logical && (has_flag(node, WRITE_ONLY) || node.operator == "=")) {
            return node.left;
          }
          if (node instanceof AST_Unary && has_flag(node, WRITE_ONLY)) {
            return node.expression;
          }
        };
        var in_use_ids = /* @__PURE__ */ new Map();
        var fixed_ids = /* @__PURE__ */ new Map();
        if (self2 instanceof AST_Toplevel && compressor.top_retain) {
          self2.variables.forEach(function(def) {
            if (compressor.top_retain(def)) {
              in_use_ids.set(def.id, def);
            }
          });
        }
        var var_defs_by_id = /* @__PURE__ */ new Map();
        var initializations = /* @__PURE__ */ new Map();
        var scope = this;
        var tw = new TreeWalker(function(node, descend) {
          if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive("use strict")) {
            node.argnames.forEach(function(argname) {
              if (!(argname instanceof AST_SymbolDeclaration))
                return;
              var def = argname.definition();
              in_use_ids.set(def.id, def);
            });
          }
          if (node === self2)
            return;
          if (node instanceof AST_Class) {
            if (node.has_side_effects(compressor)) {
              node.visit_nondeferred_class_parts(tw);
            }
          }
          if (node instanceof AST_Defun || node instanceof AST_DefClass) {
            var node_def = node.name.definition();
            const in_export = tw.parent() instanceof AST_Export;
            if (in_export || !drop_funcs && scope === self2) {
              if (node_def.global) {
                in_use_ids.set(node_def.id, node_def);
              }
            }
            map_add(initializations, node_def.id, node);
            return true;
          }
          const in_root_scope = scope === self2;
          if (node instanceof AST_SymbolFunarg && in_root_scope) {
            map_add(var_defs_by_id, node.definition().id, node);
          }
          if (node instanceof AST_Definitions && in_root_scope) {
            const in_export = tw.parent() instanceof AST_Export;
            node.definitions.forEach(function(def) {
              if (def.name instanceof AST_SymbolVar) {
                map_add(var_defs_by_id, def.name.definition().id, def);
              }
              if (in_export || !drop_vars) {
                walk(def.name, (node2) => {
                  if (node2 instanceof AST_SymbolDeclaration) {
                    const def2 = node2.definition();
                    if (def2.global) {
                      in_use_ids.set(def2.id, def2);
                    }
                  }
                });
              }
              if (def.name instanceof AST_Destructuring) {
                def.walk(tw);
              }
              if (def.name instanceof AST_SymbolDeclaration && def.value) {
                var node_def2 = def.name.definition();
                map_add(initializations, node_def2.id, def.value);
                if (!node_def2.chained && def.name.fixed_value() === def.value) {
                  fixed_ids.set(node_def2.id, def);
                }
                if (def.value.has_side_effects(compressor)) {
                  def.value.walk(tw);
                }
              }
            });
            return true;
          }
          return scan_ref_scoped(node, descend);
        });
        self2.walk(tw);
        tw = new TreeWalker(scan_ref_scoped);
        in_use_ids.forEach(function(def) {
          var init = initializations.get(def.id);
          if (init)
            init.forEach(function(init2) {
              init2.walk(tw);
            });
        });
        var tt = new TreeTransformer(function before(node, descend, in_list) {
          var parent = tt.parent();
          if (drop_vars) {
            const sym2 = assign_as_unused(node);
            if (sym2 instanceof AST_SymbolRef) {
              var def = sym2.definition();
              var in_use = in_use_ids.has(def.id);
              if (node instanceof AST_Assign) {
                if (!in_use || fixed_ids.has(def.id) && fixed_ids.get(def.id) !== node) {
                  return maintain_this_binding(parent, node, node.right.transform(tt));
                }
              } else if (!in_use) {
                return in_list ? MAP.skip : make_node(AST_Number, node, { value: 0 });
              }
            }
          }
          if (scope !== self2)
            return;
          var def;
          if (node.name && (node instanceof AST_ClassExpression && !keep_name(compressor.option("keep_classnames"), (def = node.name.definition()).name) || node instanceof AST_Function && !keep_name(compressor.option("keep_fnames"), (def = node.name.definition()).name))) {
            if (!in_use_ids.has(def.id) || def.orig.length > 1)
              node.name = null;
          }
          if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {
            var trim2 = !compressor.option("keep_fargs");
            for (var a = node.argnames, i = a.length; --i >= 0; ) {
              var sym = a[i];
              if (sym instanceof AST_Expansion) {
                sym = sym.expression;
              }
              if (sym instanceof AST_DefaultAssign) {
                sym = sym.left;
              }
              if (!(sym instanceof AST_Destructuring) && !in_use_ids.has(sym.definition().id)) {
                set_flag(sym, UNUSED);
                if (trim2) {
                  a.pop();
                }
              } else {
                trim2 = false;
              }
            }
          }
          if (node instanceof AST_DefClass && node !== self2) {
            const def2 = node.name.definition();
            descend(node, this);
            const keep_class = def2.global && !drop_funcs || in_use_ids.has(def2.id);
            if (!keep_class) {
              const kept = node.drop_side_effect_free(compressor);
              if (kept == null) {
                def2.eliminated++;
                return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
              }
              return kept;
            }
            return node;
          }
          if (node instanceof AST_Defun && node !== self2) {
            const def2 = node.name.definition();
            const keep = def2.global && !drop_funcs || in_use_ids.has(def2.id);
            if (!keep) {
              def2.eliminated++;
              return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
            }
          }
          if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {
            var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var);
            var body = [], head = [], tail = [];
            var side_effects = [];
            node.definitions.forEach(function(def2) {
              if (def2.value)
                def2.value = def2.value.transform(tt);
              var is_destructure = def2.name instanceof AST_Destructuring;
              var sym2 = is_destructure ? new SymbolDef(null, { name: "<destructure>" }) : def2.name.definition();
              if (drop_block && sym2.global)
                return tail.push(def2);
              if (!(drop_vars || drop_block) || is_destructure && (def2.name.names.length || def2.name.is_array || compressor.option("pure_getters") != true) || in_use_ids.has(sym2.id)) {
                if (def2.value && fixed_ids.has(sym2.id) && fixed_ids.get(sym2.id) !== def2) {
                  def2.value = def2.value.drop_side_effect_free(compressor);
                }
                if (def2.name instanceof AST_SymbolVar) {
                  var var_defs = var_defs_by_id.get(sym2.id);
                  if (var_defs.length > 1 && (!def2.value || sym2.orig.indexOf(def2.name) > sym2.eliminated)) {
                    if (def2.value) {
                      var ref = make_node(AST_SymbolRef, def2.name, def2.name);
                      sym2.references.push(ref);
                      var assign = make_node(AST_Assign, def2, {
                        operator: "=",
                        logical: false,
                        left: ref,
                        right: def2.value
                      });
                      if (fixed_ids.get(sym2.id) === def2) {
                        fixed_ids.set(sym2.id, assign);
                      }
                      side_effects.push(assign.transform(tt));
                    }
                    remove2(var_defs, def2);
                    sym2.eliminated++;
                    return;
                  }
                }
                if (def2.value) {
                  if (side_effects.length > 0) {
                    if (tail.length > 0) {
                      side_effects.push(def2.value);
                      def2.value = make_sequence(def2.value, side_effects);
                    } else {
                      body.push(make_node(AST_SimpleStatement, node, {
                        body: make_sequence(node, side_effects)
                      }));
                    }
                    side_effects = [];
                  }
                  tail.push(def2);
                } else {
                  head.push(def2);
                }
              } else if (sym2.orig[0] instanceof AST_SymbolCatch) {
                var value = def2.value && def2.value.drop_side_effect_free(compressor);
                if (value)
                  side_effects.push(value);
                def2.value = null;
                head.push(def2);
              } else {
                var value = def2.value && def2.value.drop_side_effect_free(compressor);
                if (value) {
                  side_effects.push(value);
                }
                sym2.eliminated++;
              }
            });
            if (head.length > 0 || tail.length > 0) {
              node.definitions = head.concat(tail);
              body.push(node);
            }
            if (side_effects.length > 0) {
              body.push(make_node(AST_SimpleStatement, node, {
                body: make_sequence(node, side_effects)
              }));
            }
            switch (body.length) {
              case 0:
                return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
              case 1:
                return body[0];
              default:
                return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, { body });
            }
          }
          if (node instanceof AST_For) {
            descend(node, this);
            var block;
            if (node.init instanceof AST_BlockStatement) {
              block = node.init;
              node.init = block.body.pop();
              block.body.push(node);
            }
            if (node.init instanceof AST_SimpleStatement) {
              node.init = node.init.body;
            } else if (is_empty(node.init)) {
              node.init = null;
            }
            return !block ? node : in_list ? MAP.splice(block.body) : block;
          }
          if (node instanceof AST_LabeledStatement && node.body instanceof AST_For) {
            descend(node, this);
            if (node.body instanceof AST_BlockStatement) {
              var block = node.body;
              node.body = block.body.pop();
              block.body.push(node);
              return in_list ? MAP.splice(block.body) : block;
            }
            return node;
          }
          if (node instanceof AST_BlockStatement) {
            descend(node, this);
            if (in_list && node.body.every(can_be_evicted_from_block)) {
              return MAP.splice(node.body);
            }
            return node;
          }
          if (node instanceof AST_Scope && !(node instanceof AST_ClassStaticBlock)) {
            const save_scope = scope;
            scope = node;
            descend(node, this);
            scope = save_scope;
            return node;
          }
        });
        self2.transform(tt);
        function scan_ref_scoped(node, descend) {
          var node_def;
          const sym = assign_as_unused(node);
          if (sym instanceof AST_SymbolRef && !is_ref_of(node.left, AST_SymbolBlockDeclaration) && self2.variables.get(sym.name) === (node_def = sym.definition())) {
            if (node instanceof AST_Assign) {
              node.right.walk(tw);
              if (!node_def.chained && node.left.fixed_value() === node.right) {
                fixed_ids.set(node_def.id, node);
              }
            }
            return true;
          }
          if (node instanceof AST_SymbolRef) {
            node_def = node.definition();
            if (!in_use_ids.has(node_def.id)) {
              in_use_ids.set(node_def.id, node_def);
              if (node_def.orig[0] instanceof AST_SymbolCatch) {
                const redef = node_def.scope.is_block_scope() && node_def.scope.get_defun_scope().variables.get(node_def.name);
                if (redef)
                  in_use_ids.set(redef.id, redef);
              }
            }
            return true;
          }
          if (node instanceof AST_Class) {
            descend();
            return true;
          }
          if (node instanceof AST_Scope && !(node instanceof AST_ClassStaticBlock)) {
            var save_scope = scope;
            scope = node;
            descend();
            scope = save_scope;
            return true;
          }
        }
      });
      function def_reduce_vars(node, func) {
        node.DEFMETHOD("reduce_vars", func);
      }
      def_reduce_vars(AST_Node, noop);
      function reset_def(compressor, def) {
        def.assignments = 0;
        def.chained = false;
        def.direct_access = false;
        def.escaped = 0;
        def.recursive_refs = 0;
        def.references = [];
        def.single_use = void 0;
        if (def.scope.pinned() || def.orig[0] instanceof AST_SymbolFunarg && def.scope.uses_arguments) {
          def.fixed = false;
        } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) {
          def.fixed = def.init;
        } else {
          def.fixed = false;
        }
      }
      function reset_variables(tw, compressor, node) {
        node.variables.forEach(function(def) {
          reset_def(compressor, def);
          if (def.fixed === null) {
            tw.defs_to_safe_ids.set(def.id, tw.safe_ids);
            mark(tw, def, true);
          } else if (def.fixed) {
            tw.loop_ids.set(def.id, tw.in_loop);
            mark(tw, def, true);
          }
        });
      }
      function reset_block_variables(compressor, node) {
        if (node.block_scope)
          node.block_scope.variables.forEach((def) => {
            reset_def(compressor, def);
          });
      }
      function push(tw) {
        tw.safe_ids = Object.create(tw.safe_ids);
      }
      function pop(tw) {
        tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);
      }
      function mark(tw, def, safe) {
        tw.safe_ids[def.id] = safe;
      }
      function safe_to_read(tw, def) {
        if (def.single_use == "m")
          return false;
        if (tw.safe_ids[def.id]) {
          if (def.fixed == null) {
            var orig = def.orig[0];
            if (orig instanceof AST_SymbolFunarg || orig.name == "arguments")
              return false;
            def.fixed = make_node(AST_Undefined, orig);
          }
          return true;
        }
        return def.fixed instanceof AST_Defun;
      }
      function safe_to_assign(tw, def, scope, value) {
        if (def.fixed === void 0)
          return true;
        let def_safe_ids;
        if (def.fixed === null && (def_safe_ids = tw.defs_to_safe_ids.get(def.id))) {
          def_safe_ids[def.id] = false;
          tw.defs_to_safe_ids.delete(def.id);
          return true;
        }
        if (!HOP(tw.safe_ids, def.id))
          return false;
        if (!safe_to_read(tw, def))
          return false;
        if (def.fixed === false)
          return false;
        if (def.fixed != null && (!value || def.references.length > def.assignments))
          return false;
        if (def.fixed instanceof AST_Defun) {
          return value instanceof AST_Node && def.fixed.parent_scope === scope;
        }
        return def.orig.every((sym) => {
          return !(sym instanceof AST_SymbolConst || sym instanceof AST_SymbolDefun || sym instanceof AST_SymbolLambda);
        });
      }
      function ref_once(tw, compressor, def) {
        return compressor.option("unused") && !def.scope.pinned() && def.references.length - def.recursive_refs == 1 && tw.loop_ids.get(def.id) === tw.in_loop;
      }
      function is_immutable(value) {
        if (!value)
          return false;
        return value.is_constant() || value instanceof AST_Lambda || value instanceof AST_This;
      }
      function mark_escaped(tw, d, scope, node, value, level = 0, depth = 1) {
        var parent = tw.parent(level);
        if (value) {
          if (value.is_constant())
            return;
          if (value instanceof AST_ClassExpression)
            return;
        }
        if (parent instanceof AST_Assign && (parent.operator === "=" || parent.logical) && node === parent.right || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New) || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope || parent instanceof AST_VarDef && node === parent.value || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope) {
          if (depth > 1 && !(value && value.is_constant_expression(scope)))
            depth = 1;
          if (!d.escaped || d.escaped > depth)
            d.escaped = depth;
          return;
        } else if (parent instanceof AST_Array || parent instanceof AST_Await || parent instanceof AST_Binary && lazy_op.has(parent.operator) || parent instanceof AST_Conditional && node !== parent.condition || parent instanceof AST_Expansion || parent instanceof AST_Sequence && node === parent.tail_node()) {
          mark_escaped(tw, d, scope, parent, parent, level + 1, depth);
        } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
          var obj = tw.parent(level + 1);
          mark_escaped(tw, d, scope, obj, obj, level + 2, depth);
        } else if (parent instanceof AST_PropAccess && node === parent.expression) {
          value = read_property(value, parent.property);
          mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1);
          if (value)
            return;
        }
        if (level > 0)
          return;
        if (parent instanceof AST_Sequence && node !== parent.tail_node())
          return;
        if (parent instanceof AST_SimpleStatement)
          return;
        d.direct_access = true;
      }
      const suppress = (node) => walk(node, (node2) => {
        if (!(node2 instanceof AST_Symbol))
          return;
        var d = node2.definition();
        if (!d)
          return;
        if (node2 instanceof AST_SymbolRef)
          d.references.push(node2);
        d.fixed = false;
      });
      def_reduce_vars(AST_Accessor, function(tw, descend, compressor) {
        push(tw);
        reset_variables(tw, compressor, this);
        descend();
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_Assign, function(tw, descend, compressor) {
        var node = this;
        if (node.left instanceof AST_Destructuring) {
          suppress(node.left);
          return;
        }
        const finish_walk = () => {
          if (node.logical) {
            node.left.walk(tw);
            push(tw);
            node.right.walk(tw);
            pop(tw);
            return true;
          }
        };
        var sym = node.left;
        if (!(sym instanceof AST_SymbolRef))
          return finish_walk();
        var def = sym.definition();
        var safe = safe_to_assign(tw, def, sym.scope, node.right);
        def.assignments++;
        if (!safe)
          return finish_walk();
        var fixed = def.fixed;
        if (!fixed && node.operator != "=" && !node.logical)
          return finish_walk();
        var eq = node.operator == "=";
        var value = eq ? node.right : node;
        if (is_modified(compressor, tw, node, value, 0))
          return finish_walk();
        def.references.push(sym);
        if (!node.logical) {
          if (!eq)
            def.chained = true;
          def.fixed = eq ? function() {
            return node.right;
          } : function() {
            return make_node(AST_Binary, node, {
              operator: node.operator.slice(0, -1),
              left: fixed instanceof AST_Node ? fixed : fixed(),
              right: node.right
            });
          };
        }
        if (node.logical) {
          mark(tw, def, false);
          push(tw);
          node.right.walk(tw);
          pop(tw);
          return true;
        }
        mark(tw, def, false);
        node.right.walk(tw);
        mark(tw, def, true);
        mark_escaped(tw, def, sym.scope, node, value, 0, 1);
        return true;
      });
      def_reduce_vars(AST_Binary, function(tw) {
        if (!lazy_op.has(this.operator))
          return;
        this.left.walk(tw);
        push(tw);
        this.right.walk(tw);
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_Block, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
      });
      def_reduce_vars(AST_Case, function(tw) {
        push(tw);
        this.expression.walk(tw);
        pop(tw);
        push(tw);
        walk_body(this, tw);
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_Class, function(tw, descend) {
        clear_flag(this, INLINED);
        push(tw);
        descend();
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_ClassStaticBlock, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
      });
      def_reduce_vars(AST_Conditional, function(tw) {
        this.condition.walk(tw);
        push(tw);
        this.consequent.walk(tw);
        pop(tw);
        push(tw);
        this.alternative.walk(tw);
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_Chain, function(tw, descend) {
        const safe_ids = tw.safe_ids;
        descend();
        tw.safe_ids = safe_ids;
        return true;
      });
      def_reduce_vars(AST_Call, function(tw) {
        this.expression.walk(tw);
        if (this.optional) {
          push(tw);
        }
        for (const arg of this.args)
          arg.walk(tw);
        return true;
      });
      def_reduce_vars(AST_PropAccess, function(tw) {
        if (!this.optional)
          return;
        this.expression.walk(tw);
        push(tw);
        if (this.property instanceof AST_Node)
          this.property.walk(tw);
        return true;
      });
      def_reduce_vars(AST_Default, function(tw, descend) {
        push(tw);
        descend();
        pop(tw);
        return true;
      });
      function mark_lambda(tw, descend, compressor) {
        clear_flag(this, INLINED);
        push(tw);
        reset_variables(tw, compressor, this);
        var iife;
        if (!this.name && !this.uses_arguments && !this.pinned() && (iife = tw.parent()) instanceof AST_Call && iife.expression === this && !iife.args.some((arg) => arg instanceof AST_Expansion) && this.argnames.every((arg_name) => arg_name instanceof AST_Symbol)) {
          this.argnames.forEach((arg, i) => {
            if (!arg.definition)
              return;
            var d = arg.definition();
            if (d.orig.length > 1)
              return;
            if (d.fixed === void 0 && (!this.uses_arguments || tw.has_directive("use strict"))) {
              d.fixed = function() {
                return iife.args[i] || make_node(AST_Undefined, iife);
              };
              tw.loop_ids.set(d.id, tw.in_loop);
              mark(tw, d, true);
            } else {
              d.fixed = false;
            }
          });
        }
        descend();
        pop(tw);
        handle_defined_after_hoist(this);
        return true;
      }
      function handle_defined_after_hoist(parent) {
        const defuns = [];
        walk(parent, (node) => {
          if (node === parent)
            return;
          if (node instanceof AST_Defun)
            defuns.push(node);
          if (node instanceof AST_Scope || node instanceof AST_SimpleStatement)
            return true;
        });
        const symbols_of_interest = /* @__PURE__ */ new Set();
        const defuns_of_interest = /* @__PURE__ */ new Set();
        const potential_conflicts = [];
        for (const defun of defuns) {
          const fname_def = defun.name.definition();
          const found_self_ref_in_other_defuns = defuns.some((d) => d !== defun && d.enclosed.indexOf(fname_def) !== -1);
          for (const def of defun.enclosed) {
            if (def.fixed === false || def === fname_def || def.scope.get_defun_scope() !== parent) {
              continue;
            }
            if (def.assignments === 0 && def.orig.length === 1 && def.orig[0] instanceof AST_SymbolDefun) {
              continue;
            }
            if (found_self_ref_in_other_defuns) {
              def.fixed = false;
              continue;
            }
            potential_conflicts.push({ defun, def, fname_def });
            symbols_of_interest.add(def.id);
            symbols_of_interest.add(fname_def.id);
            defuns_of_interest.add(defun);
          }
        }
        if (potential_conflicts.length) {
          const found_symbols = [];
          const found_symbol_writes = /* @__PURE__ */ new Set();
          const defun_ranges = /* @__PURE__ */ new Map();
          let tw;
          parent.walk(tw = new TreeWalker((node, descend) => {
            if (node instanceof AST_Defun && defuns_of_interest.has(node)) {
              const start = found_symbols.length;
              descend();
              const end = found_symbols.length;
              defun_ranges.set(node, { start, end });
              return true;
            }
            if (node instanceof AST_Symbol && node.thedef) {
              const id = node.definition().id;
              if (symbols_of_interest.has(id)) {
                if (node instanceof AST_SymbolDeclaration || is_lhs(node, tw)) {
                  found_symbol_writes.add(found_symbols.length);
                }
                found_symbols.push(id);
              }
            }
          }));
          for (const { def, defun, fname_def } of potential_conflicts) {
            const defun_range = defun_ranges.get(defun);
            const find = (sym_id, starting_at = 0, must_be_write = false) => {
              let index = starting_at;
              for (; ; ) {
                index = found_symbols.indexOf(sym_id, index);
                if (index === -1) {
                  break;
                } else if (index >= defun_range.start && index < defun_range.end) {
                  index = defun_range.end;
                  continue;
                } else if (must_be_write && !found_symbol_writes.has(index)) {
                  index++;
                  continue;
                } else {
                  break;
                }
              }
              return index;
            };
            const read_defun_at = find(fname_def.id);
            const wrote_def_at = find(def.id, read_defun_at + 1, true);
            const wrote_def_after_reading_defun = read_defun_at != -1 && wrote_def_at != -1 && wrote_def_at > read_defun_at;
            if (wrote_def_after_reading_defun) {
              def.fixed = false;
            }
          }
        }
      }
      def_reduce_vars(AST_Lambda, mark_lambda);
      def_reduce_vars(AST_Do, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
        const saved_loop = tw.in_loop;
        tw.in_loop = this;
        push(tw);
        this.body.walk(tw);
        if (has_break_or_continue(this)) {
          pop(tw);
          push(tw);
        }
        this.condition.walk(tw);
        pop(tw);
        tw.in_loop = saved_loop;
        return true;
      });
      def_reduce_vars(AST_For, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
        if (this.init)
          this.init.walk(tw);
        const saved_loop = tw.in_loop;
        tw.in_loop = this;
        push(tw);
        if (this.condition)
          this.condition.walk(tw);
        this.body.walk(tw);
        if (this.step) {
          if (has_break_or_continue(this)) {
            pop(tw);
            push(tw);
          }
          this.step.walk(tw);
        }
        pop(tw);
        tw.in_loop = saved_loop;
        return true;
      });
      def_reduce_vars(AST_ForIn, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
        suppress(this.init);
        this.object.walk(tw);
        const saved_loop = tw.in_loop;
        tw.in_loop = this;
        push(tw);
        this.body.walk(tw);
        pop(tw);
        tw.in_loop = saved_loop;
        return true;
      });
      def_reduce_vars(AST_If, function(tw) {
        this.condition.walk(tw);
        push(tw);
        this.body.walk(tw);
        pop(tw);
        if (this.alternative) {
          push(tw);
          this.alternative.walk(tw);
          pop(tw);
        }
        return true;
      });
      def_reduce_vars(AST_LabeledStatement, function(tw) {
        push(tw);
        this.body.walk(tw);
        pop(tw);
        return true;
      });
      def_reduce_vars(AST_SymbolCatch, function() {
        this.definition().fixed = false;
      });
      def_reduce_vars(AST_SymbolRef, function(tw, descend, compressor) {
        var d = this.definition();
        d.references.push(this);
        if (d.references.length == 1 && !d.fixed && d.orig[0] instanceof AST_SymbolDefun) {
          tw.loop_ids.set(d.id, tw.in_loop);
        }
        var fixed_value;
        if (d.fixed === void 0 || !safe_to_read(tw, d)) {
          d.fixed = false;
        } else if (d.fixed) {
          fixed_value = this.fixed_value();
          if (fixed_value instanceof AST_Lambda && is_recursive_ref(tw, d)) {
            d.recursive_refs++;
          } else if (fixed_value && !compressor.exposed(d) && ref_once(tw, compressor, d)) {
            d.single_use = fixed_value instanceof AST_Lambda && !fixed_value.pinned() || fixed_value instanceof AST_Class || d.scope === this.scope && fixed_value.is_constant_expression();
          } else {
            d.single_use = false;
          }
          if (is_modified(compressor, tw, this, fixed_value, 0, is_immutable(fixed_value))) {
            if (d.single_use) {
              d.single_use = "m";
            } else {
              d.fixed = false;
            }
          }
        }
        mark_escaped(tw, d, this.scope, this, fixed_value, 0, 1);
      });
      def_reduce_vars(AST_Toplevel, function(tw, descend, compressor) {
        this.globals.forEach(function(def) {
          reset_def(compressor, def);
        });
        reset_variables(tw, compressor, this);
        descend();
        handle_defined_after_hoist(this);
        return true;
      });
      def_reduce_vars(AST_Try, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
        push(tw);
        this.body.walk(tw);
        pop(tw);
        if (this.bcatch) {
          push(tw);
          this.bcatch.walk(tw);
          pop(tw);
        }
        if (this.bfinally)
          this.bfinally.walk(tw);
        return true;
      });
      def_reduce_vars(AST_Unary, function(tw) {
        var node = this;
        if (node.operator !== "++" && node.operator !== "--")
          return;
        var exp = node.expression;
        if (!(exp instanceof AST_SymbolRef))
          return;
        var def = exp.definition();
        var safe = safe_to_assign(tw, def, exp.scope, true);
        def.assignments++;
        if (!safe)
          return;
        var fixed = def.fixed;
        if (!fixed)
          return;
        def.references.push(exp);
        def.chained = true;
        def.fixed = function() {
          return make_node(AST_Binary, node, {
            operator: node.operator.slice(0, -1),
            left: make_node(AST_UnaryPrefix, node, {
              operator: "+",
              expression: fixed instanceof AST_Node ? fixed : fixed()
            }),
            right: make_node(AST_Number, node, {
              value: 1
            })
          });
        };
        mark(tw, def, true);
        return true;
      });
      def_reduce_vars(AST_VarDef, function(tw, descend) {
        var node = this;
        if (node.name instanceof AST_Destructuring) {
          suppress(node.name);
          return;
        }
        var d = node.name.definition();
        if (node.value) {
          if (safe_to_assign(tw, d, node.name.scope, node.value)) {
            d.fixed = function() {
              return node.value;
            };
            tw.loop_ids.set(d.id, tw.in_loop);
            mark(tw, d, false);
            descend();
            mark(tw, d, true);
            return true;
          } else {
            d.fixed = false;
          }
        }
      });
      def_reduce_vars(AST_While, function(tw, descend, compressor) {
        reset_block_variables(compressor, this);
        const saved_loop = tw.in_loop;
        tw.in_loop = this;
        push(tw);
        descend();
        pop(tw);
        tw.in_loop = saved_loop;
        return true;
      });
      function loop_body(x) {
        if (x instanceof AST_IterationStatement) {
          return x.body instanceof AST_BlockStatement ? x.body : x;
        }
        return x;
      }
      function is_lhs_read_only(lhs) {
        if (lhs instanceof AST_This)
          return true;
        if (lhs instanceof AST_SymbolRef)
          return lhs.definition().orig[0] instanceof AST_SymbolLambda;
        if (lhs instanceof AST_PropAccess) {
          lhs = lhs.expression;
          if (lhs instanceof AST_SymbolRef) {
            if (lhs.is_immutable())
              return false;
            lhs = lhs.fixed_value();
          }
          if (!lhs)
            return true;
          if (lhs instanceof AST_RegExp)
            return false;
          if (lhs instanceof AST_Constant)
            return true;
          return is_lhs_read_only(lhs);
        }
        return false;
      }
      function remove_initializers(var_statement) {
        var decls = [];
        var_statement.definitions.forEach(function(def) {
          if (def.name instanceof AST_SymbolDeclaration) {
            def.value = null;
            decls.push(def);
          } else {
            def.declarations_as_names().forEach((name) => {
              decls.push(make_node(AST_VarDef, def, {
                name,
                value: null
              }));
            });
          }
        });
        return decls.length ? make_node(AST_Var, var_statement, { definitions: decls }) : null;
      }
      function trim_unreachable_code(compressor, stat, target) {
        walk(stat, (node) => {
          if (node instanceof AST_Var) {
            const no_initializers = remove_initializers(node);
            if (no_initializers)
              target.push(no_initializers);
            return true;
          }
          if (node instanceof AST_Defun && (node === stat || !compressor.has_directive("use strict"))) {
            target.push(node === stat ? node : make_node(AST_Var, node, {
              definitions: [
                make_node(AST_VarDef, node, {
                  name: make_node(AST_SymbolVar, node.name, node.name),
                  value: null
                })
              ]
            }));
            return true;
          }
          if (node instanceof AST_Export || node instanceof AST_Import) {
            target.push(node);
            return true;
          }
          if (node instanceof AST_Scope) {
            return true;
          }
        });
      }
      function tighten_body(statements, compressor) {
        const nearest_scope = compressor.find_scope();
        const defun_scope = nearest_scope.get_defun_scope();
        const { in_loop, in_try } = find_loop_scope_try();
        var CHANGED, max_iter = 10;
        do {
          CHANGED = false;
          eliminate_spurious_blocks(statements);
          if (compressor.option("dead_code")) {
            eliminate_dead_code(statements, compressor);
          }
          if (compressor.option("if_return")) {
            handle_if_return(statements, compressor);
          }
          if (compressor.sequences_limit > 0) {
            sequencesize(statements, compressor);
            sequencesize_2(statements, compressor);
          }
          if (compressor.option("join_vars")) {
            join_consecutive_vars(statements);
          }
          if (compressor.option("collapse_vars")) {
            collapse(statements, compressor);
          }
        } while (CHANGED && max_iter-- > 0);
        function find_loop_scope_try() {
          var node = compressor.self(), level = 0, in_loop2 = false, in_try2 = false;
          do {
            if (node instanceof AST_IterationStatement) {
              in_loop2 = true;
            } else if (node instanceof AST_Scope) {
              break;
            } else if (node instanceof AST_TryBlock) {
              in_try2 = true;
            }
          } while (node = compressor.parent(level++));
          return { in_loop: in_loop2, in_try: in_try2 };
        }
        function collapse(statements2, compressor2) {
          if (nearest_scope.pinned() || defun_scope.pinned())
            return statements2;
          var args;
          var candidates = [];
          var stat_index = statements2.length;
          var scanner = new TreeTransformer(function(node) {
            if (abort)
              return node;
            if (!hit) {
              if (node !== hit_stack[hit_index])
                return node;
              hit_index++;
              if (hit_index < hit_stack.length)
                return handle_custom_scan_order(node);
              hit = true;
              stop_after = find_stop(node, 0);
              if (stop_after === node)
                abort = true;
              return node;
            }
            var parent = scanner.parent();
            if (node instanceof AST_Assign && (node.logical || node.operator != "=" && lhs.equivalent_to(node.left)) || node instanceof AST_Await || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression) || (node instanceof AST_Call || node instanceof AST_PropAccess) && node.optional || node instanceof AST_Debugger || node instanceof AST_Destructuring || node instanceof AST_Expansion && node.expression instanceof AST_Symbol && (node.expression instanceof AST_This || node.expression.definition().references.length > 1) || node instanceof AST_IterationStatement && !(node instanceof AST_For) || node instanceof AST_LoopControl || node instanceof AST_Try || node instanceof AST_With || node instanceof AST_Yield || node instanceof AST_Export || node instanceof AST_Class || parent instanceof AST_For && node !== parent.init || !replace_all && (node instanceof AST_SymbolRef && !node.is_declared(compressor2) && !pure_prop_access_globals.has(node)) || node instanceof AST_SymbolRef && parent instanceof AST_Call && has_annotation(parent, _NOINLINE)) {
              abort = true;
              return node;
            }
            if (!stop_if_hit && (!lhs_local || !replace_all) && (parent instanceof AST_Binary && lazy_op.has(parent.operator) && parent.left !== node || parent instanceof AST_Conditional && parent.condition !== node || parent instanceof AST_If && parent.condition !== node)) {
              stop_if_hit = parent;
            }
            if (can_replace && !(node instanceof AST_SymbolDeclaration) && lhs.equivalent_to(node) && !shadows(scanner.find_scope() || nearest_scope, lvalues)) {
              if (stop_if_hit) {
                abort = true;
                return node;
              }
              if (is_lhs(node, parent)) {
                if (value_def)
                  replaced++;
                return node;
              } else {
                replaced++;
                if (value_def && candidate instanceof AST_VarDef)
                  return node;
              }
              CHANGED = abort = true;
              if (candidate instanceof AST_UnaryPostfix) {
                return make_node(AST_UnaryPrefix, candidate, candidate);
              }
              if (candidate instanceof AST_VarDef) {
                var def2 = candidate.name.definition();
                var value = candidate.value;
                if (def2.references.length - def2.replaced == 1 && !compressor2.exposed(def2)) {
                  def2.replaced++;
                  if (funarg && is_identifier_atom(value)) {
                    return value.transform(compressor2);
                  } else {
                    return maintain_this_binding(parent, node, value);
                  }
                }
                return make_node(AST_Assign, candidate, {
                  operator: "=",
                  logical: false,
                  left: make_node(AST_SymbolRef, candidate.name, candidate.name),
                  right: value
                });
              }
              clear_flag(candidate, WRITE_ONLY);
              return candidate;
            }
            var sym;
            if (node instanceof AST_Call || node instanceof AST_Exit && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs)) || node instanceof AST_PropAccess && (side_effects || node.expression.may_throw_on_access(compressor2)) || node instanceof AST_SymbolRef && (lvalues.has(node.name) && lvalues.get(node.name).modified || side_effects && may_modify(node)) || node instanceof AST_VarDef && node.value && (lvalues.has(node.name.name) || side_effects && may_modify(node.name)) || (sym = is_lhs(node.left, node)) && (sym instanceof AST_PropAccess || lvalues.has(sym.name)) || may_throw && (in_try ? node.has_side_effects(compressor2) : side_effects_external(node))) {
              stop_after = node;
              if (node instanceof AST_Scope)
                abort = true;
            }
            return handle_custom_scan_order(node);
          }, function(node) {
            if (abort)
              return;
            if (stop_after === node)
              abort = true;
            if (stop_if_hit === node)
              stop_if_hit = null;
          });
          var multi_replacer = new TreeTransformer(function(node) {
            if (abort)
              return node;
            if (!hit) {
              if (node !== hit_stack[hit_index])
                return node;
              hit_index++;
              if (hit_index < hit_stack.length)
                return;
              hit = true;
              return node;
            }
            if (node instanceof AST_SymbolRef && node.name == def.name) {
              if (!--replaced)
                abort = true;
              if (is_lhs(node, multi_replacer.parent()))
                return node;
              def.replaced++;
              value_def.replaced--;
              return candidate.value;
            }
            if (node instanceof AST_Default || node instanceof AST_Scope)
              return node;
          });
          while (--stat_index >= 0) {
            if (stat_index == 0 && compressor2.option("unused"))
              extract_args();
            var hit_stack = [];
            extract_candidates(statements2[stat_index]);
            while (candidates.length > 0) {
              hit_stack = candidates.pop();
              var hit_index = 0;
              var candidate = hit_stack[hit_stack.length - 1];
              var value_def = null;
              var stop_after = null;
              var stop_if_hit = null;
              var lhs = get_lhs(candidate);
              if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor2))
                continue;
              var lvalues = get_lvalues(candidate);
              var lhs_local = is_lhs_local(lhs);
              if (lhs instanceof AST_SymbolRef) {
                lvalues.set(lhs.name, { def: lhs.definition(), modified: false });
              }
              var side_effects = value_has_side_effects(candidate);
              var replace_all = replace_all_symbols();
              var may_throw = candidate.may_throw(compressor2);
              var funarg = candidate.name instanceof AST_SymbolFunarg;
              var hit = funarg;
              var abort = false, replaced = 0, can_replace = !args || !hit;
              if (!can_replace) {
                for (let j = compressor2.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) {
                  args[j].transform(scanner);
                }
                can_replace = true;
              }
              for (var i = stat_index; !abort && i < statements2.length; i++) {
                statements2[i].transform(scanner);
              }
              if (value_def) {
                var def = candidate.name.definition();
                if (abort && def.references.length - def.replaced > replaced)
                  replaced = false;
                else {
                  abort = false;
                  hit_index = 0;
                  hit = funarg;
                  for (var i = stat_index; !abort && i < statements2.length; i++) {
                    statements2[i].transform(multi_replacer);
                  }
                  value_def.single_use = false;
                }
              }
              if (replaced && !remove_candidate(candidate))
                statements2.splice(stat_index, 1);
            }
          }
          function handle_custom_scan_order(node) {
            if (node instanceof AST_Scope)
              return node;
            if (node instanceof AST_Switch) {
              node.expression = node.expression.transform(scanner);
              for (var i2 = 0, len = node.body.length; !abort && i2 < len; i2++) {
                var branch = node.body[i2];
                if (branch instanceof AST_Case) {
                  if (!hit) {
                    if (branch !== hit_stack[hit_index])
                      continue;
                    hit_index++;
                  }
                  branch.expression = branch.expression.transform(scanner);
                  if (!replace_all)
                    break;
                }
              }
              abort = true;
              return node;
            }
          }
          function redefined_within_scope(def2, scope) {
            if (def2.global)
              return false;
            let cur_scope = def2.scope;
            while (cur_scope && cur_scope !== scope) {
              if (cur_scope.variables.has(def2.name)) {
                return true;
              }
              cur_scope = cur_scope.parent_scope;
            }
            return false;
          }
          function has_overlapping_symbol(fn, arg, fn_strict) {
            var found = false, scan_this = !(fn instanceof AST_Arrow);
            arg.walk(new TreeWalker(function(node, descend) {
              if (found)
                return true;
              if (node instanceof AST_SymbolRef && (fn.variables.has(node.name) || redefined_within_scope(node.definition(), fn))) {
                var s = node.definition().scope;
                if (s !== defun_scope)
                  while (s = s.parent_scope) {
                    if (s === defun_scope)
                      return true;
                  }
                return found = true;
              }
              if ((fn_strict || scan_this) && node instanceof AST_This) {
                return found = true;
              }
              if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
                var prev = scan_this;
                scan_this = false;
                descend();
                scan_this = prev;
                return true;
              }
            }));
            return found;
          }
          function extract_args() {
            var iife, fn = compressor2.self();
            if (is_func_expr(fn) && !fn.name && !fn.uses_arguments && !fn.pinned() && (iife = compressor2.parent()) instanceof AST_Call && iife.expression === fn && iife.args.every((arg2) => !(arg2 instanceof AST_Expansion))) {
              var fn_strict = compressor2.has_directive("use strict");
              if (fn_strict && !member(fn_strict, fn.body))
                fn_strict = false;
              var len = fn.argnames.length;
              args = iife.args.slice(len);
              var names = /* @__PURE__ */ new Set();
              for (var i2 = len; --i2 >= 0; ) {
                var sym = fn.argnames[i2];
                var arg = iife.args[i2];
                const def2 = sym.definition && sym.definition();
                const is_reassigned = def2 && def2.orig.length > 1;
                if (is_reassigned)
                  continue;
                args.unshift(make_node(AST_VarDef, sym, {
                  name: sym,
                  value: arg
                }));
                if (names.has(sym.name))
                  continue;
                names.add(sym.name);
                if (sym instanceof AST_Expansion) {
                  var elements = iife.args.slice(i2);
                  if (elements.every((arg2) => !has_overlapping_symbol(fn, arg2, fn_strict))) {
                    candidates.unshift([make_node(AST_VarDef, sym, {
                      name: sym.expression,
                      value: make_node(AST_Array, iife, {
                        elements
                      })
                    })]);
                  }
                } else {
                  if (!arg) {
                    arg = make_node(AST_Undefined, sym).transform(compressor2);
                  } else if (arg instanceof AST_Lambda && arg.pinned() || has_overlapping_symbol(fn, arg, fn_strict)) {
                    arg = null;
                  }
                  if (arg)
                    candidates.unshift([make_node(AST_VarDef, sym, {
                      name: sym,
                      value: arg
                    })]);
                }
              }
            }
          }
          function extract_candidates(expr) {
            hit_stack.push(expr);
            if (expr instanceof AST_Assign) {
              if (!expr.left.has_side_effects(compressor2) && !(expr.right instanceof AST_Chain)) {
                candidates.push(hit_stack.slice());
              }
              extract_candidates(expr.right);
            } else if (expr instanceof AST_Binary) {
              extract_candidates(expr.left);
              extract_candidates(expr.right);
            } else if (expr instanceof AST_Call && !has_annotation(expr, _NOINLINE)) {
              extract_candidates(expr.expression);
              expr.args.forEach(extract_candidates);
            } else if (expr instanceof AST_Case) {
              extract_candidates(expr.expression);
            } else if (expr instanceof AST_Conditional) {
              extract_candidates(expr.condition);
              extract_candidates(expr.consequent);
              extract_candidates(expr.alternative);
            } else if (expr instanceof AST_Definitions) {
              var len = expr.definitions.length;
              var i2 = len - 200;
              if (i2 < 0)
                i2 = 0;
              for (; i2 < len; i2++) {
                extract_candidates(expr.definitions[i2]);
              }
            } else if (expr instanceof AST_DWLoop) {
              extract_candidates(expr.condition);
              if (!(expr.body instanceof AST_Block)) {
                extract_candidates(expr.body);
              }
            } else if (expr instanceof AST_Exit) {
              if (expr.value)
                extract_candidates(expr.value);
            } else if (expr instanceof AST_For) {
              if (expr.init)
                extract_candidates(expr.init);
              if (expr.condition)
                extract_candidates(expr.condition);
              if (expr.step)
                extract_candidates(expr.step);
              if (!(expr.body instanceof AST_Block)) {
                extract_candidates(expr.body);
              }
            } else if (expr instanceof AST_ForIn) {
              extract_candidates(expr.object);
              if (!(expr.body instanceof AST_Block)) {
                extract_candidates(expr.body);
              }
            } else if (expr instanceof AST_If) {
              extract_candidates(expr.condition);
              if (!(expr.body instanceof AST_Block)) {
                extract_candidates(expr.body);
              }
              if (expr.alternative && !(expr.alternative instanceof AST_Block)) {
                extract_candidates(expr.alternative);
              }
            } else if (expr instanceof AST_Sequence) {
              expr.expressions.forEach(extract_candidates);
            } else if (expr instanceof AST_SimpleStatement) {
              extract_candidates(expr.body);
            } else if (expr instanceof AST_Switch) {
              extract_candidates(expr.expression);
              expr.body.forEach(extract_candidates);
            } else if (expr instanceof AST_Unary) {
              if (expr.operator == "++" || expr.operator == "--") {
                candidates.push(hit_stack.slice());
              }
            } else if (expr instanceof AST_VarDef) {
              if (expr.value && !(expr.value instanceof AST_Chain)) {
                candidates.push(hit_stack.slice());
                extract_candidates(expr.value);
              }
            }
            hit_stack.pop();
          }
          function find_stop(node, level, write_only) {
            var parent = scanner.parent(level);
            if (parent instanceof AST_Assign) {
              if (write_only && !parent.logical && !(parent.left instanceof AST_PropAccess || lvalues.has(parent.left.name))) {
                return find_stop(parent, level + 1, write_only);
              }
              return node;
            }
            if (parent instanceof AST_Binary) {
              if (write_only && (!lazy_op.has(parent.operator) || parent.left === node)) {
                return find_stop(parent, level + 1, write_only);
              }
              return node;
            }
            if (parent instanceof AST_Call)
              return node;
            if (parent instanceof AST_Case)
              return node;
            if (parent instanceof AST_Conditional) {
              if (write_only && parent.condition === node) {
                return find_stop(parent, level + 1, write_only);
              }
              return node;
            }
            if (parent instanceof AST_Definitions) {
              return find_stop(parent, level + 1, true);
            }
            if (parent instanceof AST_Exit) {
              return write_only ? find_stop(parent, level + 1, write_only) : node;
            }
            if (parent instanceof AST_If) {
              if (write_only && parent.condition === node) {
                return find_stop(parent, level + 1, write_only);
              }
              return node;
            }
            if (parent instanceof AST_IterationStatement)
              return node;
            if (parent instanceof AST_Sequence) {
              return find_stop(parent, level + 1, parent.tail_node() !== node);
            }
            if (parent instanceof AST_SimpleStatement) {
              return find_stop(parent, level + 1, true);
            }
            if (parent instanceof AST_Switch)
              return node;
            if (parent instanceof AST_VarDef)
              return node;
            return null;
          }
          function mangleable_var(var_def) {
            var value = var_def.value;
            if (!(value instanceof AST_SymbolRef))
              return;
            if (value.name == "arguments")
              return;
            var def2 = value.definition();
            if (def2.undeclared)
              return;
            return value_def = def2;
          }
          function get_lhs(expr) {
            if (expr instanceof AST_Assign && expr.logical) {
              return false;
            } else if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) {
              var def2 = expr.name.definition();
              if (!member(expr.name, def2.orig))
                return;
              var referenced = def2.references.length - def2.replaced;
              if (!referenced)
                return;
              var declared = def2.orig.length - def2.eliminated;
              if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg) || (referenced > 1 ? mangleable_var(expr) : !compressor2.exposed(def2))) {
                return make_node(AST_SymbolRef, expr.name, expr.name);
              }
            } else {
              const lhs2 = expr instanceof AST_Assign ? expr.left : expr.expression;
              return !is_ref_of(lhs2, AST_SymbolConst) && !is_ref_of(lhs2, AST_SymbolLet) && lhs2;
            }
          }
          function get_rvalue(expr) {
            if (expr instanceof AST_Assign) {
              return expr.right;
            } else {
              return expr.value;
            }
          }
          function get_lvalues(expr) {
            var lvalues2 = /* @__PURE__ */ new Map();
            if (expr instanceof AST_Unary)
              return lvalues2;
            var tw = new TreeWalker(function(node) {
              var sym = node;
              while (sym instanceof AST_PropAccess)
                sym = sym.expression;
              if (sym instanceof AST_SymbolRef) {
                const prev = lvalues2.get(sym.name);
                if (!prev || !prev.modified) {
                  lvalues2.set(sym.name, {
                    def: sym.definition(),
                    modified: is_modified(compressor2, tw, node, node, 0)
                  });
                }
              }
            });
            get_rvalue(expr).walk(tw);
            return lvalues2;
          }
          function remove_candidate(expr) {
            if (expr.name instanceof AST_SymbolFunarg) {
              var iife = compressor2.parent(), argnames = compressor2.self().argnames;
              var index = argnames.indexOf(expr.name);
              if (index < 0) {
                iife.args.length = Math.min(iife.args.length, argnames.length - 1);
              } else {
                var args2 = iife.args;
                if (args2[index])
                  args2[index] = make_node(AST_Number, args2[index], {
                    value: 0
                  });
              }
              return true;
            }
            var found = false;
            return statements2[stat_index].transform(new TreeTransformer(function(node, descend, in_list) {
              if (found)
                return node;
              if (node === expr || node.body === expr) {
                found = true;
                if (node instanceof AST_VarDef) {
                  node.value = node.name instanceof AST_SymbolConst ? make_node(AST_Undefined, node.value) : null;
                  return node;
                }
                return in_list ? MAP.skip : null;
              }
            }, function(node) {
              if (node instanceof AST_Sequence)
                switch (node.expressions.length) {
                  case 0:
                    return null;
                  case 1:
                    return node.expressions[0];
                }
            }));
          }
          function is_lhs_local(lhs2) {
            while (lhs2 instanceof AST_PropAccess)
              lhs2 = lhs2.expression;
            return lhs2 instanceof AST_SymbolRef && lhs2.definition().scope.get_defun_scope() === defun_scope && !(in_loop && (lvalues.has(lhs2.name) || candidate instanceof AST_Unary || candidate instanceof AST_Assign && !candidate.logical && candidate.operator != "="));
          }
          function value_has_side_effects(expr) {
            if (expr instanceof AST_Unary)
              return unary_side_effects.has(expr.operator);
            return get_rvalue(expr).has_side_effects(compressor2);
          }
          function replace_all_symbols() {
            if (side_effects)
              return false;
            if (value_def)
              return true;
            if (lhs instanceof AST_SymbolRef) {
              var def2 = lhs.definition();
              if (def2.references.length - def2.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {
                return true;
              }
            }
            return false;
          }
          function may_modify(sym) {
            if (!sym.definition)
              return true;
            var def2 = sym.definition();
            if (def2.orig.length == 1 && def2.orig[0] instanceof AST_SymbolDefun)
              return false;
            if (def2.scope.get_defun_scope() !== defun_scope)
              return true;
            return def2.references.some((ref) => ref.scope.get_defun_scope() !== defun_scope);
          }
          function side_effects_external(node, lhs2) {
            if (node instanceof AST_Assign)
              return side_effects_external(node.left, true);
            if (node instanceof AST_Unary)
              return side_effects_external(node.expression, true);
            if (node instanceof AST_VarDef)
              return node.value && side_effects_external(node.value);
            if (lhs2) {
              if (node instanceof AST_Dot)
                return side_effects_external(node.expression, true);
              if (node instanceof AST_Sub)
                return side_effects_external(node.expression, true);
              if (node instanceof AST_SymbolRef)
                return node.definition().scope.get_defun_scope() !== defun_scope;
            }
            return false;
          }
          function shadows(my_scope, lvalues2) {
            for (const { def: def2 } of lvalues2.values()) {
              const looked_up = my_scope.find_variable(def2.name);
              if (looked_up) {
                if (looked_up === def2)
                  continue;
                return true;
              }
            }
            return false;
          }
        }
        function eliminate_spurious_blocks(statements2) {
          var seen_dirs = [];
          for (var i = 0; i < statements2.length; ) {
            var stat = statements2[i];
            if (stat instanceof AST_BlockStatement && stat.body.every(can_be_evicted_from_block)) {
              CHANGED = true;
              eliminate_spurious_blocks(stat.body);
              statements2.splice(i, 1, ...stat.body);
              i += stat.body.length;
            } else if (stat instanceof AST_EmptyStatement) {
              CHANGED = true;
              statements2.splice(i, 1);
            } else if (stat instanceof AST_Directive) {
              if (seen_dirs.indexOf(stat.value) < 0) {
                i++;
                seen_dirs.push(stat.value);
              } else {
                CHANGED = true;
                statements2.splice(i, 1);
              }
            } else
              i++;
          }
        }
        function handle_if_return(statements2, compressor2) {
          var self2 = compressor2.self();
          var multiple_if_returns = has_multiple_if_returns(statements2);
          var in_lambda = self2 instanceof AST_Lambda;
          const iteration_start = Math.min(statements2.length, 500);
          for (var i = iteration_start; --i >= 0; ) {
            var stat = statements2[i];
            var j = next_index(i);
            var next = statements2[j];
            if (in_lambda && !next && stat instanceof AST_Return) {
              if (!stat.value) {
                CHANGED = true;
                statements2.splice(i, 1);
                continue;
              }
              if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == "void") {
                CHANGED = true;
                statements2[i] = make_node(AST_SimpleStatement, stat, {
                  body: stat.value.expression
                });
                continue;
              }
            }
            if (stat instanceof AST_If) {
              let ab, new_else;
              ab = aborts(stat.body);
              if (can_merge_flow(ab) && (new_else = as_statement_array_with_return(stat.body, ab))) {
                if (ab.label) {
                  remove2(ab.label.thedef.references, ab);
                }
                CHANGED = true;
                stat = stat.clone();
                stat.condition = stat.condition.negate(compressor2);
                stat.body = make_node(AST_BlockStatement, stat, {
                  body: as_statement_array(stat.alternative).concat(extract_functions())
                });
                stat.alternative = make_node(AST_BlockStatement, stat, {
                  body: new_else
                });
                statements2[i] = stat.transform(compressor2);
                continue;
              }
              ab = aborts(stat.alternative);
              if (can_merge_flow(ab) && (new_else = as_statement_array_with_return(stat.alternative, ab))) {
                if (ab.label) {
                  remove2(ab.label.thedef.references, ab);
                }
                CHANGED = true;
                stat = stat.clone();
                stat.body = make_node(AST_BlockStatement, stat.body, {
                  body: as_statement_array(stat.body).concat(extract_functions())
                });
                stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
                  body: new_else
                });
                statements2[i] = stat.transform(compressor2);
                continue;
              }
            }
            if (stat instanceof AST_If && stat.body instanceof AST_Return) {
              var value = stat.body.value;
              if (!value && !stat.alternative && (in_lambda && !next || next instanceof AST_Return && !next.value)) {
                CHANGED = true;
                statements2[i] = make_node(AST_SimpleStatement, stat.condition, {
                  body: stat.condition
                });
                continue;
              }
              if (value && !stat.alternative && next instanceof AST_Return && next.value) {
                CHANGED = true;
                stat = stat.clone();
                stat.alternative = next;
                statements2[i] = stat.transform(compressor2);
                statements2.splice(j, 1);
                continue;
              }
              if (value && !stat.alternative && (!next && in_lambda && multiple_if_returns || next instanceof AST_Return)) {
                CHANGED = true;
                stat = stat.clone();
                stat.alternative = next || make_node(AST_Return, stat, {
                  value: null
                });
                statements2[i] = stat.transform(compressor2);
                if (next)
                  statements2.splice(j, 1);
                continue;
              }
              var prev = statements2[prev_index(i)];
              if (compressor2.option("sequences") && in_lambda && !stat.alternative && prev instanceof AST_If && prev.body instanceof AST_Return && next_index(j) == statements2.length && next instanceof AST_SimpleStatement) {
                CHANGED = true;
                stat = stat.clone();
                stat.alternative = make_node(AST_BlockStatement, next, {
                  body: [
                    next,
                    make_node(AST_Return, next, {
                      value: null
                    })
                  ]
                });
                statements2[i] = stat.transform(compressor2);
                statements2.splice(j, 1);
                continue;
              }
            }
          }
          function has_multiple_if_returns(statements3) {
            var n = 0;
            for (var i2 = statements3.length; --i2 >= 0; ) {
              var stat2 = statements3[i2];
              if (stat2 instanceof AST_If && stat2.body instanceof AST_Return) {
                if (++n > 1)
                  return true;
              }
            }
            return false;
          }
          function is_return_void(value2) {
            return !value2 || value2 instanceof AST_UnaryPrefix && value2.operator == "void";
          }
          function can_merge_flow(ab) {
            if (!ab)
              return false;
            for (var j2 = i + 1, len = statements2.length; j2 < len; j2++) {
              var stat2 = statements2[j2];
              if (stat2 instanceof AST_Const || stat2 instanceof AST_Let)
                return false;
            }
            var lct = ab instanceof AST_LoopControl ? compressor2.loopcontrol_target(ab) : null;
            return ab instanceof AST_Return && in_lambda && is_return_void(ab.value) || ab instanceof AST_Continue && self2 === loop_body(lct) || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self2 === lct;
          }
          function extract_functions() {
            var tail = statements2.slice(i + 1);
            statements2.length = i + 1;
            return tail.filter(function(stat2) {
              if (stat2 instanceof AST_Defun) {
                statements2.push(stat2);
                return false;
              }
              return true;
            });
          }
          function as_statement_array_with_return(node, ab) {
            var body = as_statement_array(node);
            if (ab !== body[body.length - 1]) {
              return void 0;
            }
            body = body.slice(0, -1);
            if (ab.value) {
              body.push(make_node(AST_SimpleStatement, ab.value, {
                body: ab.value.expression
              }));
            }
            return body;
          }
          function next_index(i2) {
            for (var j2 = i2 + 1, len = statements2.length; j2 < len; j2++) {
              var stat2 = statements2[j2];
              if (!(stat2 instanceof AST_Var && declarations_only(stat2))) {
                break;
              }
            }
            return j2;
          }
          function prev_index(i2) {
            for (var j2 = i2; --j2 >= 0; ) {
              var stat2 = statements2[j2];
              if (!(stat2 instanceof AST_Var && declarations_only(stat2))) {
                break;
              }
            }
            return j2;
          }
        }
        function eliminate_dead_code(statements2, compressor2) {
          var has_quit;
          var self2 = compressor2.self();
          for (var i = 0, n = 0, len = statements2.length; i < len; i++) {
            var stat = statements2[i];
            if (stat instanceof AST_LoopControl) {
              var lct = compressor2.loopcontrol_target(stat);
              if (stat instanceof AST_Break && !(lct instanceof AST_IterationStatement) && loop_body(lct) === self2 || stat instanceof AST_Continue && loop_body(lct) === self2) {
                if (stat.label) {
                  remove2(stat.label.thedef.references, stat);
                }
              } else {
                statements2[n++] = stat;
              }
            } else {
              statements2[n++] = stat;
            }
            if (aborts(stat)) {
              has_quit = statements2.slice(i + 1);
              break;
            }
          }
          statements2.length = n;
          CHANGED = n != len;
          if (has_quit)
            has_quit.forEach(function(stat2) {
              trim_unreachable_code(compressor2, stat2, statements2);
            });
        }
        function declarations_only(node) {
          return node.definitions.every((var_def) => !var_def.value);
        }
        function sequencesize(statements2, compressor2) {
          if (statements2.length < 2)
            return;
          var seq = [], n = 0;
          function push_seq() {
            if (!seq.length)
              return;
            var body2 = make_sequence(seq[0], seq);
            statements2[n++] = make_node(AST_SimpleStatement, body2, { body: body2 });
            seq = [];
          }
          for (var i = 0, len = statements2.length; i < len; i++) {
            var stat = statements2[i];
            if (stat instanceof AST_SimpleStatement) {
              if (seq.length >= compressor2.sequences_limit)
                push_seq();
              var body = stat.body;
              if (seq.length > 0)
                body = body.drop_side_effect_free(compressor2);
              if (body)
                merge_sequence(seq, body);
            } else if (stat instanceof AST_Definitions && declarations_only(stat) || stat instanceof AST_Defun) {
              statements2[n++] = stat;
            } else {
              push_seq();
              statements2[n++] = stat;
            }
          }
          push_seq();
          statements2.length = n;
          if (n != len)
            CHANGED = true;
        }
        function to_simple_statement(block, decls) {
          if (!(block instanceof AST_BlockStatement))
            return block;
          var stat = null;
          for (var i = 0, len = block.body.length; i < len; i++) {
            var line = block.body[i];
            if (line instanceof AST_Var && declarations_only(line)) {
              decls.push(line);
            } else if (stat || line instanceof AST_Const || line instanceof AST_Let) {
              return false;
            } else {
              stat = line;
            }
          }
          return stat;
        }
        function sequencesize_2(statements2, compressor2) {
          function cons_seq(right) {
            n--;
            CHANGED = true;
            var left = prev.body;
            return make_sequence(left, [left, right]).transform(compressor2);
          }
          var n = 0, prev;
          for (var i = 0; i < statements2.length; i++) {
            var stat = statements2[i];
            if (prev) {
              if (stat instanceof AST_Exit) {
                stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor2));
              } else if (stat instanceof AST_For) {
                if (!(stat.init instanceof AST_Definitions)) {
                  const abort = walk(prev.body, (node) => {
                    if (node instanceof AST_Scope)
                      return true;
                    if (node instanceof AST_Binary && node.operator === "in") {
                      return walk_abort;
                    }
                  });
                  if (!abort) {
                    if (stat.init)
                      stat.init = cons_seq(stat.init);
                    else {
                      stat.init = prev.body;
                      n--;
                      CHANGED = true;
                    }
                  }
                }
              } else if (stat instanceof AST_ForIn) {
                if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) {
                  stat.object = cons_seq(stat.object);
                }
              } else if (stat instanceof AST_If) {
                stat.condition = cons_seq(stat.condition);
              } else if (stat instanceof AST_Switch) {
                stat.expression = cons_seq(stat.expression);
              } else if (stat instanceof AST_With) {
                stat.expression = cons_seq(stat.expression);
              }
            }
            if (compressor2.option("conditionals") && stat instanceof AST_If) {
              var decls = [];
              var body = to_simple_statement(stat.body, decls);
              var alt = to_simple_statement(stat.alternative, decls);
              if (body !== false && alt !== false && decls.length > 0) {
                var len = decls.length;
                decls.push(make_node(AST_If, stat, {
                  condition: stat.condition,
                  body: body || make_node(AST_EmptyStatement, stat.body),
                  alternative: alt
                }));
                decls.unshift(n, 1);
                [].splice.apply(statements2, decls);
                i += len;
                n += len + 1;
                prev = null;
                CHANGED = true;
                continue;
              }
            }
            statements2[n++] = stat;
            prev = stat instanceof AST_SimpleStatement ? stat : null;
          }
          statements2.length = n;
        }
        function join_object_assignments(defn, body) {
          if (!(defn instanceof AST_Definitions))
            return;
          var def = defn.definitions[defn.definitions.length - 1];
          if (!(def.value instanceof AST_Object))
            return;
          var exprs;
          if (body instanceof AST_Assign && !body.logical) {
            exprs = [body];
          } else if (body instanceof AST_Sequence) {
            exprs = body.expressions.slice();
          }
          if (!exprs)
            return;
          var trimmed = false;
          do {
            var node = exprs[0];
            if (!(node instanceof AST_Assign))
              break;
            if (node.operator != "=")
              break;
            if (!(node.left instanceof AST_PropAccess))
              break;
            var sym = node.left.expression;
            if (!(sym instanceof AST_SymbolRef))
              break;
            if (def.name.name != sym.name)
              break;
            if (!node.right.is_constant_expression(nearest_scope))
              break;
            var prop = node.left.property;
            if (prop instanceof AST_Node) {
              prop = prop.evaluate(compressor);
            }
            if (prop instanceof AST_Node)
              break;
            prop = "" + prop;
            var diff = compressor.option("ecma") < 2015 && compressor.has_directive("use strict") ? function(node2) {
              return node2.key != prop && (node2.key && node2.key.name != prop);
            } : function(node2) {
              return node2.key && node2.key.name != prop;
            };
            if (!def.value.properties.every(diff))
              break;
            var p = def.value.properties.filter(function(p2) {
              return p2.key === prop;
            })[0];
            if (!p) {
              def.value.properties.push(make_node(AST_ObjectKeyVal, node, {
                key: prop,
                value: node.right
              }));
            } else {
              p.value = new AST_Sequence({
                start: p.start,
                expressions: [p.value.clone(), node.right.clone()],
                end: p.end
              });
            }
            exprs.shift();
            trimmed = true;
          } while (exprs.length);
          return trimmed && exprs;
        }
        function join_consecutive_vars(statements2) {
          var defs;
          for (var i = 0, j = -1, len = statements2.length; i < len; i++) {
            var stat = statements2[i];
            var prev = statements2[j];
            if (stat instanceof AST_Definitions) {
              if (prev && prev.TYPE == stat.TYPE) {
                prev.definitions = prev.definitions.concat(stat.definitions);
                CHANGED = true;
              } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) {
                defs.definitions = defs.definitions.concat(stat.definitions);
                CHANGED = true;
              } else {
                statements2[++j] = stat;
                defs = stat;
              }
            } else if (stat instanceof AST_Exit) {
              stat.value = extract_object_assignments(stat.value);
            } else if (stat instanceof AST_For) {
              var exprs = join_object_assignments(prev, stat.init);
              if (exprs) {
                CHANGED = true;
                stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;
                statements2[++j] = stat;
              } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {
                if (stat.init) {
                  prev.definitions = prev.definitions.concat(stat.init.definitions);
                }
                stat.init = prev;
                statements2[j] = stat;
                CHANGED = true;
              } else if (defs instanceof AST_Var && stat.init instanceof AST_Var && declarations_only(stat.init)) {
                defs.definitions = defs.definitions.concat(stat.init.definitions);
                stat.init = null;
                statements2[++j] = stat;
                CHANGED = true;
              } else {
                statements2[++j] = stat;
              }
            } else if (stat instanceof AST_ForIn) {
              stat.object = extract_object_assignments(stat.object);
            } else if (stat instanceof AST_If) {
              stat.condition = extract_object_assignments(stat.condition);
            } else if (stat instanceof AST_SimpleStatement) {
              var exprs = join_object_assignments(prev, stat.body);
              if (exprs) {
                CHANGED = true;
                if (!exprs.length)
                  continue;
                stat.body = make_sequence(stat.body, exprs);
              }
              statements2[++j] = stat;
            } else if (stat instanceof AST_Switch) {
              stat.expression = extract_object_assignments(stat.expression);
            } else if (stat instanceof AST_With) {
              stat.expression = extract_object_assignments(stat.expression);
            } else {
              statements2[++j] = stat;
            }
          }
          statements2.length = j + 1;
          function extract_object_assignments(value) {
            statements2[++j] = stat;
            var exprs2 = join_object_assignments(prev, value);
            if (exprs2) {
              CHANGED = true;
              if (exprs2.length) {
                return make_sequence(value, exprs2);
              } else if (value instanceof AST_Sequence) {
                return value.tail_node().left;
              } else {
                return value.left;
              }
            }
            return value;
          }
        }
      }
      function within_array_or_object_literal(compressor) {
        var node, level = 0;
        while (node = compressor.parent(level++)) {
          if (node instanceof AST_Statement)
            return false;
          if (node instanceof AST_Array || node instanceof AST_ObjectKeyVal || node instanceof AST_Object) {
            return true;
          }
        }
        return false;
      }
      function scope_encloses_variables_in_this_scope(scope, pulled_scope) {
        for (const enclosed of pulled_scope.enclosed) {
          if (pulled_scope.variables.has(enclosed.name)) {
            continue;
          }
          const looked_up = scope.find_variable(enclosed.name);
          if (looked_up) {
            if (looked_up === enclosed)
              continue;
            return true;
          }
        }
        return false;
      }
      function is_const_symbol_short_than_init_value(def, fixed_value) {
        if (def.orig.length === 1 && fixed_value) {
          const init_value_length = fixed_value.size();
          const identifer_length = def.name.length;
          return init_value_length > identifer_length;
        }
        return true;
      }
      function inline_into_symbolref(self2, compressor) {
        const parent = compressor.parent();
        const def = self2.definition();
        const nearest_scope = compressor.find_scope();
        let fixed = self2.fixed_value();
        if (compressor.top_retain && def.global && compressor.top_retain(def) && is_const_symbol_short_than_init_value(def, fixed)) {
          def.fixed = false;
          def.single_use = false;
          return self2;
        }
        let single_use = def.single_use && !(parent instanceof AST_Call && parent.is_callee_pure(compressor) || has_annotation(parent, _NOINLINE)) && !(parent instanceof AST_Export && fixed instanceof AST_Lambda && fixed.name);
        if (single_use && fixed instanceof AST_Node) {
          single_use = !fixed.has_side_effects(compressor) && !fixed.may_throw(compressor);
        }
        if (fixed instanceof AST_Class && def.scope !== self2.scope) {
          return self2;
        }
        if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {
          if (retain_top_func(fixed, compressor)) {
            single_use = false;
          } else if (def.scope !== self2.scope && (def.escaped == 1 || has_flag(fixed, INLINED) || within_array_or_object_literal(compressor) || !compressor.option("reduce_funcs"))) {
            single_use = false;
          } else if (is_recursive_ref(compressor, def)) {
            single_use = false;
          } else if (def.scope !== self2.scope || def.orig[0] instanceof AST_SymbolFunarg) {
            single_use = fixed.is_constant_expression(self2.scope);
            if (single_use == "f") {
              var scope = self2.scope;
              do {
                if (scope instanceof AST_Defun || is_func_expr(scope)) {
                  set_flag(scope, INLINED);
                }
              } while (scope = scope.parent_scope);
            }
          }
        }
        if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {
          single_use = def.scope === self2.scope && !scope_encloses_variables_in_this_scope(nearest_scope, fixed) || parent instanceof AST_Call && parent.expression === self2 && !scope_encloses_variables_in_this_scope(nearest_scope, fixed) && !(fixed.name && fixed.name.definition().recursive_refs > 0);
        }
        if (single_use && fixed) {
          if (fixed instanceof AST_DefClass) {
            set_flag(fixed, SQUEEZED);
            fixed = make_node(AST_ClassExpression, fixed, fixed);
          }
          if (fixed instanceof AST_Defun) {
            set_flag(fixed, SQUEEZED);
            fixed = make_node(AST_Function, fixed, fixed);
          }
          if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {
            const defun_def = fixed.name.definition();
            let lambda_def = fixed.variables.get(fixed.name.name);
            let name = lambda_def && lambda_def.orig[0];
            if (!(name instanceof AST_SymbolLambda)) {
              name = make_node(AST_SymbolLambda, fixed.name, fixed.name);
              name.scope = fixed;
              fixed.name = name;
              lambda_def = fixed.def_function(name);
            }
            walk(fixed, (node) => {
              if (node instanceof AST_SymbolRef && node.definition() === defun_def) {
                node.thedef = lambda_def;
                lambda_def.references.push(node);
              }
            });
          }
          if ((fixed instanceof AST_Lambda || fixed instanceof AST_Class) && fixed.parent_scope !== nearest_scope) {
            fixed = fixed.clone(true, compressor.get_toplevel());
            nearest_scope.add_child_scope(fixed);
          }
          return fixed.optimize(compressor);
        }
        if (fixed) {
          let replace;
          if (fixed instanceof AST_This) {
            if (!(def.orig[0] instanceof AST_SymbolFunarg) && def.references.every((ref) => def.scope === ref.scope)) {
              replace = fixed;
            }
          } else {
            var ev = fixed.evaluate(compressor);
            if (ev !== fixed && (compressor.option("unsafe_regexp") || !(ev instanceof RegExp))) {
              replace = make_node_from_constant(ev, fixed);
            }
          }
          if (replace) {
            const name_length = self2.size(compressor);
            const replace_size = replace.size(compressor);
            let overhead = 0;
            if (compressor.option("unused") && !compressor.exposed(def)) {
              overhead = (name_length + 2 + replace_size) / (def.references.length - def.assignments);
            }
            if (replace_size <= name_length + overhead) {
              return replace;
            }
          }
        }
        return self2;
      }
      function inline_into_call(self2, compressor) {
        var exp = self2.expression;
        var fn = exp;
        var simple_args = self2.args.every((arg) => !(arg instanceof AST_Expansion));
        if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef && !has_annotation(self2, _NOINLINE)) {
          const fixed = fn.fixed_value();
          if (retain_top_func(fixed, compressor) || !compressor.toplevel.funcs && exp.definition().global) {
            return self2;
          }
          fn = fixed;
        }
        var is_func = fn instanceof AST_Lambda;
        var stat = is_func && fn.body[0];
        var is_regular_func = is_func && !fn.is_generator && !fn.async;
        var can_inline = is_regular_func && compressor.option("inline") && !self2.is_callee_pure(compressor);
        if (can_inline && stat instanceof AST_Return) {
          let returned = stat.value;
          if (!returned || returned.is_constant_expression()) {
            if (returned) {
              returned = returned.clone(true);
            } else {
              returned = make_node(AST_Undefined, self2);
            }
            const args2 = self2.args.concat(returned);
            return make_sequence(self2, args2).optimize(compressor);
          }
          if (fn.argnames.length === 1 && fn.argnames[0] instanceof AST_SymbolFunarg && self2.args.length < 2 && !(self2.args[0] instanceof AST_Expansion) && returned instanceof AST_SymbolRef && returned.name === fn.argnames[0].name) {
            const replacement = (self2.args[0] || make_node(AST_Undefined)).optimize(compressor);
            let parent;
            if (replacement instanceof AST_PropAccess && (parent = compressor.parent()) instanceof AST_Call && parent.expression === self2) {
              return make_sequence(self2, [
                make_node(AST_Number, self2, { value: 0 }),
                replacement
              ]);
            }
            return replacement;
          }
        }
        if (can_inline) {
          var scope, in_loop, level = -1;
          let def;
          let returned_value;
          let nearest_scope;
          if (simple_args && !fn.uses_arguments && !(compressor.parent() instanceof AST_Class) && !(fn.name && fn instanceof AST_Function) && (returned_value = can_flatten_body(stat)) && (exp === fn || has_annotation(self2, _INLINE) || compressor.option("unused") && (def = exp.definition()).references.length == 1 && !is_recursive_ref(compressor, def) && fn.is_constant_expression(exp.scope)) && !has_annotation(self2, _PURE | _NOINLINE) && !fn.contains_this() && can_inject_symbols() && (nearest_scope = compressor.find_scope()) && !scope_encloses_variables_in_this_scope(nearest_scope, fn) && !function in_default_assign() {
            let i = 0;
            let p;
            while (p = compressor.parent(i++)) {
              if (p instanceof AST_DefaultAssign)
                return true;
              if (p instanceof AST_Block)
                break;
            }
            return false;
          }() && !(scope instanceof AST_Class)) {
            set_flag(fn, SQUEEZED);
            nearest_scope.add_child_scope(fn);
            return make_sequence(self2, flatten_fn(returned_value)).optimize(compressor);
          }
        }
        if (can_inline && has_annotation(self2, _INLINE)) {
          set_flag(fn, SQUEEZED);
          fn = make_node(fn.CTOR === AST_Defun ? AST_Function : fn.CTOR, fn, fn);
          fn = fn.clone(true);
          fn.figure_out_scope({}, {
            parent_scope: compressor.find_scope(),
            toplevel: compressor.get_toplevel()
          });
          return make_node(AST_Call, self2, {
            expression: fn,
            args: self2.args
          }).optimize(compressor);
        }
        const can_drop_this_call = is_regular_func && compressor.option("side_effects") && fn.body.every(is_empty);
        if (can_drop_this_call) {
          var args = self2.args.concat(make_node(AST_Undefined, self2));
          return make_sequence(self2, args).optimize(compressor);
        }
        if (compressor.option("negate_iife") && compressor.parent() instanceof AST_SimpleStatement && is_iife_call(self2)) {
          return self2.negate(compressor, true);
        }
        var ev = self2.evaluate(compressor);
        if (ev !== self2) {
          ev = make_node_from_constant(ev, self2).optimize(compressor);
          return best_of(compressor, ev, self2);
        }
        return self2;
        function return_value(stat2) {
          if (!stat2)
            return make_node(AST_Undefined, self2);
          if (stat2 instanceof AST_Return) {
            if (!stat2.value)
              return make_node(AST_Undefined, self2);
            return stat2.value.clone(true);
          }
          if (stat2 instanceof AST_SimpleStatement) {
            return make_node(AST_UnaryPrefix, stat2, {
              operator: "void",
              expression: stat2.body.clone(true)
            });
          }
        }
        function can_flatten_body(stat2) {
          var body = fn.body;
          var len = body.length;
          if (compressor.option("inline") < 3) {
            return len == 1 && return_value(stat2);
          }
          stat2 = null;
          for (var i = 0; i < len; i++) {
            var line = body[i];
            if (line instanceof AST_Var) {
              if (stat2 && !line.definitions.every((var_def) => !var_def.value)) {
                return false;
              }
            } else if (stat2) {
              return false;
            } else if (!(line instanceof AST_EmptyStatement)) {
              stat2 = line;
            }
          }
          return return_value(stat2);
        }
        function can_inject_args(block_scoped, safe_to_inject) {
          for (var i = 0, len = fn.argnames.length; i < len; i++) {
            var arg = fn.argnames[i];
            if (arg instanceof AST_DefaultAssign) {
              if (has_flag(arg.left, UNUSED))
                continue;
              return false;
            }
            if (arg instanceof AST_Destructuring)
              return false;
            if (arg instanceof AST_Expansion) {
              if (has_flag(arg.expression, UNUSED))
                continue;
              return false;
            }
            if (has_flag(arg, UNUSED))
              continue;
            if (!safe_to_inject || block_scoped.has(arg.name) || identifier_atom.has(arg.name) || scope.conflicting_def(arg.name)) {
              return false;
            }
            if (in_loop)
              in_loop.push(arg.definition());
          }
          return true;
        }
        function can_inject_vars(block_scoped, safe_to_inject) {
          var len = fn.body.length;
          for (var i = 0; i < len; i++) {
            var stat2 = fn.body[i];
            if (!(stat2 instanceof AST_Var))
              continue;
            if (!safe_to_inject)
              return false;
            for (var j = stat2.definitions.length; --j >= 0; ) {
              var name = stat2.definitions[j].name;
              if (name instanceof AST_Destructuring || block_scoped.has(name.name) || identifier_atom.has(name.name) || scope.conflicting_def(name.name)) {
                return false;
              }
              if (in_loop)
                in_loop.push(name.definition());
            }
          }
          return true;
        }
        function can_inject_symbols() {
          var block_scoped = /* @__PURE__ */ new Set();
          do {
            scope = compressor.parent(++level);
            if (scope.is_block_scope() && scope.block_scope) {
              scope.block_scope.variables.forEach(function(variable) {
                block_scoped.add(variable.name);
              });
            }
            if (scope instanceof AST_Catch) {
              if (scope.argname) {
                block_scoped.add(scope.argname.name);
              }
            } else if (scope instanceof AST_IterationStatement) {
              in_loop = [];
            } else if (scope instanceof AST_SymbolRef) {
              if (scope.fixed_value() instanceof AST_Scope)
                return false;
            }
          } while (!(scope instanceof AST_Scope));
          var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;
          var inline = compressor.option("inline");
          if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject))
            return false;
          if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject))
            return false;
          return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop);
        }
        function append_var(decls, expressions, name, value) {
          var def = name.definition();
          const already_appended = scope.variables.has(name.name);
          if (!already_appended) {
            scope.variables.set(name.name, def);
            scope.enclosed.push(def);
            decls.push(make_node(AST_VarDef, name, {
              name,
              value: null
            }));
          }
          var sym = make_node(AST_SymbolRef, name, name);
          def.references.push(sym);
          if (value)
            expressions.push(make_node(AST_Assign, self2, {
              operator: "=",
              logical: false,
              left: sym,
              right: value.clone()
            }));
        }
        function flatten_args(decls, expressions) {
          var len = fn.argnames.length;
          for (var i = self2.args.length; --i >= len; ) {
            expressions.push(self2.args[i]);
          }
          for (i = len; --i >= 0; ) {
            var name = fn.argnames[i];
            var value = self2.args[i];
            if (has_flag(name, UNUSED) || !name.name || scope.conflicting_def(name.name)) {
              if (value)
                expressions.push(value);
            } else {
              var symbol = make_node(AST_SymbolVar, name, name);
              name.definition().orig.push(symbol);
              if (!value && in_loop)
                value = make_node(AST_Undefined, self2);
              append_var(decls, expressions, symbol, value);
            }
          }
          decls.reverse();
          expressions.reverse();
        }
        function flatten_vars(decls, expressions) {
          var pos = expressions.length;
          for (var i = 0, lines = fn.body.length; i < lines; i++) {
            var stat2 = fn.body[i];
            if (!(stat2 instanceof AST_Var))
              continue;
            for (var j = 0, defs = stat2.definitions.length; j < defs; j++) {
              var var_def = stat2.definitions[j];
              var name = var_def.name;
              append_var(decls, expressions, name, var_def.value);
              if (in_loop && fn.argnames.every((argname) => argname.name != name.name)) {
                var def = fn.variables.get(name.name);
                var sym = make_node(AST_SymbolRef, name, name);
                def.references.push(sym);
                expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {
                  operator: "=",
                  logical: false,
                  left: sym,
                  right: make_node(AST_Undefined, name)
                }));
              }
            }
          }
        }
        function flatten_fn(returned_value) {
          var decls = [];
          var expressions = [];
          flatten_args(decls, expressions);
          flatten_vars(decls, expressions);
          expressions.push(returned_value);
          if (decls.length) {
            const i = scope.body.indexOf(compressor.parent(level - 1)) + 1;
            scope.body.splice(i, 0, make_node(AST_Var, fn, {
              definitions: decls
            }));
          }
          return expressions.map((exp2) => exp2.clone(true));
        }
      }
      (function(def_find_defs) {
        function to_node(value, orig) {
          if (value instanceof AST_Node) {
            if (!(value instanceof AST_Constant)) {
              value = value.clone(true);
            }
            return make_node(value.CTOR, orig, value);
          }
          if (Array.isArray(value))
            return make_node(AST_Array, orig, {
              elements: value.map(function(value2) {
                return to_node(value2, orig);
              })
            });
          if (value && typeof value == "object") {
            var props = [];
            for (var key in value)
              if (HOP(value, key)) {
                props.push(make_node(AST_ObjectKeyVal, orig, {
                  key,
                  value: to_node(value[key], orig)
                }));
              }
            return make_node(AST_Object, orig, {
              properties: props
            });
          }
          return make_node_from_constant(value, orig);
        }
        AST_Toplevel.DEFMETHOD("resolve_defines", function(compressor) {
          if (!compressor.option("global_defs"))
            return this;
          this.figure_out_scope({ ie8: compressor.option("ie8") });
          return this.transform(new TreeTransformer(function(node) {
            var def = node._find_defs(compressor, "");
            if (!def)
              return;
            var level = 0, child = node, parent;
            while (parent = this.parent(level++)) {
              if (!(parent instanceof AST_PropAccess))
                break;
              if (parent.expression !== child)
                break;
              child = parent;
            }
            if (is_lhs(child, parent)) {
              return;
            }
            return def;
          }));
        });
        def_find_defs(AST_Node, noop);
        def_find_defs(AST_Chain, function(compressor, suffix) {
          return this.expression._find_defs(compressor, suffix);
        });
        def_find_defs(AST_Dot, function(compressor, suffix) {
          return this.expression._find_defs(compressor, "." + this.property + suffix);
        });
        def_find_defs(AST_SymbolDeclaration, function() {
          if (!this.global())
            return;
        });
        def_find_defs(AST_SymbolRef, function(compressor, suffix) {
          if (!this.global())
            return;
          var defines = compressor.option("global_defs");
          var name = this.name + suffix;
          if (HOP(defines, name))
            return to_node(defines[name], this);
        });
        def_find_defs(AST_ImportMeta, function(compressor, suffix) {
          var defines = compressor.option("global_defs");
          var name = "import.meta" + suffix;
          if (HOP(defines, name))
            return to_node(defines[name], this);
        });
      })(function(node, func) {
        node.DEFMETHOD("_find_defs", func);
      });
      class Compressor extends TreeWalker {
        constructor(options, { false_by_default = false, mangle_options: mangle_options2 = false }) {
          super();
          if (options.defaults !== void 0 && !options.defaults)
            false_by_default = true;
          this.options = defaults(options, {
            arguments: false,
            arrows: !false_by_default,
            booleans: !false_by_default,
            booleans_as_integers: false,
            collapse_vars: !false_by_default,
            comparisons: !false_by_default,
            computed_props: !false_by_default,
            conditionals: !false_by_default,
            dead_code: !false_by_default,
            defaults: true,
            directives: !false_by_default,
            drop_console: false,
            drop_debugger: !false_by_default,
            ecma: 5,
            evaluate: !false_by_default,
            expression: false,
            global_defs: false,
            hoist_funs: false,
            hoist_props: !false_by_default,
            hoist_vars: false,
            ie8: false,
            if_return: !false_by_default,
            inline: !false_by_default,
            join_vars: !false_by_default,
            keep_classnames: false,
            keep_fargs: true,
            keep_fnames: false,
            keep_infinity: false,
            lhs_constants: !false_by_default,
            loops: !false_by_default,
            module: false,
            negate_iife: !false_by_default,
            passes: 1,
            properties: !false_by_default,
            pure_getters: !false_by_default && "strict",
            pure_funcs: null,
            pure_new: false,
            reduce_funcs: !false_by_default,
            reduce_vars: !false_by_default,
            sequences: !false_by_default,
            side_effects: !false_by_default,
            switches: !false_by_default,
            top_retain: null,
            toplevel: !!(options && options["top_retain"]),
            typeofs: !false_by_default,
            unsafe: false,
            unsafe_arrows: false,
            unsafe_comps: false,
            unsafe_Function: false,
            unsafe_math: false,
            unsafe_symbols: false,
            unsafe_methods: false,
            unsafe_proto: false,
            unsafe_regexp: false,
            unsafe_undefined: false,
            unused: !false_by_default,
            warnings: false
          }, true);
          var global_defs = this.options["global_defs"];
          if (typeof global_defs == "object")
            for (var key in global_defs) {
              if (key[0] === "@" && HOP(global_defs, key)) {
                global_defs[key.slice(1)] = parse2(global_defs[key], {
                  expression: true
                });
              }
            }
          if (this.options["inline"] === true)
            this.options["inline"] = 3;
          var pure_funcs = this.options["pure_funcs"];
          if (typeof pure_funcs == "function") {
            this.pure_funcs = pure_funcs;
          } else {
            this.pure_funcs = pure_funcs ? function(node) {
              return !pure_funcs.includes(node.expression.print_to_string());
            } : return_true;
          }
          var top_retain = this.options["top_retain"];
          if (top_retain instanceof RegExp) {
            this.top_retain = function(def) {
              return top_retain.test(def.name);
            };
          } else if (typeof top_retain == "function") {
            this.top_retain = top_retain;
          } else if (top_retain) {
            if (typeof top_retain == "string") {
              top_retain = top_retain.split(/,/);
            }
            this.top_retain = function(def) {
              return top_retain.includes(def.name);
            };
          }
          if (this.options["module"]) {
            this.directives["use strict"] = true;
            this.options["toplevel"] = true;
          }
          var toplevel = this.options["toplevel"];
          this.toplevel = typeof toplevel == "string" ? {
            funcs: /funcs/.test(toplevel),
            vars: /vars/.test(toplevel)
          } : {
            funcs: toplevel,
            vars: toplevel
          };
          var sequences = this.options["sequences"];
          this.sequences_limit = sequences == 1 ? 800 : sequences | 0;
          this.evaluated_regexps = /* @__PURE__ */ new Map();
          this._toplevel = void 0;
          this._mangle_options = mangle_options2 ? format_mangler_options(mangle_options2) : mangle_options2;
        }
        mangle_options() {
          var nth_identifier = this._mangle_options && this._mangle_options.nth_identifier || base54;
          var module3 = this._mangle_options && this._mangle_options.module || this.option("module");
          return { ie8: this.option("ie8"), nth_identifier, module: module3 };
        }
        option(key) {
          return this.options[key];
        }
        exposed(def) {
          if (def.export)
            return true;
          if (def.global) {
            for (var i = 0, len = def.orig.length; i < len; i++)
              if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? "funcs" : "vars"])
                return true;
          }
          return false;
        }
        in_boolean_context() {
          if (!this.option("booleans"))
            return false;
          var self2 = this.self();
          for (var i = 0, p; p = this.parent(i); i++) {
            if (p instanceof AST_SimpleStatement || p instanceof AST_Conditional && p.condition === self2 || p instanceof AST_DWLoop && p.condition === self2 || p instanceof AST_For && p.condition === self2 || p instanceof AST_If && p.condition === self2 || p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self2) {
              return true;
            }
            if (p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||" || p.operator == "??") || p instanceof AST_Conditional || p.tail_node() === self2) {
              self2 = p;
            } else {
              return false;
            }
          }
        }
        get_toplevel() {
          return this._toplevel;
        }
        compress(toplevel) {
          toplevel = toplevel.resolve_defines(this);
          this._toplevel = toplevel;
          if (this.option("expression")) {
            this._toplevel.process_expression(true);
          }
          var passes = +this.options.passes || 1;
          var min_count = 1 / 0;
          var stopping = false;
          var mangle = this.mangle_options();
          for (var pass = 0; pass < passes; pass++) {
            this._toplevel.figure_out_scope(mangle);
            if (pass === 0 && this.option("drop_console")) {
              this._toplevel = this._toplevel.drop_console(this.option("drop_console"));
            }
            if (pass > 0 || this.option("reduce_vars")) {
              this._toplevel.reset_opt_flags(this);
            }
            this._toplevel = this._toplevel.transform(this);
            if (passes > 1) {
              let count = 0;
              walk(this._toplevel, () => {
                count++;
              });
              if (count < min_count) {
                min_count = count;
                stopping = false;
              } else if (stopping) {
                break;
              } else {
                stopping = true;
              }
            }
          }
          if (this.option("expression")) {
            this._toplevel.process_expression(false);
          }
          toplevel = this._toplevel;
          this._toplevel = void 0;
          return toplevel;
        }
        before(node, descend) {
          if (has_flag(node, SQUEEZED))
            return node;
          var was_scope = false;
          if (node instanceof AST_Scope) {
            node = node.hoist_properties(this);
            node = node.hoist_declarations(this);
            was_scope = true;
          }
          descend(node, this);
          descend(node, this);
          var opt = node.optimize(this);
          if (was_scope && opt instanceof AST_Scope) {
            opt.drop_unused(this);
            descend(opt, this);
          }
          if (opt === node)
            set_flag(opt, SQUEEZED);
          return opt;
        }
        is_lhs() {
          const self2 = this.stack[this.stack.length - 1];
          const parent = this.stack[this.stack.length - 2];
          return is_lhs(self2, parent);
        }
      }
      function def_optimize(node, optimizer) {
        node.DEFMETHOD("optimize", function(compressor) {
          var self2 = this;
          if (has_flag(self2, OPTIMIZED))
            return self2;
          if (compressor.has_directive("use asm"))
            return self2;
          var opt = optimizer(self2, compressor);
          set_flag(opt, OPTIMIZED);
          return opt;
        });
      }
      def_optimize(AST_Node, function(self2) {
        return self2;
      });
      AST_Toplevel.DEFMETHOD("drop_console", function(options) {
        var isArray = Array.isArray(options);
        return this.transform(new TreeTransformer(function(self2) {
          if (self2.TYPE !== "Call") {
            return;
          }
          var exp = self2.expression;
          if (!(exp instanceof AST_PropAccess)) {
            return;
          }
          if (isArray && options.indexOf(exp.property) === -1) {
            return;
          }
          var name = exp.expression;
          while (name.expression) {
            name = name.expression;
          }
          if (is_undeclared_ref(name) && name.name == "console") {
            return make_node(AST_Undefined, self2);
          }
        }));
      });
      AST_Node.DEFMETHOD("equivalent_to", function(node) {
        return equivalent_to(this, node);
      });
      AST_Scope.DEFMETHOD("process_expression", function(insert, compressor) {
        var self2 = this;
        var tt = new TreeTransformer(function(node) {
          if (insert && node instanceof AST_SimpleStatement) {
            return make_node(AST_Return, node, {
              value: node.body
            });
          }
          if (!insert && node instanceof AST_Return) {
            if (compressor) {
              var value = node.value && node.value.drop_side_effect_free(compressor, true);
              return value ? make_node(AST_SimpleStatement, node, { body: value }) : make_node(AST_EmptyStatement, node);
            }
            return make_node(AST_SimpleStatement, node, {
              body: node.value || make_node(AST_UnaryPrefix, node, {
                operator: "void",
                expression: make_node(AST_Number, node, {
                  value: 0
                })
              })
            });
          }
          if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self2) {
            return node;
          }
          if (node instanceof AST_Block) {
            var index = node.body.length - 1;
            if (index >= 0) {
              node.body[index] = node.body[index].transform(tt);
            }
          } else if (node instanceof AST_If) {
            node.body = node.body.transform(tt);
            if (node.alternative) {
              node.alternative = node.alternative.transform(tt);
            }
          } else if (node instanceof AST_With) {
            node.body = node.body.transform(tt);
          }
          return node;
        });
        self2.transform(tt);
      });
      AST_Toplevel.DEFMETHOD("reset_opt_flags", function(compressor) {
        const self2 = this;
        const reduce_vars = compressor.option("reduce_vars");
        const preparation = new TreeWalker(function(node, descend) {
          clear_flag(node, CLEAR_BETWEEN_PASSES);
          if (reduce_vars) {
            if (compressor.top_retain && node instanceof AST_Defun && preparation.parent() === self2) {
              set_flag(node, TOP);
            }
            return node.reduce_vars(preparation, descend, compressor);
          }
        });
        preparation.safe_ids = /* @__PURE__ */ Object.create(null);
        preparation.in_loop = null;
        preparation.loop_ids = /* @__PURE__ */ new Map();
        preparation.defs_to_safe_ids = /* @__PURE__ */ new Map();
        self2.walk(preparation);
      });
      AST_Symbol.DEFMETHOD("fixed_value", function() {
        var fixed = this.thedef.fixed;
        if (!fixed || fixed instanceof AST_Node)
          return fixed;
        return fixed();
      });
      AST_SymbolRef.DEFMETHOD("is_immutable", function() {
        var orig = this.definition().orig;
        return orig.length == 1 && orig[0] instanceof AST_SymbolLambda;
      });
      function find_variable(compressor, name) {
        var scope, i = 0;
        while (scope = compressor.parent(i++)) {
          if (scope instanceof AST_Scope)
            break;
          if (scope instanceof AST_Catch && scope.argname) {
            scope = scope.argname.definition().scope;
            break;
          }
        }
        return scope.find_variable(name);
      }
      var global_names = makePredicate("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError");
      AST_SymbolRef.DEFMETHOD("is_declared", function(compressor) {
        return !this.definition().undeclared || compressor.option("unsafe") && global_names.has(this.name);
      });
      var directives = /* @__PURE__ */ new Set(["use asm", "use strict"]);
      def_optimize(AST_Directive, function(self2, compressor) {
        if (compressor.option("directives") && (!directives.has(self2.value) || compressor.has_directive(self2.value) !== self2)) {
          return make_node(AST_EmptyStatement, self2);
        }
        return self2;
      });
      def_optimize(AST_Debugger, function(self2, compressor) {
        if (compressor.option("drop_debugger"))
          return make_node(AST_EmptyStatement, self2);
        return self2;
      });
      def_optimize(AST_LabeledStatement, function(self2, compressor) {
        if (self2.body instanceof AST_Break && compressor.loopcontrol_target(self2.body) === self2.body) {
          return make_node(AST_EmptyStatement, self2);
        }
        return self2.label.references.length == 0 ? self2.body : self2;
      });
      def_optimize(AST_Block, function(self2, compressor) {
        tighten_body(self2.body, compressor);
        return self2;
      });
      function can_be_extracted_from_if_block(node) {
        return !(node instanceof AST_Const || node instanceof AST_Let || node instanceof AST_Class);
      }
      def_optimize(AST_BlockStatement, function(self2, compressor) {
        tighten_body(self2.body, compressor);
        switch (self2.body.length) {
          case 1:
            if (!compressor.has_directive("use strict") && compressor.parent() instanceof AST_If && can_be_extracted_from_if_block(self2.body[0]) || can_be_evicted_from_block(self2.body[0])) {
              return self2.body[0];
            }
            break;
          case 0:
            return make_node(AST_EmptyStatement, self2);
        }
        return self2;
      });
      function opt_AST_Lambda(self2, compressor) {
        tighten_body(self2.body, compressor);
        if (compressor.option("side_effects") && self2.body.length == 1 && self2.body[0] === compressor.has_directive("use strict")) {
          self2.body.length = 0;
        }
        return self2;
      }
      def_optimize(AST_Lambda, opt_AST_Lambda);
      AST_Scope.DEFMETHOD("hoist_declarations", function(compressor) {
        var self2 = this;
        if (compressor.has_directive("use asm"))
          return self2;
        var hoist_funs = compressor.option("hoist_funs");
        var hoist_vars = compressor.option("hoist_vars");
        if (hoist_funs || hoist_vars) {
          var dirs = [];
          var hoisted = [];
          var vars = /* @__PURE__ */ new Map(), vars_found = 0, var_decl = 0;
          walk(self2, (node) => {
            if (node instanceof AST_Scope && node !== self2)
              return true;
            if (node instanceof AST_Var) {
              ++var_decl;
              return true;
            }
          });
          hoist_vars = hoist_vars && var_decl > 1;
          var tt = new TreeTransformer(function before(node) {
            if (node !== self2) {
              if (node instanceof AST_Directive) {
                dirs.push(node);
                return make_node(AST_EmptyStatement, node);
              }
              if (hoist_funs && node instanceof AST_Defun && !(tt.parent() instanceof AST_Export) && tt.parent() === self2) {
                hoisted.push(node);
                return make_node(AST_EmptyStatement, node);
              }
              if (hoist_vars && node instanceof AST_Var && !node.definitions.some((def3) => def3.name instanceof AST_Destructuring)) {
                node.definitions.forEach(function(def3) {
                  vars.set(def3.name.name, def3);
                  ++vars_found;
                });
                var seq = node.to_assignments(compressor);
                var p = tt.parent();
                if (p instanceof AST_ForIn && p.init === node) {
                  if (seq == null) {
                    var def2 = node.definitions[0].name;
                    return make_node(AST_SymbolRef, def2, def2);
                  }
                  return seq;
                }
                if (p instanceof AST_For && p.init === node) {
                  return seq;
                }
                if (!seq)
                  return make_node(AST_EmptyStatement, node);
                return make_node(AST_SimpleStatement, node, {
                  body: seq
                });
              }
              if (node instanceof AST_Scope)
                return node;
            }
          });
          self2 = self2.transform(tt);
          if (vars_found > 0) {
            var defs = [];
            const is_lambda = self2 instanceof AST_Lambda;
            const args_as_names = is_lambda ? self2.args_as_names() : null;
            vars.forEach((def2, name) => {
              if (is_lambda && args_as_names.some((x) => x.name === def2.name.name)) {
                vars.delete(name);
              } else {
                def2 = def2.clone();
                def2.value = null;
                defs.push(def2);
                vars.set(name, def2);
              }
            });
            if (defs.length > 0) {
              for (var i = 0; i < self2.body.length; ) {
                if (self2.body[i] instanceof AST_SimpleStatement) {
                  var expr = self2.body[i].body, sym, assign;
                  if (expr instanceof AST_Assign && expr.operator == "=" && (sym = expr.left) instanceof AST_Symbol && vars.has(sym.name)) {
                    var def = vars.get(sym.name);
                    if (def.value)
                      break;
                    def.value = expr.right;
                    remove2(defs, def);
                    defs.push(def);
                    self2.body.splice(i, 1);
                    continue;
                  }
                  if (expr instanceof AST_Sequence && (assign = expr.expressions[0]) instanceof AST_Assign && assign.operator == "=" && (sym = assign.left) instanceof AST_Symbol && vars.has(sym.name)) {
                    var def = vars.get(sym.name);
                    if (def.value)
                      break;
                    def.value = assign.right;
                    remove2(defs, def);
                    defs.push(def);
                    self2.body[i].body = make_sequence(expr, expr.expressions.slice(1));
                    continue;
                  }
                }
                if (self2.body[i] instanceof AST_EmptyStatement) {
                  self2.body.splice(i, 1);
                  continue;
                }
                if (self2.body[i] instanceof AST_BlockStatement) {
                  self2.body.splice(i, 1, ...self2.body[i].body);
                  continue;
                }
                break;
              }
              defs = make_node(AST_Var, self2, {
                definitions: defs
              });
              hoisted.push(defs);
            }
          }
          self2.body = dirs.concat(hoisted, self2.body);
        }
        return self2;
      });
      AST_Scope.DEFMETHOD("hoist_properties", function(compressor) {
        var self2 = this;
        if (!compressor.option("hoist_props") || compressor.has_directive("use asm"))
          return self2;
        var top_retain = self2 instanceof AST_Toplevel && compressor.top_retain || return_false;
        var defs_by_id = /* @__PURE__ */ new Map();
        var hoister = new TreeTransformer(function(node, descend) {
          if (node instanceof AST_VarDef) {
            const sym = node.name;
            let def;
            let value;
            if (sym.scope === self2 && (def = sym.definition()).escaped != 1 && !def.assignments && !def.direct_access && !def.single_use && !compressor.exposed(def) && !top_retain(def) && (value = sym.fixed_value()) === node.value && value instanceof AST_Object && !value.properties.some((prop) => prop instanceof AST_Expansion || prop.computed_key())) {
              descend(node, this);
              const defs = /* @__PURE__ */ new Map();
              const assignments = [];
              value.properties.forEach(({ key, value: value2 }) => {
                const scope = hoister.find_scope();
                const symbol = self2.create_symbol(sym.CTOR, {
                  source: sym,
                  scope,
                  conflict_scopes: /* @__PURE__ */ new Set([
                    scope,
                    ...sym.definition().references.map((ref) => ref.scope)
                  ]),
                  tentative_name: sym.name + "_" + key
                });
                defs.set(String(key), symbol.definition());
                assignments.push(make_node(AST_VarDef, node, {
                  name: symbol,
                  value: value2
                }));
              });
              defs_by_id.set(def.id, defs);
              return MAP.splice(assignments);
            }
          } else if (node instanceof AST_PropAccess && node.expression instanceof AST_SymbolRef) {
            const defs = defs_by_id.get(node.expression.definition().id);
            if (defs) {
              const def = defs.get(String(get_simple_key(node.property)));
              const sym = make_node(AST_SymbolRef, node, {
                name: def.name,
                scope: node.expression.scope,
                thedef: def
              });
              sym.reference({});
              return sym;
            }
          }
        });
        return self2.transform(hoister);
      });
      def_optimize(AST_SimpleStatement, function(self2, compressor) {
        if (compressor.option("side_effects")) {
          var body = self2.body;
          var node = body.drop_side_effect_free(compressor, true);
          if (!node) {
            return make_node(AST_EmptyStatement, self2);
          }
          if (node !== body) {
            return make_node(AST_SimpleStatement, self2, { body: node });
          }
        }
        return self2;
      });
      def_optimize(AST_While, function(self2, compressor) {
        return compressor.option("loops") ? make_node(AST_For, self2, self2).optimize(compressor) : self2;
      });
      def_optimize(AST_Do, function(self2, compressor) {
        if (!compressor.option("loops"))
          return self2;
        var cond = self2.condition.tail_node().evaluate(compressor);
        if (!(cond instanceof AST_Node)) {
          if (cond)
            return make_node(AST_For, self2, {
              body: make_node(AST_BlockStatement, self2.body, {
                body: [
                  self2.body,
                  make_node(AST_SimpleStatement, self2.condition, {
                    body: self2.condition
                  })
                ]
              })
            }).optimize(compressor);
          if (!has_break_or_continue(self2, compressor.parent())) {
            return make_node(AST_BlockStatement, self2.body, {
              body: [
                self2.body,
                make_node(AST_SimpleStatement, self2.condition, {
                  body: self2.condition
                })
              ]
            }).optimize(compressor);
          }
        }
        return self2;
      });
      function if_break_in_loop(self2, compressor) {
        var first = self2.body instanceof AST_BlockStatement ? self2.body.body[0] : self2.body;
        if (compressor.option("dead_code") && is_break(first)) {
          var body = [];
          if (self2.init instanceof AST_Statement) {
            body.push(self2.init);
          } else if (self2.init) {
            body.push(make_node(AST_SimpleStatement, self2.init, {
              body: self2.init
            }));
          }
          if (self2.condition) {
            body.push(make_node(AST_SimpleStatement, self2.condition, {
              body: self2.condition
            }));
          }
          trim_unreachable_code(compressor, self2.body, body);
          return make_node(AST_BlockStatement, self2, {
            body
          });
        }
        if (first instanceof AST_If) {
          if (is_break(first.body)) {
            if (self2.condition) {
              self2.condition = make_node(AST_Binary, self2.condition, {
                left: self2.condition,
                operator: "&&",
                right: first.condition.negate(compressor)
              });
            } else {
              self2.condition = first.condition.negate(compressor);
            }
            drop_it(first.alternative);
          } else if (is_break(first.alternative)) {
            if (self2.condition) {
              self2.condition = make_node(AST_Binary, self2.condition, {
                left: self2.condition,
                operator: "&&",
                right: first.condition
              });
            } else {
              self2.condition = first.condition;
            }
            drop_it(first.body);
          }
        }
        return self2;
        function is_break(node) {
          return node instanceof AST_Break && compressor.loopcontrol_target(node) === compressor.self();
        }
        function drop_it(rest) {
          rest = as_statement_array(rest);
          if (self2.body instanceof AST_BlockStatement) {
            self2.body = self2.body.clone();
            self2.body.body = rest.concat(self2.body.body.slice(1));
            self2.body = self2.body.transform(compressor);
          } else {
            self2.body = make_node(AST_BlockStatement, self2.body, {
              body: rest
            }).transform(compressor);
          }
          self2 = if_break_in_loop(self2, compressor);
        }
      }
      def_optimize(AST_For, function(self2, compressor) {
        if (!compressor.option("loops"))
          return self2;
        if (compressor.option("side_effects") && self2.init) {
          self2.init = self2.init.drop_side_effect_free(compressor);
        }
        if (self2.condition) {
          var cond = self2.condition.evaluate(compressor);
          if (!(cond instanceof AST_Node)) {
            if (cond)
              self2.condition = null;
            else if (!compressor.option("dead_code")) {
              var orig = self2.condition;
              self2.condition = make_node_from_constant(cond, self2.condition);
              self2.condition = best_of_expression(self2.condition.transform(compressor), orig);
            }
          }
          if (compressor.option("dead_code")) {
            if (cond instanceof AST_Node)
              cond = self2.condition.tail_node().evaluate(compressor);
            if (!cond) {
              var body = [];
              trim_unreachable_code(compressor, self2.body, body);
              if (self2.init instanceof AST_Statement) {
                body.push(self2.init);
              } else if (self2.init) {
                body.push(make_node(AST_SimpleStatement, self2.init, {
                  body: self2.init
                }));
              }
              body.push(make_node(AST_SimpleStatement, self2.condition, {
                body: self2.condition
              }));
              return make_node(AST_BlockStatement, self2, { body }).optimize(compressor);
            }
          }
        }
        return if_break_in_loop(self2, compressor);
      });
      def_optimize(AST_If, function(self2, compressor) {
        if (is_empty(self2.alternative))
          self2.alternative = null;
        if (!compressor.option("conditionals"))
          return self2;
        var cond = self2.condition.evaluate(compressor);
        if (!compressor.option("dead_code") && !(cond instanceof AST_Node)) {
          var orig = self2.condition;
          self2.condition = make_node_from_constant(cond, orig);
          self2.condition = best_of_expression(self2.condition.transform(compressor), orig);
        }
        if (compressor.option("dead_code")) {
          if (cond instanceof AST_Node)
            cond = self2.condition.tail_node().evaluate(compressor);
          if (!cond) {
            var body = [];
            trim_unreachable_code(compressor, self2.body, body);
            body.push(make_node(AST_SimpleStatement, self2.condition, {
              body: self2.condition
            }));
            if (self2.alternative)
              body.push(self2.alternative);
            return make_node(AST_BlockStatement, self2, { body }).optimize(compressor);
          } else if (!(cond instanceof AST_Node)) {
            var body = [];
            body.push(make_node(AST_SimpleStatement, self2.condition, {
              body: self2.condition
            }));
            body.push(self2.body);
            if (self2.alternative) {
              trim_unreachable_code(compressor, self2.alternative, body);
            }
            return make_node(AST_BlockStatement, self2, { body }).optimize(compressor);
          }
        }
        var negated = self2.condition.negate(compressor);
        var self_condition_length = self2.condition.size();
        var negated_length = negated.size();
        var negated_is_best = negated_length < self_condition_length;
        if (self2.alternative && negated_is_best) {
          negated_is_best = false;
          self2.condition = negated;
          var tmp = self2.body;
          self2.body = self2.alternative || make_node(AST_EmptyStatement, self2);
          self2.alternative = tmp;
        }
        if (is_empty(self2.body) && is_empty(self2.alternative)) {
          return make_node(AST_SimpleStatement, self2.condition, {
            body: self2.condition.clone()
          }).optimize(compressor);
        }
        if (self2.body instanceof AST_SimpleStatement && self2.alternative instanceof AST_SimpleStatement) {
          return make_node(AST_SimpleStatement, self2, {
            body: make_node(AST_Conditional, self2, {
              condition: self2.condition,
              consequent: self2.body.body,
              alternative: self2.alternative.body
            })
          }).optimize(compressor);
        }
        if (is_empty(self2.alternative) && self2.body instanceof AST_SimpleStatement) {
          if (self_condition_length === negated_length && !negated_is_best && self2.condition instanceof AST_Binary && self2.condition.operator == "||") {
            negated_is_best = true;
          }
          if (negated_is_best)
            return make_node(AST_SimpleStatement, self2, {
              body: make_node(AST_Binary, self2, {
                operator: "||",
                left: negated,
                right: self2.body.body
              })
            }).optimize(compressor);
          return make_node(AST_SimpleStatement, self2, {
            body: make_node(AST_Binary, self2, {
              operator: "&&",
              left: self2.condition,
              right: self2.body.body
            })
          }).optimize(compressor);
        }
        if (self2.body instanceof AST_EmptyStatement && self2.alternative instanceof AST_SimpleStatement) {
          return make_node(AST_SimpleStatement, self2, {
            body: make_node(AST_Binary, self2, {
              operator: "||",
              left: self2.condition,
              right: self2.alternative.body
            })
          }).optimize(compressor);
        }
        if (self2.body instanceof AST_Exit && self2.alternative instanceof AST_Exit && self2.body.TYPE == self2.alternative.TYPE) {
          return make_node(self2.body.CTOR, self2, {
            value: make_node(AST_Conditional, self2, {
              condition: self2.condition,
              consequent: self2.body.value || make_node(AST_Undefined, self2.body),
              alternative: self2.alternative.value || make_node(AST_Undefined, self2.alternative)
            }).transform(compressor)
          }).optimize(compressor);
        }
        if (self2.body instanceof AST_If && !self2.body.alternative && !self2.alternative) {
          self2 = make_node(AST_If, self2, {
            condition: make_node(AST_Binary, self2.condition, {
              operator: "&&",
              left: self2.condition,
              right: self2.body.condition
            }),
            body: self2.body.body,
            alternative: null
          });
        }
        if (aborts(self2.body)) {
          if (self2.alternative) {
            var alt = self2.alternative;
            self2.alternative = null;
            return make_node(AST_BlockStatement, self2, {
              body: [self2, alt]
            }).optimize(compressor);
          }
        }
        if (aborts(self2.alternative)) {
          var body = self2.body;
          self2.body = self2.alternative;
          self2.condition = negated_is_best ? negated : self2.condition.negate(compressor);
          self2.alternative = null;
          return make_node(AST_BlockStatement, self2, {
            body: [self2, body]
          }).optimize(compressor);
        }
        return self2;
      });
      def_optimize(AST_Switch, function(self2, compressor) {
        if (!compressor.option("switches"))
          return self2;
        var branch;
        var value = self2.expression.evaluate(compressor);
        if (!(value instanceof AST_Node)) {
          var orig = self2.expression;
          self2.expression = make_node_from_constant(value, orig);
          self2.expression = best_of_expression(self2.expression.transform(compressor), orig);
        }
        if (!compressor.option("dead_code"))
          return self2;
        if (value instanceof AST_Node) {
          value = self2.expression.tail_node().evaluate(compressor);
        }
        var decl2 = [];
        var body = [];
        var default_branch;
        var exact_match;
        for (var i = 0, len = self2.body.length; i < len && !exact_match; i++) {
          branch = self2.body[i];
          if (branch instanceof AST_Default) {
            if (!default_branch) {
              default_branch = branch;
            } else {
              eliminate_branch(branch, body[body.length - 1]);
            }
          } else if (!(value instanceof AST_Node)) {
            var exp = branch.expression.evaluate(compressor);
            if (!(exp instanceof AST_Node) && exp !== value) {
              eliminate_branch(branch, body[body.length - 1]);
              continue;
            }
            if (exp instanceof AST_Node)
              exp = branch.expression.tail_node().evaluate(compressor);
            if (exp === value) {
              exact_match = branch;
              if (default_branch) {
                var default_index = body.indexOf(default_branch);
                body.splice(default_index, 1);
                eliminate_branch(default_branch, body[default_index - 1]);
                default_branch = null;
              }
            }
          }
          body.push(branch);
        }
        while (i < len)
          eliminate_branch(self2.body[i++], body[body.length - 1]);
        self2.body = body;
        let default_or_exact = default_branch || exact_match;
        default_branch = null;
        exact_match = null;
        if (body.every((branch2, i2) => (branch2 === default_or_exact || branch2.expression instanceof AST_Constant) && (branch2.body.length === 0 || aborts(branch2) || body.length - 1 === i2))) {
          for (let i2 = 0; i2 < body.length; i2++) {
            const branch2 = body[i2];
            for (let j = i2 + 1; j < body.length; j++) {
              const next = body[j];
              if (next.body.length === 0)
                continue;
              const last_branch = j === body.length - 1;
              const equivalentBranch = branches_equivalent(next, branch2, false);
              if (equivalentBranch || last_branch && branches_equivalent(next, branch2, true)) {
                if (!equivalentBranch && last_branch) {
                  next.body.push(make_node(AST_Break));
                }
                let x = j - 1;
                let fallthroughDepth = 0;
                while (x > i2) {
                  if (is_inert_body(body[x--])) {
                    fallthroughDepth++;
                  } else {
                    break;
                  }
                }
                const plucked = body.splice(j - fallthroughDepth, 1 + fallthroughDepth);
                body.splice(i2 + 1, 0, ...plucked);
                i2 += plucked.length;
              }
            }
          }
        }
        for (let i2 = 0; i2 < body.length; i2++) {
          let branch2 = body[i2];
          if (branch2.body.length === 0)
            continue;
          if (!aborts(branch2))
            continue;
          for (let j = i2 + 1; j < body.length; i2++, j++) {
            let next = body[j];
            if (next.body.length === 0)
              continue;
            if (branches_equivalent(next, branch2, false) || j === body.length - 1 && branches_equivalent(next, branch2, true)) {
              branch2.body = [];
              branch2 = next;
              continue;
            }
            break;
          }
        }
        {
          let i2 = body.length - 1;
          for (; i2 >= 0; i2--) {
            let bbody = body[i2].body;
            if (is_break(bbody[bbody.length - 1], compressor))
              bbody.pop();
            if (!is_inert_body(body[i2]))
              break;
          }
          i2++;
          if (!default_or_exact || body.indexOf(default_or_exact) >= i2) {
            for (let j = body.length - 1; j >= i2; j--) {
              let branch2 = body[j];
              if (branch2 === default_or_exact) {
                default_or_exact = null;
                body.pop();
              } else if (!branch2.expression.has_side_effects(compressor)) {
                body.pop();
              } else {
                break;
              }
            }
          }
        }
        DEFAULT:
          if (default_or_exact) {
            let default_index2 = body.indexOf(default_or_exact);
            let default_body_index = default_index2;
            for (; default_body_index < body.length - 1; default_body_index++) {
              if (!is_inert_body(body[default_body_index]))
                break;
            }
            if (default_body_index < body.length - 1) {
              break DEFAULT;
            }
            let side_effect_index = body.length - 1;
            for (; side_effect_index >= 0; side_effect_index--) {
              let branch2 = body[side_effect_index];
              if (branch2 === default_or_exact)
                continue;
              if (branch2.expression.has_side_effects(compressor))
                break;
            }
            if (default_body_index > side_effect_index) {
              let prev_body_index = default_index2 - 1;
              for (; prev_body_index >= 0; prev_body_index--) {
                if (!is_inert_body(body[prev_body_index]))
                  break;
              }
              let before = Math.max(side_effect_index, prev_body_index) + 1;
              let after = default_index2;
              if (side_effect_index > default_index2) {
                after = side_effect_index;
                body[side_effect_index].body = body[default_body_index].body;
              } else {
                default_or_exact.body = body[default_body_index].body;
              }
              body.splice(after + 1, default_body_index - after);
              body.splice(before, default_index2 - before);
            }
          }
        DEFAULT:
          if (default_or_exact) {
            let i2 = body.findIndex((branch2) => !is_inert_body(branch2));
            let caseBody;
            if (i2 === body.length - 1) {
              let branch2 = body[i2];
              if (has_nested_break(self2))
                break DEFAULT;
              caseBody = make_node(AST_BlockStatement, branch2, {
                body: branch2.body
              });
              branch2.body = [];
            } else if (i2 !== -1) {
              break DEFAULT;
            }
            let sideEffect = body.find((branch2) => {
              return branch2 !== default_or_exact && branch2.expression.has_side_effects(compressor);
            });
            if (!sideEffect) {
              return make_node(AST_BlockStatement, self2, {
                body: decl2.concat(statement(self2.expression), default_or_exact.expression ? statement(default_or_exact.expression) : [], caseBody || [])
              }).optimize(compressor);
            }
            const default_index2 = body.indexOf(default_or_exact);
            body.splice(default_index2, 1);
            default_or_exact = null;
            if (caseBody) {
              return make_node(AST_BlockStatement, self2, {
                body: decl2.concat(self2, caseBody)
              }).optimize(compressor);
            }
          }
        if (body.length > 0) {
          body[0].body = decl2.concat(body[0].body);
        }
        if (body.length == 0) {
          return make_node(AST_BlockStatement, self2, {
            body: decl2.concat(statement(self2.expression))
          }).optimize(compressor);
        }
        if (body.length == 1 && !has_nested_break(self2)) {
          let branch2 = body[0];
          return make_node(AST_If, self2, {
            condition: make_node(AST_Binary, self2, {
              operator: "===",
              left: self2.expression,
              right: branch2.expression
            }),
            body: make_node(AST_BlockStatement, branch2, {
              body: branch2.body
            }),
            alternative: null
          }).optimize(compressor);
        }
        if (body.length === 2 && default_or_exact && !has_nested_break(self2)) {
          let branch2 = body[0] === default_or_exact ? body[1] : body[0];
          let exact_exp = default_or_exact.expression && statement(default_or_exact.expression);
          if (aborts(body[0])) {
            let first = body[0];
            if (is_break(first.body[first.body.length - 1], compressor)) {
              first.body.pop();
            }
            return make_node(AST_If, self2, {
              condition: make_node(AST_Binary, self2, {
                operator: "===",
                left: self2.expression,
                right: branch2.expression
              }),
              body: make_node(AST_BlockStatement, branch2, {
                body: branch2.body
              }),
              alternative: make_node(AST_BlockStatement, default_or_exact, {
                body: [].concat(exact_exp || [], default_or_exact.body)
              })
            }).optimize(compressor);
          }
          let operator = "===";
          let consequent = make_node(AST_BlockStatement, branch2, {
            body: branch2.body
          });
          let always = make_node(AST_BlockStatement, default_or_exact, {
            body: [].concat(exact_exp || [], default_or_exact.body)
          });
          if (body[0] === default_or_exact) {
            operator = "!==";
            let tmp = always;
            always = consequent;
            consequent = tmp;
          }
          return make_node(AST_BlockStatement, self2, {
            body: [
              make_node(AST_If, self2, {
                condition: make_node(AST_Binary, self2, {
                  operator,
                  left: self2.expression,
                  right: branch2.expression
                }),
                body: consequent,
                alternative: null
              })
            ].concat(always)
          }).optimize(compressor);
        }
        return self2;
        function eliminate_branch(branch2, prev) {
          if (prev && !aborts(prev)) {
            prev.body = prev.body.concat(branch2.body);
          } else {
            trim_unreachable_code(compressor, branch2, decl2);
          }
        }
        function branches_equivalent(branch2, prev, insertBreak) {
          let bbody = branch2.body;
          let pbody = prev.body;
          if (insertBreak) {
            bbody = bbody.concat(make_node(AST_Break));
          }
          if (bbody.length !== pbody.length)
            return false;
          let bblock = make_node(AST_BlockStatement, branch2, { body: bbody });
          let pblock = make_node(AST_BlockStatement, prev, { body: pbody });
          return bblock.equivalent_to(pblock);
        }
        function statement(expression) {
          return make_node(AST_SimpleStatement, expression, {
            body: expression
          });
        }
        function has_nested_break(root2) {
          let has_break = false;
          let tw = new TreeWalker((node) => {
            if (has_break)
              return true;
            if (node instanceof AST_Lambda)
              return true;
            if (node instanceof AST_SimpleStatement)
              return true;
            if (!is_break(node, tw))
              return;
            let parent = tw.parent();
            if (parent instanceof AST_SwitchBranch && parent.body[parent.body.length - 1] === node) {
              return;
            }
            has_break = true;
          });
          root2.walk(tw);
          return has_break;
        }
        function is_break(node, stack) {
          return node instanceof AST_Break && stack.loopcontrol_target(node) === self2;
        }
        function is_inert_body(branch2) {
          return !aborts(branch2) && !make_node(AST_BlockStatement, branch2, {
            body: branch2.body
          }).has_side_effects(compressor);
        }
      });
      def_optimize(AST_Try, function(self2, compressor) {
        if (self2.bcatch && self2.bfinally && self2.bfinally.body.every(is_empty))
          self2.bfinally = null;
        if (compressor.option("dead_code") && self2.body.body.every(is_empty)) {
          var body = [];
          if (self2.bcatch) {
            trim_unreachable_code(compressor, self2.bcatch, body);
          }
          if (self2.bfinally)
            body.push(...self2.bfinally.body);
          return make_node(AST_BlockStatement, self2, {
            body
          }).optimize(compressor);
        }
        return self2;
      });
      AST_Definitions.DEFMETHOD("to_assignments", function(compressor) {
        var reduce_vars = compressor.option("reduce_vars");
        var assignments = [];
        for (const def of this.definitions) {
          if (def.value) {
            var name = make_node(AST_SymbolRef, def.name, def.name);
            assignments.push(make_node(AST_Assign, def, {
              operator: "=",
              logical: false,
              left: name,
              right: def.value
            }));
            if (reduce_vars)
              name.definition().fixed = false;
          }
          const thedef = def.name.definition();
          thedef.eliminated++;
          thedef.replaced--;
        }
        if (assignments.length == 0)
          return null;
        return make_sequence(this, assignments);
      });
      def_optimize(AST_Definitions, function(self2) {
        if (self2.definitions.length == 0) {
          return make_node(AST_EmptyStatement, self2);
        }
        return self2;
      });
      def_optimize(AST_VarDef, function(self2, compressor) {
        if (self2.name instanceof AST_SymbolLet && self2.value != null && is_undefined(self2.value, compressor)) {
          self2.value = null;
        }
        return self2;
      });
      def_optimize(AST_Import, function(self2) {
        return self2;
      });
      def_optimize(AST_Call, function(self2, compressor) {
        var exp = self2.expression;
        var fn = exp;
        inline_array_like_spread(self2.args);
        var simple_args = self2.args.every((arg2) => !(arg2 instanceof AST_Expansion));
        if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef) {
          fn = fn.fixed_value();
        }
        var is_func = fn instanceof AST_Lambda;
        if (is_func && fn.pinned())
          return self2;
        if (compressor.option("unused") && simple_args && is_func && !fn.uses_arguments) {
          var pos = 0, last2 = 0;
          for (var i = 0, len = self2.args.length; i < len; i++) {
            if (fn.argnames[i] instanceof AST_Expansion) {
              if (has_flag(fn.argnames[i].expression, UNUSED))
                while (i < len) {
                  var node = self2.args[i++].drop_side_effect_free(compressor);
                  if (node) {
                    self2.args[pos++] = node;
                  }
                }
              else
                while (i < len) {
                  self2.args[pos++] = self2.args[i++];
                }
              last2 = pos;
              break;
            }
            var trim2 = i >= fn.argnames.length;
            if (trim2 || has_flag(fn.argnames[i], UNUSED)) {
              var node = self2.args[i].drop_side_effect_free(compressor);
              if (node) {
                self2.args[pos++] = node;
              } else if (!trim2) {
                self2.args[pos++] = make_node(AST_Number, self2.args[i], {
                  value: 0
                });
                continue;
              }
            } else {
              self2.args[pos++] = self2.args[i];
            }
            last2 = pos;
          }
          self2.args.length = last2;
        }
        if (compressor.option("unsafe") && !exp.contains_optional()) {
          if (exp instanceof AST_Dot && exp.start.value === "Array" && exp.property === "from" && self2.args.length === 1) {
            const [argument] = self2.args;
            if (argument instanceof AST_Array) {
              return make_node(AST_Array, argument, {
                elements: argument.elements
              }).optimize(compressor);
            }
          }
          if (is_undeclared_ref(exp))
            switch (exp.name) {
              case "Array":
                if (self2.args.length != 1) {
                  return make_node(AST_Array, self2, {
                    elements: self2.args
                  }).optimize(compressor);
                } else if (self2.args[0] instanceof AST_Number && self2.args[0].value <= 11) {
                  const elements2 = [];
                  for (let i2 = 0; i2 < self2.args[0].value; i2++)
                    elements2.push(new AST_Hole());
                  return new AST_Array({ elements: elements2 });
                }
                break;
              case "Object":
                if (self2.args.length == 0) {
                  return make_node(AST_Object, self2, {
                    properties: []
                  });
                }
                break;
              case "String":
                if (self2.args.length == 0)
                  return make_node(AST_String, self2, {
                    value: ""
                  });
                if (self2.args.length <= 1)
                  return make_node(AST_Binary, self2, {
                    left: self2.args[0],
                    operator: "+",
                    right: make_node(AST_String, self2, { value: "" })
                  }).optimize(compressor);
                break;
              case "Number":
                if (self2.args.length == 0)
                  return make_node(AST_Number, self2, {
                    value: 0
                  });
                if (self2.args.length == 1 && compressor.option("unsafe_math")) {
                  return make_node(AST_UnaryPrefix, self2, {
                    expression: self2.args[0],
                    operator: "+"
                  }).optimize(compressor);
                }
                break;
              case "Symbol":
                if (self2.args.length == 1 && self2.args[0] instanceof AST_String && compressor.option("unsafe_symbols"))
                  self2.args.length = 0;
                break;
              case "Boolean":
                if (self2.args.length == 0)
                  return make_node(AST_False, self2);
                if (self2.args.length == 1)
                  return make_node(AST_UnaryPrefix, self2, {
                    expression: make_node(AST_UnaryPrefix, self2, {
                      expression: self2.args[0],
                      operator: "!"
                    }),
                    operator: "!"
                  }).optimize(compressor);
                break;
              case "RegExp":
                var params = [];
                if (self2.args.length >= 1 && self2.args.length <= 2 && self2.args.every((arg2) => {
                  var value2 = arg2.evaluate(compressor);
                  params.push(value2);
                  return arg2 !== value2;
                }) && regexp_is_safe(params[0])) {
                  let [source, flags] = params;
                  source = regexp_source_fix(new RegExp(source).source);
                  const rx = make_node(AST_RegExp, self2, {
                    value: { source, flags }
                  });
                  if (rx._eval(compressor) !== rx) {
                    return rx;
                  }
                }
                break;
            }
          else if (exp instanceof AST_Dot)
            switch (exp.property) {
              case "toString":
                if (self2.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {
                  return make_node(AST_Binary, self2, {
                    left: make_node(AST_String, self2, { value: "" }),
                    operator: "+",
                    right: exp.expression
                  }).optimize(compressor);
                }
                break;
              case "join":
                if (exp.expression instanceof AST_Array)
                  EXIT: {
                    var separator;
                    if (self2.args.length > 0) {
                      separator = self2.args[0].evaluate(compressor);
                      if (separator === self2.args[0])
                        break EXIT;
                    }
                    var elements = [];
                    var consts = [];
                    for (var i = 0, len = exp.expression.elements.length; i < len; i++) {
                      var el = exp.expression.elements[i];
                      if (el instanceof AST_Expansion)
                        break EXIT;
                      var value = el.evaluate(compressor);
                      if (value !== el) {
                        consts.push(value);
                      } else {
                        if (consts.length > 0) {
                          elements.push(make_node(AST_String, self2, {
                            value: consts.join(separator)
                          }));
                          consts.length = 0;
                        }
                        elements.push(el);
                      }
                    }
                    if (consts.length > 0) {
                      elements.push(make_node(AST_String, self2, {
                        value: consts.join(separator)
                      }));
                    }
                    if (elements.length == 0)
                      return make_node(AST_String, self2, { value: "" });
                    if (elements.length == 1) {
                      if (elements[0].is_string(compressor)) {
                        return elements[0];
                      }
                      return make_node(AST_Binary, elements[0], {
                        operator: "+",
                        left: make_node(AST_String, self2, { value: "" }),
                        right: elements[0]
                      });
                    }
                    if (separator == "") {
                      var first;
                      if (elements[0].is_string(compressor) || elements[1].is_string(compressor)) {
                        first = elements.shift();
                      } else {
                        first = make_node(AST_String, self2, { value: "" });
                      }
                      return elements.reduce(function(prev, el2) {
                        return make_node(AST_Binary, el2, {
                          operator: "+",
                          left: prev,
                          right: el2
                        });
                      }, first).optimize(compressor);
                    }
                    var node = self2.clone();
                    node.expression = node.expression.clone();
                    node.expression.expression = node.expression.expression.clone();
                    node.expression.expression.elements = elements;
                    return best_of(compressor, self2, node);
                  }
                break;
              case "charAt":
                if (exp.expression.is_string(compressor)) {
                  var arg = self2.args[0];
                  var index = arg ? arg.evaluate(compressor) : 0;
                  if (index !== arg) {
                    return make_node(AST_Sub, exp, {
                      expression: exp.expression,
                      property: make_node_from_constant(index | 0, arg || exp)
                    }).optimize(compressor);
                  }
                }
                break;
              case "apply":
                if (self2.args.length == 2 && self2.args[1] instanceof AST_Array) {
                  var args = self2.args[1].elements.slice();
                  args.unshift(self2.args[0]);
                  return make_node(AST_Call, self2, {
                    expression: make_node(AST_Dot, exp, {
                      expression: exp.expression,
                      optional: false,
                      property: "call"
                    }),
                    args
                  }).optimize(compressor);
                }
                break;
              case "call":
                var func = exp.expression;
                if (func instanceof AST_SymbolRef) {
                  func = func.fixed_value();
                }
                if (func instanceof AST_Lambda && !func.contains_this()) {
                  return (self2.args.length ? make_sequence(this, [
                    self2.args[0],
                    make_node(AST_Call, self2, {
                      expression: exp.expression,
                      args: self2.args.slice(1)
                    })
                  ]) : make_node(AST_Call, self2, {
                    expression: exp.expression,
                    args: []
                  })).optimize(compressor);
                }
                break;
            }
        }
        if (compressor.option("unsafe_Function") && is_undeclared_ref(exp) && exp.name == "Function") {
          if (self2.args.length == 0)
            return make_node(AST_Function, self2, {
              argnames: [],
              body: []
            }).optimize(compressor);
          if (self2.args.every((x) => x instanceof AST_String)) {
            try {
              var code = "n(function(" + self2.args.slice(0, -1).map(function(arg2) {
                return arg2.value;
              }).join(",") + "){" + self2.args[self2.args.length - 1].value + "})";
              var ast = parse2(code);
              var mangle = compressor.mangle_options();
              ast.figure_out_scope(mangle);
              var comp = new Compressor(compressor.options, {
                mangle_options: compressor._mangle_options
              });
              ast = ast.transform(comp);
              ast.figure_out_scope(mangle);
              ast.compute_char_frequency(mangle);
              ast.mangle_names(mangle);
              var fun;
              walk(ast, (node2) => {
                if (is_func_expr(node2)) {
                  fun = node2;
                  return walk_abort;
                }
              });
              var code = OutputStream();
              AST_BlockStatement.prototype._codegen.call(fun, fun, code);
              self2.args = [
                make_node(AST_String, self2, {
                  value: fun.argnames.map(function(arg2) {
                    return arg2.print_to_string();
                  }).join(",")
                }),
                make_node(AST_String, self2.args[self2.args.length - 1], {
                  value: code.get().replace(/^{|}$/g, "")
                })
              ];
              return self2;
            } catch (ex) {
              if (!(ex instanceof JS_Parse_Error)) {
                throw ex;
              }
            }
          }
        }
        return inline_into_call(self2, compressor);
      });
      AST_Node.DEFMETHOD("contains_optional", function() {
        if (this instanceof AST_PropAccess || this instanceof AST_Call || this instanceof AST_Chain) {
          if (this.optional) {
            return true;
          } else {
            return this.expression.contains_optional();
          }
        } else {
          return false;
        }
      });
      def_optimize(AST_New, function(self2, compressor) {
        if (compressor.option("unsafe") && is_undeclared_ref(self2.expression) && ["Object", "RegExp", "Function", "Error", "Array"].includes(self2.expression.name))
          return make_node(AST_Call, self2, self2).transform(compressor);
        return self2;
      });
      def_optimize(AST_Sequence, function(self2, compressor) {
        if (!compressor.option("side_effects"))
          return self2;
        var expressions = [];
        filter_for_side_effects();
        var end = expressions.length - 1;
        trim_right_for_undefined();
        if (end == 0) {
          self2 = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]);
          if (!(self2 instanceof AST_Sequence))
            self2 = self2.optimize(compressor);
          return self2;
        }
        self2.expressions = expressions;
        return self2;
        function filter_for_side_effects() {
          var first = first_in_statement(compressor);
          var last2 = self2.expressions.length - 1;
          self2.expressions.forEach(function(expr, index) {
            if (index < last2)
              expr = expr.drop_side_effect_free(compressor, first);
            if (expr) {
              merge_sequence(expressions, expr);
              first = false;
            }
          });
        }
        function trim_right_for_undefined() {
          while (end > 0 && is_undefined(expressions[end], compressor))
            end--;
          if (end < expressions.length - 1) {
            expressions[end] = make_node(AST_UnaryPrefix, self2, {
              operator: "void",
              expression: expressions[end]
            });
            expressions.length = end + 1;
          }
        }
      });
      AST_Unary.DEFMETHOD("lift_sequences", function(compressor) {
        if (compressor.option("sequences")) {
          if (this.expression instanceof AST_Sequence) {
            var x = this.expression.expressions.slice();
            var e = this.clone();
            e.expression = x.pop();
            x.push(e);
            return make_sequence(this, x).optimize(compressor);
          }
        }
        return this;
      });
      def_optimize(AST_UnaryPostfix, function(self2, compressor) {
        return self2.lift_sequences(compressor);
      });
      def_optimize(AST_UnaryPrefix, function(self2, compressor) {
        var e = self2.expression;
        if (self2.operator == "delete" && !(e instanceof AST_SymbolRef || e instanceof AST_PropAccess || e instanceof AST_Chain || is_identifier_atom(e))) {
          return make_sequence(self2, [e, make_node(AST_True, self2)]).optimize(compressor);
        }
        var seq = self2.lift_sequences(compressor);
        if (seq !== self2) {
          return seq;
        }
        if (compressor.option("side_effects") && self2.operator == "void") {
          e = e.drop_side_effect_free(compressor);
          if (e) {
            self2.expression = e;
            return self2;
          } else {
            return make_node(AST_Undefined, self2).optimize(compressor);
          }
        }
        if (compressor.in_boolean_context()) {
          switch (self2.operator) {
            case "!":
              if (e instanceof AST_UnaryPrefix && e.operator == "!") {
                return e.expression;
              }
              if (e instanceof AST_Binary) {
                self2 = best_of(compressor, self2, e.negate(compressor, first_in_statement(compressor)));
              }
              break;
            case "typeof":
              return (e instanceof AST_SymbolRef ? make_node(AST_True, self2) : make_sequence(self2, [
                e,
                make_node(AST_True, self2)
              ])).optimize(compressor);
          }
        }
        if (self2.operator == "-" && e instanceof AST_Infinity) {
          e = e.transform(compressor);
        }
        if (e instanceof AST_Binary && (self2.operator == "+" || self2.operator == "-") && (e.operator == "*" || e.operator == "/" || e.operator == "%")) {
          return make_node(AST_Binary, self2, {
            operator: e.operator,
            left: make_node(AST_UnaryPrefix, e.left, {
              operator: self2.operator,
              expression: e.left
            }),
            right: e.right
          });
        }
        if (self2.operator != "-" || !(e instanceof AST_Number || e instanceof AST_Infinity || e instanceof AST_BigInt)) {
          var ev = self2.evaluate(compressor);
          if (ev !== self2) {
            ev = make_node_from_constant(ev, self2).optimize(compressor);
            return best_of(compressor, ev, self2);
          }
        }
        return self2;
      });
      AST_Binary.DEFMETHOD("lift_sequences", function(compressor) {
        if (compressor.option("sequences")) {
          if (this.left instanceof AST_Sequence) {
            var x = this.left.expressions.slice();
            var e = this.clone();
            e.left = x.pop();
            x.push(e);
            return make_sequence(this, x).optimize(compressor);
          }
          if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) {
            var assign = this.operator == "=" && this.left instanceof AST_SymbolRef;
            var x = this.right.expressions;
            var last2 = x.length - 1;
            for (var i = 0; i < last2; i++) {
              if (!assign && x[i].has_side_effects(compressor))
                break;
            }
            if (i == last2) {
              x = x.slice();
              var e = this.clone();
              e.right = x.pop();
              x.push(e);
              return make_sequence(this, x).optimize(compressor);
            } else if (i > 0) {
              var e = this.clone();
              e.right = make_sequence(this.right, x.slice(i));
              x = x.slice(0, i);
              x.push(e);
              return make_sequence(this, x).optimize(compressor);
            }
          }
        }
        return this;
      });
      var commutativeOperators = makePredicate("== === != !== * & | ^");
      function is_object(node) {
        return node instanceof AST_Array || node instanceof AST_Lambda || node instanceof AST_Object || node instanceof AST_Class;
      }
      def_optimize(AST_Binary, function(self2, compressor) {
        function reversible() {
          return self2.left.is_constant() || self2.right.is_constant() || !self2.left.has_side_effects(compressor) && !self2.right.has_side_effects(compressor);
        }
        function reverse(op) {
          if (reversible()) {
            if (op)
              self2.operator = op;
            var tmp = self2.left;
            self2.left = self2.right;
            self2.right = tmp;
          }
        }
        if (compressor.option("lhs_constants") && commutativeOperators.has(self2.operator)) {
          if (self2.right.is_constant() && !self2.left.is_constant()) {
            if (!(self2.left instanceof AST_Binary && PRECEDENCE[self2.left.operator] >= PRECEDENCE[self2.operator])) {
              reverse();
            }
          }
        }
        self2 = self2.lift_sequences(compressor);
        if (compressor.option("comparisons"))
          switch (self2.operator) {
            case "===":
            case "!==":
              var is_strict_comparison = true;
              if (self2.left.is_string(compressor) && self2.right.is_string(compressor) || self2.left.is_number(compressor) && self2.right.is_number(compressor) || self2.left.is_boolean() && self2.right.is_boolean() || self2.left.equivalent_to(self2.right)) {
                self2.operator = self2.operator.substr(0, 2);
              }
            case "==":
            case "!=":
              if (!is_strict_comparison && is_undefined(self2.left, compressor)) {
                self2.left = make_node(AST_Null, self2.left);
              } else if (!is_strict_comparison && is_undefined(self2.right, compressor)) {
                self2.right = make_node(AST_Null, self2.right);
              } else if (compressor.option("typeofs") && self2.left instanceof AST_String && self2.left.value == "undefined" && self2.right instanceof AST_UnaryPrefix && self2.right.operator == "typeof") {
                var expr = self2.right.expression;
                if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor) : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) {
                  self2.right = expr;
                  self2.left = make_node(AST_Undefined, self2.left).optimize(compressor);
                  if (self2.operator.length == 2)
                    self2.operator += "=";
                }
              } else if (compressor.option("typeofs") && self2.left instanceof AST_UnaryPrefix && self2.left.operator == "typeof" && self2.right instanceof AST_String && self2.right.value == "undefined") {
                var expr = self2.left.expression;
                if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor) : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) {
                  self2.left = expr;
                  self2.right = make_node(AST_Undefined, self2.right).optimize(compressor);
                  if (self2.operator.length == 2)
                    self2.operator += "=";
                }
              } else if (self2.left instanceof AST_SymbolRef && self2.right instanceof AST_SymbolRef && self2.left.definition() === self2.right.definition() && is_object(self2.left.fixed_value())) {
                return make_node(self2.operator[0] == "=" ? AST_True : AST_False, self2);
              }
              break;
            case "&&":
            case "||":
              var lhs = self2.left;
              if (lhs.operator == self2.operator) {
                lhs = lhs.right;
              }
              if (lhs instanceof AST_Binary && lhs.operator == (self2.operator == "&&" ? "!==" : "===") && self2.right instanceof AST_Binary && lhs.operator == self2.right.operator && (is_undefined(lhs.left, compressor) && self2.right.left instanceof AST_Null || lhs.left instanceof AST_Null && is_undefined(self2.right.left, compressor)) && !lhs.right.has_side_effects(compressor) && lhs.right.equivalent_to(self2.right.right)) {
                var combined = make_node(AST_Binary, self2, {
                  operator: lhs.operator.slice(0, -1),
                  left: make_node(AST_Null, self2),
                  right: lhs.right
                });
                if (lhs !== self2.left) {
                  combined = make_node(AST_Binary, self2, {
                    operator: self2.operator,
                    left: self2.left.left,
                    right: combined
                  });
                }
                return combined;
              }
              break;
          }
        if (self2.operator == "+" && compressor.in_boolean_context()) {
          var ll = self2.left.evaluate(compressor);
          var rr = self2.right.evaluate(compressor);
          if (ll && typeof ll == "string") {
            return make_sequence(self2, [
              self2.right,
              make_node(AST_True, self2)
            ]).optimize(compressor);
          }
          if (rr && typeof rr == "string") {
            return make_sequence(self2, [
              self2.left,
              make_node(AST_True, self2)
            ]).optimize(compressor);
          }
        }
        if (compressor.option("comparisons") && self2.is_boolean()) {
          if (!(compressor.parent() instanceof AST_Binary) || compressor.parent() instanceof AST_Assign) {
            var negated = make_node(AST_UnaryPrefix, self2, {
              operator: "!",
              expression: self2.negate(compressor, first_in_statement(compressor))
            });
            self2 = best_of(compressor, self2, negated);
          }
          if (compressor.option("unsafe_comps")) {
            switch (self2.operator) {
              case "<":
                reverse(">");
                break;
              case "<=":
                reverse(">=");
                break;
            }
          }
        }
        if (self2.operator == "+") {
          if (self2.right instanceof AST_String && self2.right.getValue() == "" && self2.left.is_string(compressor)) {
            return self2.left;
          }
          if (self2.left instanceof AST_String && self2.left.getValue() == "" && self2.right.is_string(compressor)) {
            return self2.right;
          }
          if (self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.left instanceof AST_String && self2.left.left.getValue() == "" && self2.right.is_string(compressor)) {
            self2.left = self2.left.right;
            return self2;
          }
        }
        if (compressor.option("evaluate")) {
          switch (self2.operator) {
            case "&&":
              var ll = has_flag(self2.left, TRUTHY) ? true : has_flag(self2.left, FALSY) ? false : self2.left.evaluate(compressor);
              if (!ll) {
                return maintain_this_binding(compressor.parent(), compressor.self(), self2.left).optimize(compressor);
              } else if (!(ll instanceof AST_Node)) {
                return make_sequence(self2, [self2.left, self2.right]).optimize(compressor);
              }
              var rr = self2.right.evaluate(compressor);
              if (!rr) {
                if (compressor.in_boolean_context()) {
                  return make_sequence(self2, [
                    self2.left,
                    make_node(AST_False, self2)
                  ]).optimize(compressor);
                } else {
                  set_flag(self2, FALSY);
                }
              } else if (!(rr instanceof AST_Node)) {
                var parent = compressor.parent();
                if (parent.operator == "&&" && parent.left === compressor.self() || compressor.in_boolean_context()) {
                  return self2.left.optimize(compressor);
                }
              }
              if (self2.left.operator == "||") {
                var lr = self2.left.right.evaluate(compressor);
                if (!lr)
                  return make_node(AST_Conditional, self2, {
                    condition: self2.left.left,
                    consequent: self2.right,
                    alternative: self2.left.right
                  }).optimize(compressor);
              }
              break;
            case "||":
              var ll = has_flag(self2.left, TRUTHY) ? true : has_flag(self2.left, FALSY) ? false : self2.left.evaluate(compressor);
              if (!ll) {
                return make_sequence(self2, [self2.left, self2.right]).optimize(compressor);
              } else if (!(ll instanceof AST_Node)) {
                return maintain_this_binding(compressor.parent(), compressor.self(), self2.left).optimize(compressor);
              }
              var rr = self2.right.evaluate(compressor);
              if (!rr) {
                var parent = compressor.parent();
                if (parent.operator == "||" && parent.left === compressor.self() || compressor.in_boolean_context()) {
                  return self2.left.optimize(compressor);
                }
              } else if (!(rr instanceof AST_Node)) {
                if (compressor.in_boolean_context()) {
                  return make_sequence(self2, [
                    self2.left,
                    make_node(AST_True, self2)
                  ]).optimize(compressor);
                } else {
                  set_flag(self2, TRUTHY);
                }
              }
              if (self2.left.operator == "&&") {
                var lr = self2.left.right.evaluate(compressor);
                if (lr && !(lr instanceof AST_Node))
                  return make_node(AST_Conditional, self2, {
                    condition: self2.left.left,
                    consequent: self2.left.right,
                    alternative: self2.right
                  }).optimize(compressor);
              }
              break;
            case "??":
              if (is_nullish(self2.left, compressor)) {
                return self2.right;
              }
              var ll = self2.left.evaluate(compressor);
              if (!(ll instanceof AST_Node)) {
                return ll == null ? self2.right : self2.left;
              }
              if (compressor.in_boolean_context()) {
                const rr2 = self2.right.evaluate(compressor);
                if (!(rr2 instanceof AST_Node) && !rr2) {
                  return self2.left;
                }
              }
          }
          var associative = true;
          switch (self2.operator) {
            case "+":
              if (self2.right instanceof AST_Constant && self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.is_string(compressor)) {
                var binary = make_node(AST_Binary, self2, {
                  operator: "+",
                  left: self2.left.right,
                  right: self2.right
                });
                var r = binary.optimize(compressor);
                if (binary !== r) {
                  self2 = make_node(AST_Binary, self2, {
                    operator: "+",
                    left: self2.left.left,
                    right: r
                  });
                }
              }
              if (self2.left instanceof AST_Binary && self2.left.operator == "+" && self2.left.is_string(compressor) && self2.right instanceof AST_Binary && self2.right.operator == "+" && self2.right.is_string(compressor)) {
                var binary = make_node(AST_Binary, self2, {
                  operator: "+",
                  left: self2.left.right,
                  right: self2.right.left
                });
                var m = binary.optimize(compressor);
                if (binary !== m) {
                  self2 = make_node(AST_Binary, self2, {
                    operator: "+",
                    left: make_node(AST_Binary, self2.left, {
                      operator: "+",
                      left: self2.left.left,
                      right: m
                    }),
                    right: self2.right.right
                  });
                }
              }
              if (self2.right instanceof AST_UnaryPrefix && self2.right.operator == "-" && self2.left.is_number(compressor)) {
                self2 = make_node(AST_Binary, self2, {
                  operator: "-",
                  left: self2.left,
                  right: self2.right.expression
                });
                break;
              }
              if (self2.left instanceof AST_UnaryPrefix && self2.left.operator == "-" && reversible() && self2.right.is_number(compressor)) {
                self2 = make_node(AST_Binary, self2, {
                  operator: "-",
                  left: self2.right,
                  right: self2.left.expression
                });
                break;
              }
              if (self2.left instanceof AST_TemplateString) {
                var l = self2.left;
                var r = self2.right.evaluate(compressor);
                if (r != self2.right) {
                  l.segments[l.segments.length - 1].value += String(r);
                  return l;
                }
              }
              if (self2.right instanceof AST_TemplateString) {
                var r = self2.right;
                var l = self2.left.evaluate(compressor);
                if (l != self2.left) {
                  r.segments[0].value = String(l) + r.segments[0].value;
                  return r;
                }
              }
              if (self2.left instanceof AST_TemplateString && self2.right instanceof AST_TemplateString) {
                var l = self2.left;
                var segments = l.segments;
                var r = self2.right;
                segments[segments.length - 1].value += r.segments[0].value;
                for (var i = 1; i < r.segments.length; i++) {
                  segments.push(r.segments[i]);
                }
                return l;
              }
            case "*":
              associative = compressor.option("unsafe_math");
            case "&":
            case "|":
            case "^":
              if (self2.left.is_number(compressor) && self2.right.is_number(compressor) && reversible() && !(self2.left instanceof AST_Binary && self2.left.operator != self2.operator && PRECEDENCE[self2.left.operator] >= PRECEDENCE[self2.operator])) {
                var reversed = make_node(AST_Binary, self2, {
                  operator: self2.operator,
                  left: self2.right,
                  right: self2.left
                });
                if (self2.right instanceof AST_Constant && !(self2.left instanceof AST_Constant)) {
                  self2 = best_of(compressor, reversed, self2);
                } else {
                  self2 = best_of(compressor, self2, reversed);
                }
              }
              if (associative && self2.is_number(compressor)) {
                if (self2.right instanceof AST_Binary && self2.right.operator == self2.operator) {
                  self2 = make_node(AST_Binary, self2, {
                    operator: self2.operator,
                    left: make_node(AST_Binary, self2.left, {
                      operator: self2.operator,
                      left: self2.left,
                      right: self2.right.left,
                      start: self2.left.start,
                      end: self2.right.left.end
                    }),
                    right: self2.right.right
                  });
                }
                if (self2.right instanceof AST_Constant && self2.left instanceof AST_Binary && self2.left.operator == self2.operator) {
                  if (self2.left.left instanceof AST_Constant) {
                    self2 = make_node(AST_Binary, self2, {
                      operator: self2.operator,
                      left: make_node(AST_Binary, self2.left, {
                        operator: self2.operator,
                        left: self2.left.left,
                        right: self2.right,
                        start: self2.left.left.start,
                        end: self2.right.end
                      }),
                      right: self2.left.right
                    });
                  } else if (self2.left.right instanceof AST_Constant) {
                    self2 = make_node(AST_Binary, self2, {
                      operator: self2.operator,
                      left: make_node(AST_Binary, self2.left, {
                        operator: self2.operator,
                        left: self2.left.right,
                        right: self2.right,
                        start: self2.left.right.start,
                        end: self2.right.end
                      }),
                      right: self2.left.left
                    });
                  }
                }
                if (self2.left instanceof AST_Binary && self2.left.operator == self2.operator && self2.left.right instanceof AST_Constant && self2.right instanceof AST_Binary && self2.right.operator == self2.operator && self2.right.left instanceof AST_Constant) {
                  self2 = make_node(AST_Binary, self2, {
                    operator: self2.operator,
                    left: make_node(AST_Binary, self2.left, {
                      operator: self2.operator,
                      left: make_node(AST_Binary, self2.left.left, {
                        operator: self2.operator,
                        left: self2.left.right,
                        right: self2.right.left,
                        start: self2.left.right.start,
                        end: self2.right.left.end
                      }),
                      right: self2.left.left
                    }),
                    right: self2.right.right
                  });
                }
              }
          }
        }
        if (self2.right instanceof AST_Binary && self2.right.operator == self2.operator && (lazy_op.has(self2.operator) || self2.operator == "+" && (self2.right.left.is_string(compressor) || self2.left.is_string(compressor) && self2.right.right.is_string(compressor)))) {
          self2.left = make_node(AST_Binary, self2.left, {
            operator: self2.operator,
            left: self2.left.transform(compressor),
            right: self2.right.left.transform(compressor)
          });
          self2.right = self2.right.right.transform(compressor);
          return self2.transform(compressor);
        }
        var ev = self2.evaluate(compressor);
        if (ev !== self2) {
          ev = make_node_from_constant(ev, self2).optimize(compressor);
          return best_of(compressor, ev, self2);
        }
        return self2;
      });
      def_optimize(AST_SymbolExport, function(self2) {
        return self2;
      });
      def_optimize(AST_SymbolRef, function(self2, compressor) {
        if (!compressor.option("ie8") && is_undeclared_ref(self2) && !compressor.find_parent(AST_With)) {
          switch (self2.name) {
            case "undefined":
              return make_node(AST_Undefined, self2).optimize(compressor);
            case "NaN":
              return make_node(AST_NaN, self2).optimize(compressor);
            case "Infinity":
              return make_node(AST_Infinity, self2).optimize(compressor);
          }
        }
        if (compressor.option("reduce_vars") && !compressor.is_lhs()) {
          return inline_into_symbolref(self2, compressor);
        } else {
          return self2;
        }
      });
      function is_atomic(lhs, self2) {
        return lhs instanceof AST_SymbolRef || lhs.TYPE === self2.TYPE;
      }
      def_optimize(AST_Undefined, function(self2, compressor) {
        if (compressor.option("unsafe_undefined")) {
          var undef = find_variable(compressor, "undefined");
          if (undef) {
            var ref = make_node(AST_SymbolRef, self2, {
              name: "undefined",
              scope: undef.scope,
              thedef: undef
            });
            set_flag(ref, UNDEFINED);
            return ref;
          }
        }
        var lhs = compressor.is_lhs();
        if (lhs && is_atomic(lhs, self2))
          return self2;
        return make_node(AST_UnaryPrefix, self2, {
          operator: "void",
          expression: make_node(AST_Number, self2, {
            value: 0
          })
        });
      });
      def_optimize(AST_Infinity, function(self2, compressor) {
        var lhs = compressor.is_lhs();
        if (lhs && is_atomic(lhs, self2))
          return self2;
        if (compressor.option("keep_infinity") && !(lhs && !is_atomic(lhs, self2)) && !find_variable(compressor, "Infinity")) {
          return self2;
        }
        return make_node(AST_Binary, self2, {
          operator: "/",
          left: make_node(AST_Number, self2, {
            value: 1
          }),
          right: make_node(AST_Number, self2, {
            value: 0
          })
        });
      });
      def_optimize(AST_NaN, function(self2, compressor) {
        var lhs = compressor.is_lhs();
        if (lhs && !is_atomic(lhs, self2) || find_variable(compressor, "NaN")) {
          return make_node(AST_Binary, self2, {
            operator: "/",
            left: make_node(AST_Number, self2, {
              value: 0
            }),
            right: make_node(AST_Number, self2, {
              value: 0
            })
          });
        }
        return self2;
      });
      const ASSIGN_OPS = makePredicate("+ - / * % >> << >>> | ^ &");
      const ASSIGN_OPS_COMMUTATIVE = makePredicate("* | ^ &");
      def_optimize(AST_Assign, function(self2, compressor) {
        if (self2.logical) {
          return self2.lift_sequences(compressor);
        }
        var def;
        if (self2.operator === "=" && self2.left instanceof AST_SymbolRef && self2.left.name !== "arguments" && !(def = self2.left.definition()).undeclared && self2.right.equivalent_to(self2.left)) {
          return self2.right;
        }
        if (compressor.option("dead_code") && self2.left instanceof AST_SymbolRef && (def = self2.left.definition()).scope === compressor.find_parent(AST_Lambda)) {
          var level = 0, node, parent = self2;
          do {
            node = parent;
            parent = compressor.parent(level++);
            if (parent instanceof AST_Exit) {
              if (in_try(level, parent))
                break;
              if (is_reachable(def.scope, [def]))
                break;
              if (self2.operator == "=")
                return self2.right;
              def.fixed = false;
              return make_node(AST_Binary, self2, {
                operator: self2.operator.slice(0, -1),
                left: self2.left,
                right: self2.right
              }).optimize(compressor);
            }
          } while (parent instanceof AST_Binary && parent.right === node || parent instanceof AST_Sequence && parent.tail_node() === node);
        }
        self2 = self2.lift_sequences(compressor);
        if (self2.operator == "=" && self2.left instanceof AST_SymbolRef && self2.right instanceof AST_Binary) {
          if (self2.right.left instanceof AST_SymbolRef && self2.right.left.name == self2.left.name && ASSIGN_OPS.has(self2.right.operator)) {
            self2.operator = self2.right.operator + "=";
            self2.right = self2.right.right;
          } else if (self2.right.right instanceof AST_SymbolRef && self2.right.right.name == self2.left.name && ASSIGN_OPS_COMMUTATIVE.has(self2.right.operator) && !self2.right.left.has_side_effects(compressor)) {
            self2.operator = self2.right.operator + "=";
            self2.right = self2.right.left;
          }
        }
        return self2;
        function in_try(level2, node2) {
          function may_assignment_throw() {
            const right = self2.right;
            self2.right = make_node(AST_Null, right);
            const may_throw = node2.may_throw(compressor);
            self2.right = right;
            return may_throw;
          }
          var stop_at = self2.left.definition().scope.get_defun_scope();
          var parent2;
          while ((parent2 = compressor.parent(level2++)) !== stop_at) {
            if (parent2 instanceof AST_Try) {
              if (parent2.bfinally)
                return true;
              if (parent2.bcatch && may_assignment_throw())
                return true;
            }
          }
        }
      });
      def_optimize(AST_DefaultAssign, function(self2, compressor) {
        if (!compressor.option("evaluate")) {
          return self2;
        }
        var evaluateRight = self2.right.evaluate(compressor);
        let lambda, iife;
        if (evaluateRight === void 0) {
          if ((lambda = compressor.parent()) instanceof AST_Lambda ? compressor.option("keep_fargs") === false || (iife = compressor.parent(1)).TYPE === "Call" && iife.expression === lambda : true) {
            self2 = self2.left;
          }
        } else if (evaluateRight !== self2.right) {
          evaluateRight = make_node_from_constant(evaluateRight, self2.right);
          self2.right = best_of_expression(evaluateRight, self2.right);
        }
        return self2;
      });
      function is_nullish_check(check, check_subject, compressor) {
        if (check_subject.may_throw(compressor))
          return false;
        let nullish_side;
        if (check instanceof AST_Binary && check.operator === "==" && ((nullish_side = is_nullish(check.left, compressor) && check.left) || (nullish_side = is_nullish(check.right, compressor) && check.right)) && (nullish_side === check.left ? check.right : check.left).equivalent_to(check_subject)) {
          return true;
        }
        if (check instanceof AST_Binary && check.operator === "||") {
          let null_cmp;
          let undefined_cmp;
          const find_comparison = (cmp) => {
            if (!(cmp instanceof AST_Binary && (cmp.operator === "===" || cmp.operator === "=="))) {
              return false;
            }
            let found = 0;
            let defined_side;
            if (cmp.left instanceof AST_Null) {
              found++;
              null_cmp = cmp;
              defined_side = cmp.right;
            }
            if (cmp.right instanceof AST_Null) {
              found++;
              null_cmp = cmp;
              defined_side = cmp.left;
            }
            if (is_undefined(cmp.left, compressor)) {
              found++;
              undefined_cmp = cmp;
              defined_side = cmp.right;
            }
            if (is_undefined(cmp.right, compressor)) {
              found++;
              undefined_cmp = cmp;
              defined_side = cmp.left;
            }
            if (found !== 1) {
              return false;
            }
            if (!defined_side.equivalent_to(check_subject)) {
              return false;
            }
            return true;
          };
          if (!find_comparison(check.left))
            return false;
          if (!find_comparison(check.right))
            return false;
          if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) {
            return true;
          }
        }
        return false;
      }
      def_optimize(AST_Conditional, function(self2, compressor) {
        if (!compressor.option("conditionals"))
          return self2;
        if (self2.condition instanceof AST_Sequence) {
          var expressions = self2.condition.expressions.slice();
          self2.condition = expressions.pop();
          expressions.push(self2);
          return make_sequence(self2, expressions);
        }
        var cond = self2.condition.evaluate(compressor);
        if (cond !== self2.condition) {
          if (cond) {
            return maintain_this_binding(compressor.parent(), compressor.self(), self2.consequent);
          } else {
            return maintain_this_binding(compressor.parent(), compressor.self(), self2.alternative);
          }
        }
        var negated = cond.negate(compressor, first_in_statement(compressor));
        if (best_of(compressor, cond, negated) === negated) {
          self2 = make_node(AST_Conditional, self2, {
            condition: negated,
            consequent: self2.alternative,
            alternative: self2.consequent
          });
        }
        var condition = self2.condition;
        var consequent = self2.consequent;
        var alternative = self2.alternative;
        if (condition instanceof AST_SymbolRef && consequent instanceof AST_SymbolRef && condition.definition() === consequent.definition()) {
          return make_node(AST_Binary, self2, {
            operator: "||",
            left: condition,
            right: alternative
          });
        }
        if (consequent instanceof AST_Assign && alternative instanceof AST_Assign && consequent.operator === alternative.operator && consequent.logical === alternative.logical && consequent.left.equivalent_to(alternative.left) && (!self2.condition.has_side_effects(compressor) || consequent.operator == "=" && !consequent.left.has_side_effects(compressor))) {
          return make_node(AST_Assign, self2, {
            operator: consequent.operator,
            left: consequent.left,
            logical: consequent.logical,
            right: make_node(AST_Conditional, self2, {
              condition: self2.condition,
              consequent: consequent.right,
              alternative: alternative.right
            })
          });
        }
        var arg_index;
        if (consequent instanceof AST_Call && alternative.TYPE === consequent.TYPE && consequent.args.length > 0 && consequent.args.length == alternative.args.length && consequent.expression.equivalent_to(alternative.expression) && !self2.condition.has_side_effects(compressor) && !consequent.expression.has_side_effects(compressor) && typeof (arg_index = single_arg_diff()) == "number") {
          var node = consequent.clone();
          node.args[arg_index] = make_node(AST_Conditional, self2, {
            condition: self2.condition,
            consequent: consequent.args[arg_index],
            alternative: alternative.args[arg_index]
          });
          return node;
        }
        if (alternative instanceof AST_Conditional && consequent.equivalent_to(alternative.consequent)) {
          return make_node(AST_Conditional, self2, {
            condition: make_node(AST_Binary, self2, {
              operator: "||",
              left: condition,
              right: alternative.condition
            }),
            consequent,
            alternative: alternative.alternative
          }).optimize(compressor);
        }
        if (compressor.option("ecma") >= 2020 && is_nullish_check(condition, alternative, compressor)) {
          return make_node(AST_Binary, self2, {
            operator: "??",
            left: alternative,
            right: consequent
          }).optimize(compressor);
        }
        if (alternative instanceof AST_Sequence && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) {
          return make_sequence(self2, [
            make_node(AST_Binary, self2, {
              operator: "||",
              left: condition,
              right: make_sequence(self2, alternative.expressions.slice(0, -1))
            }),
            consequent
          ]).optimize(compressor);
        }
        if (alternative instanceof AST_Binary && alternative.operator == "&&" && consequent.equivalent_to(alternative.right)) {
          return make_node(AST_Binary, self2, {
            operator: "&&",
            left: make_node(AST_Binary, self2, {
              operator: "||",
              left: condition,
              right: alternative.left
            }),
            right: consequent
          }).optimize(compressor);
        }
        if (consequent instanceof AST_Conditional && consequent.alternative.equivalent_to(alternative)) {
          return make_node(AST_Conditional, self2, {
            condition: make_node(AST_Binary, self2, {
              left: self2.condition,
              operator: "&&",
              right: consequent.condition
            }),
            consequent: consequent.consequent,
            alternative
          });
        }
        if (consequent.equivalent_to(alternative)) {
          return make_sequence(self2, [
            self2.condition,
            consequent
          ]).optimize(compressor);
        }
        if (consequent instanceof AST_Binary && consequent.operator == "||" && consequent.right.equivalent_to(alternative)) {
          return make_node(AST_Binary, self2, {
            operator: "||",
            left: make_node(AST_Binary, self2, {
              operator: "&&",
              left: self2.condition,
              right: consequent.left
            }),
            right: alternative
          }).optimize(compressor);
        }
        const in_bool = compressor.in_boolean_context();
        if (is_true(self2.consequent)) {
          if (is_false(self2.alternative)) {
            return booleanize(self2.condition);
          }
          return make_node(AST_Binary, self2, {
            operator: "||",
            left: booleanize(self2.condition),
            right: self2.alternative
          });
        }
        if (is_false(self2.consequent)) {
          if (is_true(self2.alternative)) {
            return booleanize(self2.condition.negate(compressor));
          }
          return make_node(AST_Binary, self2, {
            operator: "&&",
            left: booleanize(self2.condition.negate(compressor)),
            right: self2.alternative
          });
        }
        if (is_true(self2.alternative)) {
          return make_node(AST_Binary, self2, {
            operator: "||",
            left: booleanize(self2.condition.negate(compressor)),
            right: self2.consequent
          });
        }
        if (is_false(self2.alternative)) {
          return make_node(AST_Binary, self2, {
            operator: "&&",
            left: booleanize(self2.condition),
            right: self2.consequent
          });
        }
        return self2;
        function booleanize(node2) {
          if (node2.is_boolean())
            return node2;
          return make_node(AST_UnaryPrefix, node2, {
            operator: "!",
            expression: node2.negate(compressor)
          });
        }
        function is_true(node2) {
          return node2 instanceof AST_True || in_bool && node2 instanceof AST_Constant && node2.getValue() || node2 instanceof AST_UnaryPrefix && node2.operator == "!" && node2.expression instanceof AST_Constant && !node2.expression.getValue();
        }
        function is_false(node2) {
          return node2 instanceof AST_False || in_bool && node2 instanceof AST_Constant && !node2.getValue() || node2 instanceof AST_UnaryPrefix && node2.operator == "!" && node2.expression instanceof AST_Constant && node2.expression.getValue();
        }
        function single_arg_diff() {
          var a = consequent.args;
          var b = alternative.args;
          for (var i = 0, len = a.length; i < len; i++) {
            if (a[i] instanceof AST_Expansion)
              return;
            if (!a[i].equivalent_to(b[i])) {
              if (b[i] instanceof AST_Expansion)
                return;
              for (var j = i + 1; j < len; j++) {
                if (a[j] instanceof AST_Expansion)
                  return;
                if (!a[j].equivalent_to(b[j]))
                  return;
              }
              return i;
            }
          }
        }
      });
      def_optimize(AST_Boolean, function(self2, compressor) {
        if (compressor.in_boolean_context())
          return make_node(AST_Number, self2, {
            value: +self2.value
          });
        var p = compressor.parent();
        if (compressor.option("booleans_as_integers")) {
          if (p instanceof AST_Binary && (p.operator == "===" || p.operator == "!==")) {
            p.operator = p.operator.replace(/=$/, "");
          }
          return make_node(AST_Number, self2, {
            value: +self2.value
          });
        }
        if (compressor.option("booleans")) {
          if (p instanceof AST_Binary && (p.operator == "==" || p.operator == "!=")) {
            return make_node(AST_Number, self2, {
              value: +self2.value
            });
          }
          return make_node(AST_UnaryPrefix, self2, {
            operator: "!",
            expression: make_node(AST_Number, self2, {
              value: 1 - self2.value
            })
          });
        }
        return self2;
      });
      function safe_to_flatten(value, compressor) {
        if (value instanceof AST_SymbolRef) {
          value = value.fixed_value();
        }
        if (!value)
          return false;
        if (!(value instanceof AST_Lambda || value instanceof AST_Class))
          return true;
        if (!(value instanceof AST_Lambda && value.contains_this()))
          return true;
        return compressor.parent() instanceof AST_New;
      }
      AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) {
        if (!compressor.option("properties"))
          return;
        if (key === "__proto__")
          return;
        var arrows = compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015;
        var expr = this.expression;
        if (expr instanceof AST_Object) {
          var props = expr.properties;
          for (var i = props.length; --i >= 0; ) {
            var prop = props[i];
            if ("" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {
              const all_props_flattenable = props.every((p) => (p instanceof AST_ObjectKeyVal || arrows && p instanceof AST_ConciseMethod && !p.is_generator) && !p.computed_key());
              if (!all_props_flattenable)
                return;
              if (!safe_to_flatten(prop.value, compressor))
                return;
              return make_node(AST_Sub, this, {
                expression: make_node(AST_Array, expr, {
                  elements: props.map(function(prop2) {
                    var v = prop2.value;
                    if (v instanceof AST_Accessor) {
                      v = make_node(AST_Function, v, v);
                    }
                    var k = prop2.key;
                    if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {
                      return make_sequence(prop2, [k, v]);
                    }
                    return v;
                  })
                }),
                property: make_node(AST_Number, this, {
                  value: i
                })
              });
            }
          }
        }
      });
      def_optimize(AST_Sub, function(self2, compressor) {
        var expr = self2.expression;
        var prop = self2.property;
        if (compressor.option("properties")) {
          var key = prop.evaluate(compressor);
          if (key !== prop) {
            if (typeof key == "string") {
              if (key == "undefined") {
                key = void 0;
              } else {
                var value = parseFloat(key);
                if (value.toString() == key) {
                  key = value;
                }
              }
            }
            prop = self2.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));
            var property = "" + key;
            if (is_basic_identifier_string(property) && property.length <= prop.size() + 1) {
              return make_node(AST_Dot, self2, {
                expression: expr,
                optional: self2.optional,
                property,
                quote: prop.quote
              }).optimize(compressor);
            }
          }
        }
        var fn;
        OPT_ARGUMENTS:
          if (compressor.option("arguments") && expr instanceof AST_SymbolRef && expr.name == "arguments" && expr.definition().orig.length == 1 && (fn = expr.scope) instanceof AST_Lambda && fn.uses_arguments && !(fn instanceof AST_Arrow) && prop instanceof AST_Number) {
            var index = prop.getValue();
            var params = /* @__PURE__ */ new Set();
            var argnames = fn.argnames;
            for (var n = 0; n < argnames.length; n++) {
              if (!(argnames[n] instanceof AST_SymbolFunarg)) {
                break OPT_ARGUMENTS;
              }
              var param = argnames[n].name;
              if (params.has(param)) {
                break OPT_ARGUMENTS;
              }
              params.add(param);
            }
            var argname = fn.argnames[index];
            if (argname && compressor.has_directive("use strict")) {
              var def = argname.definition();
              if (!compressor.option("reduce_vars") || def.assignments || def.orig.length > 1) {
                argname = null;
              }
            } else if (!argname && !compressor.option("keep_fargs") && index < fn.argnames.length + 5) {
              while (index >= fn.argnames.length) {
                argname = fn.create_symbol(AST_SymbolFunarg, {
                  source: fn,
                  scope: fn,
                  tentative_name: "argument_" + fn.argnames.length
                });
                fn.argnames.push(argname);
              }
            }
            if (argname) {
              var sym = make_node(AST_SymbolRef, self2, argname);
              sym.reference({});
              clear_flag(argname, UNUSED);
              return sym;
            }
          }
        if (compressor.is_lhs())
          return self2;
        if (key !== prop) {
          var sub = self2.flatten_object(property, compressor);
          if (sub) {
            expr = self2.expression = sub.expression;
            prop = self2.property = sub.property;
          }
        }
        if (compressor.option("properties") && compressor.option("side_effects") && prop instanceof AST_Number && expr instanceof AST_Array) {
          var index = prop.getValue();
          var elements = expr.elements;
          var retValue = elements[index];
          FLATTEN:
            if (safe_to_flatten(retValue, compressor)) {
              var flatten = true;
              var values = [];
              for (var i = elements.length; --i > index; ) {
                var value = elements[i].drop_side_effect_free(compressor);
                if (value) {
                  values.unshift(value);
                  if (flatten && value.has_side_effects(compressor))
                    flatten = false;
                }
              }
              if (retValue instanceof AST_Expansion)
                break FLATTEN;
              retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;
              if (!flatten)
                values.unshift(retValue);
              while (--i >= 0) {
                var value = elements[i];
                if (value instanceof AST_Expansion)
                  break FLATTEN;
                value = value.drop_side_effect_free(compressor);
                if (value)
                  values.unshift(value);
                else
                  index--;
              }
              if (flatten) {
                values.push(retValue);
                return make_sequence(self2, values).optimize(compressor);
              } else
                return make_node(AST_Sub, self2, {
                  expression: make_node(AST_Array, expr, {
                    elements: values
                  }),
                  property: make_node(AST_Number, prop, {
                    value: index
                  })
                });
            }
        }
        var ev = self2.evaluate(compressor);
        if (ev !== self2) {
          ev = make_node_from_constant(ev, self2).optimize(compressor);
          return best_of(compressor, ev, self2);
        }
        return self2;
      });
      def_optimize(AST_Chain, function(self2, compressor) {
        if (is_nullish(self2.expression, compressor)) {
          let parent = compressor.parent();
          if (parent instanceof AST_UnaryPrefix && parent.operator === "delete") {
            return make_node_from_constant(0, self2);
          }
          return make_node(AST_Undefined, self2);
        }
        return self2;
      });
      def_optimize(AST_Dot, function(self2, compressor) {
        const parent = compressor.parent();
        if (compressor.is_lhs())
          return self2;
        if (compressor.option("unsafe_proto") && self2.expression instanceof AST_Dot && self2.expression.property == "prototype") {
          var exp = self2.expression.expression;
          if (is_undeclared_ref(exp))
            switch (exp.name) {
              case "Array":
                self2.expression = make_node(AST_Array, self2.expression, {
                  elements: []
                });
                break;
              case "Function":
                self2.expression = make_node(AST_Function, self2.expression, {
                  argnames: [],
                  body: []
                });
                break;
              case "Number":
                self2.expression = make_node(AST_Number, self2.expression, {
                  value: 0
                });
                break;
              case "Object":
                self2.expression = make_node(AST_Object, self2.expression, {
                  properties: []
                });
                break;
              case "RegExp":
                self2.expression = make_node(AST_RegExp, self2.expression, {
                  value: { source: "t", flags: "" }
                });
                break;
              case "String":
                self2.expression = make_node(AST_String, self2.expression, {
                  value: ""
                });
                break;
            }
        }
        if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) {
          const sub = self2.flatten_object(self2.property, compressor);
          if (sub)
            return sub.optimize(compressor);
        }
        if (self2.expression instanceof AST_PropAccess && parent instanceof AST_PropAccess) {
          return self2;
        }
        let ev = self2.evaluate(compressor);
        if (ev !== self2) {
          ev = make_node_from_constant(ev, self2).optimize(compressor);
          return best_of(compressor, ev, self2);
        }
        return self2;
      });
      function literals_in_boolean_context(self2, compressor) {
        if (compressor.in_boolean_context()) {
          return best_of(compressor, self2, make_sequence(self2, [
            self2,
            make_node(AST_True, self2)
          ]).optimize(compressor));
        }
        return self2;
      }
      function inline_array_like_spread(elements) {
        for (var i = 0; i < elements.length; i++) {
          var el = elements[i];
          if (el instanceof AST_Expansion) {
            var expr = el.expression;
            if (expr instanceof AST_Array && !expr.elements.some((elm) => elm instanceof AST_Hole)) {
              elements.splice(i, 1, ...expr.elements);
              i--;
            }
          }
        }
      }
      def_optimize(AST_Array, function(self2, compressor) {
        var optimized = literals_in_boolean_context(self2, compressor);
        if (optimized !== self2) {
          return optimized;
        }
        inline_array_like_spread(self2.elements);
        return self2;
      });
      function inline_object_prop_spread(props, compressor) {
        for (var i = 0; i < props.length; i++) {
          var prop = props[i];
          if (prop instanceof AST_Expansion) {
            const expr = prop.expression;
            if (expr instanceof AST_Object && expr.properties.every((prop2) => prop2 instanceof AST_ObjectKeyVal)) {
              props.splice(i, 1, ...expr.properties);
              i--;
            } else if (expr instanceof AST_Constant && !(expr instanceof AST_String)) {
              props.splice(i, 1);
              i--;
            } else if (is_nullish(expr, compressor)) {
              props.splice(i, 1);
              i--;
            }
          }
        }
      }
      def_optimize(AST_Object, function(self2, compressor) {
        var optimized = literals_in_boolean_context(self2, compressor);
        if (optimized !== self2) {
          return optimized;
        }
        inline_object_prop_spread(self2.properties, compressor);
        return self2;
      });
      def_optimize(AST_RegExp, literals_in_boolean_context);
      def_optimize(AST_Return, function(self2, compressor) {
        if (self2.value && is_undefined(self2.value, compressor)) {
          self2.value = null;
        }
        return self2;
      });
      def_optimize(AST_Arrow, opt_AST_Lambda);
      def_optimize(AST_Function, function(self2, compressor) {
        self2 = opt_AST_Lambda(self2, compressor);
        if (compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015 && !self2.name && !self2.is_generator && !self2.uses_arguments && !self2.pinned()) {
          const uses_this = walk(self2, (node) => {
            if (node instanceof AST_This)
              return walk_abort;
          });
          if (!uses_this)
            return make_node(AST_Arrow, self2, self2).optimize(compressor);
        }
        return self2;
      });
      def_optimize(AST_Class, function(self2) {
        for (let i = 0; i < self2.properties.length; i++) {
          const prop = self2.properties[i];
          if (prop instanceof AST_ClassStaticBlock && prop.body.length == 0) {
            self2.properties.splice(i, 1);
            i--;
          }
        }
        return self2;
      });
      def_optimize(AST_ClassStaticBlock, function(self2, compressor) {
        tighten_body(self2.body, compressor);
        return self2;
      });
      def_optimize(AST_Yield, function(self2, compressor) {
        if (self2.expression && !self2.is_star && is_undefined(self2.expression, compressor)) {
          self2.expression = null;
        }
        return self2;
      });
      def_optimize(AST_TemplateString, function(self2, compressor) {
        if (!compressor.option("evaluate") || compressor.parent() instanceof AST_PrefixedTemplateString) {
          return self2;
        }
        var segments = [];
        for (var i = 0; i < self2.segments.length; i++) {
          var segment = self2.segments[i];
          if (segment instanceof AST_Node) {
            var result = segment.evaluate(compressor);
            if (result !== segment && (result + "").length <= segment.size() + "${}".length) {
              segments[segments.length - 1].value = segments[segments.length - 1].value + result + self2.segments[++i].value;
              continue;
            }
            if (segment instanceof AST_TemplateString) {
              var inners = segment.segments;
              segments[segments.length - 1].value += inners[0].value;
              for (var j = 1; j < inners.length; j++) {
                segment = inners[j];
                segments.push(segment);
              }
              continue;
            }
          }
          segments.push(segment);
        }
        self2.segments = segments;
        if (segments.length == 1) {
          return make_node(AST_String, self2, segments[0]);
        }
        if (segments.length === 3 && segments[1] instanceof AST_Node && (segments[1].is_string(compressor) || segments[1].is_number(compressor) || is_nullish(segments[1], compressor) || compressor.option("unsafe"))) {
          if (segments[2].value === "") {
            return make_node(AST_Binary, self2, {
              operator: "+",
              left: make_node(AST_String, self2, {
                value: segments[0].value
              }),
              right: segments[1]
            });
          }
          if (segments[0].value === "") {
            return make_node(AST_Binary, self2, {
              operator: "+",
              left: segments[1],
              right: make_node(AST_String, self2, {
                value: segments[2].value
              })
            });
          }
        }
        return self2;
      });
      def_optimize(AST_PrefixedTemplateString, function(self2) {
        return self2;
      });
      function lift_key(self2, compressor) {
        if (!compressor.option("computed_props"))
          return self2;
        if (!(self2.key instanceof AST_Constant))
          return self2;
        if (self2.key instanceof AST_String || self2.key instanceof AST_Number) {
          if (self2.key.value === "__proto__")
            return self2;
          if (self2.key.value == "constructor" && compressor.parent() instanceof AST_Class)
            return self2;
          if (self2 instanceof AST_ObjectKeyVal) {
            self2.quote = self2.key.quote;
            self2.key = self2.key.value;
          } else if (self2 instanceof AST_ClassProperty) {
            self2.quote = self2.key.quote;
            self2.key = make_node(AST_SymbolClassProperty, self2.key, {
              name: self2.key.value
            });
          } else {
            self2.quote = self2.key.quote;
            self2.key = make_node(AST_SymbolMethod, self2.key, {
              name: self2.key.value
            });
          }
        }
        return self2;
      }
      def_optimize(AST_ObjectProperty, lift_key);
      def_optimize(AST_ConciseMethod, function(self2, compressor) {
        lift_key(self2, compressor);
        if (compressor.option("arrows") && compressor.parent() instanceof AST_Object && !self2.is_generator && !self2.value.uses_arguments && !self2.value.pinned() && self2.value.body.length == 1 && self2.value.body[0] instanceof AST_Return && self2.value.body[0].value && !self2.value.contains_this()) {
          var arrow = make_node(AST_Arrow, self2.value, self2.value);
          arrow.async = self2.async;
          arrow.is_generator = self2.is_generator;
          return make_node(AST_ObjectKeyVal, self2, {
            key: self2.key instanceof AST_SymbolMethod ? self2.key.name : self2.key,
            value: arrow,
            quote: self2.quote
          });
        }
        return self2;
      });
      def_optimize(AST_ObjectKeyVal, function(self2, compressor) {
        lift_key(self2, compressor);
        var unsafe_methods = compressor.option("unsafe_methods");
        if (unsafe_methods && compressor.option("ecma") >= 2015 && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self2.key + ""))) {
          var key = self2.key;
          var value = self2.value;
          var is_arrow_with_block = value instanceof AST_Arrow && Array.isArray(value.body) && !value.contains_this();
          if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {
            return make_node(AST_ConciseMethod, self2, {
              async: value.async,
              is_generator: value.is_generator,
              key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self2, {
                name: key
              }),
              value: make_node(AST_Accessor, value, value),
              quote: self2.quote
            });
          }
        }
        return self2;
      });
      def_optimize(AST_Destructuring, function(self2, compressor) {
        if (compressor.option("pure_getters") == true && compressor.option("unused") && !self2.is_array && Array.isArray(self2.names) && !is_destructuring_export_decl(compressor) && !(self2.names[self2.names.length - 1] instanceof AST_Expansion)) {
          var keep = [];
          for (var i = 0; i < self2.names.length; i++) {
            var elem = self2.names[i];
            if (!(elem instanceof AST_ObjectKeyVal && typeof elem.key == "string" && elem.value instanceof AST_SymbolDeclaration && !should_retain(compressor, elem.value.definition()))) {
              keep.push(elem);
            }
          }
          if (keep.length != self2.names.length) {
            self2.names = keep;
          }
        }
        return self2;
        function is_destructuring_export_decl(compressor2) {
          var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];
          for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {
            var parent = compressor2.parent(p);
            if (!parent)
              return false;
            if (a === 0 && parent.TYPE == "Destructuring")
              continue;
            if (!ancestors[a].test(parent.TYPE)) {
              return false;
            }
            a++;
          }
          return true;
        }
        function should_retain(compressor2, def) {
          if (def.references.length)
            return true;
          if (!def.global)
            return false;
          if (compressor2.toplevel.vars) {
            if (compressor2.top_retain) {
              return compressor2.top_retain(def);
            }
            return false;
          }
          return true;
        }
      });
      function* SourceMap(options) {
        options = defaults(options, {
          file: null,
          root: null,
          orig: null,
          files: {}
        });
        var orig_map;
        var generator = new sourceMap.SourceMapGenerator({
          file: options.file,
          sourceRoot: options.root
        });
        let sourcesContent = { __proto__: null };
        let files = options.files;
        for (var name in files)
          if (HOP(files, name)) {
            sourcesContent[name] = files[name];
          }
        if (options.orig) {
          orig_map = yield new sourceMap.SourceMapConsumer(options.orig);
          if (orig_map.sourcesContent) {
            orig_map.sources.forEach(function(source, i) {
              var content = orig_map.sourcesContent[i];
              if (content) {
                sourcesContent[source] = content;
              }
            });
          }
        }
        function add(source, gen_line, gen_col, orig_line, orig_col, name2) {
          let generatedPos = { line: gen_line, column: gen_col };
          if (orig_map) {
            var info = orig_map.originalPositionFor({
              line: orig_line,
              column: orig_col
            });
            if (info.source === null) {
              generator.addMapping({
                generated: generatedPos,
                original: null,
                source: null,
                name: null
              });
              return;
            }
            source = info.source;
            orig_line = info.line;
            orig_col = info.column;
            name2 = info.name || name2;
          }
          generator.addMapping({
            generated: generatedPos,
            original: { line: orig_line, column: orig_col },
            source,
            name: name2
          });
          generator.setSourceContent(source, sourcesContent[source]);
        }
        function clean(map) {
          const allNull = map.sourcesContent && map.sourcesContent.every((c) => c == null);
          if (allNull)
            delete map.sourcesContent;
          if (map.file === void 0)
            delete map.file;
          if (map.sourceRoot === void 0)
            delete map.sourceRoot;
          return map;
        }
        function getDecoded() {
          if (!generator.toDecodedMap)
            return null;
          return clean(generator.toDecodedMap());
        }
        function getEncoded() {
          return clean(generator.toJSON());
        }
        function destroy() {
          if (orig_map && orig_map.destroy)
            orig_map.destroy();
        }
        return {
          add,
          getDecoded,
          getEncoded,
          destroy
        };
      }
      var domprops = [
        "$&",
        "$'",
        "$*",
        "$+",
        "$1",
        "$2",
        "$3",
        "$4",
        "$5",
        "$6",
        "$7",
        "$8",
        "$9",
        "$_",
        "$`",
        "$input",
        "-moz-animation",
        "-moz-animation-delay",
        "-moz-animation-direction",
        "-moz-animation-duration",
        "-moz-animation-fill-mode",
        "-moz-animation-iteration-count",
        "-moz-animation-name",
        "-moz-animation-play-state",
        "-moz-animation-timing-function",
        "-moz-appearance",
        "-moz-backface-visibility",
        "-moz-border-end",
        "-moz-border-end-color",
        "-moz-border-end-style",
        "-moz-border-end-width",
        "-moz-border-image",
        "-moz-border-start",
        "-moz-border-start-color",
        "-moz-border-start-style",
        "-moz-border-start-width",
        "-moz-box-align",
        "-moz-box-direction",
        "-moz-box-flex",
        "-moz-box-ordinal-group",
        "-moz-box-orient",
        "-moz-box-pack",
        "-moz-box-sizing",
        "-moz-float-edge",
        "-moz-font-feature-settings",
        "-moz-font-language-override",
        "-moz-force-broken-image-icon",
        "-moz-hyphens",
        "-moz-image-region",
        "-moz-margin-end",
        "-moz-margin-start",
        "-moz-orient",
        "-moz-osx-font-smoothing",
        "-moz-outline-radius",
        "-moz-outline-radius-bottomleft",
        "-moz-outline-radius-bottomright",
        "-moz-outline-radius-topleft",
        "-moz-outline-radius-topright",
        "-moz-padding-end",
        "-moz-padding-start",
        "-moz-perspective",
        "-moz-perspective-origin",
        "-moz-tab-size",
        "-moz-text-size-adjust",
        "-moz-transform",
        "-moz-transform-origin",
        "-moz-transform-style",
        "-moz-transition",
        "-moz-transition-delay",
        "-moz-transition-duration",
        "-moz-transition-property",
        "-moz-transition-timing-function",
        "-moz-user-focus",
        "-moz-user-input",
        "-moz-user-modify",
        "-moz-user-select",
        "-moz-window-dragging",
        "-webkit-align-content",
        "-webkit-align-items",
        "-webkit-align-self",
        "-webkit-animation",
        "-webkit-animation-delay",
        "-webkit-animation-direction",
        "-webkit-animation-duration",
        "-webkit-animation-fill-mode",
        "-webkit-animation-iteration-count",
        "-webkit-animation-name",
        "-webkit-animation-play-state",
        "-webkit-animation-timing-function",
        "-webkit-appearance",
        "-webkit-backface-visibility",
        "-webkit-background-clip",
        "-webkit-background-origin",
        "-webkit-background-size",
        "-webkit-border-bottom-left-radius",
        "-webkit-border-bottom-right-radius",
        "-webkit-border-image",
        "-webkit-border-radius",
        "-webkit-border-top-left-radius",
        "-webkit-border-top-right-radius",
        "-webkit-box-align",
        "-webkit-box-direction",
        "-webkit-box-flex",
        "-webkit-box-ordinal-group",
        "-webkit-box-orient",
        "-webkit-box-pack",
        "-webkit-box-shadow",
        "-webkit-box-sizing",
        "-webkit-filter",
        "-webkit-flex",
        "-webkit-flex-basis",
        "-webkit-flex-direction",
        "-webkit-flex-flow",
        "-webkit-flex-grow",
        "-webkit-flex-shrink",
        "-webkit-flex-wrap",
        "-webkit-justify-content",
        "-webkit-line-clamp",
        "-webkit-mask",
        "-webkit-mask-clip",
        "-webkit-mask-composite",
        "-webkit-mask-image",
        "-webkit-mask-origin",
        "-webkit-mask-position",
        "-webkit-mask-position-x",
        "-webkit-mask-position-y",
        "-webkit-mask-repeat",
        "-webkit-mask-size",
        "-webkit-order",
        "-webkit-perspective",
        "-webkit-perspective-origin",
        "-webkit-text-fill-color",
        "-webkit-text-size-adjust",
        "-webkit-text-stroke",
        "-webkit-text-stroke-color",
        "-webkit-text-stroke-width",
        "-webkit-transform",
        "-webkit-transform-origin",
        "-webkit-transform-style",
        "-webkit-transition",
        "-webkit-transition-delay",
        "-webkit-transition-duration",
        "-webkit-transition-property",
        "-webkit-transition-timing-function",
        "-webkit-user-select",
        "0",
        "1",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
        "2",
        "20",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "@@iterator",
        "ABORT_ERR",
        "ACTIVE",
        "ACTIVE_ATTRIBUTES",
        "ACTIVE_TEXTURE",
        "ACTIVE_UNIFORMS",
        "ACTIVE_UNIFORM_BLOCKS",
        "ADDITION",
        "ALIASED_LINE_WIDTH_RANGE",
        "ALIASED_POINT_SIZE_RANGE",
        "ALL",
        "ALLOW_KEYBOARD_INPUT",
        "ALLPASS",
        "ALPHA",
        "ALPHA_BITS",
        "ALREADY_SIGNALED",
        "ALT_MASK",
        "ALWAYS",
        "ANY_SAMPLES_PASSED",
        "ANY_SAMPLES_PASSED_CONSERVATIVE",
        "ANY_TYPE",
        "ANY_UNORDERED_NODE_TYPE",
        "ARRAY_BUFFER",
        "ARRAY_BUFFER_BINDING",
        "ATTACHED_SHADERS",
        "ATTRIBUTE_NODE",
        "AT_TARGET",
        "AbortController",
        "AbortSignal",
        "AbsoluteOrientationSensor",
        "AbstractRange",
        "Accelerometer",
        "AddSearchProvider",
        "AggregateError",
        "AnalyserNode",
        "Animation",
        "AnimationEffect",
        "AnimationEvent",
        "AnimationPlaybackEvent",
        "AnimationTimeline",
        "AnonXMLHttpRequest",
        "Any",
        "ApplicationCache",
        "ApplicationCacheErrorEvent",
        "Array",
        "ArrayBuffer",
        "ArrayType",
        "Atomics",
        "Attr",
        "Audio",
        "AudioBuffer",
        "AudioBufferSourceNode",
        "AudioContext",
        "AudioDestinationNode",
        "AudioListener",
        "AudioNode",
        "AudioParam",
        "AudioParamMap",
        "AudioProcessingEvent",
        "AudioScheduledSourceNode",
        "AudioStreamTrack",
        "AudioWorklet",
        "AudioWorkletNode",
        "AuthenticatorAssertionResponse",
        "AuthenticatorAttestationResponse",
        "AuthenticatorResponse",
        "AutocompleteErrorEvent",
        "BACK",
        "BAD_BOUNDARYPOINTS_ERR",
        "BAD_REQUEST",
        "BANDPASS",
        "BLEND",
        "BLEND_COLOR",
        "BLEND_DST_ALPHA",
        "BLEND_DST_RGB",
        "BLEND_EQUATION",
        "BLEND_EQUATION_ALPHA",
        "BLEND_EQUATION_RGB",
        "BLEND_SRC_ALPHA",
        "BLEND_SRC_RGB",
        "BLUE",
        "BLUE_BITS",
        "BLUR",
        "BOOL",
        "BOOLEAN_TYPE",
        "BOOL_VEC2",
        "BOOL_VEC3",
        "BOOL_VEC4",
        "BOTH",
        "BROWSER_DEFAULT_WEBGL",
        "BUBBLING_PHASE",
        "BUFFER_SIZE",
        "BUFFER_USAGE",
        "BYTE",
        "BYTES_PER_ELEMENT",
        "BackgroundFetchManager",
        "BackgroundFetchRecord",
        "BackgroundFetchRegistration",
        "BarProp",
        "BarcodeDetector",
        "BaseAudioContext",
        "BaseHref",
        "BatteryManager",
        "BeforeInstallPromptEvent",
        "BeforeLoadEvent",
        "BeforeUnloadEvent",
        "BigInt",
        "BigInt64Array",
        "BigUint64Array",
        "BiquadFilterNode",
        "Blob",
        "BlobEvent",
        "Bluetooth",
        "BluetoothCharacteristicProperties",
        "BluetoothDevice",
        "BluetoothRemoteGATTCharacteristic",
        "BluetoothRemoteGATTDescriptor",
        "BluetoothRemoteGATTServer",
        "BluetoothRemoteGATTService",
        "BluetoothUUID",
        "Boolean",
        "BroadcastChannel",
        "ByteLengthQueuingStrategy",
        "CAPTURING_PHASE",
        "CCW",
        "CDATASection",
        "CDATA_SECTION_NODE",
        "CHANGE",
        "CHARSET_RULE",
        "CHECKING",
        "CLAMP_TO_EDGE",
        "CLICK",
        "CLOSED",
        "CLOSING",
        "COLOR",
        "COLOR_ATTACHMENT0",
        "COLOR_ATTACHMENT1",
        "COLOR_ATTACHMENT10",
        "COLOR_ATTACHMENT11",
        "COLOR_ATTACHMENT12",
        "COLOR_ATTACHMENT13",
        "COLOR_ATTACHMENT14",
        "COLOR_ATTACHMENT15",
        "COLOR_ATTACHMENT2",
        "COLOR_ATTACHMENT3",
        "COLOR_ATTACHMENT4",
        "COLOR_ATTACHMENT5",
        "COLOR_ATTACHMENT6",
        "COLOR_ATTACHMENT7",
        "COLOR_ATTACHMENT8",
        "COLOR_ATTACHMENT9",
        "COLOR_BUFFER_BIT",
        "COLOR_CLEAR_VALUE",
        "COLOR_WRITEMASK",
        "COMMENT_NODE",
        "COMPARE_REF_TO_TEXTURE",
        "COMPILE_STATUS",
        "COMPLETION_STATUS_KHR",
        "COMPRESSED_RGBA_S3TC_DXT1_EXT",
        "COMPRESSED_RGBA_S3TC_DXT3_EXT",
        "COMPRESSED_RGBA_S3TC_DXT5_EXT",
        "COMPRESSED_RGB_S3TC_DXT1_EXT",
        "COMPRESSED_TEXTURE_FORMATS",
        "COMPUTE",
        "CONDITION_SATISFIED",
        "CONFIGURATION_UNSUPPORTED",
        "CONNECTING",
        "CONSTANT_ALPHA",
        "CONSTANT_COLOR",
        "CONSTRAINT_ERR",
        "CONTEXT_LOST_WEBGL",
        "CONTROL_MASK",
        "COPY_DST",
        "COPY_READ_BUFFER",
        "COPY_READ_BUFFER_BINDING",
        "COPY_SRC",
        "COPY_WRITE_BUFFER",
        "COPY_WRITE_BUFFER_BINDING",
        "COUNTER_STYLE_RULE",
        "CSS",
        "CSS2Properties",
        "CSSAnimation",
        "CSSCharsetRule",
        "CSSConditionRule",
        "CSSCounterStyleRule",
        "CSSFontFaceRule",
        "CSSFontFeatureValuesRule",
        "CSSGroupingRule",
        "CSSImageValue",
        "CSSImportRule",
        "CSSKeyframeRule",
        "CSSKeyframesRule",
        "CSSKeywordValue",
        "CSSMathInvert",
        "CSSMathMax",
        "CSSMathMin",
        "CSSMathNegate",
        "CSSMathProduct",
        "CSSMathSum",
        "CSSMathValue",
        "CSSMatrixComponent",
        "CSSMediaRule",
        "CSSMozDocumentRule",
        "CSSNameSpaceRule",
        "CSSNamespaceRule",
        "CSSNumericArray",
        "CSSNumericValue",
        "CSSPageRule",
        "CSSPerspective",
        "CSSPositionValue",
        "CSSPrimitiveValue",
        "CSSRotate",
        "CSSRule",
        "CSSRuleList",
        "CSSScale",
        "CSSSkew",
        "CSSSkewX",
        "CSSSkewY",
        "CSSStyleDeclaration",
        "CSSStyleRule",
        "CSSStyleSheet",
        "CSSStyleValue",
        "CSSSupportsRule",
        "CSSTransformComponent",
        "CSSTransformValue",
        "CSSTransition",
        "CSSTranslate",
        "CSSUnitValue",
        "CSSUnknownRule",
        "CSSUnparsedValue",
        "CSSValue",
        "CSSValueList",
        "CSSVariableReferenceValue",
        "CSSVariablesDeclaration",
        "CSSVariablesRule",
        "CSSViewportRule",
        "CSS_ATTR",
        "CSS_CM",
        "CSS_COUNTER",
        "CSS_CUSTOM",
        "CSS_DEG",
        "CSS_DIMENSION",
        "CSS_EMS",
        "CSS_EXS",
        "CSS_FILTER_BLUR",
        "CSS_FILTER_BRIGHTNESS",
        "CSS_FILTER_CONTRAST",
        "CSS_FILTER_CUSTOM",
        "CSS_FILTER_DROP_SHADOW",
        "CSS_FILTER_GRAYSCALE",
        "CSS_FILTER_HUE_ROTATE",
        "CSS_FILTER_INVERT",
        "CSS_FILTER_OPACITY",
        "CSS_FILTER_REFERENCE",
        "CSS_FILTER_SATURATE",
        "CSS_FILTER_SEPIA",
        "CSS_GRAD",
        "CSS_HZ",
        "CSS_IDENT",
        "CSS_IN",
        "CSS_INHERIT",
        "CSS_KHZ",
        "CSS_MATRIX",
        "CSS_MATRIX3D",
        "CSS_MM",
        "CSS_MS",
        "CSS_NUMBER",
        "CSS_PC",
        "CSS_PERCENTAGE",
        "CSS_PERSPECTIVE",
        "CSS_PRIMITIVE_VALUE",
        "CSS_PT",
        "CSS_PX",
        "CSS_RAD",
        "CSS_RECT",
        "CSS_RGBCOLOR",
        "CSS_ROTATE",
        "CSS_ROTATE3D",
        "CSS_ROTATEX",
        "CSS_ROTATEY",
        "CSS_ROTATEZ",
        "CSS_S",
        "CSS_SCALE",
        "CSS_SCALE3D",
        "CSS_SCALEX",
        "CSS_SCALEY",
        "CSS_SCALEZ",
        "CSS_SKEW",
        "CSS_SKEWX",
        "CSS_SKEWY",
        "CSS_STRING",
        "CSS_TRANSLATE",
        "CSS_TRANSLATE3D",
        "CSS_TRANSLATEX",
        "CSS_TRANSLATEY",
        "CSS_TRANSLATEZ",
        "CSS_UNKNOWN",
        "CSS_URI",
        "CSS_VALUE_LIST",
        "CSS_VH",
        "CSS_VMAX",
        "CSS_VMIN",
        "CSS_VW",
        "CULL_FACE",
        "CULL_FACE_MODE",
        "CURRENT_PROGRAM",
        "CURRENT_QUERY",
        "CURRENT_VERTEX_ATTRIB",
        "CUSTOM",
        "CW",
        "Cache",
        "CacheStorage",
        "CanvasCaptureMediaStream",
        "CanvasCaptureMediaStreamTrack",
        "CanvasGradient",
        "CanvasPattern",
        "CanvasRenderingContext2D",
        "CaretPosition",
        "ChannelMergerNode",
        "ChannelSplitterNode",
        "CharacterData",
        "ClientRect",
        "ClientRectList",
        "Clipboard",
        "ClipboardEvent",
        "ClipboardItem",
        "CloseEvent",
        "Collator",
        "CommandEvent",
        "Comment",
        "CompileError",
        "CompositionEvent",
        "CompressionStream",
        "Console",
        "ConstantSourceNode",
        "Controllers",
        "ConvolverNode",
        "CountQueuingStrategy",
        "Counter",
        "Credential",
        "CredentialsContainer",
        "Crypto",
        "CryptoKey",
        "CustomElementRegistry",
        "CustomEvent",
        "DATABASE_ERR",
        "DATA_CLONE_ERR",
        "DATA_ERR",
        "DBLCLICK",
        "DECR",
        "DECR_WRAP",
        "DELETE_STATUS",
        "DEPTH",
        "DEPTH24_STENCIL8",
        "DEPTH32F_STENCIL8",
        "DEPTH_ATTACHMENT",
        "DEPTH_BITS",
        "DEPTH_BUFFER_BIT",
        "DEPTH_CLEAR_VALUE",
        "DEPTH_COMPONENT",
        "DEPTH_COMPONENT16",
        "DEPTH_COMPONENT24",
        "DEPTH_COMPONENT32F",
        "DEPTH_FUNC",
        "DEPTH_RANGE",
        "DEPTH_STENCIL",
        "DEPTH_STENCIL_ATTACHMENT",
        "DEPTH_TEST",
        "DEPTH_WRITEMASK",
        "DEVICE_INELIGIBLE",
        "DIRECTION_DOWN",
        "DIRECTION_LEFT",
        "DIRECTION_RIGHT",
        "DIRECTION_UP",
        "DISABLED",
        "DISPATCH_REQUEST_ERR",
        "DITHER",
        "DOCUMENT_FRAGMENT_NODE",
        "DOCUMENT_NODE",
        "DOCUMENT_POSITION_CONTAINED_BY",
        "DOCUMENT_POSITION_CONTAINS",
        "DOCUMENT_POSITION_DISCONNECTED",
        "DOCUMENT_POSITION_FOLLOWING",
        "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC",
        "DOCUMENT_POSITION_PRECEDING",
        "DOCUMENT_TYPE_NODE",
        "DOMCursor",
        "DOMError",
        "DOMException",
        "DOMImplementation",
        "DOMImplementationLS",
        "DOMMatrix",
        "DOMMatrixReadOnly",
        "DOMParser",
        "DOMPoint",
        "DOMPointReadOnly",
        "DOMQuad",
        "DOMRect",
        "DOMRectList",
        "DOMRectReadOnly",
        "DOMRequest",
        "DOMSTRING_SIZE_ERR",
        "DOMSettableTokenList",
        "DOMStringList",
        "DOMStringMap",
        "DOMTokenList",
        "DOMTransactionEvent",
        "DOM_DELTA_LINE",
        "DOM_DELTA_PAGE",
        "DOM_DELTA_PIXEL",
        "DOM_INPUT_METHOD_DROP",
        "DOM_INPUT_METHOD_HANDWRITING",
        "DOM_INPUT_METHOD_IME",
        "DOM_INPUT_METHOD_KEYBOARD",
        "DOM_INPUT_METHOD_MULTIMODAL",
        "DOM_INPUT_METHOD_OPTION",
        "DOM_INPUT_METHOD_PASTE",
        "DOM_INPUT_METHOD_SCRIPT",
        "DOM_INPUT_METHOD_UNKNOWN",
        "DOM_INPUT_METHOD_VOICE",
        "DOM_KEY_LOCATION_JOYSTICK",
        "DOM_KEY_LOCATION_LEFT",
        "DOM_KEY_LOCATION_MOBILE",
        "DOM_KEY_LOCATION_NUMPAD",
        "DOM_KEY_LOCATION_RIGHT",
        "DOM_KEY_LOCATION_STANDARD",
        "DOM_VK_0",
        "DOM_VK_1",
        "DOM_VK_2",
        "DOM_VK_3",
        "DOM_VK_4",
        "DOM_VK_5",
        "DOM_VK_6",
        "DOM_VK_7",
        "DOM_VK_8",
        "DOM_VK_9",
        "DOM_VK_A",
        "DOM_VK_ACCEPT",
        "DOM_VK_ADD",
        "DOM_VK_ALT",
        "DOM_VK_ALTGR",
        "DOM_VK_AMPERSAND",
        "DOM_VK_ASTERISK",
        "DOM_VK_AT",
        "DOM_VK_ATTN",
        "DOM_VK_B",
        "DOM_VK_BACKSPACE",
        "DOM_VK_BACK_QUOTE",
        "DOM_VK_BACK_SLASH",
        "DOM_VK_BACK_SPACE",
        "DOM_VK_C",
        "DOM_VK_CANCEL",
        "DOM_VK_CAPS_LOCK",
        "DOM_VK_CIRCUMFLEX",
        "DOM_VK_CLEAR",
        "DOM_VK_CLOSE_BRACKET",
        "DOM_VK_CLOSE_CURLY_BRACKET",
        "DOM_VK_CLOSE_PAREN",
        "DOM_VK_COLON",
        "DOM_VK_COMMA",
        "DOM_VK_CONTEXT_MENU",
        "DOM_VK_CONTROL",
        "DOM_VK_CONVERT",
        "DOM_VK_CRSEL",
        "DOM_VK_CTRL",
        "DOM_VK_D",
        "DOM_VK_DECIMAL",
        "DOM_VK_DELETE",
        "DOM_VK_DIVIDE",
        "DOM_VK_DOLLAR",
        "DOM_VK_DOUBLE_QUOTE",
        "DOM_VK_DOWN",
        "DOM_VK_E",
        "DOM_VK_EISU",
        "DOM_VK_END",
        "DOM_VK_ENTER",
        "DOM_VK_EQUALS",
        "DOM_VK_EREOF",
        "DOM_VK_ESCAPE",
        "DOM_VK_EXCLAMATION",
        "DOM_VK_EXECUTE",
        "DOM_VK_EXSEL",
        "DOM_VK_F",
        "DOM_VK_F1",
        "DOM_VK_F10",
        "DOM_VK_F11",
        "DOM_VK_F12",
        "DOM_VK_F13",
        "DOM_VK_F14",
        "DOM_VK_F15",
        "DOM_VK_F16",
        "DOM_VK_F17",
        "DOM_VK_F18",
        "DOM_VK_F19",
        "DOM_VK_F2",
        "DOM_VK_F20",
        "DOM_VK_F21",
        "DOM_VK_F22",
        "DOM_VK_F23",
        "DOM_VK_F24",
        "DOM_VK_F25",
        "DOM_VK_F26",
        "DOM_VK_F27",
        "DOM_VK_F28",
        "DOM_VK_F29",
        "DOM_VK_F3",
        "DOM_VK_F30",
        "DOM_VK_F31",
        "DOM_VK_F32",
        "DOM_VK_F33",
        "DOM_VK_F34",
        "DOM_VK_F35",
        "DOM_VK_F36",
        "DOM_VK_F4",
        "DOM_VK_F5",
        "DOM_VK_F6",
        "DOM_VK_F7",
        "DOM_VK_F8",
        "DOM_VK_F9",
        "DOM_VK_FINAL",
        "DOM_VK_FRONT",
        "DOM_VK_G",
        "DOM_VK_GREATER_THAN",
        "DOM_VK_H",
        "DOM_VK_HANGUL",
        "DOM_VK_HANJA",
        "DOM_VK_HASH",
        "DOM_VK_HELP",
        "DOM_VK_HK_TOGGLE",
        "DOM_VK_HOME",
        "DOM_VK_HYPHEN_MINUS",
        "DOM_VK_I",
        "DOM_VK_INSERT",
        "DOM_VK_J",
        "DOM_VK_JUNJA",
        "DOM_VK_K",
        "DOM_VK_KANA",
        "DOM_VK_KANJI",
        "DOM_VK_L",
        "DOM_VK_LEFT",
        "DOM_VK_LEFT_TAB",
        "DOM_VK_LESS_THAN",
        "DOM_VK_M",
        "DOM_VK_META",
        "DOM_VK_MODECHANGE",
        "DOM_VK_MULTIPLY",
        "DOM_VK_N",
        "DOM_VK_NONCONVERT",
        "DOM_VK_NUMPAD0",
        "DOM_VK_NUMPAD1",
        "DOM_VK_NUMPAD2",
        "DOM_VK_NUMPAD3",
        "DOM_VK_NUMPAD4",
        "DOM_VK_NUMPAD5",
        "DOM_VK_NUMPAD6",
        "DOM_VK_NUMPAD7",
        "DOM_VK_NUMPAD8",
        "DOM_VK_NUMPAD9",
        "DOM_VK_NUM_LOCK",
        "DOM_VK_O",
        "DOM_VK_OEM_1",
        "DOM_VK_OEM_102",
        "DOM_VK_OEM_2",
        "DOM_VK_OEM_3",
        "DOM_VK_OEM_4",
        "DOM_VK_OEM_5",
        "DOM_VK_OEM_6",
        "DOM_VK_OEM_7",
        "DOM_VK_OEM_8",
        "DOM_VK_OEM_COMMA",
        "DOM_VK_OEM_MINUS",
        "DOM_VK_OEM_PERIOD",
        "DOM_VK_OEM_PLUS",
        "DOM_VK_OPEN_BRACKET",
        "DOM_VK_OPEN_CURLY_BRACKET",
        "DOM_VK_OPEN_PAREN",
        "DOM_VK_P",
        "DOM_VK_PA1",
        "DOM_VK_PAGEDOWN",
        "DOM_VK_PAGEUP",
        "DOM_VK_PAGE_DOWN",
        "DOM_VK_PAGE_UP",
        "DOM_VK_PAUSE",
        "DOM_VK_PERCENT",
        "DOM_VK_PERIOD",
        "DOM_VK_PIPE",
        "DOM_VK_PLAY",
        "DOM_VK_PLUS",
        "DOM_VK_PRINT",
        "DOM_VK_PRINTSCREEN",
        "DOM_VK_PROCESSKEY",
        "DOM_VK_PROPERITES",
        "DOM_VK_Q",
        "DOM_VK_QUESTION_MARK",
        "DOM_VK_QUOTE",
        "DOM_VK_R",
        "DOM_VK_REDO",
        "DOM_VK_RETURN",
        "DOM_VK_RIGHT",
        "DOM_VK_S",
        "DOM_VK_SCROLL_LOCK",
        "DOM_VK_SELECT",
        "DOM_VK_SEMICOLON",
        "DOM_VK_SEPARATOR",
        "DOM_VK_SHIFT",
        "DOM_VK_SLASH",
        "DOM_VK_SLEEP",
        "DOM_VK_SPACE",
        "DOM_VK_SUBTRACT",
        "DOM_VK_T",
        "DOM_VK_TAB",
        "DOM_VK_TILDE",
        "DOM_VK_U",
        "DOM_VK_UNDERSCORE",
        "DOM_VK_UNDO",
        "DOM_VK_UNICODE",
        "DOM_VK_UP",
        "DOM_VK_V",
        "DOM_VK_VOLUME_DOWN",
        "DOM_VK_VOLUME_MUTE",
        "DOM_VK_VOLUME_UP",
        "DOM_VK_W",
        "DOM_VK_WIN",
        "DOM_VK_WINDOW",
        "DOM_VK_WIN_ICO_00",
        "DOM_VK_WIN_ICO_CLEAR",
        "DOM_VK_WIN_ICO_HELP",
        "DOM_VK_WIN_OEM_ATTN",
        "DOM_VK_WIN_OEM_AUTO",
        "DOM_VK_WIN_OEM_BACKTAB",
        "DOM_VK_WIN_OEM_CLEAR",
        "DOM_VK_WIN_OEM_COPY",
        "DOM_VK_WIN_OEM_CUSEL",
        "DOM_VK_WIN_OEM_ENLW",
        "DOM_VK_WIN_OEM_FINISH",
        "DOM_VK_WIN_OEM_FJ_JISHO",
        "DOM_VK_WIN_OEM_FJ_LOYA",
        "DOM_VK_WIN_OEM_FJ_MASSHOU",
        "DOM_VK_WIN_OEM_FJ_ROYA",
        "DOM_VK_WIN_OEM_FJ_TOUROKU",
        "DOM_VK_WIN_OEM_JUMP",
        "DOM_VK_WIN_OEM_PA1",
        "DOM_VK_WIN_OEM_PA2",
        "DOM_VK_WIN_OEM_PA3",
        "DOM_VK_WIN_OEM_RESET",
        "DOM_VK_WIN_OEM_WSCTRL",
        "DOM_VK_X",
        "DOM_VK_XF86XK_ADD_FAVORITE",
        "DOM_VK_XF86XK_APPLICATION_LEFT",
        "DOM_VK_XF86XK_APPLICATION_RIGHT",
        "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK",
        "DOM_VK_XF86XK_AUDIO_FORWARD",
        "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME",
        "DOM_VK_XF86XK_AUDIO_MEDIA",
        "DOM_VK_XF86XK_AUDIO_MUTE",
        "DOM_VK_XF86XK_AUDIO_NEXT",
        "DOM_VK_XF86XK_AUDIO_PAUSE",
        "DOM_VK_XF86XK_AUDIO_PLAY",
        "DOM_VK_XF86XK_AUDIO_PREV",
        "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME",
        "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY",
        "DOM_VK_XF86XK_AUDIO_RECORD",
        "DOM_VK_XF86XK_AUDIO_REPEAT",
        "DOM_VK_XF86XK_AUDIO_REWIND",
        "DOM_VK_XF86XK_AUDIO_STOP",
        "DOM_VK_XF86XK_AWAY",
        "DOM_VK_XF86XK_BACK",
        "DOM_VK_XF86XK_BACK_FORWARD",
        "DOM_VK_XF86XK_BATTERY",
        "DOM_VK_XF86XK_BLUE",
        "DOM_VK_XF86XK_BLUETOOTH",
        "DOM_VK_XF86XK_BOOK",
        "DOM_VK_XF86XK_BRIGHTNESS_ADJUST",
        "DOM_VK_XF86XK_CALCULATOR",
        "DOM_VK_XF86XK_CALENDAR",
        "DOM_VK_XF86XK_CD",
        "DOM_VK_XF86XK_CLOSE",
        "DOM_VK_XF86XK_COMMUNITY",
        "DOM_VK_XF86XK_CONTRAST_ADJUST",
        "DOM_VK_XF86XK_COPY",
        "DOM_VK_XF86XK_CUT",
        "DOM_VK_XF86XK_CYCLE_ANGLE",
        "DOM_VK_XF86XK_DISPLAY",
        "DOM_VK_XF86XK_DOCUMENTS",
        "DOM_VK_XF86XK_DOS",
        "DOM_VK_XF86XK_EJECT",
        "DOM_VK_XF86XK_EXCEL",
        "DOM_VK_XF86XK_EXPLORER",
        "DOM_VK_XF86XK_FAVORITES",
        "DOM_VK_XF86XK_FINANCE",
        "DOM_VK_XF86XK_FORWARD",
        "DOM_VK_XF86XK_FRAME_BACK",
        "DOM_VK_XF86XK_FRAME_FORWARD",
        "DOM_VK_XF86XK_GAME",
        "DOM_VK_XF86XK_GO",
        "DOM_VK_XF86XK_GREEN",
        "DOM_VK_XF86XK_HIBERNATE",
        "DOM_VK_XF86XK_HISTORY",
        "DOM_VK_XF86XK_HOME_PAGE",
        "DOM_VK_XF86XK_HOT_LINKS",
        "DOM_VK_XF86XK_I_TOUCH",
        "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN",
        "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP",
        "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF",
        "DOM_VK_XF86XK_LAUNCH0",
        "DOM_VK_XF86XK_LAUNCH1",
        "DOM_VK_XF86XK_LAUNCH2",
        "DOM_VK_XF86XK_LAUNCH3",
        "DOM_VK_XF86XK_LAUNCH4",
        "DOM_VK_XF86XK_LAUNCH5",
        "DOM_VK_XF86XK_LAUNCH6",
        "DOM_VK_XF86XK_LAUNCH7",
        "DOM_VK_XF86XK_LAUNCH8",
        "DOM_VK_XF86XK_LAUNCH9",
        "DOM_VK_XF86XK_LAUNCH_A",
        "DOM_VK_XF86XK_LAUNCH_B",
        "DOM_VK_XF86XK_LAUNCH_C",
        "DOM_VK_XF86XK_LAUNCH_D",
        "DOM_VK_XF86XK_LAUNCH_E",
        "DOM_VK_XF86XK_LAUNCH_F",
        "DOM_VK_XF86XK_LIGHT_BULB",
        "DOM_VK_XF86XK_LOG_OFF",
        "DOM_VK_XF86XK_MAIL",
        "DOM_VK_XF86XK_MAIL_FORWARD",
        "DOM_VK_XF86XK_MARKET",
        "DOM_VK_XF86XK_MEETING",
        "DOM_VK_XF86XK_MEMO",
        "DOM_VK_XF86XK_MENU_KB",
        "DOM_VK_XF86XK_MENU_PB",
        "DOM_VK_XF86XK_MESSENGER",
        "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN",
        "DOM_VK_XF86XK_MON_BRIGHTNESS_UP",
        "DOM_VK_XF86XK_MUSIC",
        "DOM_VK_XF86XK_MY_COMPUTER",
        "DOM_VK_XF86XK_MY_SITES",
        "DOM_VK_XF86XK_NEW",
        "DOM_VK_XF86XK_NEWS",
        "DOM_VK_XF86XK_OFFICE_HOME",
        "DOM_VK_XF86XK_OPEN",
        "DOM_VK_XF86XK_OPEN_URL",
        "DOM_VK_XF86XK_OPTION",
        "DOM_VK_XF86XK_PASTE",
        "DOM_VK_XF86XK_PHONE",
        "DOM_VK_XF86XK_PICTURES",
        "DOM_VK_XF86XK_POWER_DOWN",
        "DOM_VK_XF86XK_POWER_OFF",
        "DOM_VK_XF86XK_RED",
        "DOM_VK_XF86XK_REFRESH",
        "DOM_VK_XF86XK_RELOAD",
        "DOM_VK_XF86XK_REPLY",
        "DOM_VK_XF86XK_ROCKER_DOWN",
        "DOM_VK_XF86XK_ROCKER_ENTER",
        "DOM_VK_XF86XK_ROCKER_UP",
        "DOM_VK_XF86XK_ROTATE_WINDOWS",
        "DOM_VK_XF86XK_ROTATION_KB",
        "DOM_VK_XF86XK_ROTATION_PB",
        "DOM_VK_XF86XK_SAVE",
        "DOM_VK_XF86XK_SCREEN_SAVER",
        "DOM_VK_XF86XK_SCROLL_CLICK",
        "DOM_VK_XF86XK_SCROLL_DOWN",
        "DOM_VK_XF86XK_SCROLL_UP",
        "DOM_VK_XF86XK_SEARCH",
        "DOM_VK_XF86XK_SEND",
        "DOM_VK_XF86XK_SHOP",
        "DOM_VK_XF86XK_SPELL",
        "DOM_VK_XF86XK_SPLIT_SCREEN",
        "DOM_VK_XF86XK_STANDBY",
        "DOM_VK_XF86XK_START",
        "DOM_VK_XF86XK_STOP",
        "DOM_VK_XF86XK_SUBTITLE",
        "DOM_VK_XF86XK_SUPPORT",
        "DOM_VK_XF86XK_SUSPEND",
        "DOM_VK_XF86XK_TASK_PANE",
        "DOM_VK_XF86XK_TERMINAL",
        "DOM_VK_XF86XK_TIME",
        "DOM_VK_XF86XK_TOOLS",
        "DOM_VK_XF86XK_TOP_MENU",
        "DOM_VK_XF86XK_TO_DO_LIST",
        "DOM_VK_XF86XK_TRAVEL",
        "DOM_VK_XF86XK_USER1KB",
        "DOM_VK_XF86XK_USER2KB",
        "DOM_VK_XF86XK_USER_PB",
        "DOM_VK_XF86XK_UWB",
        "DOM_VK_XF86XK_VENDOR_HOME",
        "DOM_VK_XF86XK_VIDEO",
        "DOM_VK_XF86XK_VIEW",
        "DOM_VK_XF86XK_WAKE_UP",
        "DOM_VK_XF86XK_WEB_CAM",
        "DOM_VK_XF86XK_WHEEL_BUTTON",
        "DOM_VK_XF86XK_WLAN",
        "DOM_VK_XF86XK_WORD",
        "DOM_VK_XF86XK_WWW",
        "DOM_VK_XF86XK_XFER",
        "DOM_VK_XF86XK_YELLOW",
        "DOM_VK_XF86XK_ZOOM_IN",
        "DOM_VK_XF86XK_ZOOM_OUT",
        "DOM_VK_Y",
        "DOM_VK_Z",
        "DOM_VK_ZOOM",
        "DONE",
        "DONT_CARE",
        "DOWNLOADING",
        "DRAGDROP",
        "DRAW_BUFFER0",
        "DRAW_BUFFER1",
        "DRAW_BUFFER10",
        "DRAW_BUFFER11",
        "DRAW_BUFFER12",
        "DRAW_BUFFER13",
        "DRAW_BUFFER14",
        "DRAW_BUFFER15",
        "DRAW_BUFFER2",
        "DRAW_BUFFER3",
        "DRAW_BUFFER4",
        "DRAW_BUFFER5",
        "DRAW_BUFFER6",
        "DRAW_BUFFER7",
        "DRAW_BUFFER8",
        "DRAW_BUFFER9",
        "DRAW_FRAMEBUFFER",
        "DRAW_FRAMEBUFFER_BINDING",
        "DST_ALPHA",
        "DST_COLOR",
        "DYNAMIC_COPY",
        "DYNAMIC_DRAW",
        "DYNAMIC_READ",
        "DataChannel",
        "DataTransfer",
        "DataTransferItem",
        "DataTransferItemList",
        "DataView",
        "Date",
        "DateTimeFormat",
        "DecompressionStream",
        "DelayNode",
        "DeprecationReportBody",
        "DesktopNotification",
        "DesktopNotificationCenter",
        "DeviceLightEvent",
        "DeviceMotionEvent",
        "DeviceMotionEventAcceleration",
        "DeviceMotionEventRotationRate",
        "DeviceOrientationEvent",
        "DeviceProximityEvent",
        "DeviceStorage",
        "DeviceStorageChangeEvent",
        "Directory",
        "DisplayNames",
        "Document",
        "DocumentFragment",
        "DocumentTimeline",
        "DocumentType",
        "DragEvent",
        "DynamicsCompressorNode",
        "E",
        "ELEMENT_ARRAY_BUFFER",
        "ELEMENT_ARRAY_BUFFER_BINDING",
        "ELEMENT_NODE",
        "EMPTY",
        "ENCODING_ERR",
        "ENDED",
        "END_TO_END",
        "END_TO_START",
        "ENTITY_NODE",
        "ENTITY_REFERENCE_NODE",
        "EPSILON",
        "EQUAL",
        "EQUALPOWER",
        "ERROR",
        "EXPONENTIAL_DISTANCE",
        "Element",
        "ElementInternals",
        "ElementQuery",
        "EnterPictureInPictureEvent",
        "Entity",
        "EntityReference",
        "Error",
        "ErrorEvent",
        "EvalError",
        "Event",
        "EventException",
        "EventSource",
        "EventTarget",
        "External",
        "FASTEST",
        "FIDOSDK",
        "FILTER_ACCEPT",
        "FILTER_INTERRUPT",
        "FILTER_REJECT",
        "FILTER_SKIP",
        "FINISHED_STATE",
        "FIRST_ORDERED_NODE_TYPE",
        "FLOAT",
        "FLOAT_32_UNSIGNED_INT_24_8_REV",
        "FLOAT_MAT2",
        "FLOAT_MAT2x3",
        "FLOAT_MAT2x4",
        "FLOAT_MAT3",
        "FLOAT_MAT3x2",
        "FLOAT_MAT3x4",
        "FLOAT_MAT4",
        "FLOAT_MAT4x2",
        "FLOAT_MAT4x3",
        "FLOAT_VEC2",
        "FLOAT_VEC3",
        "FLOAT_VEC4",
        "FOCUS",
        "FONT_FACE_RULE",
        "FONT_FEATURE_VALUES_RULE",
        "FRAGMENT",
        "FRAGMENT_SHADER",
        "FRAGMENT_SHADER_DERIVATIVE_HINT",
        "FRAGMENT_SHADER_DERIVATIVE_HINT_OES",
        "FRAMEBUFFER",
        "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",
        "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",
        "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",
        "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",
        "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",
        "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",
        "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
        "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",
        "FRAMEBUFFER_ATTACHMENT_RED_SIZE",
        "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",
        "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
        "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",
        "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",
        "FRAMEBUFFER_BINDING",
        "FRAMEBUFFER_COMPLETE",
        "FRAMEBUFFER_DEFAULT",
        "FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
        "FRAMEBUFFER_INCOMPLETE_DIMENSIONS",
        "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
        "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
        "FRAMEBUFFER_UNSUPPORTED",
        "FRONT",
        "FRONT_AND_BACK",
        "FRONT_FACE",
        "FUNC_ADD",
        "FUNC_REVERSE_SUBTRACT",
        "FUNC_SUBTRACT",
        "FeaturePolicy",
        "FeaturePolicyViolationReportBody",
        "FederatedCredential",
        "Feed",
        "FeedEntry",
        "File",
        "FileError",
        "FileList",
        "FileReader",
        "FileSystem",
        "FileSystemDirectoryEntry",
        "FileSystemDirectoryReader",
        "FileSystemEntry",
        "FileSystemFileEntry",
        "FinalizationRegistry",
        "FindInPage",
        "Float32Array",
        "Float64Array",
        "FocusEvent",
        "FontFace",
        "FontFaceSet",
        "FontFaceSetLoadEvent",
        "FormData",
        "FormDataEvent",
        "FragmentDirective",
        "Function",
        "GENERATE_MIPMAP_HINT",
        "GEQUAL",
        "GREATER",
        "GREEN",
        "GREEN_BITS",
        "GainNode",
        "Gamepad",
        "GamepadAxisMoveEvent",
        "GamepadButton",
        "GamepadButtonEvent",
        "GamepadEvent",
        "GamepadHapticActuator",
        "GamepadPose",
        "Geolocation",
        "GeolocationCoordinates",
        "GeolocationPosition",
        "GeolocationPositionError",
        "GestureEvent",
        "Global",
        "Gyroscope",
        "HALF_FLOAT",
        "HAVE_CURRENT_DATA",
        "HAVE_ENOUGH_DATA",
        "HAVE_FUTURE_DATA",
        "HAVE_METADATA",
        "HAVE_NOTHING",
        "HEADERS_RECEIVED",
        "HIDDEN",
        "HIERARCHY_REQUEST_ERR",
        "HIGHPASS",
        "HIGHSHELF",
        "HIGH_FLOAT",
        "HIGH_INT",
        "HORIZONTAL",
        "HORIZONTAL_AXIS",
        "HRTF",
        "HTMLAllCollection",
        "HTMLAnchorElement",
        "HTMLAppletElement",
        "HTMLAreaElement",
        "HTMLAudioElement",
        "HTMLBRElement",
        "HTMLBaseElement",
        "HTMLBaseFontElement",
        "HTMLBlockquoteElement",
        "HTMLBodyElement",
        "HTMLButtonElement",
        "HTMLCanvasElement",
        "HTMLCollection",
        "HTMLCommandElement",
        "HTMLContentElement",
        "HTMLDListElement",
        "HTMLDataElement",
        "HTMLDataListElement",
        "HTMLDetailsElement",
        "HTMLDialogElement",
        "HTMLDirectoryElement",
        "HTMLDivElement",
        "HTMLDocument",
        "HTMLElement",
        "HTMLEmbedElement",
        "HTMLFieldSetElement",
        "HTMLFontElement",
        "HTMLFormControlsCollection",
        "HTMLFormElement",
        "HTMLFrameElement",
        "HTMLFrameSetElement",
        "HTMLHRElement",
        "HTMLHeadElement",
        "HTMLHeadingElement",
        "HTMLHtmlElement",
        "HTMLIFrameElement",
        "HTMLImageElement",
        "HTMLInputElement",
        "HTMLIsIndexElement",
        "HTMLKeygenElement",
        "HTMLLIElement",
        "HTMLLabelElement",
        "HTMLLegendElement",
        "HTMLLinkElement",
        "HTMLMapElement",
        "HTMLMarqueeElement",
        "HTMLMediaElement",
        "HTMLMenuElement",
        "HTMLMenuItemElement",
        "HTMLMetaElement",
        "HTMLMeterElement",
        "HTMLModElement",
        "HTMLOListElement",
        "HTMLObjectElement",
        "HTMLOptGroupElement",
        "HTMLOptionElement",
        "HTMLOptionsCollection",
        "HTMLOutputElement",
        "HTMLParagraphElement",
        "HTMLParamElement",
        "HTMLPictureElement",
        "HTMLPreElement",
        "HTMLProgressElement",
        "HTMLPropertiesCollection",
        "HTMLQuoteElement",
        "HTMLScriptElement",
        "HTMLSelectElement",
        "HTMLShadowElement",
        "HTMLSlotElement",
        "HTMLSourceElement",
        "HTMLSpanElement",
        "HTMLStyleElement",
        "HTMLTableCaptionElement",
        "HTMLTableCellElement",
        "HTMLTableColElement",
        "HTMLTableElement",
        "HTMLTableRowElement",
        "HTMLTableSectionElement",
        "HTMLTemplateElement",
        "HTMLTextAreaElement",
        "HTMLTimeElement",
        "HTMLTitleElement",
        "HTMLTrackElement",
        "HTMLUListElement",
        "HTMLUnknownElement",
        "HTMLVideoElement",
        "HashChangeEvent",
        "Headers",
        "History",
        "Hz",
        "ICE_CHECKING",
        "ICE_CLOSED",
        "ICE_COMPLETED",
        "ICE_CONNECTED",
        "ICE_FAILED",
        "ICE_GATHERING",
        "ICE_WAITING",
        "IDBCursor",
        "IDBCursorWithValue",
        "IDBDatabase",
        "IDBDatabaseException",
        "IDBFactory",
        "IDBFileHandle",
        "IDBFileRequest",
        "IDBIndex",
        "IDBKeyRange",
        "IDBMutableFile",
        "IDBObjectStore",
        "IDBOpenDBRequest",
        "IDBRequest",
        "IDBTransaction",
        "IDBVersionChangeEvent",
        "IDLE",
        "IIRFilterNode",
        "IMPLEMENTATION_COLOR_READ_FORMAT",
        "IMPLEMENTATION_COLOR_READ_TYPE",
        "IMPORT_RULE",
        "INCR",
        "INCR_WRAP",
        "INDEX",
        "INDEX_SIZE_ERR",
        "INDIRECT",
        "INT",
        "INTERLEAVED_ATTRIBS",
        "INT_2_10_10_10_REV",
        "INT_SAMPLER_2D",
        "INT_SAMPLER_2D_ARRAY",
        "INT_SAMPLER_3D",
        "INT_SAMPLER_CUBE",
        "INT_VEC2",
        "INT_VEC3",
        "INT_VEC4",
        "INUSE_ATTRIBUTE_ERR",
        "INVALID_ACCESS_ERR",
        "INVALID_CHARACTER_ERR",
        "INVALID_ENUM",
        "INVALID_EXPRESSION_ERR",
        "INVALID_FRAMEBUFFER_OPERATION",
        "INVALID_INDEX",
        "INVALID_MODIFICATION_ERR",
        "INVALID_NODE_TYPE_ERR",
        "INVALID_OPERATION",
        "INVALID_STATE_ERR",
        "INVALID_VALUE",
        "INVERSE_DISTANCE",
        "INVERT",
        "IceCandidate",
        "IdleDeadline",
        "Image",
        "ImageBitmap",
        "ImageBitmapRenderingContext",
        "ImageCapture",
        "ImageData",
        "Infinity",
        "InputDeviceCapabilities",
        "InputDeviceInfo",
        "InputEvent",
        "InputMethodContext",
        "InstallTrigger",
        "InstallTriggerImpl",
        "Instance",
        "Int16Array",
        "Int32Array",
        "Int8Array",
        "Intent",
        "InternalError",
        "IntersectionObserver",
        "IntersectionObserverEntry",
        "Intl",
        "IsSearchProviderInstalled",
        "Iterator",
        "JSON",
        "KEEP",
        "KEYDOWN",
        "KEYFRAMES_RULE",
        "KEYFRAME_RULE",
        "KEYPRESS",
        "KEYUP",
        "KeyEvent",
        "Keyboard",
        "KeyboardEvent",
        "KeyboardLayoutMap",
        "KeyframeEffect",
        "LENGTHADJUST_SPACING",
        "LENGTHADJUST_SPACINGANDGLYPHS",
        "LENGTHADJUST_UNKNOWN",
        "LEQUAL",
        "LESS",
        "LINEAR",
        "LINEAR_DISTANCE",
        "LINEAR_MIPMAP_LINEAR",
        "LINEAR_MIPMAP_NEAREST",
        "LINES",
        "LINE_LOOP",
        "LINE_STRIP",
        "LINE_WIDTH",
        "LINK_STATUS",
        "LIVE",
        "LN10",
        "LN2",
        "LOADED",
        "LOADING",
        "LOG10E",
        "LOG2E",
        "LOWPASS",
        "LOWSHELF",
        "LOW_FLOAT",
        "LOW_INT",
        "LSException",
        "LSParserFilter",
        "LUMINANCE",
        "LUMINANCE_ALPHA",
        "LargestContentfulPaint",
        "LayoutShift",
        "LayoutShiftAttribution",
        "LinearAccelerationSensor",
        "LinkError",
        "ListFormat",
        "LocalMediaStream",
        "Locale",
        "Location",
        "Lock",
        "LockManager",
        "MAP_READ",
        "MAP_WRITE",
        "MAX",
        "MAX_3D_TEXTURE_SIZE",
        "MAX_ARRAY_TEXTURE_LAYERS",
        "MAX_CLIENT_WAIT_TIMEOUT_WEBGL",
        "MAX_COLOR_ATTACHMENTS",
        "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",
        "MAX_COMBINED_TEXTURE_IMAGE_UNITS",
        "MAX_COMBINED_UNIFORM_BLOCKS",
        "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",
        "MAX_CUBE_MAP_TEXTURE_SIZE",
        "MAX_DRAW_BUFFERS",
        "MAX_ELEMENTS_INDICES",
        "MAX_ELEMENTS_VERTICES",
        "MAX_ELEMENT_INDEX",
        "MAX_FRAGMENT_INPUT_COMPONENTS",
        "MAX_FRAGMENT_UNIFORM_BLOCKS",
        "MAX_FRAGMENT_UNIFORM_COMPONENTS",
        "MAX_FRAGMENT_UNIFORM_VECTORS",
        "MAX_PROGRAM_TEXEL_OFFSET",
        "MAX_RENDERBUFFER_SIZE",
        "MAX_SAFE_INTEGER",
        "MAX_SAMPLES",
        "MAX_SERVER_WAIT_TIMEOUT",
        "MAX_TEXTURE_IMAGE_UNITS",
        "MAX_TEXTURE_LOD_BIAS",
        "MAX_TEXTURE_MAX_ANISOTROPY_EXT",
        "MAX_TEXTURE_SIZE",
        "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",
        "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",
        "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",
        "MAX_UNIFORM_BLOCK_SIZE",
        "MAX_UNIFORM_BUFFER_BINDINGS",
        "MAX_VALUE",
        "MAX_VARYING_COMPONENTS",
        "MAX_VARYING_VECTORS",
        "MAX_VERTEX_ATTRIBS",
        "MAX_VERTEX_OUTPUT_COMPONENTS",
        "MAX_VERTEX_TEXTURE_IMAGE_UNITS",
        "MAX_VERTEX_UNIFORM_BLOCKS",
        "MAX_VERTEX_UNIFORM_COMPONENTS",
        "MAX_VERTEX_UNIFORM_VECTORS",
        "MAX_VIEWPORT_DIMS",
        "MEDIA_ERR_ABORTED",
        "MEDIA_ERR_DECODE",
        "MEDIA_ERR_ENCRYPTED",
        "MEDIA_ERR_NETWORK",
        "MEDIA_ERR_SRC_NOT_SUPPORTED",
        "MEDIA_KEYERR_CLIENT",
        "MEDIA_KEYERR_DOMAIN",
        "MEDIA_KEYERR_HARDWARECHANGE",
        "MEDIA_KEYERR_OUTPUT",
        "MEDIA_KEYERR_SERVICE",
        "MEDIA_KEYERR_UNKNOWN",
        "MEDIA_RULE",
        "MEDIUM_FLOAT",
        "MEDIUM_INT",
        "META_MASK",
        "MIDIAccess",
        "MIDIConnectionEvent",
        "MIDIInput",
        "MIDIInputMap",
        "MIDIMessageEvent",
        "MIDIOutput",
        "MIDIOutputMap",
        "MIDIPort",
        "MIN",
        "MIN_PROGRAM_TEXEL_OFFSET",
        "MIN_SAFE_INTEGER",
        "MIN_VALUE",
        "MIRRORED_REPEAT",
        "MODE_ASYNCHRONOUS",
        "MODE_SYNCHRONOUS",
        "MODIFICATION",
        "MOUSEDOWN",
        "MOUSEDRAG",
        "MOUSEMOVE",
        "MOUSEOUT",
        "MOUSEOVER",
        "MOUSEUP",
        "MOZ_KEYFRAMES_RULE",
        "MOZ_KEYFRAME_RULE",
        "MOZ_SOURCE_CURSOR",
        "MOZ_SOURCE_ERASER",
        "MOZ_SOURCE_KEYBOARD",
        "MOZ_SOURCE_MOUSE",
        "MOZ_SOURCE_PEN",
        "MOZ_SOURCE_TOUCH",
        "MOZ_SOURCE_UNKNOWN",
        "MSGESTURE_FLAG_BEGIN",
        "MSGESTURE_FLAG_CANCEL",
        "MSGESTURE_FLAG_END",
        "MSGESTURE_FLAG_INERTIA",
        "MSGESTURE_FLAG_NONE",
        "MSPOINTER_TYPE_MOUSE",
        "MSPOINTER_TYPE_PEN",
        "MSPOINTER_TYPE_TOUCH",
        "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE",
        "MS_ASYNC_CALLBACK_STATUS_CANCEL",
        "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY",
        "MS_ASYNC_CALLBACK_STATUS_ERROR",
        "MS_ASYNC_CALLBACK_STATUS_JOIN",
        "MS_ASYNC_OP_STATUS_CANCELED",
        "MS_ASYNC_OP_STATUS_ERROR",
        "MS_ASYNC_OP_STATUS_SUCCESS",
        "MS_MANIPULATION_STATE_ACTIVE",
        "MS_MANIPULATION_STATE_CANCELLED",
        "MS_MANIPULATION_STATE_COMMITTED",
        "MS_MANIPULATION_STATE_DRAGGING",
        "MS_MANIPULATION_STATE_INERTIA",
        "MS_MANIPULATION_STATE_PRESELECT",
        "MS_MANIPULATION_STATE_SELECTING",
        "MS_MANIPULATION_STATE_STOPPED",
        "MS_MEDIA_ERR_ENCRYPTED",
        "MS_MEDIA_KEYERR_CLIENT",
        "MS_MEDIA_KEYERR_DOMAIN",
        "MS_MEDIA_KEYERR_HARDWARECHANGE",
        "MS_MEDIA_KEYERR_OUTPUT",
        "MS_MEDIA_KEYERR_SERVICE",
        "MS_MEDIA_KEYERR_UNKNOWN",
        "Map",
        "Math",
        "MathMLElement",
        "MediaCapabilities",
        "MediaCapabilitiesInfo",
        "MediaController",
        "MediaDeviceInfo",
        "MediaDevices",
        "MediaElementAudioSourceNode",
        "MediaEncryptedEvent",
        "MediaError",
        "MediaKeyError",
        "MediaKeyEvent",
        "MediaKeyMessageEvent",
        "MediaKeyNeededEvent",
        "MediaKeySession",
        "MediaKeyStatusMap",
        "MediaKeySystemAccess",
        "MediaKeys",
        "MediaList",
        "MediaMetadata",
        "MediaQueryList",
        "MediaQueryListEvent",
        "MediaRecorder",
        "MediaRecorderErrorEvent",
        "MediaSession",
        "MediaSettingsRange",
        "MediaSource",
        "MediaStream",
        "MediaStreamAudioDestinationNode",
        "MediaStreamAudioSourceNode",
        "MediaStreamEvent",
        "MediaStreamTrack",
        "MediaStreamTrackAudioSourceNode",
        "MediaStreamTrackEvent",
        "Memory",
        "MessageChannel",
        "MessageEvent",
        "MessagePort",
        "Methods",
        "MimeType",
        "MimeTypeArray",
        "Module",
        "MouseEvent",
        "MouseScrollEvent",
        "MozAnimation",
        "MozAnimationDelay",
        "MozAnimationDirection",
        "MozAnimationDuration",
        "MozAnimationFillMode",
        "MozAnimationIterationCount",
        "MozAnimationName",
        "MozAnimationPlayState",
        "MozAnimationTimingFunction",
        "MozAppearance",
        "MozBackfaceVisibility",
        "MozBinding",
        "MozBorderBottomColors",
        "MozBorderEnd",
        "MozBorderEndColor",
        "MozBorderEndStyle",
        "MozBorderEndWidth",
        "MozBorderImage",
        "MozBorderLeftColors",
        "MozBorderRightColors",
        "MozBorderStart",
        "MozBorderStartColor",
        "MozBorderStartStyle",
        "MozBorderStartWidth",
        "MozBorderTopColors",
        "MozBoxAlign",
        "MozBoxDirection",
        "MozBoxFlex",
        "MozBoxOrdinalGroup",
        "MozBoxOrient",
        "MozBoxPack",
        "MozBoxSizing",
        "MozCSSKeyframeRule",
        "MozCSSKeyframesRule",
        "MozColumnCount",
        "MozColumnFill",
        "MozColumnGap",
        "MozColumnRule",
        "MozColumnRuleColor",
        "MozColumnRuleStyle",
        "MozColumnRuleWidth",
        "MozColumnWidth",
        "MozColumns",
        "MozContactChangeEvent",
        "MozFloatEdge",
        "MozFontFeatureSettings",
        "MozFontLanguageOverride",
        "MozForceBrokenImageIcon",
        "MozHyphens",
        "MozImageRegion",
        "MozMarginEnd",
        "MozMarginStart",
        "MozMmsEvent",
        "MozMmsMessage",
        "MozMobileMessageThread",
        "MozOSXFontSmoothing",
        "MozOrient",
        "MozOsxFontSmoothing",
        "MozOutlineRadius",
        "MozOutlineRadiusBottomleft",
        "MozOutlineRadiusBottomright",
        "MozOutlineRadiusTopleft",
        "MozOutlineRadiusTopright",
        "MozPaddingEnd",
        "MozPaddingStart",
        "MozPerspective",
        "MozPerspectiveOrigin",
        "MozPowerManager",
        "MozSettingsEvent",
        "MozSmsEvent",
        "MozSmsMessage",
        "MozStackSizing",
        "MozTabSize",
        "MozTextAlignLast",
        "MozTextDecorationColor",
        "MozTextDecorationLine",
        "MozTextDecorationStyle",
        "MozTextSizeAdjust",
        "MozTransform",
        "MozTransformOrigin",
        "MozTransformStyle",
        "MozTransition",
        "MozTransitionDelay",
        "MozTransitionDuration",
        "MozTransitionProperty",
        "MozTransitionTimingFunction",
        "MozUserFocus",
        "MozUserInput",
        "MozUserModify",
        "MozUserSelect",
        "MozWindowDragging",
        "MozWindowShadow",
        "MutationEvent",
        "MutationObserver",
        "MutationRecord",
        "NAMESPACE_ERR",
        "NAMESPACE_RULE",
        "NEAREST",
        "NEAREST_MIPMAP_LINEAR",
        "NEAREST_MIPMAP_NEAREST",
        "NEGATIVE_INFINITY",
        "NETWORK_EMPTY",
        "NETWORK_ERR",
        "NETWORK_IDLE",
        "NETWORK_LOADED",
        "NETWORK_LOADING",
        "NETWORK_NO_SOURCE",
        "NEVER",
        "NEW",
        "NEXT",
        "NEXT_NO_DUPLICATE",
        "NICEST",
        "NODE_AFTER",
        "NODE_BEFORE",
        "NODE_BEFORE_AND_AFTER",
        "NODE_INSIDE",
        "NONE",
        "NON_TRANSIENT_ERR",
        "NOTATION_NODE",
        "NOTCH",
        "NOTEQUAL",
        "NOT_ALLOWED_ERR",
        "NOT_FOUND_ERR",
        "NOT_READABLE_ERR",
        "NOT_SUPPORTED_ERR",
        "NO_DATA_ALLOWED_ERR",
        "NO_ERR",
        "NO_ERROR",
        "NO_MODIFICATION_ALLOWED_ERR",
        "NUMBER_TYPE",
        "NUM_COMPRESSED_TEXTURE_FORMATS",
        "NaN",
        "NamedNodeMap",
        "NavigationPreloadManager",
        "Navigator",
        "NearbyLinks",
        "NetworkInformation",
        "Node",
        "NodeFilter",
        "NodeIterator",
        "NodeList",
        "Notation",
        "Notification",
        "NotifyPaintEvent",
        "Number",
        "NumberFormat",
        "OBJECT_TYPE",
        "OBSOLETE",
        "OK",
        "ONE",
        "ONE_MINUS_CONSTANT_ALPHA",
        "ONE_MINUS_CONSTANT_COLOR",
        "ONE_MINUS_DST_ALPHA",
        "ONE_MINUS_DST_COLOR",
        "ONE_MINUS_SRC_ALPHA",
        "ONE_MINUS_SRC_COLOR",
        "OPEN",
        "OPENED",
        "OPENING",
        "ORDERED_NODE_ITERATOR_TYPE",
        "ORDERED_NODE_SNAPSHOT_TYPE",
        "OTHER_ERROR",
        "OUT_OF_MEMORY",
        "Object",
        "OfflineAudioCompletionEvent",
        "OfflineAudioContext",
        "OfflineResourceList",
        "OffscreenCanvas",
        "OffscreenCanvasRenderingContext2D",
        "Option",
        "OrientationSensor",
        "OscillatorNode",
        "OverconstrainedError",
        "OverflowEvent",
        "PACK_ALIGNMENT",
        "PACK_ROW_LENGTH",
        "PACK_SKIP_PIXELS",
        "PACK_SKIP_ROWS",
        "PAGE_RULE",
        "PARSE_ERR",
        "PATHSEG_ARC_ABS",
        "PATHSEG_ARC_REL",
        "PATHSEG_CLOSEPATH",
        "PATHSEG_CURVETO_CUBIC_ABS",
        "PATHSEG_CURVETO_CUBIC_REL",
        "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS",
        "PATHSEG_CURVETO_CUBIC_SMOOTH_REL",
        "PATHSEG_CURVETO_QUADRATIC_ABS",
        "PATHSEG_CURVETO_QUADRATIC_REL",
        "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS",
        "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL",
        "PATHSEG_LINETO_ABS",
        "PATHSEG_LINETO_HORIZONTAL_ABS",
        "PATHSEG_LINETO_HORIZONTAL_REL",
        "PATHSEG_LINETO_REL",
        "PATHSEG_LINETO_VERTICAL_ABS",
        "PATHSEG_LINETO_VERTICAL_REL",
        "PATHSEG_MOVETO_ABS",
        "PATHSEG_MOVETO_REL",
        "PATHSEG_UNKNOWN",
        "PATH_EXISTS_ERR",
        "PEAKING",
        "PERMISSION_DENIED",
        "PERSISTENT",
        "PI",
        "PIXEL_PACK_BUFFER",
        "PIXEL_PACK_BUFFER_BINDING",
        "PIXEL_UNPACK_BUFFER",
        "PIXEL_UNPACK_BUFFER_BINDING",
        "PLAYING_STATE",
        "POINTS",
        "POLYGON_OFFSET_FACTOR",
        "POLYGON_OFFSET_FILL",
        "POLYGON_OFFSET_UNITS",
        "POSITION_UNAVAILABLE",
        "POSITIVE_INFINITY",
        "PREV",
        "PREV_NO_DUPLICATE",
        "PROCESSING_INSTRUCTION_NODE",
        "PageChangeEvent",
        "PageTransitionEvent",
        "PaintRequest",
        "PaintRequestList",
        "PannerNode",
        "PasswordCredential",
        "Path2D",
        "PaymentAddress",
        "PaymentInstruments",
        "PaymentManager",
        "PaymentMethodChangeEvent",
        "PaymentRequest",
        "PaymentRequestUpdateEvent",
        "PaymentResponse",
        "Performance",
        "PerformanceElementTiming",
        "PerformanceEntry",
        "PerformanceEventTiming",
        "PerformanceLongTaskTiming",
        "PerformanceMark",
        "PerformanceMeasure",
        "PerformanceNavigation",
        "PerformanceNavigationTiming",
        "PerformanceObserver",
        "PerformanceObserverEntryList",
        "PerformancePaintTiming",
        "PerformanceResourceTiming",
        "PerformanceServerTiming",
        "PerformanceTiming",
        "PeriodicSyncManager",
        "PeriodicWave",
        "PermissionStatus",
        "Permissions",
        "PhotoCapabilities",
        "PictureInPictureWindow",
        "Plugin",
        "PluginArray",
        "PluralRules",
        "PointerEvent",
        "PopStateEvent",
        "PopupBlockedEvent",
        "Presentation",
        "PresentationAvailability",
        "PresentationConnection",
        "PresentationConnectionAvailableEvent",
        "PresentationConnectionCloseEvent",
        "PresentationConnectionList",
        "PresentationReceiver",
        "PresentationRequest",
        "ProcessingInstruction",
        "ProgressEvent",
        "Promise",
        "PromiseRejectionEvent",
        "PropertyNodeList",
        "Proxy",
        "PublicKeyCredential",
        "PushManager",
        "PushSubscription",
        "PushSubscriptionOptions",
        "Q",
        "QUERY_RESOLVE",
        "QUERY_RESULT",
        "QUERY_RESULT_AVAILABLE",
        "QUOTA_ERR",
        "QUOTA_EXCEEDED_ERR",
        "QueryInterface",
        "R11F_G11F_B10F",
        "R16F",
        "R16I",
        "R16UI",
        "R32F",
        "R32I",
        "R32UI",
        "R8",
        "R8I",
        "R8UI",
        "R8_SNORM",
        "RASTERIZER_DISCARD",
        "READ",
        "READ_BUFFER",
        "READ_FRAMEBUFFER",
        "READ_FRAMEBUFFER_BINDING",
        "READ_ONLY",
        "READ_ONLY_ERR",
        "READ_WRITE",
        "RED",
        "RED_BITS",
        "RED_INTEGER",
        "REMOVAL",
        "RENDERBUFFER",
        "RENDERBUFFER_ALPHA_SIZE",
        "RENDERBUFFER_BINDING",
        "RENDERBUFFER_BLUE_SIZE",
        "RENDERBUFFER_DEPTH_SIZE",
        "RENDERBUFFER_GREEN_SIZE",
        "RENDERBUFFER_HEIGHT",
        "RENDERBUFFER_INTERNAL_FORMAT",
        "RENDERBUFFER_RED_SIZE",
        "RENDERBUFFER_SAMPLES",
        "RENDERBUFFER_STENCIL_SIZE",
        "RENDERBUFFER_WIDTH",
        "RENDERER",
        "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC",
        "RENDERING_INTENT_AUTO",
        "RENDERING_INTENT_PERCEPTUAL",
        "RENDERING_INTENT_RELATIVE_COLORIMETRIC",
        "RENDERING_INTENT_SATURATION",
        "RENDERING_INTENT_UNKNOWN",
        "RENDER_ATTACHMENT",
        "REPEAT",
        "REPLACE",
        "RG",
        "RG16F",
        "RG16I",
        "RG16UI",
        "RG32F",
        "RG32I",
        "RG32UI",
        "RG8",
        "RG8I",
        "RG8UI",
        "RG8_SNORM",
        "RGB",
        "RGB10_A2",
        "RGB10_A2UI",
        "RGB16F",
        "RGB16I",
        "RGB16UI",
        "RGB32F",
        "RGB32I",
        "RGB32UI",
        "RGB565",
        "RGB5_A1",
        "RGB8",
        "RGB8I",
        "RGB8UI",
        "RGB8_SNORM",
        "RGB9_E5",
        "RGBA",
        "RGBA16F",
        "RGBA16I",
        "RGBA16UI",
        "RGBA32F",
        "RGBA32I",
        "RGBA32UI",
        "RGBA4",
        "RGBA8",
        "RGBA8I",
        "RGBA8UI",
        "RGBA8_SNORM",
        "RGBA_INTEGER",
        "RGBColor",
        "RGB_INTEGER",
        "RG_INTEGER",
        "ROTATION_CLOCKWISE",
        "ROTATION_COUNTERCLOCKWISE",
        "RTCCertificate",
        "RTCDTMFSender",
        "RTCDTMFToneChangeEvent",
        "RTCDataChannel",
        "RTCDataChannelEvent",
        "RTCDtlsTransport",
        "RTCError",
        "RTCErrorEvent",
        "RTCIceCandidate",
        "RTCIceTransport",
        "RTCPeerConnection",
        "RTCPeerConnectionIceErrorEvent",
        "RTCPeerConnectionIceEvent",
        "RTCRtpReceiver",
        "RTCRtpSender",
        "RTCRtpTransceiver",
        "RTCSctpTransport",
        "RTCSessionDescription",
        "RTCStatsReport",
        "RTCTrackEvent",
        "RadioNodeList",
        "Range",
        "RangeError",
        "RangeException",
        "ReadableStream",
        "ReadableStreamDefaultReader",
        "RecordErrorEvent",
        "Rect",
        "ReferenceError",
        "Reflect",
        "RegExp",
        "RelativeOrientationSensor",
        "RelativeTimeFormat",
        "RemotePlayback",
        "Report",
        "ReportBody",
        "ReportingObserver",
        "Request",
        "ResizeObserver",
        "ResizeObserverEntry",
        "ResizeObserverSize",
        "Response",
        "RuntimeError",
        "SAMPLER_2D",
        "SAMPLER_2D_ARRAY",
        "SAMPLER_2D_ARRAY_SHADOW",
        "SAMPLER_2D_SHADOW",
        "SAMPLER_3D",
        "SAMPLER_BINDING",
        "SAMPLER_CUBE",
        "SAMPLER_CUBE_SHADOW",
        "SAMPLES",
        "SAMPLE_ALPHA_TO_COVERAGE",
        "SAMPLE_BUFFERS",
        "SAMPLE_COVERAGE",
        "SAMPLE_COVERAGE_INVERT",
        "SAMPLE_COVERAGE_VALUE",
        "SAWTOOTH",
        "SCHEDULED_STATE",
        "SCISSOR_BOX",
        "SCISSOR_TEST",
        "SCROLL_PAGE_DOWN",
        "SCROLL_PAGE_UP",
        "SDP_ANSWER",
        "SDP_OFFER",
        "SDP_PRANSWER",
        "SECURITY_ERR",
        "SELECT",
        "SEPARATE_ATTRIBS",
        "SERIALIZE_ERR",
        "SEVERITY_ERROR",
        "SEVERITY_FATAL_ERROR",
        "SEVERITY_WARNING",
        "SHADER_COMPILER",
        "SHADER_TYPE",
        "SHADING_LANGUAGE_VERSION",
        "SHIFT_MASK",
        "SHORT",
        "SHOWING",
        "SHOW_ALL",
        "SHOW_ATTRIBUTE",
        "SHOW_CDATA_SECTION",
        "SHOW_COMMENT",
        "SHOW_DOCUMENT",
        "SHOW_DOCUMENT_FRAGMENT",
        "SHOW_DOCUMENT_TYPE",
        "SHOW_ELEMENT",
        "SHOW_ENTITY",
        "SHOW_ENTITY_REFERENCE",
        "SHOW_NOTATION",
        "SHOW_PROCESSING_INSTRUCTION",
        "SHOW_TEXT",
        "SIGNALED",
        "SIGNED_NORMALIZED",
        "SINE",
        "SOUNDFIELD",
        "SQLException",
        "SQRT1_2",
        "SQRT2",
        "SQUARE",
        "SRC_ALPHA",
        "SRC_ALPHA_SATURATE",
        "SRC_COLOR",
        "SRGB",
        "SRGB8",
        "SRGB8_ALPHA8",
        "START_TO_END",
        "START_TO_START",
        "STATIC_COPY",
        "STATIC_DRAW",
        "STATIC_READ",
        "STENCIL",
        "STENCIL_ATTACHMENT",
        "STENCIL_BACK_FAIL",
        "STENCIL_BACK_FUNC",
        "STENCIL_BACK_PASS_DEPTH_FAIL",
        "STENCIL_BACK_PASS_DEPTH_PASS",
        "STENCIL_BACK_REF",
        "STENCIL_BACK_VALUE_MASK",
        "STENCIL_BACK_WRITEMASK",
        "STENCIL_BITS",
        "STENCIL_BUFFER_BIT",
        "STENCIL_CLEAR_VALUE",
        "STENCIL_FAIL",
        "STENCIL_FUNC",
        "STENCIL_INDEX",
        "STENCIL_INDEX8",
        "STENCIL_PASS_DEPTH_FAIL",
        "STENCIL_PASS_DEPTH_PASS",
        "STENCIL_REF",
        "STENCIL_TEST",
        "STENCIL_VALUE_MASK",
        "STENCIL_WRITEMASK",
        "STORAGE",
        "STORAGE_BINDING",
        "STREAM_COPY",
        "STREAM_DRAW",
        "STREAM_READ",
        "STRING_TYPE",
        "STYLE_RULE",
        "SUBPIXEL_BITS",
        "SUPPORTS_RULE",
        "SVGAElement",
        "SVGAltGlyphDefElement",
        "SVGAltGlyphElement",
        "SVGAltGlyphItemElement",
        "SVGAngle",
        "SVGAnimateColorElement",
        "SVGAnimateElement",
        "SVGAnimateMotionElement",
        "SVGAnimateTransformElement",
        "SVGAnimatedAngle",
        "SVGAnimatedBoolean",
        "SVGAnimatedEnumeration",
        "SVGAnimatedInteger",
        "SVGAnimatedLength",
        "SVGAnimatedLengthList",
        "SVGAnimatedNumber",
        "SVGAnimatedNumberList",
        "SVGAnimatedPreserveAspectRatio",
        "SVGAnimatedRect",
        "SVGAnimatedString",
        "SVGAnimatedTransformList",
        "SVGAnimationElement",
        "SVGCircleElement",
        "SVGClipPathElement",
        "SVGColor",
        "SVGComponentTransferFunctionElement",
        "SVGCursorElement",
        "SVGDefsElement",
        "SVGDescElement",
        "SVGDiscardElement",
        "SVGDocument",
        "SVGElement",
        "SVGElementInstance",
        "SVGElementInstanceList",
        "SVGEllipseElement",
        "SVGException",
        "SVGFEBlendElement",
        "SVGFEColorMatrixElement",
        "SVGFEComponentTransferElement",
        "SVGFECompositeElement",
        "SVGFEConvolveMatrixElement",
        "SVGFEDiffuseLightingElement",
        "SVGFEDisplacementMapElement",
        "SVGFEDistantLightElement",
        "SVGFEDropShadowElement",
        "SVGFEFloodElement",
        "SVGFEFuncAElement",
        "SVGFEFuncBElement",
        "SVGFEFuncGElement",
        "SVGFEFuncRElement",
        "SVGFEGaussianBlurElement",
        "SVGFEImageElement",
        "SVGFEMergeElement",
        "SVGFEMergeNodeElement",
        "SVGFEMorphologyElement",
        "SVGFEOffsetElement",
        "SVGFEPointLightElement",
        "SVGFESpecularLightingElement",
        "SVGFESpotLightElement",
        "SVGFETileElement",
        "SVGFETurbulenceElement",
        "SVGFilterElement",
        "SVGFontElement",
        "SVGFontFaceElement",
        "SVGFontFaceFormatElement",
        "SVGFontFaceNameElement",
        "SVGFontFaceSrcElement",
        "SVGFontFaceUriElement",
        "SVGForeignObjectElement",
        "SVGGElement",
        "SVGGeometryElement",
        "SVGGlyphElement",
        "SVGGlyphRefElement",
        "SVGGradientElement",
        "SVGGraphicsElement",
        "SVGHKernElement",
        "SVGImageElement",
        "SVGLength",
        "SVGLengthList",
        "SVGLineElement",
        "SVGLinearGradientElement",
        "SVGMPathElement",
        "SVGMarkerElement",
        "SVGMaskElement",
        "SVGMatrix",
        "SVGMetadataElement",
        "SVGMissingGlyphElement",
        "SVGNumber",
        "SVGNumberList",
        "SVGPaint",
        "SVGPathElement",
        "SVGPathSeg",
        "SVGPathSegArcAbs",
        "SVGPathSegArcRel",
        "SVGPathSegClosePath",
        "SVGPathSegCurvetoCubicAbs",
        "SVGPathSegCurvetoCubicRel",
        "SVGPathSegCurvetoCubicSmoothAbs",
        "SVGPathSegCurvetoCubicSmoothRel",
        "SVGPathSegCurvetoQuadraticAbs",
        "SVGPathSegCurvetoQuadraticRel",
        "SVGPathSegCurvetoQuadraticSmoothAbs",
        "SVGPathSegCurvetoQuadraticSmoothRel",
        "SVGPathSegLinetoAbs",
        "SVGPathSegLinetoHorizontalAbs",
        "SVGPathSegLinetoHorizontalRel",
        "SVGPathSegLinetoRel",
        "SVGPathSegLinetoVerticalAbs",
        "SVGPathSegLinetoVerticalRel",
        "SVGPathSegList",
        "SVGPathSegMovetoAbs",
        "SVGPathSegMovetoRel",
        "SVGPatternElement",
        "SVGPoint",
        "SVGPointList",
        "SVGPolygonElement",
        "SVGPolylineElement",
        "SVGPreserveAspectRatio",
        "SVGRadialGradientElement",
        "SVGRect",
        "SVGRectElement",
        "SVGRenderingIntent",
        "SVGSVGElement",
        "SVGScriptElement",
        "SVGSetElement",
        "SVGStopElement",
        "SVGStringList",
        "SVGStyleElement",
        "SVGSwitchElement",
        "SVGSymbolElement",
        "SVGTRefElement",
        "SVGTSpanElement",
        "SVGTextContentElement",
        "SVGTextElement",
        "SVGTextPathElement",
        "SVGTextPositioningElement",
        "SVGTitleElement",
        "SVGTransform",
        "SVGTransformList",
        "SVGUnitTypes",
        "SVGUseElement",
        "SVGVKernElement",
        "SVGViewElement",
        "SVGViewSpec",
        "SVGZoomAndPan",
        "SVGZoomEvent",
        "SVG_ANGLETYPE_DEG",
        "SVG_ANGLETYPE_GRAD",
        "SVG_ANGLETYPE_RAD",
        "SVG_ANGLETYPE_UNKNOWN",
        "SVG_ANGLETYPE_UNSPECIFIED",
        "SVG_CHANNEL_A",
        "SVG_CHANNEL_B",
        "SVG_CHANNEL_G",
        "SVG_CHANNEL_R",
        "SVG_CHANNEL_UNKNOWN",
        "SVG_COLORTYPE_CURRENTCOLOR",
        "SVG_COLORTYPE_RGBCOLOR",
        "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR",
        "SVG_COLORTYPE_UNKNOWN",
        "SVG_EDGEMODE_DUPLICATE",
        "SVG_EDGEMODE_NONE",
        "SVG_EDGEMODE_UNKNOWN",
        "SVG_EDGEMODE_WRAP",
        "SVG_FEBLEND_MODE_COLOR",
        "SVG_FEBLEND_MODE_COLOR_BURN",
        "SVG_FEBLEND_MODE_COLOR_DODGE",
        "SVG_FEBLEND_MODE_DARKEN",
        "SVG_FEBLEND_MODE_DIFFERENCE",
        "SVG_FEBLEND_MODE_EXCLUSION",
        "SVG_FEBLEND_MODE_HARD_LIGHT",
        "SVG_FEBLEND_MODE_HUE",
        "SVG_FEBLEND_MODE_LIGHTEN",
        "SVG_FEBLEND_MODE_LUMINOSITY",
        "SVG_FEBLEND_MODE_MULTIPLY",
        "SVG_FEBLEND_MODE_NORMAL",
        "SVG_FEBLEND_MODE_OVERLAY",
        "SVG_FEBLEND_MODE_SATURATION",
        "SVG_FEBLEND_MODE_SCREEN",
        "SVG_FEBLEND_MODE_SOFT_LIGHT",
        "SVG_FEBLEND_MODE_UNKNOWN",
        "SVG_FECOLORMATRIX_TYPE_HUEROTATE",
        "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA",
        "SVG_FECOLORMATRIX_TYPE_MATRIX",
        "SVG_FECOLORMATRIX_TYPE_SATURATE",
        "SVG_FECOLORMATRIX_TYPE_UNKNOWN",
        "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE",
        "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA",
        "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY",
        "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR",
        "SVG_FECOMPONENTTRANSFER_TYPE_TABLE",
        "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN",
        "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC",
        "SVG_FECOMPOSITE_OPERATOR_ATOP",
        "SVG_FECOMPOSITE_OPERATOR_IN",
        "SVG_FECOMPOSITE_OPERATOR_OUT",
        "SVG_FECOMPOSITE_OPERATOR_OVER",
        "SVG_FECOMPOSITE_OPERATOR_UNKNOWN",
        "SVG_FECOMPOSITE_OPERATOR_XOR",
        "SVG_INVALID_VALUE_ERR",
        "SVG_LENGTHTYPE_CM",
        "SVG_LENGTHTYPE_EMS",
        "SVG_LENGTHTYPE_EXS",
        "SVG_LENGTHTYPE_IN",
        "SVG_LENGTHTYPE_MM",
        "SVG_LENGTHTYPE_NUMBER",
        "SVG_LENGTHTYPE_PC",
        "SVG_LENGTHTYPE_PERCENTAGE",
        "SVG_LENGTHTYPE_PT",
        "SVG_LENGTHTYPE_PX",
        "SVG_LENGTHTYPE_UNKNOWN",
        "SVG_MARKERUNITS_STROKEWIDTH",
        "SVG_MARKERUNITS_UNKNOWN",
        "SVG_MARKERUNITS_USERSPACEONUSE",
        "SVG_MARKER_ORIENT_ANGLE",
        "SVG_MARKER_ORIENT_AUTO",
        "SVG_MARKER_ORIENT_UNKNOWN",
        "SVG_MASKTYPE_ALPHA",
        "SVG_MASKTYPE_LUMINANCE",
        "SVG_MATRIX_NOT_INVERTABLE",
        "SVG_MEETORSLICE_MEET",
        "SVG_MEETORSLICE_SLICE",
        "SVG_MEETORSLICE_UNKNOWN",
        "SVG_MORPHOLOGY_OPERATOR_DILATE",
        "SVG_MORPHOLOGY_OPERATOR_ERODE",
        "SVG_MORPHOLOGY_OPERATOR_UNKNOWN",
        "SVG_PAINTTYPE_CURRENTCOLOR",
        "SVG_PAINTTYPE_NONE",
        "SVG_PAINTTYPE_RGBCOLOR",
        "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR",
        "SVG_PAINTTYPE_UNKNOWN",
        "SVG_PAINTTYPE_URI",
        "SVG_PAINTTYPE_URI_CURRENTCOLOR",
        "SVG_PAINTTYPE_URI_NONE",
        "SVG_PAINTTYPE_URI_RGBCOLOR",
        "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR",
        "SVG_PRESERVEASPECTRATIO_NONE",
        "SVG_PRESERVEASPECTRATIO_UNKNOWN",
        "SVG_PRESERVEASPECTRATIO_XMAXYMAX",
        "SVG_PRESERVEASPECTRATIO_XMAXYMID",
        "SVG_PRESERVEASPECTRATIO_XMAXYMIN",
        "SVG_PRESERVEASPECTRATIO_XMIDYMAX",
        "SVG_PRESERVEASPECTRATIO_XMIDYMID",
        "SVG_PRESERVEASPECTRATIO_XMIDYMIN",
        "SVG_PRESERVEASPECTRATIO_XMINYMAX",
        "SVG_PRESERVEASPECTRATIO_XMINYMID",
        "SVG_PRESERVEASPECTRATIO_XMINYMIN",
        "SVG_SPREADMETHOD_PAD",
        "SVG_SPREADMETHOD_REFLECT",
        "SVG_SPREADMETHOD_REPEAT",
        "SVG_SPREADMETHOD_UNKNOWN",
        "SVG_STITCHTYPE_NOSTITCH",
        "SVG_STITCHTYPE_STITCH",
        "SVG_STITCHTYPE_UNKNOWN",
        "SVG_TRANSFORM_MATRIX",
        "SVG_TRANSFORM_ROTATE",
        "SVG_TRANSFORM_SCALE",
        "SVG_TRANSFORM_SKEWX",
        "SVG_TRANSFORM_SKEWY",
        "SVG_TRANSFORM_TRANSLATE",
        "SVG_TRANSFORM_UNKNOWN",
        "SVG_TURBULENCE_TYPE_FRACTALNOISE",
        "SVG_TURBULENCE_TYPE_TURBULENCE",
        "SVG_TURBULENCE_TYPE_UNKNOWN",
        "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX",
        "SVG_UNIT_TYPE_UNKNOWN",
        "SVG_UNIT_TYPE_USERSPACEONUSE",
        "SVG_WRONG_TYPE_ERR",
        "SVG_ZOOMANDPAN_DISABLE",
        "SVG_ZOOMANDPAN_MAGNIFY",
        "SVG_ZOOMANDPAN_UNKNOWN",
        "SYNC_CONDITION",
        "SYNC_FENCE",
        "SYNC_FLAGS",
        "SYNC_FLUSH_COMMANDS_BIT",
        "SYNC_GPU_COMMANDS_COMPLETE",
        "SYNC_STATUS",
        "SYNTAX_ERR",
        "SavedPages",
        "Screen",
        "ScreenOrientation",
        "Script",
        "ScriptProcessorNode",
        "ScrollAreaEvent",
        "SecurityPolicyViolationEvent",
        "Selection",
        "Sensor",
        "SensorErrorEvent",
        "ServiceWorker",
        "ServiceWorkerContainer",
        "ServiceWorkerRegistration",
        "SessionDescription",
        "Set",
        "ShadowRoot",
        "SharedArrayBuffer",
        "SharedWorker",
        "SimpleGestureEvent",
        "SourceBuffer",
        "SourceBufferList",
        "SpeechSynthesis",
        "SpeechSynthesisErrorEvent",
        "SpeechSynthesisEvent",
        "SpeechSynthesisUtterance",
        "SpeechSynthesisVoice",
        "StaticRange",
        "StereoPannerNode",
        "StopIteration",
        "Storage",
        "StorageEvent",
        "StorageManager",
        "String",
        "StructType",
        "StylePropertyMap",
        "StylePropertyMapReadOnly",
        "StyleSheet",
        "StyleSheetList",
        "SubmitEvent",
        "SubtleCrypto",
        "Symbol",
        "SyncManager",
        "SyntaxError",
        "TEMPORARY",
        "TEXTPATH_METHODTYPE_ALIGN",
        "TEXTPATH_METHODTYPE_STRETCH",
        "TEXTPATH_METHODTYPE_UNKNOWN",
        "TEXTPATH_SPACINGTYPE_AUTO",
        "TEXTPATH_SPACINGTYPE_EXACT",
        "TEXTPATH_SPACINGTYPE_UNKNOWN",
        "TEXTURE",
        "TEXTURE0",
        "TEXTURE1",
        "TEXTURE10",
        "TEXTURE11",
        "TEXTURE12",
        "TEXTURE13",
        "TEXTURE14",
        "TEXTURE15",
        "TEXTURE16",
        "TEXTURE17",
        "TEXTURE18",
        "TEXTURE19",
        "TEXTURE2",
        "TEXTURE20",
        "TEXTURE21",
        "TEXTURE22",
        "TEXTURE23",
        "TEXTURE24",
        "TEXTURE25",
        "TEXTURE26",
        "TEXTURE27",
        "TEXTURE28",
        "TEXTURE29",
        "TEXTURE3",
        "TEXTURE30",
        "TEXTURE31",
        "TEXTURE4",
        "TEXTURE5",
        "TEXTURE6",
        "TEXTURE7",
        "TEXTURE8",
        "TEXTURE9",
        "TEXTURE_2D",
        "TEXTURE_2D_ARRAY",
        "TEXTURE_3D",
        "TEXTURE_BASE_LEVEL",
        "TEXTURE_BINDING",
        "TEXTURE_BINDING_2D",
        "TEXTURE_BINDING_2D_ARRAY",
        "TEXTURE_BINDING_3D",
        "TEXTURE_BINDING_CUBE_MAP",
        "TEXTURE_COMPARE_FUNC",
        "TEXTURE_COMPARE_MODE",
        "TEXTURE_CUBE_MAP",
        "TEXTURE_CUBE_MAP_NEGATIVE_X",
        "TEXTURE_CUBE_MAP_NEGATIVE_Y",
        "TEXTURE_CUBE_MAP_NEGATIVE_Z",
        "TEXTURE_CUBE_MAP_POSITIVE_X",
        "TEXTURE_CUBE_MAP_POSITIVE_Y",
        "TEXTURE_CUBE_MAP_POSITIVE_Z",
        "TEXTURE_IMMUTABLE_FORMAT",
        "TEXTURE_IMMUTABLE_LEVELS",
        "TEXTURE_MAG_FILTER",
        "TEXTURE_MAX_ANISOTROPY_EXT",
        "TEXTURE_MAX_LEVEL",
        "TEXTURE_MAX_LOD",
        "TEXTURE_MIN_FILTER",
        "TEXTURE_MIN_LOD",
        "TEXTURE_WRAP_R",
        "TEXTURE_WRAP_S",
        "TEXTURE_WRAP_T",
        "TEXT_NODE",
        "TIMEOUT",
        "TIMEOUT_ERR",
        "TIMEOUT_EXPIRED",
        "TIMEOUT_IGNORED",
        "TOO_LARGE_ERR",
        "TRANSACTION_INACTIVE_ERR",
        "TRANSFORM_FEEDBACK",
        "TRANSFORM_FEEDBACK_ACTIVE",
        "TRANSFORM_FEEDBACK_BINDING",
        "TRANSFORM_FEEDBACK_BUFFER",
        "TRANSFORM_FEEDBACK_BUFFER_BINDING",
        "TRANSFORM_FEEDBACK_BUFFER_MODE",
        "TRANSFORM_FEEDBACK_BUFFER_SIZE",
        "TRANSFORM_FEEDBACK_BUFFER_START",
        "TRANSFORM_FEEDBACK_PAUSED",
        "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",
        "TRANSFORM_FEEDBACK_VARYINGS",
        "TRIANGLE",
        "TRIANGLES",
        "TRIANGLE_FAN",
        "TRIANGLE_STRIP",
        "TYPE_BACK_FORWARD",
        "TYPE_ERR",
        "TYPE_MISMATCH_ERR",
        "TYPE_NAVIGATE",
        "TYPE_RELOAD",
        "TYPE_RESERVED",
        "Table",
        "TaskAttributionTiming",
        "Text",
        "TextDecoder",
        "TextDecoderStream",
        "TextEncoder",
        "TextEncoderStream",
        "TextEvent",
        "TextMetrics",
        "TextTrack",
        "TextTrackCue",
        "TextTrackCueList",
        "TextTrackList",
        "TimeEvent",
        "TimeRanges",
        "Touch",
        "TouchEvent",
        "TouchList",
        "TrackEvent",
        "TransformStream",
        "TransitionEvent",
        "TreeWalker",
        "TrustedHTML",
        "TrustedScript",
        "TrustedScriptURL",
        "TrustedTypePolicy",
        "TrustedTypePolicyFactory",
        "TypeError",
        "TypedObject",
        "U2F",
        "UIEvent",
        "UNCACHED",
        "UNIFORM",
        "UNIFORM_ARRAY_STRIDE",
        "UNIFORM_BLOCK_ACTIVE_UNIFORMS",
        "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",
        "UNIFORM_BLOCK_BINDING",
        "UNIFORM_BLOCK_DATA_SIZE",
        "UNIFORM_BLOCK_INDEX",
        "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",
        "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",
        "UNIFORM_BUFFER",
        "UNIFORM_BUFFER_BINDING",
        "UNIFORM_BUFFER_OFFSET_ALIGNMENT",
        "UNIFORM_BUFFER_SIZE",
        "UNIFORM_BUFFER_START",
        "UNIFORM_IS_ROW_MAJOR",
        "UNIFORM_MATRIX_STRIDE",
        "UNIFORM_OFFSET",
        "UNIFORM_SIZE",
        "UNIFORM_TYPE",
        "UNKNOWN_ERR",
        "UNKNOWN_RULE",
        "UNMASKED_RENDERER_WEBGL",
        "UNMASKED_VENDOR_WEBGL",
        "UNORDERED_NODE_ITERATOR_TYPE",
        "UNORDERED_NODE_SNAPSHOT_TYPE",
        "UNPACK_ALIGNMENT",
        "UNPACK_COLORSPACE_CONVERSION_WEBGL",
        "UNPACK_FLIP_Y_WEBGL",
        "UNPACK_IMAGE_HEIGHT",
        "UNPACK_PREMULTIPLY_ALPHA_WEBGL",
        "UNPACK_ROW_LENGTH",
        "UNPACK_SKIP_IMAGES",
        "UNPACK_SKIP_PIXELS",
        "UNPACK_SKIP_ROWS",
        "UNSCHEDULED_STATE",
        "UNSENT",
        "UNSIGNALED",
        "UNSIGNED_BYTE",
        "UNSIGNED_INT",
        "UNSIGNED_INT_10F_11F_11F_REV",
        "UNSIGNED_INT_24_8",
        "UNSIGNED_INT_2_10_10_10_REV",
        "UNSIGNED_INT_5_9_9_9_REV",
        "UNSIGNED_INT_SAMPLER_2D",
        "UNSIGNED_INT_SAMPLER_2D_ARRAY",
        "UNSIGNED_INT_SAMPLER_3D",
        "UNSIGNED_INT_SAMPLER_CUBE",
        "UNSIGNED_INT_VEC2",
        "UNSIGNED_INT_VEC3",
        "UNSIGNED_INT_VEC4",
        "UNSIGNED_NORMALIZED",
        "UNSIGNED_SHORT",
        "UNSIGNED_SHORT_4_4_4_4",
        "UNSIGNED_SHORT_5_5_5_1",
        "UNSIGNED_SHORT_5_6_5",
        "UNSPECIFIED_EVENT_TYPE_ERR",
        "UPDATEREADY",
        "URIError",
        "URL",
        "URLSearchParams",
        "URLUnencoded",
        "URL_MISMATCH_ERR",
        "USB",
        "USBAlternateInterface",
        "USBConfiguration",
        "USBConnectionEvent",
        "USBDevice",
        "USBEndpoint",
        "USBInTransferResult",
        "USBInterface",
        "USBIsochronousInTransferPacket",
        "USBIsochronousInTransferResult",
        "USBIsochronousOutTransferPacket",
        "USBIsochronousOutTransferResult",
        "USBOutTransferResult",
        "UTC",
        "Uint16Array",
        "Uint32Array",
        "Uint8Array",
        "Uint8ClampedArray",
        "UserActivation",
        "UserMessageHandler",
        "UserMessageHandlersNamespace",
        "UserProximityEvent",
        "VALIDATE_STATUS",
        "VALIDATION_ERR",
        "VARIABLES_RULE",
        "VENDOR",
        "VERSION",
        "VERSION_CHANGE",
        "VERSION_ERR",
        "VERTEX",
        "VERTEX_ARRAY_BINDING",
        "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
        "VERTEX_ATTRIB_ARRAY_DIVISOR",
        "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",
        "VERTEX_ATTRIB_ARRAY_ENABLED",
        "VERTEX_ATTRIB_ARRAY_INTEGER",
        "VERTEX_ATTRIB_ARRAY_NORMALIZED",
        "VERTEX_ATTRIB_ARRAY_POINTER",
        "VERTEX_ATTRIB_ARRAY_SIZE",
        "VERTEX_ATTRIB_ARRAY_STRIDE",
        "VERTEX_ATTRIB_ARRAY_TYPE",
        "VERTEX_SHADER",
        "VERTICAL",
        "VERTICAL_AXIS",
        "VER_ERR",
        "VIEWPORT",
        "VIEWPORT_RULE",
        "VRDisplay",
        "VRDisplayCapabilities",
        "VRDisplayEvent",
        "VREyeParameters",
        "VRFieldOfView",
        "VRFrameData",
        "VRPose",
        "VRStageParameters",
        "VTTCue",
        "VTTRegion",
        "ValidityState",
        "VideoPlaybackQuality",
        "VideoStreamTrack",
        "VisualViewport",
        "WAIT_FAILED",
        "WEBKIT_FILTER_RULE",
        "WEBKIT_KEYFRAMES_RULE",
        "WEBKIT_KEYFRAME_RULE",
        "WEBKIT_REGION_RULE",
        "WRITE",
        "WRONG_DOCUMENT_ERR",
        "WakeLock",
        "WakeLockSentinel",
        "WasmAnyRef",
        "WaveShaperNode",
        "WeakMap",
        "WeakRef",
        "WeakSet",
        "WebAssembly",
        "WebGL2RenderingContext",
        "WebGLActiveInfo",
        "WebGLBuffer",
        "WebGLContextEvent",
        "WebGLFramebuffer",
        "WebGLProgram",
        "WebGLQuery",
        "WebGLRenderbuffer",
        "WebGLRenderingContext",
        "WebGLSampler",
        "WebGLShader",
        "WebGLShaderPrecisionFormat",
        "WebGLSync",
        "WebGLTexture",
        "WebGLTransformFeedback",
        "WebGLUniformLocation",
        "WebGLVertexArray",
        "WebGLVertexArrayObject",
        "WebKitAnimationEvent",
        "WebKitBlobBuilder",
        "WebKitCSSFilterRule",
        "WebKitCSSFilterValue",
        "WebKitCSSKeyframeRule",
        "WebKitCSSKeyframesRule",
        "WebKitCSSMatrix",
        "WebKitCSSRegionRule",
        "WebKitCSSTransformValue",
        "WebKitDataCue",
        "WebKitGamepad",
        "WebKitMediaKeyError",
        "WebKitMediaKeyMessageEvent",
        "WebKitMediaKeySession",
        "WebKitMediaKeys",
        "WebKitMediaSource",
        "WebKitMutationObserver",
        "WebKitNamespace",
        "WebKitPlaybackTargetAvailabilityEvent",
        "WebKitPoint",
        "WebKitShadowRoot",
        "WebKitSourceBuffer",
        "WebKitSourceBufferList",
        "WebKitTransitionEvent",
        "WebSocket",
        "WebkitAlignContent",
        "WebkitAlignItems",
        "WebkitAlignSelf",
        "WebkitAnimation",
        "WebkitAnimationDelay",
        "WebkitAnimationDirection",
        "WebkitAnimationDuration",
        "WebkitAnimationFillMode",
        "WebkitAnimationIterationCount",
        "WebkitAnimationName",
        "WebkitAnimationPlayState",
        "WebkitAnimationTimingFunction",
        "WebkitAppearance",
        "WebkitBackfaceVisibility",
        "WebkitBackgroundClip",
        "WebkitBackgroundOrigin",
        "WebkitBackgroundSize",
        "WebkitBorderBottomLeftRadius",
        "WebkitBorderBottomRightRadius",
        "WebkitBorderImage",
        "WebkitBorderRadius",
        "WebkitBorderTopLeftRadius",
        "WebkitBorderTopRightRadius",
        "WebkitBoxAlign",
        "WebkitBoxDirection",
        "WebkitBoxFlex",
        "WebkitBoxOrdinalGroup",
        "WebkitBoxOrient",
        "WebkitBoxPack",
        "WebkitBoxShadow",
        "WebkitBoxSizing",
        "WebkitFilter",
        "WebkitFlex",
        "WebkitFlexBasis",
        "WebkitFlexDirection",
        "WebkitFlexFlow",
        "WebkitFlexGrow",
        "WebkitFlexShrink",
        "WebkitFlexWrap",
        "WebkitJustifyContent",
        "WebkitLineClamp",
        "WebkitMask",
        "WebkitMaskClip",
        "WebkitMaskComposite",
        "WebkitMaskImage",
        "WebkitMaskOrigin",
        "WebkitMaskPosition",
        "WebkitMaskPositionX",
        "WebkitMaskPositionY",
        "WebkitMaskRepeat",
        "WebkitMaskSize",
        "WebkitOrder",
        "WebkitPerspective",
        "WebkitPerspectiveOrigin",
        "WebkitTextFillColor",
        "WebkitTextSizeAdjust",
        "WebkitTextStroke",
        "WebkitTextStrokeColor",
        "WebkitTextStrokeWidth",
        "WebkitTransform",
        "WebkitTransformOrigin",
        "WebkitTransformStyle",
        "WebkitTransition",
        "WebkitTransitionDelay",
        "WebkitTransitionDuration",
        "WebkitTransitionProperty",
        "WebkitTransitionTimingFunction",
        "WebkitUserSelect",
        "WheelEvent",
        "Window",
        "Worker",
        "Worklet",
        "WritableStream",
        "WritableStreamDefaultWriter",
        "XMLDocument",
        "XMLHttpRequest",
        "XMLHttpRequestEventTarget",
        "XMLHttpRequestException",
        "XMLHttpRequestProgressEvent",
        "XMLHttpRequestUpload",
        "XMLSerializer",
        "XMLStylesheetProcessingInstruction",
        "XPathEvaluator",
        "XPathException",
        "XPathExpression",
        "XPathNSResolver",
        "XPathResult",
        "XRBoundedReferenceSpace",
        "XRDOMOverlayState",
        "XRFrame",
        "XRHitTestResult",
        "XRHitTestSource",
        "XRInputSource",
        "XRInputSourceArray",
        "XRInputSourceEvent",
        "XRInputSourcesChangeEvent",
        "XRLayer",
        "XRPose",
        "XRRay",
        "XRReferenceSpace",
        "XRReferenceSpaceEvent",
        "XRRenderState",
        "XRRigidTransform",
        "XRSession",
        "XRSessionEvent",
        "XRSpace",
        "XRSystem",
        "XRTransientInputHitTestResult",
        "XRTransientInputHitTestSource",
        "XRView",
        "XRViewerPose",
        "XRViewport",
        "XRWebGLLayer",
        "XSLTProcessor",
        "ZERO",
        "_XD0M_",
        "_YD0M_",
        "__brand",
        "__defineGetter__",
        "__defineSetter__",
        "__lookupGetter__",
        "__lookupSetter__",
        "__opera",
        "__proto__",
        "_browserjsran",
        "a",
        "aLink",
        "abbr",
        "abort",
        "aborted",
        "abs",
        "absolute",
        "acceleration",
        "accelerationIncludingGravity",
        "accelerator",
        "accept",
        "acceptCharset",
        "acceptNode",
        "access",
        "accessKey",
        "accessKeyLabel",
        "accuracy",
        "acos",
        "acosh",
        "action",
        "actionURL",
        "actions",
        "activated",
        "active",
        "activeCues",
        "activeElement",
        "activeSourceBuffers",
        "activeSourceCount",
        "activeTexture",
        "activeVRDisplays",
        "actualBoundingBoxAscent",
        "actualBoundingBoxDescent",
        "actualBoundingBoxLeft",
        "actualBoundingBoxRight",
        "add",
        "addAll",
        "addBehavior",
        "addCandidate",
        "addColorStop",
        "addCue",
        "addElement",
        "addEventListener",
        "addFilter",
        "addFromString",
        "addFromUri",
        "addIceCandidate",
        "addImport",
        "addListener",
        "addModule",
        "addNamed",
        "addPageRule",
        "addPath",
        "addPointer",
        "addRange",
        "addRegion",
        "addRule",
        "addSearchEngine",
        "addSourceBuffer",
        "addStream",
        "addTextTrack",
        "addTrack",
        "addTransceiver",
        "addWakeLockListener",
        "added",
        "addedNodes",
        "additionalName",
        "additiveSymbols",
        "addons",
        "address",
        "addressLine",
        "addressModeU",
        "addressModeV",
        "addressModeW",
        "adoptNode",
        "adoptedStyleSheets",
        "adr",
        "advance",
        "after",
        "album",
        "alert",
        "algorithm",
        "align",
        "align-content",
        "align-items",
        "align-self",
        "alignContent",
        "alignItems",
        "alignSelf",
        "alignmentBaseline",
        "alinkColor",
        "all",
        "allSettled",
        "allow",
        "allowFullscreen",
        "allowPaymentRequest",
        "allowedDirections",
        "allowedFeatures",
        "allowedToPlay",
        "allowsFeature",
        "alpha",
        "alphaMode",
        "alphaToCoverageEnabled",
        "alt",
        "altGraphKey",
        "altHtml",
        "altKey",
        "altLeft",
        "alternate",
        "alternateSetting",
        "alternates",
        "altitude",
        "altitudeAccuracy",
        "amplitude",
        "ancestorOrigins",
        "anchor",
        "anchorNode",
        "anchorOffset",
        "anchors",
        "and",
        "angle",
        "angularAcceleration",
        "angularVelocity",
        "animVal",
        "animate",
        "animatedInstanceRoot",
        "animatedNormalizedPathSegList",
        "animatedPathSegList",
        "animatedPoints",
        "animation",
        "animation-delay",
        "animation-direction",
        "animation-duration",
        "animation-fill-mode",
        "animation-iteration-count",
        "animation-name",
        "animation-play-state",
        "animation-timing-function",
        "animationDelay",
        "animationDirection",
        "animationDuration",
        "animationFillMode",
        "animationIterationCount",
        "animationName",
        "animationPlayState",
        "animationStartTime",
        "animationTimingFunction",
        "animationsPaused",
        "anniversary",
        "antialias",
        "anticipatedRemoval",
        "any",
        "app",
        "appCodeName",
        "appMinorVersion",
        "appName",
        "appNotifications",
        "appVersion",
        "appearance",
        "append",
        "appendBuffer",
        "appendChild",
        "appendData",
        "appendItem",
        "appendMedium",
        "appendNamed",
        "appendRule",
        "appendStream",
        "appendWindowEnd",
        "appendWindowStart",
        "applets",
        "applicationCache",
        "applicationServerKey",
        "apply",
        "applyConstraints",
        "applyElement",
        "arc",
        "arcTo",
        "architecture",
        "archive",
        "areas",
        "arguments",
        "ariaAtomic",
        "ariaAutoComplete",
        "ariaBusy",
        "ariaChecked",
        "ariaColCount",
        "ariaColIndex",
        "ariaColSpan",
        "ariaCurrent",
        "ariaDescription",
        "ariaDisabled",
        "ariaExpanded",
        "ariaHasPopup",
        "ariaHidden",
        "ariaKeyShortcuts",
        "ariaLabel",
        "ariaLevel",
        "ariaLive",
        "ariaModal",
        "ariaMultiLine",
        "ariaMultiSelectable",
        "ariaOrientation",
        "ariaPlaceholder",
        "ariaPosInSet",
        "ariaPressed",
        "ariaReadOnly",
        "ariaRelevant",
        "ariaRequired",
        "ariaRoleDescription",
        "ariaRowCount",
        "ariaRowIndex",
        "ariaRowSpan",
        "ariaSelected",
        "ariaSetSize",
        "ariaSort",
        "ariaValueMax",
        "ariaValueMin",
        "ariaValueNow",
        "ariaValueText",
        "arrayBuffer",
        "arrayLayerCount",
        "arrayStride",
        "artist",
        "artwork",
        "as",
        "asIntN",
        "asUintN",
        "asin",
        "asinh",
        "aspect",
        "assert",
        "assign",
        "assignedElements",
        "assignedNodes",
        "assignedSlot",
        "async",
        "asyncIterator",
        "atEnd",
        "atan",
        "atan2",
        "atanh",
        "atob",
        "attachEvent",
        "attachInternals",
        "attachShader",
        "attachShadow",
        "attachments",
        "attack",
        "attestationObject",
        "attrChange",
        "attrName",
        "attributeFilter",
        "attributeName",
        "attributeNamespace",
        "attributeOldValue",
        "attributeStyleMap",
        "attributes",
        "attribution",
        "audioBitsPerSecond",
        "audioTracks",
        "audioWorklet",
        "authenticatedSignedWrites",
        "authenticatorData",
        "autoIncrement",
        "autobuffer",
        "autocapitalize",
        "autocomplete",
        "autocorrect",
        "autofocus",
        "automationRate",
        "autoplay",
        "availHeight",
        "availLeft",
        "availTop",
        "availWidth",
        "availability",
        "available",
        "aversion",
        "ax",
        "axes",
        "axis",
        "ay",
        "azimuth",
        "b",
        "back",
        "backface-visibility",
        "backfaceVisibility",
        "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",
        "backgroundAttachment",
        "backgroundBlendMode",
        "backgroundClip",
        "backgroundColor",
        "backgroundFetch",
        "backgroundImage",
        "backgroundOrigin",
        "backgroundPosition",
        "backgroundPositionX",
        "backgroundPositionY",
        "backgroundRepeat",
        "backgroundSize",
        "badInput",
        "badge",
        "balance",
        "baseArrayLayer",
        "baseFrequencyX",
        "baseFrequencyY",
        "baseLatency",
        "baseLayer",
        "baseMipLevel",
        "baseNode",
        "baseOffset",
        "baseURI",
        "baseVal",
        "baselineShift",
        "battery",
        "bday",
        "before",
        "beginComputePass",
        "beginElement",
        "beginElementAt",
        "beginOcclusionQuery",
        "beginPath",
        "beginQuery",
        "beginRenderPass",
        "beginTransformFeedback",
        "beginningOfPassWriteIndex",
        "behavior",
        "behaviorCookie",
        "behaviorPart",
        "behaviorUrns",
        "beta",
        "bezierCurveTo",
        "bgColor",
        "bgProperties",
        "bias",
        "big",
        "bigint64",
        "biguint64",
        "binaryType",
        "bind",
        "bindAttribLocation",
        "bindBuffer",
        "bindBufferBase",
        "bindBufferRange",
        "bindFramebuffer",
        "bindGroupLayouts",
        "bindRenderbuffer",
        "bindSampler",
        "bindTexture",
        "bindTransformFeedback",
        "bindVertexArray",
        "binding",
        "bitness",
        "blend",
        "blendColor",
        "blendEquation",
        "blendEquationSeparate",
        "blendFunc",
        "blendFuncSeparate",
        "blink",
        "blitFramebuffer",
        "blob",
        "block-size",
        "blockDirection",
        "blockSize",
        "blockedURI",
        "blue",
        "bluetooth",
        "blur",
        "body",
        "bodyUsed",
        "bold",
        "bookmarks",
        "booleanValue",
        "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",
        "borderBlock",
        "borderBlockColor",
        "borderBlockEnd",
        "borderBlockEndColor",
        "borderBlockEndStyle",
        "borderBlockEndWidth",
        "borderBlockStart",
        "borderBlockStartColor",
        "borderBlockStartStyle",
        "borderBlockStartWidth",
        "borderBlockStyle",
        "borderBlockWidth",
        "borderBottom",
        "borderBottomColor",
        "borderBottomLeftRadius",
        "borderBottomRightRadius",
        "borderBottomStyle",
        "borderBottomWidth",
        "borderBoxSize",
        "borderCollapse",
        "borderColor",
        "borderColorDark",
        "borderColorLight",
        "borderEndEndRadius",
        "borderEndStartRadius",
        "borderImage",
        "borderImageOutset",
        "borderImageRepeat",
        "borderImageSlice",
        "borderImageSource",
        "borderImageWidth",
        "borderInline",
        "borderInlineColor",
        "borderInlineEnd",
        "borderInlineEndColor",
        "borderInlineEndStyle",
        "borderInlineEndWidth",
        "borderInlineStart",
        "borderInlineStartColor",
        "borderInlineStartStyle",
        "borderInlineStartWidth",
        "borderInlineStyle",
        "borderInlineWidth",
        "borderLeft",
        "borderLeftColor",
        "borderLeftStyle",
        "borderLeftWidth",
        "borderRadius",
        "borderRight",
        "borderRightColor",
        "borderRightStyle",
        "borderRightWidth",
        "borderSpacing",
        "borderStartEndRadius",
        "borderStartStartRadius",
        "borderStyle",
        "borderTop",
        "borderTopColor",
        "borderTopLeftRadius",
        "borderTopRightRadius",
        "borderTopStyle",
        "borderTopWidth",
        "borderWidth",
        "bottom",
        "bottomMargin",
        "bound",
        "boundElements",
        "boundingClientRect",
        "boundingHeight",
        "boundingLeft",
        "boundingTop",
        "boundingWidth",
        "bounds",
        "boundsGeometry",
        "box-decoration-break",
        "box-shadow",
        "box-sizing",
        "boxDecorationBreak",
        "boxShadow",
        "boxSizing",
        "brand",
        "brands",
        "break-after",
        "break-before",
        "break-inside",
        "breakAfter",
        "breakBefore",
        "breakInside",
        "broadcast",
        "browserLanguage",
        "btoa",
        "bubbles",
        "buffer",
        "bufferData",
        "bufferDepth",
        "bufferSize",
        "bufferSubData",
        "buffered",
        "bufferedAmount",
        "bufferedAmountLowThreshold",
        "buffers",
        "buildID",
        "buildNumber",
        "button",
        "buttonID",
        "buttons",
        "byteLength",
        "byteOffset",
        "bytesPerRow",
        "bytesWritten",
        "c",
        "cache",
        "caches",
        "call",
        "caller",
        "canBeFormatted",
        "canBeMounted",
        "canBeShared",
        "canHaveChildren",
        "canHaveHTML",
        "canInsertDTMF",
        "canMakePayment",
        "canPlayType",
        "canPresent",
        "canTrickleIceCandidates",
        "cancel",
        "cancelAndHoldAtTime",
        "cancelAnimationFrame",
        "cancelBubble",
        "cancelIdleCallback",
        "cancelScheduledValues",
        "cancelVideoFrameCallback",
        "cancelWatchAvailability",
        "cancelable",
        "candidate",
        "canonicalUUID",
        "canvas",
        "capabilities",
        "caption",
        "caption-side",
        "captionSide",
        "capture",
        "captureEvents",
        "captureStackTrace",
        "captureStream",
        "caret-color",
        "caretBidiLevel",
        "caretColor",
        "caretPositionFromPoint",
        "caretRangeFromPoint",
        "cast",
        "catch",
        "category",
        "cbrt",
        "cd",
        "ceil",
        "cellIndex",
        "cellPadding",
        "cellSpacing",
        "cells",
        "ch",
        "chOff",
        "chain",
        "challenge",
        "changeType",
        "changedTouches",
        "channel",
        "channelCount",
        "channelCountMode",
        "channelInterpretation",
        "char",
        "charAt",
        "charCode",
        "charCodeAt",
        "charIndex",
        "charLength",
        "characterData",
        "characterDataOldValue",
        "characterSet",
        "characteristic",
        "charging",
        "chargingTime",
        "charset",
        "check",
        "checkEnclosure",
        "checkFramebufferStatus",
        "checkIntersection",
        "checkValidity",
        "checked",
        "childElementCount",
        "childList",
        "childNodes",
        "children",
        "chrome",
        "ciphertext",
        "cite",
        "city",
        "claimInterface",
        "claimed",
        "classList",
        "className",
        "classid",
        "clear",
        "clearAppBadge",
        "clearAttributes",
        "clearBuffer",
        "clearBufferfi",
        "clearBufferfv",
        "clearBufferiv",
        "clearBufferuiv",
        "clearColor",
        "clearData",
        "clearDepth",
        "clearHalt",
        "clearImmediate",
        "clearInterval",
        "clearLiveSeekableRange",
        "clearMarks",
        "clearMaxGCPauseAccumulator",
        "clearMeasures",
        "clearParameters",
        "clearRect",
        "clearResourceTimings",
        "clearShadow",
        "clearStencil",
        "clearTimeout",
        "clearValue",
        "clearWatch",
        "click",
        "clickCount",
        "clientDataJSON",
        "clientHeight",
        "clientInformation",
        "clientLeft",
        "clientRect",
        "clientRects",
        "clientTop",
        "clientWaitSync",
        "clientWidth",
        "clientX",
        "clientY",
        "clip",
        "clip-path",
        "clip-rule",
        "clipBottom",
        "clipLeft",
        "clipPath",
        "clipPathUnits",
        "clipRight",
        "clipRule",
        "clipTop",
        "clipboard",
        "clipboardData",
        "clone",
        "cloneContents",
        "cloneNode",
        "cloneRange",
        "close",
        "closePath",
        "closed",
        "closest",
        "clz",
        "clz32",
        "cm",
        "cmp",
        "code",
        "codeBase",
        "codePointAt",
        "codeType",
        "colSpan",
        "collapse",
        "collapseToEnd",
        "collapseToStart",
        "collapsed",
        "collect",
        "colno",
        "color",
        "color-adjust",
        "color-interpolation",
        "color-interpolation-filters",
        "colorAdjust",
        "colorAttachments",
        "colorDepth",
        "colorFormats",
        "colorInterpolation",
        "colorInterpolationFilters",
        "colorMask",
        "colorSpace",
        "colorType",
        "cols",
        "column-count",
        "column-fill",
        "column-gap",
        "column-rule",
        "column-rule-color",
        "column-rule-style",
        "column-rule-width",
        "column-span",
        "column-width",
        "columnCount",
        "columnFill",
        "columnGap",
        "columnNumber",
        "columnRule",
        "columnRuleColor",
        "columnRuleStyle",
        "columnRuleWidth",
        "columnSpan",
        "columnWidth",
        "columns",
        "command",
        "commit",
        "commitPreferences",
        "commitStyles",
        "commonAncestorContainer",
        "compact",
        "compare",
        "compareBoundaryPoints",
        "compareDocumentPosition",
        "compareEndPoints",
        "compareExchange",
        "compareNode",
        "comparePoint",
        "compatMode",
        "compatible",
        "compile",
        "compileShader",
        "compileStreaming",
        "complete",
        "component",
        "componentFromPoint",
        "composed",
        "composedPath",
        "composite",
        "compositionEndOffset",
        "compositionStartOffset",
        "compressedTexImage2D",
        "compressedTexImage3D",
        "compressedTexSubImage2D",
        "compressedTexSubImage3D",
        "compute",
        "computedStyleMap",
        "concat",
        "conditionText",
        "coneInnerAngle",
        "coneOuterAngle",
        "coneOuterGain",
        "configurable",
        "configuration",
        "configurationName",
        "configurationValue",
        "configurations",
        "configure",
        "confirm",
        "confirmComposition",
        "confirmSiteSpecificTrackingException",
        "confirmWebWideTrackingException",
        "connect",
        "connectEnd",
        "connectShark",
        "connectStart",
        "connected",
        "connection",
        "connectionList",
        "connectionSpeed",
        "connectionState",
        "connections",
        "console",
        "consolidate",
        "constants",
        "constraint",
        "constrictionActive",
        "construct",
        "constructor",
        "contactID",
        "contain",
        "containerId",
        "containerName",
        "containerSrc",
        "containerType",
        "contains",
        "containsNode",
        "content",
        "contentBoxSize",
        "contentDocument",
        "contentEditable",
        "contentHint",
        "contentOverflow",
        "contentRect",
        "contentScriptType",
        "contentStyleType",
        "contentType",
        "contentWindow",
        "context",
        "contextMenu",
        "contextmenu",
        "continue",
        "continuePrimaryKey",
        "continuous",
        "control",
        "controlTransferIn",
        "controlTransferOut",
        "controller",
        "controls",
        "controlsList",
        "convertPointFromNode",
        "convertQuadFromNode",
        "convertRectFromNode",
        "convertToBlob",
        "convertToSpecifiedUnits",
        "cookie",
        "cookieEnabled",
        "coords",
        "copyBufferSubData",
        "copyBufferToBuffer",
        "copyBufferToTexture",
        "copyExternalImageToTexture",
        "copyFromChannel",
        "copyTexImage2D",
        "copyTexSubImage2D",
        "copyTexSubImage3D",
        "copyTextureToBuffer",
        "copyTextureToTexture",
        "copyToChannel",
        "copyWithin",
        "correspondingElement",
        "correspondingUseElement",
        "corruptedVideoFrames",
        "cos",
        "cosh",
        "count",
        "countReset",
        "counter-increment",
        "counter-reset",
        "counter-set",
        "counterIncrement",
        "counterReset",
        "counterSet",
        "country",
        "cpuClass",
        "cpuSleepAllowed",
        "create",
        "createAnalyser",
        "createAnswer",
        "createAttribute",
        "createAttributeNS",
        "createBindGroup",
        "createBindGroupLayout",
        "createBiquadFilter",
        "createBuffer",
        "createBufferSource",
        "createCDATASection",
        "createCSSStyleSheet",
        "createCaption",
        "createChannelMerger",
        "createChannelSplitter",
        "createCommandEncoder",
        "createComment",
        "createComputePipeline",
        "createComputePipelineAsync",
        "createConstantSource",
        "createContextualFragment",
        "createControlRange",
        "createConvolver",
        "createDTMFSender",
        "createDataChannel",
        "createDelay",
        "createDelayNode",
        "createDocument",
        "createDocumentFragment",
        "createDocumentType",
        "createDynamicsCompressor",
        "createElement",
        "createElementNS",
        "createEntityReference",
        "createEvent",
        "createEventObject",
        "createExpression",
        "createFramebuffer",
        "createFunction",
        "createGain",
        "createGainNode",
        "createHTML",
        "createHTMLDocument",
        "createIIRFilter",
        "createImageBitmap",
        "createImageData",
        "createIndex",
        "createJavaScriptNode",
        "createLinearGradient",
        "createMediaElementSource",
        "createMediaKeys",
        "createMediaStreamDestination",
        "createMediaStreamSource",
        "createMediaStreamTrackSource",
        "createMutableFile",
        "createNSResolver",
        "createNodeIterator",
        "createNotification",
        "createObjectStore",
        "createObjectURL",
        "createOffer",
        "createOscillator",
        "createPanner",
        "createPattern",
        "createPeriodicWave",
        "createPipelineLayout",
        "createPolicy",
        "createPopup",
        "createProcessingInstruction",
        "createProgram",
        "createQuery",
        "createQuerySet",
        "createRadialGradient",
        "createRange",
        "createRangeCollection",
        "createReader",
        "createRenderBundleEncoder",
        "createRenderPipeline",
        "createRenderPipelineAsync",
        "createRenderbuffer",
        "createSVGAngle",
        "createSVGLength",
        "createSVGMatrix",
        "createSVGNumber",
        "createSVGPathSegArcAbs",
        "createSVGPathSegArcRel",
        "createSVGPathSegClosePath",
        "createSVGPathSegCurvetoCubicAbs",
        "createSVGPathSegCurvetoCubicRel",
        "createSVGPathSegCurvetoCubicSmoothAbs",
        "createSVGPathSegCurvetoCubicSmoothRel",
        "createSVGPathSegCurvetoQuadraticAbs",
        "createSVGPathSegCurvetoQuadraticRel",
        "createSVGPathSegCurvetoQuadraticSmoothAbs",
        "createSVGPathSegCurvetoQuadraticSmoothRel",
        "createSVGPathSegLinetoAbs",
        "createSVGPathSegLinetoHorizontalAbs",
        "createSVGPathSegLinetoHorizontalRel",
        "createSVGPathSegLinetoRel",
        "createSVGPathSegLinetoVerticalAbs",
        "createSVGPathSegLinetoVerticalRel",
        "createSVGPathSegMovetoAbs",
        "createSVGPathSegMovetoRel",
        "createSVGPoint",
        "createSVGRect",
        "createSVGTransform",
        "createSVGTransformFromMatrix",
        "createSampler",
        "createScript",
        "createScriptProcessor",
        "createScriptURL",
        "createSession",
        "createShader",
        "createShaderModule",
        "createShadowRoot",
        "createStereoPanner",
        "createStyleSheet",
        "createTBody",
        "createTFoot",
        "createTHead",
        "createTextNode",
        "createTextRange",
        "createTexture",
        "createTouch",
        "createTouchList",
        "createTransformFeedback",
        "createTreeWalker",
        "createVertexArray",
        "createView",
        "createWaveShaper",
        "creationTime",
        "credentials",
        "crossOrigin",
        "crossOriginIsolated",
        "crypto",
        "csi",
        "csp",
        "cssFloat",
        "cssRules",
        "cssText",
        "cssValueType",
        "ctrlKey",
        "ctrlLeft",
        "cues",
        "cullFace",
        "cullMode",
        "currentDirection",
        "currentLocalDescription",
        "currentNode",
        "currentPage",
        "currentRect",
        "currentRemoteDescription",
        "currentScale",
        "currentScript",
        "currentSrc",
        "currentState",
        "currentStyle",
        "currentTarget",
        "currentTime",
        "currentTranslate",
        "currentView",
        "cursor",
        "curve",
        "customElements",
        "customError",
        "cx",
        "cy",
        "d",
        "data",
        "dataFld",
        "dataFormatAs",
        "dataLoss",
        "dataLossMessage",
        "dataPageSize",
        "dataSrc",
        "dataTransfer",
        "database",
        "databases",
        "dataset",
        "dateTime",
        "db",
        "debug",
        "debuggerEnabled",
        "declare",
        "decode",
        "decodeAudioData",
        "decodeURI",
        "decodeURIComponent",
        "decodedBodySize",
        "decoding",
        "decodingInfo",
        "decrypt",
        "default",
        "defaultCharset",
        "defaultChecked",
        "defaultMuted",
        "defaultPlaybackRate",
        "defaultPolicy",
        "defaultPrevented",
        "defaultQueue",
        "defaultRequest",
        "defaultSelected",
        "defaultStatus",
        "defaultURL",
        "defaultValue",
        "defaultView",
        "defaultstatus",
        "defer",
        "define",
        "defineMagicFunction",
        "defineMagicVariable",
        "defineProperties",
        "defineProperty",
        "deg",
        "delay",
        "delayTime",
        "delegatesFocus",
        "delete",
        "deleteBuffer",
        "deleteCaption",
        "deleteCell",
        "deleteContents",
        "deleteData",
        "deleteDatabase",
        "deleteFramebuffer",
        "deleteFromDocument",
        "deleteIndex",
        "deleteMedium",
        "deleteObjectStore",
        "deleteProgram",
        "deleteProperty",
        "deleteQuery",
        "deleteRenderbuffer",
        "deleteRow",
        "deleteRule",
        "deleteSampler",
        "deleteShader",
        "deleteSync",
        "deleteTFoot",
        "deleteTHead",
        "deleteTexture",
        "deleteTransformFeedback",
        "deleteVertexArray",
        "deliverChangeRecords",
        "delivery",
        "deliveryInfo",
        "deliveryStatus",
        "deliveryTimestamp",
        "delta",
        "deltaMode",
        "deltaX",
        "deltaY",
        "deltaZ",
        "dependentLocality",
        "depthBias",
        "depthBiasClamp",
        "depthBiasSlopeScale",
        "depthClearValue",
        "depthCompare",
        "depthFailOp",
        "depthFar",
        "depthFunc",
        "depthLoadOp",
        "depthMask",
        "depthNear",
        "depthOrArrayLayers",
        "depthRange",
        "depthReadOnly",
        "depthStencil",
        "depthStencilAttachment",
        "depthStencilFormat",
        "depthStoreOp",
        "depthWriteEnabled",
        "deref",
        "deriveBits",
        "deriveKey",
        "description",
        "deselectAll",
        "designMode",
        "desiredSize",
        "destination",
        "destinationURL",
        "destroy",
        "detach",
        "detachEvent",
        "detachShader",
        "detail",
        "details",
        "detect",
        "detune",
        "device",
        "deviceClass",
        "deviceId",
        "deviceMemory",
        "devicePixelContentBoxSize",
        "devicePixelRatio",
        "deviceProtocol",
        "deviceSubclass",
        "deviceVersionMajor",
        "deviceVersionMinor",
        "deviceVersionSubminor",
        "deviceXDPI",
        "deviceYDPI",
        "didTimeout",
        "diffuseConstant",
        "digest",
        "dimension",
        "dimensions",
        "dir",
        "dirName",
        "direction",
        "dirxml",
        "disable",
        "disablePictureInPicture",
        "disableRemotePlayback",
        "disableVertexAttribArray",
        "disabled",
        "dischargingTime",
        "disconnect",
        "disconnectShark",
        "dispatchEvent",
        "dispatchWorkgroups",
        "dispatchWorkgroupsIndirect",
        "display",
        "displayId",
        "displayName",
        "disposition",
        "distanceModel",
        "div",
        "divisor",
        "djsapi",
        "djsproxy",
        "doImport",
        "doNotTrack",
        "doScroll",
        "doctype",
        "document",
        "documentElement",
        "documentMode",
        "documentURI",
        "dolphin",
        "dolphinGameCenter",
        "dolphininfo",
        "dolphinmeta",
        "domComplete",
        "domContentLoadedEventEnd",
        "domContentLoadedEventStart",
        "domInteractive",
        "domLoading",
        "domOverlayState",
        "domain",
        "domainLookupEnd",
        "domainLookupStart",
        "dominant-baseline",
        "dominantBaseline",
        "done",
        "dopplerFactor",
        "dotAll",
        "downDegrees",
        "downlink",
        "download",
        "downloadTotal",
        "downloaded",
        "dpcm",
        "dpi",
        "dppx",
        "dragDrop",
        "draggable",
        "draw",
        "drawArrays",
        "drawArraysInstanced",
        "drawArraysInstancedANGLE",
        "drawBuffers",
        "drawCustomFocusRing",
        "drawElements",
        "drawElementsInstanced",
        "drawElementsInstancedANGLE",
        "drawFocusIfNeeded",
        "drawImage",
        "drawImageFromRect",
        "drawIndexed",
        "drawIndexedIndirect",
        "drawIndirect",
        "drawRangeElements",
        "drawSystemFocusRing",
        "drawingBufferHeight",
        "drawingBufferWidth",
        "dropEffect",
        "droppedVideoFrames",
        "dropzone",
        "dstFactor",
        "dtmf",
        "dump",
        "dumpProfile",
        "duplicate",
        "durability",
        "duration",
        "dvname",
        "dvnum",
        "dx",
        "dy",
        "dynsrc",
        "e",
        "edgeMode",
        "effect",
        "effectAllowed",
        "effectiveDirective",
        "effectiveType",
        "elapsedTime",
        "element",
        "elementFromPoint",
        "elementTiming",
        "elements",
        "elementsFromPoint",
        "elevation",
        "ellipse",
        "em",
        "email",
        "embeds",
        "emma",
        "empty",
        "empty-cells",
        "emptyCells",
        "emptyHTML",
        "emptyScript",
        "emulatedPosition",
        "enable",
        "enableBackground",
        "enableDelegations",
        "enableStyleSheetsForSet",
        "enableVertexAttribArray",
        "enabled",
        "enabledPlugin",
        "encode",
        "encodeInto",
        "encodeURI",
        "encodeURIComponent",
        "encodedBodySize",
        "encoding",
        "encodingInfo",
        "encrypt",
        "enctype",
        "end",
        "endContainer",
        "endElement",
        "endElementAt",
        "endOcclusionQuery",
        "endOfPassWriteIndex",
        "endOfStream",
        "endOffset",
        "endQuery",
        "endTime",
        "endTransformFeedback",
        "ended",
        "endpoint",
        "endpointNumber",
        "endpoints",
        "endsWith",
        "enterKeyHint",
        "entities",
        "entries",
        "entryPoint",
        "entryType",
        "enumerable",
        "enumerate",
        "enumerateDevices",
        "enumerateEditable",
        "environmentBlendMode",
        "equals",
        "error",
        "errorCode",
        "errorDetail",
        "errorText",
        "escape",
        "estimate",
        "eval",
        "evaluate",
        "event",
        "eventPhase",
        "every",
        "ex",
        "exception",
        "exchange",
        "exec",
        "execCommand",
        "execCommandShowHelp",
        "execScript",
        "executeBundles",
        "exitFullscreen",
        "exitPictureInPicture",
        "exitPointerLock",
        "exitPresent",
        "exp",
        "expand",
        "expandEntityReferences",
        "expando",
        "expansion",
        "expiration",
        "expirationTime",
        "expires",
        "expiryDate",
        "explicitOriginalTarget",
        "expm1",
        "exponent",
        "exponentialRampToValueAtTime",
        "exportKey",
        "exports",
        "extend",
        "extensions",
        "extentNode",
        "extentOffset",
        "external",
        "externalResourcesRequired",
        "externalTexture",
        "extractContents",
        "extractable",
        "eye",
        "f",
        "face",
        "factoryReset",
        "failOp",
        "failureReason",
        "fallback",
        "family",
        "familyName",
        "farthestViewportElement",
        "fastSeek",
        "fatal",
        "featureId",
        "featurePolicy",
        "featureSettings",
        "features",
        "fenceSync",
        "fetch",
        "fetchStart",
        "fftSize",
        "fgColor",
        "fieldOfView",
        "file",
        "fileCreatedDate",
        "fileHandle",
        "fileModifiedDate",
        "fileName",
        "fileSize",
        "fileUpdatedDate",
        "filename",
        "files",
        "filesystem",
        "fill",
        "fill-opacity",
        "fill-rule",
        "fillLightMode",
        "fillOpacity",
        "fillRect",
        "fillRule",
        "fillStyle",
        "fillText",
        "filter",
        "filterResX",
        "filterResY",
        "filterUnits",
        "filters",
        "finally",
        "find",
        "findIndex",
        "findRule",
        "findText",
        "finish",
        "finished",
        "fireEvent",
        "firesTouchEvents",
        "firstChild",
        "firstElementChild",
        "firstPage",
        "fixed",
        "flags",
        "flat",
        "flatMap",
        "flex",
        "flex-basis",
        "flex-direction",
        "flex-flow",
        "flex-grow",
        "flex-shrink",
        "flex-wrap",
        "flexBasis",
        "flexDirection",
        "flexFlow",
        "flexGrow",
        "flexShrink",
        "flexWrap",
        "flipX",
        "flipY",
        "float",
        "float32",
        "float64",
        "flood-color",
        "flood-opacity",
        "floodColor",
        "floodOpacity",
        "floor",
        "flush",
        "focus",
        "focusNode",
        "focusOffset",
        "font",
        "font-family",
        "font-feature-settings",
        "font-kerning",
        "font-language-override",
        "font-optical-sizing",
        "font-size",
        "font-size-adjust",
        "font-stretch",
        "font-style",
        "font-synthesis",
        "font-variant",
        "font-variant-alternates",
        "font-variant-caps",
        "font-variant-east-asian",
        "font-variant-ligatures",
        "font-variant-numeric",
        "font-variant-position",
        "font-variation-settings",
        "font-weight",
        "fontFamily",
        "fontFeatureSettings",
        "fontKerning",
        "fontLanguageOverride",
        "fontOpticalSizing",
        "fontSize",
        "fontSizeAdjust",
        "fontSmoothingEnabled",
        "fontStretch",
        "fontStyle",
        "fontSynthesis",
        "fontVariant",
        "fontVariantAlternates",
        "fontVariantCaps",
        "fontVariantEastAsian",
        "fontVariantLigatures",
        "fontVariantNumeric",
        "fontVariantPosition",
        "fontVariationSettings",
        "fontWeight",
        "fontcolor",
        "fontfaces",
        "fonts",
        "fontsize",
        "for",
        "forEach",
        "force",
        "forceFallbackAdapter",
        "forceRedraw",
        "form",
        "formAction",
        "formData",
        "formEnctype",
        "formMethod",
        "formNoValidate",
        "formTarget",
        "format",
        "formatToParts",
        "forms",
        "forward",
        "forwardX",
        "forwardY",
        "forwardZ",
        "foundation",
        "fr",
        "fragment",
        "fragmentDirective",
        "frame",
        "frameBorder",
        "frameElement",
        "frameSpacing",
        "framebuffer",
        "framebufferHeight",
        "framebufferRenderbuffer",
        "framebufferTexture2D",
        "framebufferTextureLayer",
        "framebufferWidth",
        "frames",
        "freeSpace",
        "freeze",
        "frequency",
        "frequencyBinCount",
        "from",
        "fromCharCode",
        "fromCodePoint",
        "fromElement",
        "fromEntries",
        "fromFloat32Array",
        "fromFloat64Array",
        "fromMatrix",
        "fromPoint",
        "fromQuad",
        "fromRect",
        "frontFace",
        "fround",
        "fullPath",
        "fullScreen",
        "fullVersionList",
        "fullscreen",
        "fullscreenElement",
        "fullscreenEnabled",
        "fx",
        "fy",
        "g",
        "gain",
        "gamepad",
        "gamma",
        "gap",
        "gatheringState",
        "gatt",
        "genderIdentity",
        "generateCertificate",
        "generateKey",
        "generateMipmap",
        "generateRequest",
        "geolocation",
        "gestureObject",
        "get",
        "getActiveAttrib",
        "getActiveUniform",
        "getActiveUniformBlockName",
        "getActiveUniformBlockParameter",
        "getActiveUniforms",
        "getAdjacentText",
        "getAll",
        "getAllKeys",
        "getAllResponseHeaders",
        "getAllowlistForFeature",
        "getAnimations",
        "getAsFile",
        "getAsString",
        "getAttachedShaders",
        "getAttribLocation",
        "getAttribute",
        "getAttributeNS",
        "getAttributeNames",
        "getAttributeNode",
        "getAttributeNodeNS",
        "getAttributeType",
        "getAudioTracks",
        "getAvailability",
        "getBBox",
        "getBattery",
        "getBigInt64",
        "getBigUint64",
        "getBindGroupLayout",
        "getBlob",
        "getBookmark",
        "getBoundingClientRect",
        "getBounds",
        "getBoxQuads",
        "getBufferParameter",
        "getBufferSubData",
        "getByteFrequencyData",
        "getByteTimeDomainData",
        "getCSSCanvasContext",
        "getCTM",
        "getCandidateWindowClientRect",
        "getCanonicalLocales",
        "getCapabilities",
        "getChannelData",
        "getCharNumAtPosition",
        "getCharacteristic",
        "getCharacteristics",
        "getClientExtensionResults",
        "getClientRect",
        "getClientRects",
        "getCoalescedEvents",
        "getCompilationInfo",
        "getCompositionAlternatives",
        "getComputedStyle",
        "getComputedTextLength",
        "getComputedTiming",
        "getConfiguration",
        "getConstraints",
        "getContext",
        "getContextAttributes",
        "getContributingSources",
        "getCounterValue",
        "getCueAsHTML",
        "getCueById",
        "getCurrentPosition",
        "getCurrentTexture",
        "getCurrentTime",
        "getData",
        "getDatabaseNames",
        "getDate",
        "getDay",
        "getDefaultComputedStyle",
        "getDescriptor",
        "getDescriptors",
        "getDestinationInsertionPoints",
        "getDevices",
        "getDirectory",
        "getDisplayMedia",
        "getDistributedNodes",
        "getEditable",
        "getElementById",
        "getElementsByClassName",
        "getElementsByName",
        "getElementsByTagName",
        "getElementsByTagNameNS",
        "getEnclosureList",
        "getEndPositionOfChar",
        "getEntries",
        "getEntriesByName",
        "getEntriesByType",
        "getError",
        "getExtension",
        "getExtentOfChar",
        "getEyeParameters",
        "getFeature",
        "getFile",
        "getFiles",
        "getFilesAndDirectories",
        "getFingerprints",
        "getFloat32",
        "getFloat64",
        "getFloatFrequencyData",
        "getFloatTimeDomainData",
        "getFloatValue",
        "getFragDataLocation",
        "getFrameData",
        "getFramebufferAttachmentParameter",
        "getFrequencyResponse",
        "getFullYear",
        "getGamepads",
        "getHighEntropyValues",
        "getHitTestResults",
        "getHitTestResultsForTransientInput",
        "getHours",
        "getIdentityAssertion",
        "getIds",
        "getImageData",
        "getIndexedParameter",
        "getInstalledRelatedApps",
        "getInt16",
        "getInt32",
        "getInt8",
        "getInternalformatParameter",
        "getIntersectionList",
        "getItem",
        "getItems",
        "getKey",
        "getKeyframes",
        "getLayers",
        "getLayoutMap",
        "getLineDash",
        "getLocalCandidates",
        "getLocalParameters",
        "getLocalStreams",
        "getMappedRange",
        "getMarks",
        "getMatchedCSSRules",
        "getMaxGCPauseSinceClear",
        "getMeasures",
        "getMetadata",
        "getMilliseconds",
        "getMinutes",
        "getModifierState",
        "getMonth",
        "getNamedItem",
        "getNamedItemNS",
        "getNativeFramebufferScaleFactor",
        "getNotifications",
        "getNotifier",
        "getNumberOfChars",
        "getOffsetReferenceSpace",
        "getOutputTimestamp",
        "getOverrideHistoryNavigationMode",
        "getOverrideStyle",
        "getOwnPropertyDescriptor",
        "getOwnPropertyDescriptors",
        "getOwnPropertyNames",
        "getOwnPropertySymbols",
        "getParameter",
        "getParameters",
        "getParent",
        "getPathSegAtLength",
        "getPhotoCapabilities",
        "getPhotoSettings",
        "getPointAtLength",
        "getPose",
        "getPredictedEvents",
        "getPreference",
        "getPreferenceDefault",
        "getPreferredCanvasFormat",
        "getPresentationAttribute",
        "getPreventDefault",
        "getPrimaryService",
        "getPrimaryServices",
        "getProgramInfoLog",
        "getProgramParameter",
        "getPropertyCSSValue",
        "getPropertyPriority",
        "getPropertyShorthand",
        "getPropertyType",
        "getPropertyValue",
        "getPrototypeOf",
        "getQuery",
        "getQueryParameter",
        "getRGBColorValue",
        "getRandomValues",
        "getRangeAt",
        "getReader",
        "getReceivers",
        "getRectValue",
        "getRegistration",
        "getRegistrations",
        "getRemoteCandidates",
        "getRemoteCertificates",
        "getRemoteParameters",
        "getRemoteStreams",
        "getRenderbufferParameter",
        "getResponseHeader",
        "getRoot",
        "getRootNode",
        "getRotationOfChar",
        "getSVGDocument",
        "getSamplerParameter",
        "getScreenCTM",
        "getSeconds",
        "getSelectedCandidatePair",
        "getSelection",
        "getSenders",
        "getService",
        "getSettings",
        "getShaderInfoLog",
        "getShaderParameter",
        "getShaderPrecisionFormat",
        "getShaderSource",
        "getSimpleDuration",
        "getSiteIcons",
        "getSources",
        "getSpeculativeParserUrls",
        "getStartPositionOfChar",
        "getStartTime",
        "getState",
        "getStats",
        "getStatusForPolicy",
        "getStorageUpdates",
        "getStreamById",
        "getStringValue",
        "getSubStringLength",
        "getSubscription",
        "getSupportedConstraints",
        "getSupportedExtensions",
        "getSupportedFormats",
        "getSyncParameter",
        "getSynchronizationSources",
        "getTags",
        "getTargetRanges",
        "getTexParameter",
        "getTime",
        "getTimezoneOffset",
        "getTiming",
        "getTotalLength",
        "getTrackById",
        "getTracks",
        "getTransceivers",
        "getTransform",
        "getTransformFeedbackVarying",
        "getTransformToElement",
        "getTransports",
        "getType",
        "getTypeMapping",
        "getUTCDate",
        "getUTCDay",
        "getUTCFullYear",
        "getUTCHours",
        "getUTCMilliseconds",
        "getUTCMinutes",
        "getUTCMonth",
        "getUTCSeconds",
        "getUint16",
        "getUint32",
        "getUint8",
        "getUniform",
        "getUniformBlockIndex",
        "getUniformIndices",
        "getUniformLocation",
        "getUserMedia",
        "getVRDisplays",
        "getValues",
        "getVarDate",
        "getVariableValue",
        "getVertexAttrib",
        "getVertexAttribOffset",
        "getVideoPlaybackQuality",
        "getVideoTracks",
        "getViewerPose",
        "getViewport",
        "getVoices",
        "getWakeLockState",
        "getWriter",
        "getYear",
        "givenName",
        "global",
        "globalAlpha",
        "globalCompositeOperation",
        "globalThis",
        "glyphOrientationHorizontal",
        "glyphOrientationVertical",
        "glyphRef",
        "go",
        "gpu",
        "grabFrame",
        "grad",
        "gradientTransform",
        "gradientUnits",
        "grammars",
        "green",
        "grid",
        "grid-area",
        "grid-auto-columns",
        "grid-auto-flow",
        "grid-auto-rows",
        "grid-column",
        "grid-column-end",
        "grid-column-gap",
        "grid-column-start",
        "grid-gap",
        "grid-row",
        "grid-row-end",
        "grid-row-gap",
        "grid-row-start",
        "grid-template",
        "grid-template-areas",
        "grid-template-columns",
        "grid-template-rows",
        "gridArea",
        "gridAutoColumns",
        "gridAutoFlow",
        "gridAutoRows",
        "gridColumn",
        "gridColumnEnd",
        "gridColumnGap",
        "gridColumnStart",
        "gridGap",
        "gridRow",
        "gridRowEnd",
        "gridRowGap",
        "gridRowStart",
        "gridTemplate",
        "gridTemplateAreas",
        "gridTemplateColumns",
        "gridTemplateRows",
        "gripSpace",
        "group",
        "groups",
        "groupCollapsed",
        "groupEnd",
        "groupId",
        "hadRecentInput",
        "hand",
        "handedness",
        "hapticActuators",
        "hardwareConcurrency",
        "has",
        "hasAttribute",
        "hasAttributeNS",
        "hasAttributes",
        "hasBeenActive",
        "hasChildNodes",
        "hasComposition",
        "hasDynamicOffset",
        "hasEnrolledInstrument",
        "hasExtension",
        "hasExternalDisplay",
        "hasFeature",
        "hasFocus",
        "hasInstance",
        "hasLayout",
        "hasOrientation",
        "hasOwnProperty",
        "hasPointerCapture",
        "hasPosition",
        "hasReading",
        "hasStorageAccess",
        "hash",
        "head",
        "headers",
        "heading",
        "height",
        "hidden",
        "hide",
        "hideFocus",
        "high",
        "highWaterMark",
        "hint",
        "hints",
        "history",
        "honorificPrefix",
        "honorificSuffix",
        "horizontalOverflow",
        "host",
        "hostCandidate",
        "hostname",
        "href",
        "hrefTranslate",
        "hreflang",
        "hspace",
        "html5TagCheckInerface",
        "htmlFor",
        "htmlText",
        "httpEquiv",
        "httpRequestStatusCode",
        "hwTimestamp",
        "hyphens",
        "hypot",
        "iccId",
        "iceConnectionState",
        "iceGatheringState",
        "iceTransport",
        "icon",
        "iconURL",
        "id",
        "identifier",
        "identity",
        "idpLoginUrl",
        "ignoreBOM",
        "ignoreCase",
        "ignoreDepthValues",
        "image-orientation",
        "image-rendering",
        "imageHeight",
        "imageOrientation",
        "imageRendering",
        "imageSizes",
        "imageSmoothingEnabled",
        "imageSmoothingQuality",
        "imageSrcset",
        "imageWidth",
        "images",
        "ime-mode",
        "imeMode",
        "implementation",
        "importExternalTexture",
        "importKey",
        "importNode",
        "importStylesheet",
        "imports",
        "impp",
        "imul",
        "in",
        "in1",
        "in2",
        "inBandMetadataTrackDispatchType",
        "inRange",
        "includes",
        "incremental",
        "indeterminate",
        "index",
        "indexNames",
        "indexOf",
        "indexedDB",
        "indicate",
        "indices",
        "inert",
        "inertiaDestinationX",
        "inertiaDestinationY",
        "info",
        "init",
        "initAnimationEvent",
        "initBeforeLoadEvent",
        "initClipboardEvent",
        "initCloseEvent",
        "initCommandEvent",
        "initCompositionEvent",
        "initCustomEvent",
        "initData",
        "initDataType",
        "initDeviceMotionEvent",
        "initDeviceOrientationEvent",
        "initDragEvent",
        "initErrorEvent",
        "initEvent",
        "initFocusEvent",
        "initGestureEvent",
        "initHashChangeEvent",
        "initKeyEvent",
        "initKeyboardEvent",
        "initMSManipulationEvent",
        "initMessageEvent",
        "initMouseEvent",
        "initMouseScrollEvent",
        "initMouseWheelEvent",
        "initMutationEvent",
        "initNSMouseEvent",
        "initOverflowEvent",
        "initPageEvent",
        "initPageTransitionEvent",
        "initPointerEvent",
        "initPopStateEvent",
        "initProgressEvent",
        "initScrollAreaEvent",
        "initSimpleGestureEvent",
        "initStorageEvent",
        "initTextEvent",
        "initTimeEvent",
        "initTouchEvent",
        "initTransitionEvent",
        "initUIEvent",
        "initWebKitAnimationEvent",
        "initWebKitTransitionEvent",
        "initWebKitWheelEvent",
        "initWheelEvent",
        "initialTime",
        "initialize",
        "initiatorType",
        "inline-size",
        "inlineSize",
        "inlineVerticalFieldOfView",
        "inner",
        "innerHTML",
        "innerHeight",
        "innerText",
        "innerWidth",
        "input",
        "inputBuffer",
        "inputEncoding",
        "inputMethod",
        "inputMode",
        "inputSource",
        "inputSources",
        "inputType",
        "inputs",
        "insertAdjacentElement",
        "insertAdjacentHTML",
        "insertAdjacentText",
        "insertBefore",
        "insertCell",
        "insertDTMF",
        "insertData",
        "insertDebugMarker",
        "insertItemBefore",
        "insertNode",
        "insertRow",
        "insertRule",
        "inset",
        "inset-block",
        "inset-block-end",
        "inset-block-start",
        "inset-inline",
        "inset-inline-end",
        "inset-inline-start",
        "insetBlock",
        "insetBlockEnd",
        "insetBlockStart",
        "insetInline",
        "insetInlineEnd",
        "insetInlineStart",
        "installing",
        "instanceRoot",
        "instantiate",
        "instantiateStreaming",
        "instruments",
        "int16",
        "int32",
        "int8",
        "integrity",
        "interactionMode",
        "intercept",
        "interfaceClass",
        "interfaceName",
        "interfaceNumber",
        "interfaceProtocol",
        "interfaceSubclass",
        "interfaces",
        "interimResults",
        "internalSubset",
        "interpretation",
        "intersectionRatio",
        "intersectionRect",
        "intersectsNode",
        "interval",
        "invalidIteratorState",
        "invalidateFramebuffer",
        "invalidateSubFramebuffer",
        "inverse",
        "invertSelf",
        "is",
        "is2D",
        "isActive",
        "isAlternate",
        "isArray",
        "isBingCurrentSearchDefault",
        "isBuffer",
        "isCandidateWindowVisible",
        "isChar",
        "isCollapsed",
        "isComposing",
        "isConcatSpreadable",
        "isConnected",
        "isContentEditable",
        "isContentHandlerRegistered",
        "isContextLost",
        "isDefaultNamespace",
        "isDirectory",
        "isDisabled",
        "isEnabled",
        "isEqual",
        "isEqualNode",
        "isExtensible",
        "isExternalCTAP2SecurityKeySupported",
        "isFallbackAdapter",
        "isFile",
        "isFinite",
        "isFramebuffer",
        "isFrozen",
        "isGenerator",
        "isHTML",
        "isHistoryNavigation",
        "isId",
        "isIdentity",
        "isInjected",
        "isInteger",
        "isIntersecting",
        "isLockFree",
        "isMap",
        "isMultiLine",
        "isNaN",
        "isOpen",
        "isPointInFill",
        "isPointInPath",
        "isPointInRange",
        "isPointInStroke",
        "isPrefAlternate",
        "isPresenting",
        "isPrimary",
        "isProgram",
        "isPropertyImplicit",
        "isProtocolHandlerRegistered",
        "isPrototypeOf",
        "isQuery",
        "isRenderbuffer",
        "isSafeInteger",
        "isSameNode",
        "isSampler",
        "isScript",
        "isScriptURL",
        "isSealed",
        "isSecureContext",
        "isSessionSupported",
        "isShader",
        "isSupported",
        "isSync",
        "isTextEdit",
        "isTexture",
        "isTransformFeedback",
        "isTrusted",
        "isTypeSupported",
        "isUserVerifyingPlatformAuthenticatorAvailable",
        "isVertexArray",
        "isView",
        "isVisible",
        "isochronousTransferIn",
        "isochronousTransferOut",
        "isolation",
        "italics",
        "item",
        "itemId",
        "itemProp",
        "itemRef",
        "itemScope",
        "itemType",
        "itemValue",
        "items",
        "iterateNext",
        "iterationComposite",
        "iterator",
        "javaEnabled",
        "jobTitle",
        "join",
        "json",
        "justify-content",
        "justify-items",
        "justify-self",
        "justifyContent",
        "justifyItems",
        "justifySelf",
        "k1",
        "k2",
        "k3",
        "k4",
        "kHz",
        "keepalive",
        "kernelMatrix",
        "kernelUnitLengthX",
        "kernelUnitLengthY",
        "kerning",
        "key",
        "keyCode",
        "keyFor",
        "keyIdentifier",
        "keyLightEnabled",
        "keyLocation",
        "keyPath",
        "keyStatuses",
        "keySystem",
        "keyText",
        "keyUsage",
        "keyboard",
        "keys",
        "keytype",
        "kind",
        "knee",
        "label",
        "labels",
        "lang",
        "language",
        "languages",
        "largeArcFlag",
        "lastChild",
        "lastElementChild",
        "lastEventId",
        "lastIndex",
        "lastIndexOf",
        "lastInputTime",
        "lastMatch",
        "lastMessageSubject",
        "lastMessageType",
        "lastModified",
        "lastModifiedDate",
        "lastPage",
        "lastParen",
        "lastState",
        "lastStyleSheetSet",
        "latitude",
        "layerX",
        "layerY",
        "layout",
        "layoutFlow",
        "layoutGrid",
        "layoutGridChar",
        "layoutGridLine",
        "layoutGridMode",
        "layoutGridType",
        "lbound",
        "left",
        "leftContext",
        "leftDegrees",
        "leftMargin",
        "leftProjectionMatrix",
        "leftViewMatrix",
        "length",
        "lengthAdjust",
        "lengthComputable",
        "letter-spacing",
        "letterSpacing",
        "level",
        "lighting-color",
        "lightingColor",
        "limitingConeAngle",
        "limits",
        "line",
        "line-break",
        "line-height",
        "lineAlign",
        "lineBreak",
        "lineCap",
        "lineDashOffset",
        "lineHeight",
        "lineJoin",
        "lineNum",
        "lineNumber",
        "linePos",
        "lineTo",
        "lineWidth",
        "linearAcceleration",
        "linearRampToValueAtTime",
        "linearVelocity",
        "lineno",
        "lines",
        "link",
        "linkColor",
        "linkProgram",
        "links",
        "list",
        "list-style",
        "list-style-image",
        "list-style-position",
        "list-style-type",
        "listStyle",
        "listStyleImage",
        "listStylePosition",
        "listStyleType",
        "listener",
        "load",
        "loadEventEnd",
        "loadEventStart",
        "loadOp",
        "loadTime",
        "loadTimes",
        "loaded",
        "loading",
        "localDescription",
        "localName",
        "localService",
        "localStorage",
        "locale",
        "localeCompare",
        "location",
        "locationbar",
        "lock",
        "locked",
        "lockedFile",
        "locks",
        "lodMaxClamp",
        "lodMinClamp",
        "log",
        "log10",
        "log1p",
        "log2",
        "logicalXDPI",
        "logicalYDPI",
        "longDesc",
        "longitude",
        "lookupNamespaceURI",
        "lookupPrefix",
        "loop",
        "loopEnd",
        "loopStart",
        "looping",
        "lost",
        "low",
        "lower",
        "lowerBound",
        "lowerOpen",
        "lowsrc",
        "m11",
        "m12",
        "m13",
        "m14",
        "m21",
        "m22",
        "m23",
        "m24",
        "m31",
        "m32",
        "m33",
        "m34",
        "m41",
        "m42",
        "m43",
        "m44",
        "magFilter",
        "makeXRCompatible",
        "manifest",
        "manufacturer",
        "manufacturerName",
        "map",
        "mapAsync",
        "mapState",
        "mappedAtCreation",
        "mapping",
        "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",
        "marginBlock",
        "marginBlockEnd",
        "marginBlockStart",
        "marginBottom",
        "marginHeight",
        "marginInline",
        "marginInlineEnd",
        "marginInlineStart",
        "marginLeft",
        "marginRight",
        "marginTop",
        "marginWidth",
        "mark",
        "marker",
        "marker-end",
        "marker-mid",
        "marker-offset",
        "marker-start",
        "markerEnd",
        "markerHeight",
        "markerMid",
        "markerOffset",
        "markerStart",
        "markerUnits",
        "markerWidth",
        "marks",
        "mask",
        "mask-clip",
        "mask-composite",
        "mask-image",
        "mask-mode",
        "mask-origin",
        "mask-position",
        "mask-position-x",
        "mask-position-y",
        "mask-repeat",
        "mask-size",
        "mask-type",
        "maskClip",
        "maskComposite",
        "maskContentUnits",
        "maskImage",
        "maskMode",
        "maskOrigin",
        "maskPosition",
        "maskPositionX",
        "maskPositionY",
        "maskRepeat",
        "maskSize",
        "maskType",
        "maskUnits",
        "match",
        "matchAll",
        "matchMedia",
        "matchMedium",
        "matches",
        "matrix",
        "matrixTransform",
        "max",
        "max-block-size",
        "max-height",
        "max-inline-size",
        "max-width",
        "maxActions",
        "maxAlternatives",
        "maxAnisotropy",
        "maxBindGroups",
        "maxBindGroupsPlusVertexBuffers",
        "maxBindingsPerBindGroup",
        "maxBlockSize",
        "maxBufferSize",
        "maxChannelCount",
        "maxChannels",
        "maxColorAttachmentBytesPerSample",
        "maxColorAttachments",
        "maxComputeInvocationsPerWorkgroup",
        "maxComputeWorkgroupSizeX",
        "maxComputeWorkgroupSizeY",
        "maxComputeWorkgroupSizeZ",
        "maxComputeWorkgroupStorageSize",
        "maxComputeWorkgroupsPerDimension",
        "maxConnectionsPerServer",
        "maxDecibels",
        "maxDistance",
        "maxDrawCount",
        "maxDynamicStorageBuffersPerPipelineLayout",
        "maxDynamicUniformBuffersPerPipelineLayout",
        "maxHeight",
        "maxInlineSize",
        "maxInterStageShaderComponents",
        "maxInterStageShaderVariables",
        "maxLayers",
        "maxLength",
        "maxMessageSize",
        "maxPacketLifeTime",
        "maxRetransmits",
        "maxSampledTexturesPerShaderStage",
        "maxSamplersPerShaderStage",
        "maxStorageBufferBindingSize",
        "maxStorageBuffersPerShaderStage",
        "maxStorageTexturesPerShaderStage",
        "maxTextureArrayLayers",
        "maxTextureDimension1D",
        "maxTextureDimension2D",
        "maxTextureDimension3D",
        "maxTouchPoints",
        "maxUniformBufferBindingSize",
        "maxUniformBuffersPerShaderStage",
        "maxValue",
        "maxVertexAttributes",
        "maxVertexBufferArrayStride",
        "maxVertexBuffers",
        "maxWidth",
        "measure",
        "measureText",
        "media",
        "mediaCapabilities",
        "mediaDevices",
        "mediaElement",
        "mediaGroup",
        "mediaKeys",
        "mediaSession",
        "mediaStream",
        "mediaText",
        "meetOrSlice",
        "memory",
        "menubar",
        "mergeAttributes",
        "message",
        "messageClass",
        "messageHandlers",
        "messageType",
        "messages",
        "metaKey",
        "metadata",
        "method",
        "methodDetails",
        "methodName",
        "mid",
        "mimeType",
        "mimeTypes",
        "min",
        "min-block-size",
        "min-height",
        "min-inline-size",
        "min-width",
        "minBindingSize",
        "minBlockSize",
        "minDecibels",
        "minFilter",
        "minHeight",
        "minInlineSize",
        "minLength",
        "minStorageBufferOffsetAlignment",
        "minUniformBufferOffsetAlignment",
        "minValue",
        "minWidth",
        "mipLevel",
        "mipLevelCount",
        "mipmapFilter",
        "miterLimit",
        "mix-blend-mode",
        "mixBlendMode",
        "mm",
        "mobile",
        "mode",
        "model",
        "modify",
        "module",
        "mount",
        "move",
        "moveBy",
        "moveEnd",
        "moveFirst",
        "moveFocusDown",
        "moveFocusLeft",
        "moveFocusRight",
        "moveFocusUp",
        "moveNext",
        "moveRow",
        "moveStart",
        "moveTo",
        "moveToBookmark",
        "moveToElementText",
        "moveToPoint",
        "movementX",
        "movementY",
        "mozAdd",
        "mozAnimationStartTime",
        "mozAnon",
        "mozApps",
        "mozAudioCaptured",
        "mozAudioChannelType",
        "mozAutoplayEnabled",
        "mozCancelAnimationFrame",
        "mozCancelFullScreen",
        "mozCancelRequestAnimationFrame",
        "mozCaptureStream",
        "mozCaptureStreamUntilEnded",
        "mozClearDataAt",
        "mozContact",
        "mozContacts",
        "mozCreateFileHandle",
        "mozCurrentTransform",
        "mozCurrentTransformInverse",
        "mozCursor",
        "mozDash",
        "mozDashOffset",
        "mozDecodedFrames",
        "mozExitPointerLock",
        "mozFillRule",
        "mozFragmentEnd",
        "mozFrameDelay",
        "mozFullScreen",
        "mozFullScreenElement",
        "mozFullScreenEnabled",
        "mozGetAll",
        "mozGetAllKeys",
        "mozGetAsFile",
        "mozGetDataAt",
        "mozGetMetadata",
        "mozGetUserMedia",
        "mozHasAudio",
        "mozHasItem",
        "mozHidden",
        "mozImageSmoothingEnabled",
        "mozIndexedDB",
        "mozInnerScreenX",
        "mozInnerScreenY",
        "mozInputSource",
        "mozIsTextField",
        "mozItem",
        "mozItemCount",
        "mozItems",
        "mozLength",
        "mozLockOrientation",
        "mozMatchesSelector",
        "mozMovementX",
        "mozMovementY",
        "mozOpaque",
        "mozOrientation",
        "mozPaintCount",
        "mozPaintedFrames",
        "mozParsedFrames",
        "mozPay",
        "mozPointerLockElement",
        "mozPresentedFrames",
        "mozPreservesPitch",
        "mozPressure",
        "mozPrintCallback",
        "mozRTCIceCandidate",
        "mozRTCPeerConnection",
        "mozRTCSessionDescription",
        "mozRemove",
        "mozRequestAnimationFrame",
        "mozRequestFullScreen",
        "mozRequestPointerLock",
        "mozSetDataAt",
        "mozSetImageElement",
        "mozSourceNode",
        "mozSrcObject",
        "mozSystem",
        "mozTCPSocket",
        "mozTextStyle",
        "mozTypesAt",
        "mozUnlockOrientation",
        "mozUserCancelled",
        "mozVisibilityState",
        "ms",
        "msAnimation",
        "msAnimationDelay",
        "msAnimationDirection",
        "msAnimationDuration",
        "msAnimationFillMode",
        "msAnimationIterationCount",
        "msAnimationName",
        "msAnimationPlayState",
        "msAnimationStartTime",
        "msAnimationTimingFunction",
        "msBackfaceVisibility",
        "msBlockProgression",
        "msCSSOMElementFloatMetrics",
        "msCaching",
        "msCachingEnabled",
        "msCancelRequestAnimationFrame",
        "msCapsLockWarningOff",
        "msClearImmediate",
        "msClose",
        "msContentZoomChaining",
        "msContentZoomFactor",
        "msContentZoomLimit",
        "msContentZoomLimitMax",
        "msContentZoomLimitMin",
        "msContentZoomSnap",
        "msContentZoomSnapPoints",
        "msContentZoomSnapType",
        "msContentZooming",
        "msConvertURL",
        "msCrypto",
        "msDoNotTrack",
        "msElementsFromPoint",
        "msElementsFromRect",
        "msExitFullscreen",
        "msExtendedCode",
        "msFillRule",
        "msFirstPaint",
        "msFlex",
        "msFlexAlign",
        "msFlexDirection",
        "msFlexFlow",
        "msFlexItemAlign",
        "msFlexLinePack",
        "msFlexNegative",
        "msFlexOrder",
        "msFlexPack",
        "msFlexPositive",
        "msFlexPreferredSize",
        "msFlexWrap",
        "msFlowFrom",
        "msFlowInto",
        "msFontFeatureSettings",
        "msFullscreenElement",
        "msFullscreenEnabled",
        "msGetInputContext",
        "msGetRegionContent",
        "msGetUntransformedBounds",
        "msGraphicsTrustStatus",
        "msGridColumn",
        "msGridColumnAlign",
        "msGridColumnSpan",
        "msGridColumns",
        "msGridRow",
        "msGridRowAlign",
        "msGridRowSpan",
        "msGridRows",
        "msHidden",
        "msHighContrastAdjust",
        "msHyphenateLimitChars",
        "msHyphenateLimitLines",
        "msHyphenateLimitZone",
        "msHyphens",
        "msImageSmoothingEnabled",
        "msImeAlign",
        "msIndexedDB",
        "msInterpolationMode",
        "msIsStaticHTML",
        "msKeySystem",
        "msKeys",
        "msLaunchUri",
        "msLockOrientation",
        "msManipulationViewsEnabled",
        "msMatchMedia",
        "msMatchesSelector",
        "msMaxTouchPoints",
        "msOrientation",
        "msOverflowStyle",
        "msPerspective",
        "msPerspectiveOrigin",
        "msPlayToDisabled",
        "msPlayToPreferredSourceUri",
        "msPlayToPrimary",
        "msPointerEnabled",
        "msRegionOverflow",
        "msReleasePointerCapture",
        "msRequestAnimationFrame",
        "msRequestFullscreen",
        "msSaveBlob",
        "msSaveOrOpenBlob",
        "msScrollChaining",
        "msScrollLimit",
        "msScrollLimitXMax",
        "msScrollLimitXMin",
        "msScrollLimitYMax",
        "msScrollLimitYMin",
        "msScrollRails",
        "msScrollSnapPointsX",
        "msScrollSnapPointsY",
        "msScrollSnapType",
        "msScrollSnapX",
        "msScrollSnapY",
        "msScrollTranslation",
        "msSetImmediate",
        "msSetMediaKeys",
        "msSetPointerCapture",
        "msTextCombineHorizontal",
        "msTextSizeAdjust",
        "msToBlob",
        "msTouchAction",
        "msTouchSelect",
        "msTraceAsyncCallbackCompleted",
        "msTraceAsyncCallbackStarting",
        "msTraceAsyncOperationCompleted",
        "msTraceAsyncOperationStarting",
        "msTransform",
        "msTransformOrigin",
        "msTransformStyle",
        "msTransition",
        "msTransitionDelay",
        "msTransitionDuration",
        "msTransitionProperty",
        "msTransitionTimingFunction",
        "msUnlockOrientation",
        "msUpdateAsyncCallbackRelation",
        "msUserSelect",
        "msVisibilityState",
        "msWrapFlow",
        "msWrapMargin",
        "msWrapThrough",
        "msWriteProfilerMark",
        "msZoom",
        "msZoomTo",
        "mt",
        "mul",
        "multiEntry",
        "multiSelectionObj",
        "multiline",
        "multiple",
        "multiply",
        "multiplySelf",
        "multisample",
        "multisampled",
        "mutableFile",
        "muted",
        "n",
        "name",
        "nameProp",
        "namedItem",
        "namedRecordset",
        "names",
        "namespaceURI",
        "namespaces",
        "naturalHeight",
        "naturalWidth",
        "navigate",
        "navigation",
        "navigationMode",
        "navigationPreload",
        "navigationStart",
        "navigator",
        "near",
        "nearestViewportElement",
        "negative",
        "negotiated",
        "netscape",
        "networkState",
        "newScale",
        "newTranslate",
        "newURL",
        "newValue",
        "newValueSpecifiedUnits",
        "newVersion",
        "newhome",
        "next",
        "nextElementSibling",
        "nextHopProtocol",
        "nextNode",
        "nextPage",
        "nextSibling",
        "nickname",
        "noHref",
        "noModule",
        "noResize",
        "noShade",
        "noValidate",
        "noWrap",
        "node",
        "nodeName",
        "nodeType",
        "nodeValue",
        "nonce",
        "normalize",
        "normalizedPathSegList",
        "notationName",
        "notations",
        "note",
        "noteGrainOn",
        "noteOff",
        "noteOn",
        "notify",
        "now",
        "numOctaves",
        "number",
        "numberOfChannels",
        "numberOfInputs",
        "numberOfItems",
        "numberOfOutputs",
        "numberValue",
        "oMatchesSelector",
        "object",
        "object-fit",
        "object-position",
        "objectFit",
        "objectPosition",
        "objectStore",
        "objectStoreNames",
        "objectType",
        "observe",
        "occlusionQuerySet",
        "of",
        "offscreenBuffering",
        "offset",
        "offset-anchor",
        "offset-distance",
        "offset-path",
        "offset-rotate",
        "offsetAnchor",
        "offsetDistance",
        "offsetHeight",
        "offsetLeft",
        "offsetNode",
        "offsetParent",
        "offsetPath",
        "offsetRotate",
        "offsetTop",
        "offsetWidth",
        "offsetX",
        "offsetY",
        "ok",
        "oldURL",
        "oldValue",
        "oldVersion",
        "olderShadowRoot",
        "onLine",
        "onSubmittedWorkDone",
        "onabort",
        "onabsolutedeviceorientation",
        "onactivate",
        "onactive",
        "onaddsourcebuffer",
        "onaddstream",
        "onaddtrack",
        "onafterprint",
        "onafterscriptexecute",
        "onafterupdate",
        "onanimationcancel",
        "onanimationend",
        "onanimationiteration",
        "onanimationstart",
        "onappinstalled",
        "onaudioend",
        "onaudioprocess",
        "onaudiostart",
        "onautocomplete",
        "onautocompleteerror",
        "onauxclick",
        "onbeforeactivate",
        "onbeforecopy",
        "onbeforecut",
        "onbeforedeactivate",
        "onbeforeeditfocus",
        "onbeforeinstallprompt",
        "onbeforepaste",
        "onbeforeprint",
        "onbeforescriptexecute",
        "onbeforeunload",
        "onbeforeupdate",
        "onbeforexrselect",
        "onbegin",
        "onblocked",
        "onblur",
        "onbounce",
        "onboundary",
        "onbufferedamountlow",
        "oncached",
        "oncancel",
        "oncandidatewindowhide",
        "oncandidatewindowshow",
        "oncandidatewindowupdate",
        "oncanplay",
        "oncanplaythrough",
        "once",
        "oncellchange",
        "onchange",
        "oncharacteristicvaluechanged",
        "onchargingchange",
        "onchargingtimechange",
        "onchecking",
        "onclick",
        "onclose",
        "onclosing",
        "oncompassneedscalibration",
        "oncomplete",
        "onconnect",
        "onconnecting",
        "onconnectionavailable",
        "onconnectionstatechange",
        "oncontextmenu",
        "oncontrollerchange",
        "oncontrolselect",
        "oncopy",
        "oncuechange",
        "oncut",
        "ondataavailable",
        "ondatachannel",
        "ondatasetchanged",
        "ondatasetcomplete",
        "ondblclick",
        "ondeactivate",
        "ondevicechange",
        "ondevicelight",
        "ondevicemotion",
        "ondeviceorientation",
        "ondeviceorientationabsolute",
        "ondeviceproximity",
        "ondischargingtimechange",
        "ondisconnect",
        "ondisplay",
        "ondownloading",
        "ondrag",
        "ondragend",
        "ondragenter",
        "ondragexit",
        "ondragleave",
        "ondragover",
        "ondragstart",
        "ondrop",
        "ondurationchange",
        "onemptied",
        "onencrypted",
        "onend",
        "onended",
        "onenter",
        "onenterpictureinpicture",
        "onerror",
        "onerrorupdate",
        "onexit",
        "onfilterchange",
        "onfinish",
        "onfocus",
        "onfocusin",
        "onfocusout",
        "onformdata",
        "onfreeze",
        "onfullscreenchange",
        "onfullscreenerror",
        "ongatheringstatechange",
        "ongattserverdisconnected",
        "ongesturechange",
        "ongestureend",
        "ongesturestart",
        "ongotpointercapture",
        "onhashchange",
        "onhelp",
        "onicecandidate",
        "onicecandidateerror",
        "oniceconnectionstatechange",
        "onicegatheringstatechange",
        "oninactive",
        "oninput",
        "oninputsourceschange",
        "oninvalid",
        "onkeydown",
        "onkeypress",
        "onkeystatuseschange",
        "onkeyup",
        "onlanguagechange",
        "onlayoutcomplete",
        "onleavepictureinpicture",
        "onlevelchange",
        "onload",
        "onloadeddata",
        "onloadedmetadata",
        "onloadend",
        "onloading",
        "onloadingdone",
        "onloadingerror",
        "onloadstart",
        "onlosecapture",
        "onlostpointercapture",
        "only",
        "onmark",
        "onmessage",
        "onmessageerror",
        "onmidimessage",
        "onmousedown",
        "onmouseenter",
        "onmouseleave",
        "onmousemove",
        "onmouseout",
        "onmouseover",
        "onmouseup",
        "onmousewheel",
        "onmove",
        "onmoveend",
        "onmovestart",
        "onmozfullscreenchange",
        "onmozfullscreenerror",
        "onmozorientationchange",
        "onmozpointerlockchange",
        "onmozpointerlockerror",
        "onmscontentzoom",
        "onmsfullscreenchange",
        "onmsfullscreenerror",
        "onmsgesturechange",
        "onmsgesturedoubletap",
        "onmsgestureend",
        "onmsgesturehold",
        "onmsgesturestart",
        "onmsgesturetap",
        "onmsgotpointercapture",
        "onmsinertiastart",
        "onmslostpointercapture",
        "onmsmanipulationstatechanged",
        "onmsneedkey",
        "onmsorientationchange",
        "onmspointercancel",
        "onmspointerdown",
        "onmspointerenter",
        "onmspointerhover",
        "onmspointerleave",
        "onmspointermove",
        "onmspointerout",
        "onmspointerover",
        "onmspointerup",
        "onmssitemodejumplistitemremoved",
        "onmsthumbnailclick",
        "onmute",
        "onnegotiationneeded",
        "onnomatch",
        "onnoupdate",
        "onobsolete",
        "onoffline",
        "ononline",
        "onopen",
        "onorientationchange",
        "onpagechange",
        "onpagehide",
        "onpageshow",
        "onpaste",
        "onpause",
        "onpayerdetailchange",
        "onpaymentmethodchange",
        "onplay",
        "onplaying",
        "onpluginstreamstart",
        "onpointercancel",
        "onpointerdown",
        "onpointerenter",
        "onpointerleave",
        "onpointerlockchange",
        "onpointerlockerror",
        "onpointermove",
        "onpointerout",
        "onpointerover",
        "onpointerrawupdate",
        "onpointerup",
        "onpopstate",
        "onprocessorerror",
        "onprogress",
        "onpropertychange",
        "onratechange",
        "onreading",
        "onreadystatechange",
        "onrejectionhandled",
        "onrelease",
        "onremove",
        "onremovesourcebuffer",
        "onremovestream",
        "onremovetrack",
        "onrepeat",
        "onreset",
        "onresize",
        "onresizeend",
        "onresizestart",
        "onresourcetimingbufferfull",
        "onresult",
        "onresume",
        "onrowenter",
        "onrowexit",
        "onrowsdelete",
        "onrowsinserted",
        "onscroll",
        "onsearch",
        "onsecuritypolicyviolation",
        "onseeked",
        "onseeking",
        "onselect",
        "onselectedcandidatepairchange",
        "onselectend",
        "onselectionchange",
        "onselectstart",
        "onshippingaddresschange",
        "onshippingoptionchange",
        "onshow",
        "onsignalingstatechange",
        "onsoundend",
        "onsoundstart",
        "onsourceclose",
        "onsourceclosed",
        "onsourceended",
        "onsourceopen",
        "onspeechend",
        "onspeechstart",
        "onsqueeze",
        "onsqueezeend",
        "onsqueezestart",
        "onstalled",
        "onstart",
        "onstatechange",
        "onstop",
        "onstorage",
        "onstoragecommit",
        "onsubmit",
        "onsuccess",
        "onsuspend",
        "onterminate",
        "ontextinput",
        "ontimeout",
        "ontimeupdate",
        "ontoggle",
        "ontonechange",
        "ontouchcancel",
        "ontouchend",
        "ontouchmove",
        "ontouchstart",
        "ontrack",
        "ontransitioncancel",
        "ontransitionend",
        "ontransitionrun",
        "ontransitionstart",
        "onuncapturederror",
        "onunhandledrejection",
        "onunload",
        "onunmute",
        "onupdate",
        "onupdateend",
        "onupdatefound",
        "onupdateready",
        "onupdatestart",
        "onupgradeneeded",
        "onuserproximity",
        "onversionchange",
        "onvisibilitychange",
        "onvoiceschanged",
        "onvolumechange",
        "onvrdisplayactivate",
        "onvrdisplayconnect",
        "onvrdisplaydeactivate",
        "onvrdisplaydisconnect",
        "onvrdisplaypresentchange",
        "onwaiting",
        "onwaitingforkey",
        "onwarning",
        "onwebkitanimationend",
        "onwebkitanimationiteration",
        "onwebkitanimationstart",
        "onwebkitcurrentplaybacktargetiswirelesschanged",
        "onwebkitfullscreenchange",
        "onwebkitfullscreenerror",
        "onwebkitkeyadded",
        "onwebkitkeyerror",
        "onwebkitkeymessage",
        "onwebkitneedkey",
        "onwebkitorientationchange",
        "onwebkitplaybacktargetavailabilitychanged",
        "onwebkitpointerlockchange",
        "onwebkitpointerlockerror",
        "onwebkitresourcetimingbufferfull",
        "onwebkittransitionend",
        "onwheel",
        "onzoom",
        "opacity",
        "open",
        "openCursor",
        "openDatabase",
        "openKeyCursor",
        "opened",
        "opener",
        "opera",
        "operation",
        "operationType",
        "operator",
        "opr",
        "optimum",
        "options",
        "or",
        "order",
        "orderX",
        "orderY",
        "ordered",
        "org",
        "organization",
        "orient",
        "orientAngle",
        "orientType",
        "orientation",
        "orientationX",
        "orientationY",
        "orientationZ",
        "origin",
        "originalPolicy",
        "originalTarget",
        "orphans",
        "oscpu",
        "outerHTML",
        "outerHeight",
        "outerText",
        "outerWidth",
        "outline",
        "outline-color",
        "outline-offset",
        "outline-style",
        "outline-width",
        "outlineColor",
        "outlineOffset",
        "outlineStyle",
        "outlineWidth",
        "outputBuffer",
        "outputChannelCount",
        "outputLatency",
        "outputs",
        "overflow",
        "overflow-anchor",
        "overflow-block",
        "overflow-inline",
        "overflow-wrap",
        "overflow-x",
        "overflow-y",
        "overflowAnchor",
        "overflowBlock",
        "overflowInline",
        "overflowWrap",
        "overflowX",
        "overflowY",
        "overrideMimeType",
        "oversample",
        "overscroll-behavior",
        "overscroll-behavior-block",
        "overscroll-behavior-inline",
        "overscroll-behavior-x",
        "overscroll-behavior-y",
        "overscrollBehavior",
        "overscrollBehaviorBlock",
        "overscrollBehaviorInline",
        "overscrollBehaviorX",
        "overscrollBehaviorY",
        "ownKeys",
        "ownerDocument",
        "ownerElement",
        "ownerNode",
        "ownerRule",
        "ownerSVGElement",
        "owningElement",
        "p1",
        "p2",
        "p3",
        "p4",
        "packetSize",
        "packets",
        "pad",
        "padEnd",
        "padStart",
        "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",
        "paddingBlock",
        "paddingBlockEnd",
        "paddingBlockStart",
        "paddingBottom",
        "paddingInline",
        "paddingInlineEnd",
        "paddingInlineStart",
        "paddingLeft",
        "paddingRight",
        "paddingTop",
        "page",
        "page-break-after",
        "page-break-before",
        "page-break-inside",
        "pageBreakAfter",
        "pageBreakBefore",
        "pageBreakInside",
        "pageCount",
        "pageLeft",
        "pageTop",
        "pageX",
        "pageXOffset",
        "pageY",
        "pageYOffset",
        "pages",
        "paint-order",
        "paintOrder",
        "paintRequests",
        "paintType",
        "paintWorklet",
        "palette",
        "pan",
        "panningModel",
        "parameterData",
        "parameters",
        "parent",
        "parentElement",
        "parentNode",
        "parentRule",
        "parentStyleSheet",
        "parentTextEdit",
        "parentWindow",
        "parse",
        "parseAll",
        "parseFloat",
        "parseFromString",
        "parseInt",
        "part",
        "participants",
        "passOp",
        "passive",
        "password",
        "pasteHTML",
        "path",
        "pathLength",
        "pathSegList",
        "pathSegType",
        "pathSegTypeAsLetter",
        "pathname",
        "pattern",
        "patternContentUnits",
        "patternMismatch",
        "patternTransform",
        "patternUnits",
        "pause",
        "pauseAnimations",
        "pauseOnExit",
        "pauseProfilers",
        "pauseTransformFeedback",
        "paused",
        "payerEmail",
        "payerName",
        "payerPhone",
        "paymentManager",
        "pc",
        "peerIdentity",
        "pending",
        "pendingLocalDescription",
        "pendingRemoteDescription",
        "percent",
        "performance",
        "periodicSync",
        "permission",
        "permissionState",
        "permissions",
        "persist",
        "persisted",
        "personalbar",
        "perspective",
        "perspective-origin",
        "perspectiveOrigin",
        "phone",
        "phoneticFamilyName",
        "phoneticGivenName",
        "photo",
        "pictureInPictureElement",
        "pictureInPictureEnabled",
        "pictureInPictureWindow",
        "ping",
        "pipeThrough",
        "pipeTo",
        "pitch",
        "pixelBottom",
        "pixelDepth",
        "pixelHeight",
        "pixelLeft",
        "pixelRight",
        "pixelStorei",
        "pixelTop",
        "pixelUnitToMillimeterX",
        "pixelUnitToMillimeterY",
        "pixelWidth",
        "place-content",
        "place-items",
        "place-self",
        "placeContent",
        "placeItems",
        "placeSelf",
        "placeholder",
        "platform",
        "platformVersion",
        "platforms",
        "play",
        "playEffect",
        "playState",
        "playbackRate",
        "playbackState",
        "playbackTime",
        "played",
        "playoutDelayHint",
        "playsInline",
        "plugins",
        "pluginspage",
        "pname",
        "pointer-events",
        "pointerBeforeReferenceNode",
        "pointerEnabled",
        "pointerEvents",
        "pointerId",
        "pointerLockElement",
        "pointerType",
        "points",
        "pointsAtX",
        "pointsAtY",
        "pointsAtZ",
        "polygonOffset",
        "pop",
        "popDebugGroup",
        "popErrorScope",
        "populateMatrix",
        "popupWindowFeatures",
        "popupWindowName",
        "popupWindowURI",
        "port",
        "port1",
        "port2",
        "ports",
        "posBottom",
        "posHeight",
        "posLeft",
        "posRight",
        "posTop",
        "posWidth",
        "pose",
        "position",
        "positionAlign",
        "positionX",
        "positionY",
        "positionZ",
        "postError",
        "postMessage",
        "postalCode",
        "poster",
        "pow",
        "powerEfficient",
        "powerOff",
        "powerPreference",
        "preMultiplySelf",
        "precision",
        "preferredStyleSheetSet",
        "preferredStylesheetSet",
        "prefix",
        "preload",
        "premultipliedAlpha",
        "prepend",
        "presentation",
        "preserveAlpha",
        "preserveAspectRatio",
        "preserveAspectRatioString",
        "pressed",
        "pressure",
        "prevValue",
        "preventDefault",
        "preventExtensions",
        "preventSilentAccess",
        "previousElementSibling",
        "previousNode",
        "previousPage",
        "previousRect",
        "previousScale",
        "previousSibling",
        "previousTranslate",
        "primaryKey",
        "primitive",
        "primitiveType",
        "primitiveUnits",
        "principals",
        "print",
        "priority",
        "privateKey",
        "probablySupportsContext",
        "process",
        "processIceMessage",
        "processingEnd",
        "processingStart",
        "processorOptions",
        "product",
        "productId",
        "productName",
        "productSub",
        "profile",
        "profileEnd",
        "profiles",
        "projectionMatrix",
        "promise",
        "prompt",
        "properties",
        "propertyIsEnumerable",
        "propertyName",
        "protocol",
        "protocolLong",
        "prototype",
        "provider",
        "pseudoClass",
        "pseudoElement",
        "pt",
        "publicId",
        "publicKey",
        "published",
        "pulse",
        "push",
        "pushDebugGroup",
        "pushErrorScope",
        "pushManager",
        "pushNotification",
        "pushState",
        "put",
        "putImageData",
        "px",
        "quadraticCurveTo",
        "qualifier",
        "quaternion",
        "query",
        "queryCommandEnabled",
        "queryCommandIndeterm",
        "queryCommandState",
        "queryCommandSupported",
        "queryCommandText",
        "queryCommandValue",
        "querySelector",
        "querySelectorAll",
        "querySet",
        "queue",
        "queueMicrotask",
        "quote",
        "quotes",
        "r",
        "r1",
        "r2",
        "race",
        "rad",
        "radiogroup",
        "radiusX",
        "radiusY",
        "random",
        "range",
        "rangeCount",
        "rangeMax",
        "rangeMin",
        "rangeOffset",
        "rangeOverflow",
        "rangeParent",
        "rangeUnderflow",
        "rate",
        "ratio",
        "raw",
        "rawId",
        "read",
        "readAsArrayBuffer",
        "readAsBinaryString",
        "readAsBlob",
        "readAsDataURL",
        "readAsText",
        "readBuffer",
        "readEntries",
        "readOnly",
        "readPixels",
        "readReportRequested",
        "readText",
        "readValue",
        "readable",
        "ready",
        "readyState",
        "reason",
        "reboot",
        "receivedAlert",
        "receiver",
        "receivers",
        "recipient",
        "reconnect",
        "recordNumber",
        "recordsAvailable",
        "recordset",
        "rect",
        "red",
        "redEyeReduction",
        "redirect",
        "redirectCount",
        "redirectEnd",
        "redirectStart",
        "redirected",
        "reduce",
        "reduceRight",
        "reduction",
        "refDistance",
        "refX",
        "refY",
        "referenceNode",
        "referenceSpace",
        "referrer",
        "referrerPolicy",
        "refresh",
        "region",
        "regionAnchorX",
        "regionAnchorY",
        "regionId",
        "regions",
        "register",
        "registerContentHandler",
        "registerElement",
        "registerProperty",
        "registerProtocolHandler",
        "reject",
        "rel",
        "relList",
        "relatedAddress",
        "relatedNode",
        "relatedPort",
        "relatedTarget",
        "release",
        "releaseCapture",
        "releaseEvents",
        "releaseInterface",
        "releaseLock",
        "releasePointerCapture",
        "releaseShaderCompiler",
        "reliable",
        "reliableWrite",
        "reload",
        "rem",
        "remainingSpace",
        "remote",
        "remoteDescription",
        "remove",
        "removeAllRanges",
        "removeAttribute",
        "removeAttributeNS",
        "removeAttributeNode",
        "removeBehavior",
        "removeChild",
        "removeCue",
        "removeEventListener",
        "removeFilter",
        "removeImport",
        "removeItem",
        "removeListener",
        "removeNamedItem",
        "removeNamedItemNS",
        "removeNode",
        "removeParameter",
        "removeProperty",
        "removeRange",
        "removeRegion",
        "removeRule",
        "removeSiteSpecificTrackingException",
        "removeSourceBuffer",
        "removeStream",
        "removeTrack",
        "removeVariable",
        "removeWakeLockListener",
        "removeWebWideTrackingException",
        "removed",
        "removedNodes",
        "renderHeight",
        "renderState",
        "renderTime",
        "renderWidth",
        "renderbufferStorage",
        "renderbufferStorageMultisample",
        "renderedBuffer",
        "renderingMode",
        "renotify",
        "repeat",
        "replace",
        "replaceAdjacentText",
        "replaceAll",
        "replaceChild",
        "replaceChildren",
        "replaceData",
        "replaceId",
        "replaceItem",
        "replaceNode",
        "replaceState",
        "replaceSync",
        "replaceTrack",
        "replaceWholeText",
        "replaceWith",
        "reportValidity",
        "request",
        "requestAdapter",
        "requestAdapterInfo",
        "requestAnimationFrame",
        "requestAutocomplete",
        "requestData",
        "requestDevice",
        "requestFrame",
        "requestFullscreen",
        "requestHitTestSource",
        "requestHitTestSourceForTransientInput",
        "requestId",
        "requestIdleCallback",
        "requestMIDIAccess",
        "requestMediaKeySystemAccess",
        "requestPermission",
        "requestPictureInPicture",
        "requestPointerLock",
        "requestPresent",
        "requestReferenceSpace",
        "requestSession",
        "requestStart",
        "requestStorageAccess",
        "requestSubmit",
        "requestVideoFrameCallback",
        "requestingWindow",
        "requireInteraction",
        "required",
        "requiredExtensions",
        "requiredFeatures",
        "requiredLimits",
        "reset",
        "resetPose",
        "resetTransform",
        "resize",
        "resizeBy",
        "resizeTo",
        "resolve",
        "resolveQuerySet",
        "resolveTarget",
        "resource",
        "response",
        "responseBody",
        "responseEnd",
        "responseReady",
        "responseStart",
        "responseText",
        "responseType",
        "responseURL",
        "responseXML",
        "restartIce",
        "restore",
        "result",
        "resultIndex",
        "resultType",
        "results",
        "resume",
        "resumeProfilers",
        "resumeTransformFeedback",
        "retry",
        "returnValue",
        "rev",
        "reverse",
        "reversed",
        "revocable",
        "revokeObjectURL",
        "rgbColor",
        "right",
        "rightContext",
        "rightDegrees",
        "rightMargin",
        "rightProjectionMatrix",
        "rightViewMatrix",
        "role",
        "rolloffFactor",
        "root",
        "rootBounds",
        "rootElement",
        "rootMargin",
        "rotate",
        "rotateAxisAngle",
        "rotateAxisAngleSelf",
        "rotateFromVector",
        "rotateFromVectorSelf",
        "rotateSelf",
        "rotation",
        "rotationAngle",
        "rotationRate",
        "round",
        "roundRect",
        "row-gap",
        "rowGap",
        "rowIndex",
        "rowSpan",
        "rows",
        "rowsPerImage",
        "rtcpTransport",
        "rtt",
        "ruby-align",
        "ruby-position",
        "rubyAlign",
        "rubyOverhang",
        "rubyPosition",
        "rules",
        "runtime",
        "runtimeStyle",
        "rx",
        "ry",
        "s",
        "safari",
        "sample",
        "sampleCount",
        "sampleCoverage",
        "sampleRate",
        "sampleType",
        "sampler",
        "samplerParameterf",
        "samplerParameteri",
        "sandbox",
        "save",
        "saveData",
        "scale",
        "scale3d",
        "scale3dSelf",
        "scaleNonUniform",
        "scaleNonUniformSelf",
        "scaleSelf",
        "scheme",
        "scissor",
        "scope",
        "scopeName",
        "scoped",
        "screen",
        "screenBrightness",
        "screenEnabled",
        "screenLeft",
        "screenPixelToMillimeterX",
        "screenPixelToMillimeterY",
        "screenTop",
        "screenX",
        "screenY",
        "scriptURL",
        "scripts",
        "scroll",
        "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-type",
        "scrollAmount",
        "scrollBehavior",
        "scrollBy",
        "scrollByLines",
        "scrollByPages",
        "scrollDelay",
        "scrollHeight",
        "scrollIntoView",
        "scrollIntoViewIfNeeded",
        "scrollLeft",
        "scrollLeftMax",
        "scrollMargin",
        "scrollMarginBlock",
        "scrollMarginBlockEnd",
        "scrollMarginBlockStart",
        "scrollMarginBottom",
        "scrollMarginInline",
        "scrollMarginInlineEnd",
        "scrollMarginInlineStart",
        "scrollMarginLeft",
        "scrollMarginRight",
        "scrollMarginTop",
        "scrollMaxX",
        "scrollMaxY",
        "scrollPadding",
        "scrollPaddingBlock",
        "scrollPaddingBlockEnd",
        "scrollPaddingBlockStart",
        "scrollPaddingBottom",
        "scrollPaddingInline",
        "scrollPaddingInlineEnd",
        "scrollPaddingInlineStart",
        "scrollPaddingLeft",
        "scrollPaddingRight",
        "scrollPaddingTop",
        "scrollRestoration",
        "scrollSnapAlign",
        "scrollSnapType",
        "scrollTo",
        "scrollTop",
        "scrollTopMax",
        "scrollWidth",
        "scrollX",
        "scrollY",
        "scrollbar-color",
        "scrollbar-width",
        "scrollbar3dLightColor",
        "scrollbarArrowColor",
        "scrollbarBaseColor",
        "scrollbarColor",
        "scrollbarDarkShadowColor",
        "scrollbarFaceColor",
        "scrollbarHighlightColor",
        "scrollbarShadowColor",
        "scrollbarTrackColor",
        "scrollbarWidth",
        "scrollbars",
        "scrolling",
        "scrollingElement",
        "sctp",
        "sctpCauseCode",
        "sdp",
        "sdpLineNumber",
        "sdpMLineIndex",
        "sdpMid",
        "seal",
        "search",
        "searchBox",
        "searchBoxJavaBridge_",
        "searchParams",
        "sectionRowIndex",
        "secureConnectionStart",
        "security",
        "seed",
        "seekToNextFrame",
        "seekable",
        "seeking",
        "select",
        "selectAllChildren",
        "selectAlternateInterface",
        "selectConfiguration",
        "selectNode",
        "selectNodeContents",
        "selectNodes",
        "selectSingleNode",
        "selectSubString",
        "selected",
        "selectedIndex",
        "selectedOptions",
        "selectedStyleSheetSet",
        "selectedStylesheetSet",
        "selection",
        "selectionDirection",
        "selectionEnd",
        "selectionStart",
        "selector",
        "selectorText",
        "self",
        "send",
        "sendAsBinary",
        "sendBeacon",
        "sender",
        "sentAlert",
        "sentTimestamp",
        "separator",
        "serialNumber",
        "serializeToString",
        "serverTiming",
        "service",
        "serviceWorker",
        "session",
        "sessionId",
        "sessionStorage",
        "set",
        "setActionHandler",
        "setActive",
        "setAlpha",
        "setAppBadge",
        "setAttribute",
        "setAttributeNS",
        "setAttributeNode",
        "setAttributeNodeNS",
        "setBaseAndExtent",
        "setBigInt64",
        "setBigUint64",
        "setBindGroup",
        "setBingCurrentSearchDefault",
        "setBlendConstant",
        "setCapture",
        "setCodecPreferences",
        "setColor",
        "setCompositeOperation",
        "setConfiguration",
        "setCurrentTime",
        "setCustomValidity",
        "setData",
        "setDate",
        "setDragImage",
        "setEnd",
        "setEndAfter",
        "setEndBefore",
        "setEndPoint",
        "setFillColor",
        "setFilterRes",
        "setFloat32",
        "setFloat64",
        "setFloatValue",
        "setFormValue",
        "setFullYear",
        "setHeaderValue",
        "setHours",
        "setIdentityProvider",
        "setImmediate",
        "setIndexBuffer",
        "setInt16",
        "setInt32",
        "setInt8",
        "setInterval",
        "setItem",
        "setKeyframes",
        "setLineCap",
        "setLineDash",
        "setLineJoin",
        "setLineWidth",
        "setLiveSeekableRange",
        "setLocalDescription",
        "setMatrix",
        "setMatrixValue",
        "setMediaKeys",
        "setMilliseconds",
        "setMinutes",
        "setMiterLimit",
        "setMonth",
        "setNamedItem",
        "setNamedItemNS",
        "setNonUserCodeExceptions",
        "setOrientToAngle",
        "setOrientToAuto",
        "setOrientation",
        "setOverrideHistoryNavigationMode",
        "setPaint",
        "setParameter",
        "setParameters",
        "setPeriodicWave",
        "setPipeline",
        "setPointerCapture",
        "setPosition",
        "setPositionState",
        "setPreference",
        "setProperty",
        "setPrototypeOf",
        "setRGBColor",
        "setRGBColorICCColor",
        "setRadius",
        "setRangeText",
        "setRemoteDescription",
        "setRequestHeader",
        "setResizable",
        "setResourceTimingBufferSize",
        "setRotate",
        "setScale",
        "setScissorRect",
        "setSeconds",
        "setSelectionRange",
        "setServerCertificate",
        "setShadow",
        "setSinkId",
        "setSkewX",
        "setSkewY",
        "setStart",
        "setStartAfter",
        "setStartBefore",
        "setStdDeviation",
        "setStencilReference",
        "setStreams",
        "setStringValue",
        "setStrokeColor",
        "setSuggestResult",
        "setTargetAtTime",
        "setTargetValueAtTime",
        "setTime",
        "setTimeout",
        "setTransform",
        "setTranslate",
        "setUTCDate",
        "setUTCFullYear",
        "setUTCHours",
        "setUTCMilliseconds",
        "setUTCMinutes",
        "setUTCMonth",
        "setUTCSeconds",
        "setUint16",
        "setUint32",
        "setUint8",
        "setUri",
        "setValidity",
        "setValueAtTime",
        "setValueCurveAtTime",
        "setVariable",
        "setVelocity",
        "setVersion",
        "setVertexBuffer",
        "setViewport",
        "setYear",
        "settingName",
        "settingValue",
        "sex",
        "shaderLocation",
        "shaderSource",
        "shadowBlur",
        "shadowColor",
        "shadowOffsetX",
        "shadowOffsetY",
        "shadowRoot",
        "shape",
        "shape-image-threshold",
        "shape-margin",
        "shape-outside",
        "shape-rendering",
        "shapeImageThreshold",
        "shapeMargin",
        "shapeOutside",
        "shapeRendering",
        "sheet",
        "shift",
        "shiftKey",
        "shiftLeft",
        "shippingAddress",
        "shippingOption",
        "shippingType",
        "show",
        "showHelp",
        "showModal",
        "showModalDialog",
        "showModelessDialog",
        "showNotification",
        "sidebar",
        "sign",
        "signal",
        "signalingState",
        "signature",
        "silent",
        "sin",
        "singleNodeValue",
        "sinh",
        "sinkId",
        "sittingToStandingTransform",
        "size",
        "sizeToContent",
        "sizeX",
        "sizeZ",
        "sizes",
        "skewX",
        "skewXSelf",
        "skewY",
        "skewYSelf",
        "slice",
        "slope",
        "slot",
        "small",
        "smil",
        "smooth",
        "smoothingTimeConstant",
        "snapToLines",
        "snapshotItem",
        "snapshotLength",
        "some",
        "sort",
        "sortingCode",
        "source",
        "sourceBuffer",
        "sourceBuffers",
        "sourceCapabilities",
        "sourceFile",
        "sourceIndex",
        "sourceMap",
        "sources",
        "spacing",
        "span",
        "speak",
        "speakAs",
        "speaking",
        "species",
        "specified",
        "specularConstant",
        "specularExponent",
        "speechSynthesis",
        "speed",
        "speedOfSound",
        "spellcheck",
        "splice",
        "split",
        "splitText",
        "spreadMethod",
        "sqrt",
        "src",
        "srcElement",
        "srcFactor",
        "srcFilter",
        "srcObject",
        "srcUrn",
        "srcdoc",
        "srclang",
        "srcset",
        "stack",
        "stackTraceLimit",
        "stacktrace",
        "stageParameters",
        "standalone",
        "standby",
        "start",
        "startContainer",
        "startIce",
        "startMessages",
        "startNotifications",
        "startOffset",
        "startProfiling",
        "startRendering",
        "startShark",
        "startTime",
        "startsWith",
        "state",
        "status",
        "statusCode",
        "statusMessage",
        "statusText",
        "statusbar",
        "stdDeviationX",
        "stdDeviationY",
        "stencilBack",
        "stencilClearValue",
        "stencilFront",
        "stencilFunc",
        "stencilFuncSeparate",
        "stencilLoadOp",
        "stencilMask",
        "stencilMaskSeparate",
        "stencilOp",
        "stencilOpSeparate",
        "stencilReadMask",
        "stencilReadOnly",
        "stencilStoreOp",
        "stencilWriteMask",
        "step",
        "stepDown",
        "stepMismatch",
        "stepMode",
        "stepUp",
        "sticky",
        "stitchTiles",
        "stop",
        "stop-color",
        "stop-opacity",
        "stopColor",
        "stopImmediatePropagation",
        "stopNotifications",
        "stopOpacity",
        "stopProfiling",
        "stopPropagation",
        "stopShark",
        "stopped",
        "storage",
        "storageArea",
        "storageName",
        "storageStatus",
        "storageTexture",
        "store",
        "storeOp",
        "storeSiteSpecificTrackingException",
        "storeWebWideTrackingException",
        "stpVersion",
        "stream",
        "streams",
        "stretch",
        "strike",
        "string",
        "stringValue",
        "stringify",
        "stripIndexFormat",
        "stroke",
        "stroke-dasharray",
        "stroke-dashoffset",
        "stroke-linecap",
        "stroke-linejoin",
        "stroke-miterlimit",
        "stroke-opacity",
        "stroke-width",
        "strokeDasharray",
        "strokeDashoffset",
        "strokeLinecap",
        "strokeLinejoin",
        "strokeMiterlimit",
        "strokeOpacity",
        "strokeRect",
        "strokeStyle",
        "strokeText",
        "strokeWidth",
        "style",
        "styleFloat",
        "styleMap",
        "styleMedia",
        "styleSheet",
        "styleSheetSets",
        "styleSheets",
        "sub",
        "subarray",
        "subject",
        "submit",
        "submitFrame",
        "submitter",
        "subscribe",
        "substr",
        "substring",
        "substringData",
        "subtle",
        "subtree",
        "suffix",
        "suffixes",
        "summary",
        "sup",
        "supported",
        "supportedContentEncodings",
        "supportedEntryTypes",
        "supports",
        "supportsSession",
        "surfaceScale",
        "surroundContents",
        "suspend",
        "suspendRedraw",
        "swapCache",
        "swapNode",
        "sweepFlag",
        "symbols",
        "sync",
        "sysexEnabled",
        "system",
        "systemCode",
        "systemId",
        "systemLanguage",
        "systemXDPI",
        "systemYDPI",
        "tBodies",
        "tFoot",
        "tHead",
        "tabIndex",
        "table",
        "table-layout",
        "tableLayout",
        "tableValues",
        "tag",
        "tagName",
        "tagUrn",
        "tags",
        "taintEnabled",
        "takePhoto",
        "takeRecords",
        "tan",
        "tangentialPressure",
        "tanh",
        "target",
        "targetElement",
        "targetRayMode",
        "targetRaySpace",
        "targetTouches",
        "targetX",
        "targetY",
        "targets",
        "tcpType",
        "tee",
        "tel",
        "terminate",
        "test",
        "texImage2D",
        "texImage3D",
        "texParameterf",
        "texParameteri",
        "texStorage2D",
        "texStorage3D",
        "texSubImage2D",
        "texSubImage3D",
        "text",
        "text-align",
        "text-align-last",
        "text-anchor",
        "text-combine-upright",
        "text-decoration",
        "text-decoration-color",
        "text-decoration-line",
        "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-transform",
        "text-underline-offset",
        "text-underline-position",
        "textAlign",
        "textAlignLast",
        "textAnchor",
        "textAutospace",
        "textBaseline",
        "textCombineUpright",
        "textContent",
        "textDecoration",
        "textDecorationBlink",
        "textDecorationColor",
        "textDecorationLine",
        "textDecorationLineThrough",
        "textDecorationNone",
        "textDecorationOverline",
        "textDecorationSkipInk",
        "textDecorationStyle",
        "textDecorationThickness",
        "textDecorationUnderline",
        "textEmphasis",
        "textEmphasisColor",
        "textEmphasisPosition",
        "textEmphasisStyle",
        "textIndent",
        "textJustify",
        "textJustifyTrim",
        "textKashida",
        "textKashidaSpace",
        "textLength",
        "textOrientation",
        "textOverflow",
        "textRendering",
        "textShadow",
        "textTracks",
        "textTransform",
        "textUnderlineOffset",
        "textUnderlinePosition",
        "texture",
        "then",
        "threadId",
        "threshold",
        "thresholds",
        "tiltX",
        "tiltY",
        "time",
        "timeEnd",
        "timeLog",
        "timeOrigin",
        "timeRemaining",
        "timeStamp",
        "timecode",
        "timeline",
        "timelineTime",
        "timeout",
        "timestamp",
        "timestampOffset",
        "timestampWrites",
        "timing",
        "title",
        "to",
        "toArray",
        "toBlob",
        "toDataURL",
        "toDateString",
        "toElement",
        "toExponential",
        "toFixed",
        "toFloat32Array",
        "toFloat64Array",
        "toGMTString",
        "toISOString",
        "toJSON",
        "toLocaleDateString",
        "toLocaleFormat",
        "toLocaleLowerCase",
        "toLocaleString",
        "toLocaleTimeString",
        "toLocaleUpperCase",
        "toLowerCase",
        "toMatrix",
        "toMethod",
        "toPrecision",
        "toPrimitive",
        "toSdp",
        "toSource",
        "toStaticHTML",
        "toString",
        "toStringTag",
        "toSum",
        "toTimeString",
        "toUTCString",
        "toUpperCase",
        "toggle",
        "toggleAttribute",
        "toggleLongPressEnabled",
        "tone",
        "toneBuffer",
        "tooLong",
        "tooShort",
        "toolbar",
        "top",
        "topMargin",
        "topology",
        "total",
        "totalFrameDelay",
        "totalVideoFrames",
        "touch-action",
        "touchAction",
        "touched",
        "touches",
        "trace",
        "track",
        "trackVisibility",
        "transaction",
        "transactions",
        "transceiver",
        "transferControlToOffscreen",
        "transferFromImageBitmap",
        "transferImageBitmap",
        "transferIn",
        "transferOut",
        "transferSize",
        "transferToImageBitmap",
        "transform",
        "transform-box",
        "transform-origin",
        "transform-style",
        "transformBox",
        "transformFeedbackVaryings",
        "transformOrigin",
        "transformPoint",
        "transformString",
        "transformStyle",
        "transformToDocument",
        "transformToFragment",
        "transition",
        "transition-delay",
        "transition-duration",
        "transition-property",
        "transition-timing-function",
        "transitionDelay",
        "transitionDuration",
        "transitionProperty",
        "transitionTimingFunction",
        "translate",
        "translateSelf",
        "translationX",
        "translationY",
        "transport",
        "trim",
        "trimEnd",
        "trimLeft",
        "trimRight",
        "trimStart",
        "trueSpeed",
        "trunc",
        "truncate",
        "trustedTypes",
        "turn",
        "twist",
        "type",
        "typeDetail",
        "typeMismatch",
        "typeMustMatch",
        "types",
        "u2f",
        "ubound",
        "uint16",
        "uint32",
        "uint8",
        "uint8Clamped",
        "unclippedDepth",
        "unconfigure",
        "undefined",
        "unescape",
        "uneval",
        "unicode",
        "unicode-bidi",
        "unicodeBidi",
        "unicodeRange",
        "uniform1f",
        "uniform1fv",
        "uniform1i",
        "uniform1iv",
        "uniform1ui",
        "uniform1uiv",
        "uniform2f",
        "uniform2fv",
        "uniform2i",
        "uniform2iv",
        "uniform2ui",
        "uniform2uiv",
        "uniform3f",
        "uniform3fv",
        "uniform3i",
        "uniform3iv",
        "uniform3ui",
        "uniform3uiv",
        "uniform4f",
        "uniform4fv",
        "uniform4i",
        "uniform4iv",
        "uniform4ui",
        "uniform4uiv",
        "uniformBlockBinding",
        "uniformMatrix2fv",
        "uniformMatrix2x3fv",
        "uniformMatrix2x4fv",
        "uniformMatrix3fv",
        "uniformMatrix3x2fv",
        "uniformMatrix3x4fv",
        "uniformMatrix4fv",
        "uniformMatrix4x2fv",
        "uniformMatrix4x3fv",
        "unique",
        "uniqueID",
        "uniqueNumber",
        "unit",
        "unitType",
        "units",
        "unloadEventEnd",
        "unloadEventStart",
        "unlock",
        "unmap",
        "unmount",
        "unobserve",
        "unpause",
        "unpauseAnimations",
        "unreadCount",
        "unregister",
        "unregisterContentHandler",
        "unregisterProtocolHandler",
        "unscopables",
        "unselectable",
        "unshift",
        "unsubscribe",
        "unsuspendRedraw",
        "unsuspendRedrawAll",
        "unwatch",
        "unwrapKey",
        "upDegrees",
        "upX",
        "upY",
        "upZ",
        "update",
        "updateCommands",
        "updateIce",
        "updateInterval",
        "updatePlaybackRate",
        "updateRenderState",
        "updateSettings",
        "updateTiming",
        "updateViaCache",
        "updateWith",
        "updated",
        "updating",
        "upgrade",
        "upload",
        "uploadTotal",
        "uploaded",
        "upper",
        "upperBound",
        "upperOpen",
        "uri",
        "url",
        "urn",
        "urns",
        "usage",
        "usages",
        "usb",
        "usbVersionMajor",
        "usbVersionMinor",
        "usbVersionSubminor",
        "useCurrentView",
        "useMap",
        "useProgram",
        "usedSpace",
        "user-select",
        "userActivation",
        "userAgent",
        "userAgentData",
        "userChoice",
        "userHandle",
        "userHint",
        "userLanguage",
        "userSelect",
        "userVisibleOnly",
        "username",
        "usernameFragment",
        "utterance",
        "uuid",
        "v8BreakIterator",
        "vAlign",
        "vLink",
        "valid",
        "validate",
        "validateProgram",
        "validationMessage",
        "validity",
        "value",
        "valueAsDate",
        "valueAsNumber",
        "valueAsString",
        "valueInSpecifiedUnits",
        "valueMissing",
        "valueOf",
        "valueText",
        "valueType",
        "values",
        "variable",
        "variant",
        "variationSettings",
        "vector-effect",
        "vectorEffect",
        "velocityAngular",
        "velocityExpansion",
        "velocityX",
        "velocityY",
        "vendor",
        "vendorId",
        "vendorSub",
        "verify",
        "version",
        "vertex",
        "vertexAttrib1f",
        "vertexAttrib1fv",
        "vertexAttrib2f",
        "vertexAttrib2fv",
        "vertexAttrib3f",
        "vertexAttrib3fv",
        "vertexAttrib4f",
        "vertexAttrib4fv",
        "vertexAttribDivisor",
        "vertexAttribDivisorANGLE",
        "vertexAttribI4i",
        "vertexAttribI4iv",
        "vertexAttribI4ui",
        "vertexAttribI4uiv",
        "vertexAttribIPointer",
        "vertexAttribPointer",
        "vertical",
        "vertical-align",
        "verticalAlign",
        "verticalOverflow",
        "vh",
        "vibrate",
        "vibrationActuator",
        "videoBitsPerSecond",
        "videoHeight",
        "videoTracks",
        "videoWidth",
        "view",
        "viewBox",
        "viewBoxString",
        "viewDimension",
        "viewFormats",
        "viewTarget",
        "viewTargetString",
        "viewport",
        "viewportAnchorX",
        "viewportAnchorY",
        "viewportElement",
        "views",
        "violatedDirective",
        "visibility",
        "visibilityState",
        "visible",
        "visualViewport",
        "vlinkColor",
        "vmax",
        "vmin",
        "voice",
        "voiceURI",
        "volume",
        "vrml",
        "vspace",
        "vw",
        "w",
        "wait",
        "waitSync",
        "waiting",
        "wake",
        "wakeLock",
        "wand",
        "warn",
        "wasClean",
        "wasDiscarded",
        "watch",
        "watchAvailability",
        "watchPosition",
        "webdriver",
        "webkitAddKey",
        "webkitAlignContent",
        "webkitAlignItems",
        "webkitAlignSelf",
        "webkitAnimation",
        "webkitAnimationDelay",
        "webkitAnimationDirection",
        "webkitAnimationDuration",
        "webkitAnimationFillMode",
        "webkitAnimationIterationCount",
        "webkitAnimationName",
        "webkitAnimationPlayState",
        "webkitAnimationTimingFunction",
        "webkitAppearance",
        "webkitAudioContext",
        "webkitAudioDecodedByteCount",
        "webkitAudioPannerNode",
        "webkitBackfaceVisibility",
        "webkitBackground",
        "webkitBackgroundAttachment",
        "webkitBackgroundClip",
        "webkitBackgroundColor",
        "webkitBackgroundImage",
        "webkitBackgroundOrigin",
        "webkitBackgroundPosition",
        "webkitBackgroundPositionX",
        "webkitBackgroundPositionY",
        "webkitBackgroundRepeat",
        "webkitBackgroundSize",
        "webkitBackingStorePixelRatio",
        "webkitBorderBottomLeftRadius",
        "webkitBorderBottomRightRadius",
        "webkitBorderImage",
        "webkitBorderImageOutset",
        "webkitBorderImageRepeat",
        "webkitBorderImageSlice",
        "webkitBorderImageSource",
        "webkitBorderImageWidth",
        "webkitBorderRadius",
        "webkitBorderTopLeftRadius",
        "webkitBorderTopRightRadius",
        "webkitBoxAlign",
        "webkitBoxDirection",
        "webkitBoxFlex",
        "webkitBoxOrdinalGroup",
        "webkitBoxOrient",
        "webkitBoxPack",
        "webkitBoxShadow",
        "webkitBoxSizing",
        "webkitCancelAnimationFrame",
        "webkitCancelFullScreen",
        "webkitCancelKeyRequest",
        "webkitCancelRequestAnimationFrame",
        "webkitClearResourceTimings",
        "webkitClosedCaptionsVisible",
        "webkitConvertPointFromNodeToPage",
        "webkitConvertPointFromPageToNode",
        "webkitCreateShadowRoot",
        "webkitCurrentFullScreenElement",
        "webkitCurrentPlaybackTargetIsWireless",
        "webkitDecodedFrameCount",
        "webkitDirectionInvertedFromDevice",
        "webkitDisplayingFullscreen",
        "webkitDroppedFrameCount",
        "webkitEnterFullScreen",
        "webkitEnterFullscreen",
        "webkitEntries",
        "webkitExitFullScreen",
        "webkitExitFullscreen",
        "webkitExitPointerLock",
        "webkitFilter",
        "webkitFlex",
        "webkitFlexBasis",
        "webkitFlexDirection",
        "webkitFlexFlow",
        "webkitFlexGrow",
        "webkitFlexShrink",
        "webkitFlexWrap",
        "webkitFullScreenKeyboardInputAllowed",
        "webkitFullscreenElement",
        "webkitFullscreenEnabled",
        "webkitGenerateKeyRequest",
        "webkitGetAsEntry",
        "webkitGetDatabaseNames",
        "webkitGetEntries",
        "webkitGetEntriesByName",
        "webkitGetEntriesByType",
        "webkitGetFlowByName",
        "webkitGetGamepads",
        "webkitGetImageDataHD",
        "webkitGetNamedFlows",
        "webkitGetRegionFlowRanges",
        "webkitGetUserMedia",
        "webkitHasClosedCaptions",
        "webkitHidden",
        "webkitIDBCursor",
        "webkitIDBDatabase",
        "webkitIDBDatabaseError",
        "webkitIDBDatabaseException",
        "webkitIDBFactory",
        "webkitIDBIndex",
        "webkitIDBKeyRange",
        "webkitIDBObjectStore",
        "webkitIDBRequest",
        "webkitIDBTransaction",
        "webkitImageSmoothingEnabled",
        "webkitIndexedDB",
        "webkitInitMessageEvent",
        "webkitIsFullScreen",
        "webkitJustifyContent",
        "webkitKeys",
        "webkitLineClamp",
        "webkitLineDashOffset",
        "webkitLockOrientation",
        "webkitMask",
        "webkitMaskClip",
        "webkitMaskComposite",
        "webkitMaskImage",
        "webkitMaskOrigin",
        "webkitMaskPosition",
        "webkitMaskPositionX",
        "webkitMaskPositionY",
        "webkitMaskRepeat",
        "webkitMaskSize",
        "webkitMatchesSelector",
        "webkitMediaStream",
        "webkitNotifications",
        "webkitOfflineAudioContext",
        "webkitOrder",
        "webkitOrientation",
        "webkitPeerConnection00",
        "webkitPersistentStorage",
        "webkitPerspective",
        "webkitPerspectiveOrigin",
        "webkitPointerLockElement",
        "webkitPostMessage",
        "webkitPreservesPitch",
        "webkitPutImageDataHD",
        "webkitRTCPeerConnection",
        "webkitRegionOverset",
        "webkitRelativePath",
        "webkitRequestAnimationFrame",
        "webkitRequestFileSystem",
        "webkitRequestFullScreen",
        "webkitRequestFullscreen",
        "webkitRequestPointerLock",
        "webkitResolveLocalFileSystemURL",
        "webkitSetMediaKeys",
        "webkitSetResourceTimingBufferSize",
        "webkitShadowRoot",
        "webkitShowPlaybackTargetPicker",
        "webkitSlice",
        "webkitSpeechGrammar",
        "webkitSpeechGrammarList",
        "webkitSpeechRecognition",
        "webkitSpeechRecognitionError",
        "webkitSpeechRecognitionEvent",
        "webkitStorageInfo",
        "webkitSupportsFullscreen",
        "webkitTemporaryStorage",
        "webkitTextFillColor",
        "webkitTextSizeAdjust",
        "webkitTextStroke",
        "webkitTextStrokeColor",
        "webkitTextStrokeWidth",
        "webkitTransform",
        "webkitTransformOrigin",
        "webkitTransformStyle",
        "webkitTransition",
        "webkitTransitionDelay",
        "webkitTransitionDuration",
        "webkitTransitionProperty",
        "webkitTransitionTimingFunction",
        "webkitURL",
        "webkitUnlockOrientation",
        "webkitUserSelect",
        "webkitVideoDecodedByteCount",
        "webkitVisibilityState",
        "webkitWirelessVideoPlaybackDisabled",
        "webkitdirectory",
        "webkitdropzone",
        "webstore",
        "weight",
        "wgslLanguageFeatures",
        "whatToShow",
        "wheelDelta",
        "wheelDeltaX",
        "wheelDeltaY",
        "whenDefined",
        "which",
        "white-space",
        "whiteSpace",
        "wholeText",
        "widows",
        "width",
        "will-change",
        "willChange",
        "willValidate",
        "window",
        "withCredentials",
        "word-break",
        "word-spacing",
        "word-wrap",
        "wordBreak",
        "wordSpacing",
        "wordWrap",
        "workerStart",
        "wow64",
        "wrap",
        "wrapKey",
        "writable",
        "writableAuxiliaries",
        "write",
        "writeBuffer",
        "writeMask",
        "writeText",
        "writeTexture",
        "writeTimestamp",
        "writeValue",
        "writeWithoutResponse",
        "writeln",
        "writing-mode",
        "writingMode",
        "x",
        "x1",
        "x2",
        "xChannelSelector",
        "xmlEncoding",
        "xmlStandalone",
        "xmlVersion",
        "xmlbase",
        "xmllang",
        "xmlspace",
        "xor",
        "xr",
        "y",
        "y1",
        "y2",
        "yChannelSelector",
        "yandex",
        "z",
        "z-index",
        "zIndex",
        "zoom",
        "zoomAndPan",
        "zoomRectScreen"
      ];
      function find_builtins(reserved) {
        domprops.forEach(add);
        var new_globals = ["Symbol", "Map", "Promise", "Proxy", "Reflect", "Set", "WeakMap", "WeakSet"];
        var objects = {};
        var global_ref = typeof global === "object" ? global : self;
        new_globals.forEach(function(new_global) {
          objects[new_global] = global_ref[new_global] || function() {
          };
        });
        [
          "null",
          "true",
          "false",
          "NaN",
          "Infinity",
          "-Infinity",
          "undefined"
        ].forEach(add);
        [
          Object,
          Array,
          Function,
          Number,
          String,
          Boolean,
          Error,
          Math,
          Date,
          RegExp,
          objects.Symbol,
          ArrayBuffer,
          DataView,
          decodeURI,
          decodeURIComponent,
          encodeURI,
          encodeURIComponent,
          eval,
          EvalError,
          Float32Array,
          Float64Array,
          Int8Array,
          Int16Array,
          Int32Array,
          isFinite,
          isNaN,
          JSON,
          objects.Map,
          parseFloat,
          parseInt,
          objects.Promise,
          objects.Proxy,
          RangeError,
          ReferenceError,
          objects.Reflect,
          objects.Set,
          SyntaxError,
          TypeError,
          Uint8Array,
          Uint8ClampedArray,
          Uint16Array,
          Uint32Array,
          URIError,
          objects.WeakMap,
          objects.WeakSet
        ].forEach(function(ctor) {
          Object.getOwnPropertyNames(ctor).map(add);
          if (ctor.prototype) {
            Object.getOwnPropertyNames(ctor.prototype).map(add);
          }
        });
        function add(name) {
          reserved.add(name);
        }
      }
      function reserve_quoted_keys(ast, reserved) {
        function add(name) {
          push_uniq(reserved, name);
        }
        ast.walk(new TreeWalker(function(node) {
          if (node instanceof AST_ObjectKeyVal && node.quote) {
            add(node.key);
          } else if (node instanceof AST_ObjectProperty && node.quote) {
            add(node.key.name);
          } else if (node instanceof AST_Sub) {
            addStrings(node.property, add);
          }
        }));
      }
      function addStrings(node, add) {
        node.walk(new TreeWalker(function(node2) {
          if (node2 instanceof AST_Sequence) {
            addStrings(node2.tail_node(), add);
          } else if (node2 instanceof AST_String) {
            add(node2.value);
          } else if (node2 instanceof AST_Conditional) {
            addStrings(node2.consequent, add);
            addStrings(node2.alternative, add);
          }
          return true;
        }));
      }
      function mangle_private_properties(ast, options) {
        var cprivate = -1;
        var private_cache = /* @__PURE__ */ new Map();
        var nth_identifier = options.nth_identifier || base54;
        ast = ast.transform(new TreeTransformer(function(node) {
          if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_PrivateIn) {
            node.key.name = mangle_private(node.key.name);
          } else if (node instanceof AST_DotHash) {
            node.property = mangle_private(node.property);
          }
        }));
        return ast;
        function mangle_private(name) {
          let mangled = private_cache.get(name);
          if (!mangled) {
            mangled = nth_identifier.get(++cprivate);
            private_cache.set(name, mangled);
          }
          return mangled;
        }
      }
      function find_annotated_props(ast) {
        var annotated_props = /* @__PURE__ */ new Set();
        walk(ast, (node) => {
          if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash)
            ;
          else if (node instanceof AST_ObjectKeyVal) {
            if (typeof node.key == "string" && has_annotation(node, _MANGLEPROP)) {
              annotated_props.add(node.key);
            }
          } else if (node instanceof AST_ObjectProperty) {
            if (has_annotation(node, _MANGLEPROP)) {
              annotated_props.add(node.key.name);
            }
          } else if (node instanceof AST_Dot) {
            if (has_annotation(node, _MANGLEPROP)) {
              annotated_props.add(node.property);
            }
          } else if (node instanceof AST_Sub) {
            if (node.property instanceof AST_String && has_annotation(node, _MANGLEPROP)) {
              annotated_props.add(node.property.value);
            }
          }
        });
        return annotated_props;
      }
      function mangle_properties(ast, options, annotated_props = find_annotated_props(ast)) {
        options = defaults(options, {
          builtins: false,
          cache: null,
          debug: false,
          keep_quoted: false,
          nth_identifier: base54,
          only_cache: false,
          regex: null,
          reserved: null,
          undeclared: false,
          only_annotated: false
        }, true);
        var nth_identifier = options.nth_identifier;
        var reserved_option = options.reserved;
        if (!Array.isArray(reserved_option))
          reserved_option = [reserved_option];
        var reserved = new Set(reserved_option);
        if (!options.builtins)
          find_builtins(reserved);
        var cname = -1;
        var cache;
        if (options.cache) {
          cache = options.cache.props;
        } else {
          cache = /* @__PURE__ */ new Map();
        }
        var only_annotated = options.only_annotated;
        var regex = options.regex && new RegExp(options.regex);
        var debug = options.debug !== false;
        var debug_name_suffix;
        if (debug) {
          debug_name_suffix = options.debug === true ? "" : options.debug;
        }
        var names_to_mangle = /* @__PURE__ */ new Set();
        var unmangleable = /* @__PURE__ */ new Set();
        cache.forEach((mangled_name) => unmangleable.add(mangled_name));
        var keep_quoted = !!options.keep_quoted;
        ast.walk(new TreeWalker(function(node) {
          if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash)
            ;
          else if (node instanceof AST_ObjectKeyVal) {
            if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
              add(node.key);
            }
          } else if (node instanceof AST_ObjectProperty) {
            if (!keep_quoted || !node.quote) {
              add(node.key.name);
            }
          } else if (node instanceof AST_Dot) {
            var declared = !!options.undeclared;
            if (!declared) {
              var root2 = node;
              while (root2.expression) {
                root2 = root2.expression;
              }
              declared = !(root2.thedef && root2.thedef.undeclared);
            }
            if (declared && (!keep_quoted || !node.quote)) {
              add(node.property);
            }
          } else if (node instanceof AST_Sub) {
            if (!keep_quoted) {
              addStrings(node.property, add);
            }
          } else if (node instanceof AST_Call && node.expression.print_to_string() == "Object.defineProperty") {
            addStrings(node.args[1], add);
          } else if (node instanceof AST_Binary && node.operator === "in") {
            addStrings(node.left, add);
          } else if (node instanceof AST_String && has_annotation(node, _KEY)) {
            add(node.value);
          }
        }));
        return ast.transform(new TreeTransformer(function(node) {
          if (node instanceof AST_ClassPrivateProperty || node instanceof AST_PrivateMethod || node instanceof AST_PrivateGetter || node instanceof AST_PrivateSetter || node instanceof AST_DotHash)
            ;
          else if (node instanceof AST_ObjectKeyVal) {
            if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
              node.key = mangle(node.key);
            }
          } else if (node instanceof AST_ObjectProperty) {
            if (!keep_quoted || !node.quote) {
              node.key.name = mangle(node.key.name);
            }
          } else if (node instanceof AST_Dot) {
            if (!keep_quoted || !node.quote) {
              node.property = mangle(node.property);
            }
          } else if (!keep_quoted && node instanceof AST_Sub) {
            node.property = mangleStrings(node.property);
          } else if (node instanceof AST_Call && node.expression.print_to_string() == "Object.defineProperty") {
            node.args[1] = mangleStrings(node.args[1]);
          } else if (node instanceof AST_Binary && node.operator === "in") {
            node.left = mangleStrings(node.left);
          } else if (node instanceof AST_String && has_annotation(node, _KEY)) {
            clear_annotation(node, _KEY);
            node.value = mangle(node.value);
          }
        }));
        function can_mangle(name) {
          if (unmangleable.has(name))
            return false;
          if (reserved.has(name))
            return false;
          if (options.only_cache) {
            return cache.has(name);
          }
          if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name))
            return false;
          return true;
        }
        function should_mangle(name) {
          if (only_annotated && !annotated_props.has(name))
            return false;
          if (regex && !regex.test(name)) {
            return annotated_props.has(name);
          }
          if (reserved.has(name))
            return false;
          return cache.has(name) || names_to_mangle.has(name);
        }
        function add(name) {
          if (can_mangle(name)) {
            names_to_mangle.add(name);
          }
          if (!should_mangle(name)) {
            unmangleable.add(name);
          }
        }
        function mangle(name) {
          if (!should_mangle(name)) {
            return name;
          }
          var mangled = cache.get(name);
          if (!mangled) {
            if (debug) {
              var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_";
              if (can_mangle(debug_mangled)) {
                mangled = debug_mangled;
              }
            }
            if (!mangled) {
              do {
                mangled = nth_identifier.get(++cname);
              } while (!can_mangle(mangled));
            }
            cache.set(name, mangled);
          }
          return mangled;
        }
        function mangleStrings(node) {
          return node.transform(new TreeTransformer(function(node2) {
            if (node2 instanceof AST_Sequence) {
              var last2 = node2.expressions.length - 1;
              node2.expressions[last2] = mangleStrings(node2.expressions[last2]);
            } else if (node2 instanceof AST_String) {
              clear_annotation(node2, _KEY);
              node2.value = mangle(node2.value);
            } else if (node2 instanceof AST_Conditional) {
              node2.consequent = mangleStrings(node2.consequent);
              node2.alternative = mangleStrings(node2.alternative);
            }
            return node2;
          }));
        }
      }
      var to_ascii = typeof Buffer !== "undefined" ? (b64) => Buffer.from(b64, "base64").toString() : (b64) => decodeURIComponent(escape(atob(b64)));
      var to_base64 = typeof Buffer !== "undefined" ? (str) => Buffer.from(str).toString("base64") : (str) => btoa(unescape(encodeURIComponent(str)));
      function read_source_map(code) {
        var match = /(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(code);
        if (!match) {
          console.warn("inline source map not found");
          return null;
        }
        return to_ascii(match[2]);
      }
      function set_shorthand(name, options, keys) {
        if (options[name]) {
          keys.forEach(function(key) {
            if (options[key]) {
              if (typeof options[key] != "object")
                options[key] = {};
              if (!(name in options[key]))
                options[key][name] = options[name];
            }
          });
        }
      }
      function init_cache(cache) {
        if (!cache)
          return;
        if (!("props" in cache)) {
          cache.props = /* @__PURE__ */ new Map();
        } else if (!(cache.props instanceof Map)) {
          cache.props = map_from_object(cache.props);
        }
      }
      function cache_to_json(cache) {
        return {
          props: map_to_object(cache.props)
        };
      }
      function log_input(files, options, fs2, debug_folder) {
        if (!(fs2 && fs2.writeFileSync && fs2.mkdirSync)) {
          return;
        }
        try {
          fs2.mkdirSync(debug_folder);
        } catch (e) {
          if (e.code !== "EEXIST")
            throw e;
        }
        const log_path = `${debug_folder}/terser-debug-${Math.random() * 9999999 | 0}.log`;
        options = options || {};
        const options_str = JSON.stringify(options, (_key, thing) => {
          if (typeof thing === "function")
            return "[Function " + thing.toString() + "]";
          if (thing instanceof RegExp)
            return "[RegExp " + thing.toString() + "]";
          return thing;
        }, 4);
        const files_str = (file) => {
          if (typeof file === "object" && options.parse && options.parse.spidermonkey) {
            return JSON.stringify(file, null, 2);
          } else if (typeof file === "object") {
            return Object.keys(file).map((key) => key + ": " + files_str(file[key])).join("\n\n");
          } else if (typeof file === "string") {
            return "```\n" + file + "\n```";
          } else {
            return file;
          }
        };
        fs2.writeFileSync(log_path, "Options: \n" + options_str + "\n\nInput files:\n\n" + files_str(files) + "\n");
      }
      function* minify_sync_or_async(files, options, _fs_module) {
        if (_fs_module && typeof process === "object" && process.env && typeof process.env.TERSER_DEBUG_DIR === "string") {
          log_input(files, options, _fs_module, process.env.TERSER_DEBUG_DIR);
        }
        options = defaults(options, {
          compress: {},
          ecma: void 0,
          enclose: false,
          ie8: false,
          keep_classnames: void 0,
          keep_fnames: false,
          mangle: {},
          module: false,
          nameCache: null,
          output: null,
          format: null,
          parse: {},
          rename: void 0,
          safari10: false,
          sourceMap: false,
          spidermonkey: false,
          timings: false,
          toplevel: false,
          warnings: false,
          wrap: false
        }, true);
        var timings = options.timings && {
          start: Date.now()
        };
        if (options.keep_classnames === void 0) {
          options.keep_classnames = options.keep_fnames;
        }
        if (options.rename === void 0) {
          options.rename = options.compress && options.mangle;
        }
        if (options.output && options.format) {
          throw new Error("Please only specify either output or format option, preferrably format.");
        }
        options.format = options.format || options.output || {};
        set_shorthand("ecma", options, ["parse", "compress", "format"]);
        set_shorthand("ie8", options, ["compress", "mangle", "format"]);
        set_shorthand("keep_classnames", options, ["compress", "mangle"]);
        set_shorthand("keep_fnames", options, ["compress", "mangle"]);
        set_shorthand("module", options, ["parse", "compress", "mangle"]);
        set_shorthand("safari10", options, ["mangle", "format"]);
        set_shorthand("toplevel", options, ["compress", "mangle"]);
        set_shorthand("warnings", options, ["compress"]);
        var quoted_props;
        if (options.mangle) {
          options.mangle = defaults(options.mangle, {
            cache: options.nameCache && (options.nameCache.vars || {}),
            eval: false,
            ie8: false,
            keep_classnames: false,
            keep_fnames: false,
            module: false,
            nth_identifier: base54,
            properties: false,
            reserved: [],
            safari10: false,
            toplevel: false
          }, true);
          if (options.mangle.properties) {
            if (typeof options.mangle.properties != "object") {
              options.mangle.properties = {};
            }
            if (options.mangle.properties.keep_quoted) {
              quoted_props = options.mangle.properties.reserved;
              if (!Array.isArray(quoted_props))
                quoted_props = [];
              options.mangle.properties.reserved = quoted_props;
            }
            if (options.nameCache && !("cache" in options.mangle.properties)) {
              options.mangle.properties.cache = options.nameCache.props || {};
            }
          }
          init_cache(options.mangle.cache);
          init_cache(options.mangle.properties.cache);
        }
        if (options.sourceMap) {
          options.sourceMap = defaults(options.sourceMap, {
            asObject: false,
            content: null,
            filename: null,
            includeSources: false,
            root: null,
            url: null
          }, true);
        }
        if (timings)
          timings.parse = Date.now();
        var toplevel;
        if (files instanceof AST_Toplevel) {
          toplevel = files;
        } else {
          if (typeof files == "string" || options.parse.spidermonkey && !Array.isArray(files)) {
            files = [files];
          }
          options.parse = options.parse || {};
          options.parse.toplevel = null;
          if (options.parse.spidermonkey) {
            options.parse.toplevel = AST_Node.from_mozilla_ast(Object.keys(files).reduce(function(toplevel2, name2) {
              if (!toplevel2)
                return files[name2];
              toplevel2.body = toplevel2.body.concat(files[name2].body);
              return toplevel2;
            }, null));
          } else {
            delete options.parse.spidermonkey;
            for (var name in files)
              if (HOP(files, name)) {
                options.parse.filename = name;
                options.parse.toplevel = parse2(files[name], options.parse);
                if (options.sourceMap && options.sourceMap.content == "inline") {
                  if (Object.keys(files).length > 1)
                    throw new Error("inline source map only works with singular input");
                  options.sourceMap.content = read_source_map(files[name]);
                }
              }
          }
          if (options.parse.toplevel === null) {
            throw new Error("no source file given");
          }
          toplevel = options.parse.toplevel;
        }
        if (quoted_props && options.mangle.properties.keep_quoted !== "strict") {
          reserve_quoted_keys(toplevel, quoted_props);
        }
        var annotated_props;
        if (options.mangle && options.mangle.properties) {
          annotated_props = find_annotated_props(toplevel);
        }
        if (options.wrap) {
          toplevel = toplevel.wrap_commonjs(options.wrap);
        }
        if (options.enclose) {
          toplevel = toplevel.wrap_enclose(options.enclose);
        }
        if (timings)
          timings.rename = Date.now();
        if (timings)
          timings.compress = Date.now();
        if (options.compress) {
          toplevel = new Compressor(options.compress, {
            mangle_options: options.mangle
          }).compress(toplevel);
        }
        if (timings)
          timings.scope = Date.now();
        if (options.mangle)
          toplevel.figure_out_scope(options.mangle);
        if (timings)
          timings.mangle = Date.now();
        if (options.mangle) {
          toplevel.compute_char_frequency(options.mangle);
          toplevel.mangle_names(options.mangle);
          toplevel = mangle_private_properties(toplevel, options.mangle);
        }
        if (timings)
          timings.properties = Date.now();
        if (options.mangle && options.mangle.properties) {
          toplevel = mangle_properties(toplevel, options.mangle.properties, annotated_props);
        }
        if (timings)
          timings.format = Date.now();
        var result = {};
        if (options.format.ast) {
          result.ast = toplevel;
        }
        if (options.format.spidermonkey) {
          result.ast = toplevel.to_mozilla_ast();
        }
        let format_options;
        if (!HOP(options.format, "code") || options.format.code) {
          format_options = { ...options.format };
          if (!format_options.ast) {
            format_options._destroy_ast = true;
            walk(toplevel, (node) => {
              if (node instanceof AST_Scope) {
                node.variables = void 0;
                node.enclosed = void 0;
                node.parent_scope = void 0;
              }
              if (node.block_scope) {
                node.block_scope.variables = void 0;
                node.block_scope.enclosed = void 0;
                node.parent_scope = void 0;
              }
            });
          }
          if (options.sourceMap) {
            if (options.sourceMap.includeSources && files instanceof AST_Toplevel) {
              throw new Error("original source content unavailable");
            }
            format_options.source_map = yield* SourceMap({
              file: options.sourceMap.filename,
              orig: options.sourceMap.content,
              root: options.sourceMap.root,
              files: options.sourceMap.includeSources ? files : null
            });
          }
          delete format_options.ast;
          delete format_options.code;
          delete format_options.spidermonkey;
          var stream = OutputStream(format_options);
          toplevel.print(stream);
          result.code = stream.get();
          if (options.sourceMap) {
            Object.defineProperty(result, "map", {
              configurable: true,
              enumerable: true,
              get() {
                const map = format_options.source_map.getEncoded();
                return result.map = options.sourceMap.asObject ? map : JSON.stringify(map);
              },
              set(value) {
                Object.defineProperty(result, "map", {
                  value,
                  writable: true
                });
              }
            });
            result.decoded_map = format_options.source_map.getDecoded();
            if (options.sourceMap.url == "inline") {
              var sourceMap2 = typeof result.map === "object" ? JSON.stringify(result.map) : result.map;
              result.code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + to_base64(sourceMap2);
            } else if (options.sourceMap.url) {
              result.code += "\n//# sourceMappingURL=" + options.sourceMap.url;
            }
          }
        }
        if (options.nameCache && options.mangle) {
          if (options.mangle.cache)
            options.nameCache.vars = cache_to_json(options.mangle.cache);
          if (options.mangle.properties && options.mangle.properties.cache) {
            options.nameCache.props = cache_to_json(options.mangle.properties.cache);
          }
        }
        if (format_options && format_options.source_map) {
          format_options.source_map.destroy();
        }
        if (timings) {
          timings.end = Date.now();
          result.timings = {
            parse: 1e-3 * (timings.rename - timings.parse),
            rename: 1e-3 * (timings.compress - timings.rename),
            compress: 1e-3 * (timings.scope - timings.compress),
            scope: 1e-3 * (timings.mangle - timings.scope),
            mangle: 1e-3 * (timings.properties - timings.mangle),
            properties: 1e-3 * (timings.format - timings.properties),
            format: 1e-3 * (timings.end - timings.format),
            total: 1e-3 * (timings.end - timings.start)
          };
        }
        return result;
      }
      async function minify(files, options, _fs_module) {
        const gen = minify_sync_or_async(files, options, _fs_module);
        let yielded;
        let val;
        do {
          val = gen.next(await yielded);
          yielded = val.value;
        } while (!val.done);
        return val.value;
      }
      function minify_sync(files, options, _fs_module) {
        const gen = minify_sync_or_async(files, options, _fs_module);
        let yielded;
        let val;
        do {
          if (yielded && typeof yielded.then === "function") {
            throw new Error("minify_sync cannot be used with the legacy source-map module");
          }
          val = gen.next(yielded);
          yielded = val.value;
        } while (!val.done);
        return val.value;
      }
      async function run_cli({ program, packageJson, fs: fs2, path }) {
        const skip_keys = /* @__PURE__ */ new Set(["cname", "parent_scope", "scope", "uses_eval", "uses_with"]);
        var files = {};
        var options = {
          compress: false,
          mangle: false
        };
        const default_options = await _default_options();
        program.version(packageJson.name + " " + packageJson.version);
        program.parseArgv = program.parse;
        program.parse = void 0;
        if (process.argv.includes("ast"))
          program.helpInformation = describe_ast;
        else if (process.argv.includes("options"))
          program.helpInformation = function() {
            var text = [];
            for (var option in default_options) {
              text.push("--" + (option === "sourceMap" ? "source-map" : option) + " options:");
              text.push(format_object(default_options[option]));
              text.push("");
            }
            return text.join("\n");
          };
        program.option("-p, --parse <options>", "Specify parser options.", parse_js());
        program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js());
        program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js());
        program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js());
        program.option("-f, --format [options]", "Format options.", parse_js());
        program.option("-b, --beautify [options]", "Alias for --format.", parse_js());
        program.option("-o, --output <file>", "Output file (default STDOUT).");
        program.option("--comments [filter]", "Preserve copyright comments in the output.");
        program.option("--config-file <file>", "Read minify() options from JSON file.");
        program.option("-d, --define <expr>[=value]", "Global definitions.", parse_js("define"));
        program.option("--ecma <version>", "Specify ECMAScript release: 5, 2015, 2016 or 2017...");
        program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values.");
        program.option("--ie8", "Support non-standard Internet Explorer 8.");
        program.option("--keep-classnames", "Do not mangle/drop class names.");
        program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name.");
        program.option("--module", "Input is an ES6 module");
        program.option("--name-cache <file>", "File to hold mangled name mappings.");
        program.option("--rename", "Force symbol expansion.");
        program.option("--no-rename", "Disable symbol expansion.");
        program.option("--safari10", "Support non-standard Safari 10.");
        program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js());
        program.option("--timings", "Display operations run time on STDERR.");
        program.option("--toplevel", "Compress and/or mangle variables in toplevel scope.");
        program.option("--wrap <name>", "Embed everything as a function with \u201Cexports\u201D corresponding to \u201Cname\u201D globally.");
        program.arguments("[files...]").parseArgv(process.argv);
        if (program.configFile) {
          options = JSON.parse(read_file(program.configFile));
        }
        if (!program.output && program.sourceMap && program.sourceMap.url != "inline") {
          fatal("ERROR: cannot write source map to STDOUT");
        }
        [
          "compress",
          "enclose",
          "ie8",
          "mangle",
          "module",
          "safari10",
          "sourceMap",
          "toplevel",
          "wrap"
        ].forEach(function(name) {
          if (name in program) {
            options[name] = program[name];
          }
        });
        if ("ecma" in program) {
          if (program.ecma != (program.ecma | 0))
            fatal("ERROR: ecma must be an integer");
          const ecma = program.ecma | 0;
          if (ecma > 5 && ecma < 2015)
            options.ecma = ecma + 2009;
          else
            options.ecma = ecma;
        }
        if (program.format || program.beautify) {
          const chosenOption = program.format || program.beautify;
          options.format = typeof chosenOption === "object" ? chosenOption : {};
        }
        if (program.comments) {
          if (typeof options.format != "object")
            options.format = {};
          options.format.comments = typeof program.comments == "string" ? program.comments == "false" ? false : program.comments : "some";
        }
        if (program.define) {
          if (typeof options.compress != "object")
            options.compress = {};
          if (typeof options.compress.global_defs != "object")
            options.compress.global_defs = {};
          for (var expr in program.define) {
            options.compress.global_defs[expr] = program.define[expr];
          }
        }
        if (program.keepClassnames) {
          options.keep_classnames = true;
        }
        if (program.keepFnames) {
          options.keep_fnames = true;
        }
        if (program.mangleProps) {
          if (program.mangleProps.domprops) {
            delete program.mangleProps.domprops;
          } else {
            if (typeof program.mangleProps != "object")
              program.mangleProps = {};
            if (!Array.isArray(program.mangleProps.reserved))
              program.mangleProps.reserved = [];
          }
          if (typeof options.mangle != "object")
            options.mangle = {};
          options.mangle.properties = program.mangleProps;
        }
        if (program.nameCache) {
          options.nameCache = JSON.parse(read_file(program.nameCache, "{}"));
        }
        if (program.output == "ast") {
          options.format = {
            ast: true,
            code: false
          };
        }
        if (program.parse) {
          if (!program.parse.acorn && !program.parse.spidermonkey) {
            options.parse = program.parse;
          } else if (program.sourceMap && program.sourceMap.content == "inline") {
            fatal("ERROR: inline source map only works with built-in parser");
          }
        }
        if (~program.rawArgs.indexOf("--rename")) {
          options.rename = true;
        } else if (!program.rename) {
          options.rename = false;
        }
        let convert_path = (name) => name;
        if (typeof program.sourceMap == "object" && "base" in program.sourceMap) {
          convert_path = function() {
            var base = program.sourceMap.base;
            delete options.sourceMap.base;
            return function(name) {
              return path.relative(base, name);
            };
          }();
        }
        let filesList;
        if (options.files && options.files.length) {
          filesList = options.files;
          delete options.files;
        } else if (program.args.length) {
          filesList = program.args;
        }
        if (filesList) {
          simple_glob(filesList).forEach(function(name) {
            files[convert_path(name)] = read_file(name);
          });
        } else {
          await new Promise((resolve) => {
            var chunks = [];
            process.stdin.setEncoding("utf8");
            process.stdin.on("data", function(chunk) {
              chunks.push(chunk);
            }).on("end", function() {
              files = [chunks.join("")];
              resolve();
            });
            process.stdin.resume();
          });
        }
        await run_cli2();
        function convert_ast(fn) {
          return AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
        }
        async function run_cli2() {
          var content = program.sourceMap && program.sourceMap.content;
          if (content && content !== "inline") {
            options.sourceMap.content = read_file(content, content);
          }
          if (program.timings)
            options.timings = true;
          try {
            if (program.parse) {
              if (program.parse.acorn) {
                files = convert_ast(function(toplevel, name) {
                  return require_acorn().parse(files[name], {
                    ecmaVersion: 2018,
                    locations: true,
                    program: toplevel,
                    sourceFile: name,
                    sourceType: options.module || program.parse.module ? "module" : "script"
                  });
                });
              } else if (program.parse.spidermonkey) {
                files = convert_ast(function(toplevel, name) {
                  var obj = JSON.parse(files[name]);
                  if (!toplevel)
                    return obj;
                  toplevel.body = toplevel.body.concat(obj.body);
                  return toplevel;
                });
              }
            }
          } catch (ex) {
            fatal(ex);
          }
          let result;
          try {
            result = await minify(files, options, fs2);
          } catch (ex) {
            if (ex.name == "SyntaxError") {
              print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
              var col = ex.col;
              var lines = files[ex.filename].split(/\r?\n/);
              var line = lines[ex.line - 1];
              if (!line && !col) {
                line = lines[ex.line - 2];
                col = line.length;
              }
              if (line) {
                var limit = 70;
                if (col > limit) {
                  line = line.slice(col - limit);
                  col = limit;
                }
                print_error(line.slice(0, 80));
                print_error(line.slice(0, col).replace(/\S/g, " ") + "^");
              }
            }
            if (ex.defs) {
              print_error("Supported options:");
              print_error(format_object(ex.defs));
            }
            fatal(ex);
            return;
          }
          if (program.output == "ast") {
            if (!options.compress && !options.mangle) {
              result.ast.figure_out_scope({});
            }
            console.log(JSON.stringify(result.ast, function(key, value) {
              if (value)
                switch (key) {
                  case "thedef":
                    return symdef(value);
                  case "enclosed":
                    return value.length ? value.map(symdef) : void 0;
                  case "variables":
                  case "globals":
                    return value.size ? collect_from_map(value, symdef) : void 0;
                }
              if (skip_keys.has(key))
                return;
              if (value instanceof AST_Token)
                return;
              if (value instanceof Map)
                return;
              if (value instanceof AST_Node) {
                var result2 = {
                  _class: "AST_" + value.TYPE
                };
                if (value.block_scope) {
                  result2.variables = value.block_scope.variables;
                  result2.enclosed = value.block_scope.enclosed;
                }
                value.CTOR.PROPS.forEach(function(prop) {
                  if (prop !== "block_scope") {
                    result2[prop] = value[prop];
                  }
                });
                return result2;
              }
              return value;
            }, 2));
          } else if (program.output == "spidermonkey") {
            try {
              const minified = await minify(result.code, {
                compress: false,
                mangle: false,
                format: {
                  ast: true,
                  code: false
                }
              }, fs2);
              console.log(JSON.stringify(minified.ast.to_mozilla_ast(), null, 2));
            } catch (ex) {
              fatal(ex);
              return;
            }
          } else if (program.output) {
            fs2.writeFileSync(program.output, result.code);
            if (options.sourceMap && options.sourceMap.url !== "inline" && result.map) {
              fs2.writeFileSync(program.output + ".map", result.map);
            }
          } else {
            console.log(result.code);
          }
          if (program.nameCache) {
            fs2.writeFileSync(program.nameCache, JSON.stringify(options.nameCache));
          }
          if (result.timings)
            for (var phase in result.timings) {
              print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
            }
        }
        function fatal(message) {
          if (message instanceof Error)
            message = message.stack.replace(/^\S*?Error:/, "ERROR:");
          print_error(message);
          process.exit(1);
        }
        function simple_glob(glob) {
          if (Array.isArray(glob)) {
            return [].concat.apply([], glob.map(simple_glob));
          }
          if (glob && glob.match(/[*?]/)) {
            var dir = path.dirname(glob);
            try {
              var entries = fs2.readdirSync(dir);
            } catch (ex) {
            }
            if (entries) {
              var pattern = "^" + path.basename(glob).replace(/[.+^$[\]\\(){}]/g, "\\$&").replace(/\*/g, "[^/\\\\]*").replace(/\?/g, "[^/\\\\]") + "$";
              var mod = process.platform === "win32" ? "i" : "";
              var rx = new RegExp(pattern, mod);
              var results = entries.filter(function(name) {
                return rx.test(name);
              }).map(function(name) {
                return path.join(dir, name);
              });
              if (results.length)
                return results;
            }
          }
          return [glob];
        }
        function read_file(path2, default_value) {
          try {
            return fs2.readFileSync(path2, "utf8");
          } catch (ex) {
            if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null)
              return default_value;
            fatal(ex);
          }
        }
        function parse_js(flag) {
          return function(value, options2) {
            options2 = options2 || {};
            try {
              walk(parse2(value, { expression: true }), (node) => {
                if (node instanceof AST_Assign) {
                  var name = node.left.print_to_string();
                  var value2 = node.right;
                  if (flag) {
                    options2[name] = value2;
                  } else if (value2 instanceof AST_Array) {
                    options2[name] = value2.elements.map(to_string);
                  } else if (value2 instanceof AST_RegExp) {
                    value2 = value2.value;
                    options2[name] = new RegExp(value2.source, value2.flags);
                  } else {
                    options2[name] = to_string(value2);
                  }
                  return true;
                }
                if (node instanceof AST_Symbol || node instanceof AST_PropAccess) {
                  var name = node.print_to_string();
                  options2[name] = true;
                  return true;
                }
                if (!(node instanceof AST_Sequence))
                  throw node;
                function to_string(value3) {
                  return value3 instanceof AST_Constant ? value3.getValue() : value3.print_to_string({
                    quote_keys: true
                  });
                }
              });
            } catch (ex) {
              if (flag) {
                fatal("Error parsing arguments for '" + flag + "': " + value);
              } else {
                options2[value] = null;
              }
            }
            return options2;
          };
        }
        function symdef(def) {
          var ret = 1e6 + def.id + " " + def.name;
          if (def.mangled_name)
            ret += " " + def.mangled_name;
          return ret;
        }
        function collect_from_map(map, callback) {
          var result = [];
          map.forEach(function(def) {
            result.push(callback(def));
          });
          return result;
        }
        function format_object(obj) {
          var lines = [];
          var padding = "";
          Object.keys(obj).map(function(name) {
            if (padding.length < name.length)
              padding = Array(name.length + 1).join(" ");
            return [name, JSON.stringify(obj[name])];
          }).forEach(function(tokens) {
            lines.push("  " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
          });
          return lines.join("\n");
        }
        function print_error(msg) {
          process.stderr.write(msg);
          process.stderr.write("\n");
        }
        function describe_ast() {
          var out = OutputStream({ beautify: true });
          function doitem(ctor) {
            out.print("AST_" + ctor.TYPE);
            const props = ctor.SELF_PROPS.filter((prop) => !/^\$/.test(prop));
            if (props.length > 0) {
              out.space();
              out.with_parens(function() {
                props.forEach(function(prop, i) {
                  if (i)
                    out.space();
                  out.print(prop);
                });
              });
            }
            if (ctor.documentation) {
              out.space();
              out.print_string(ctor.documentation);
            }
            if (ctor.SUBCLASSES.length > 0) {
              out.space();
              out.with_block(function() {
                ctor.SUBCLASSES.forEach(function(ctor2) {
                  out.indent();
                  doitem(ctor2);
                  out.newline();
                });
              });
            }
          }
          doitem(AST_Node);
          return out + "\n";
        }
      }
      async function _default_options() {
        const defs = {};
        Object.keys(infer_options({ 0: 0 })).forEach((component) => {
          const options = infer_options({
            [component]: { 0: 0 }
          });
          if (options)
            defs[component] = options;
        });
        return defs;
      }
      async function infer_options(options) {
        try {
          await minify("", options);
        } catch (error) {
          return error.defs;
        }
      }
      exports2._default_options = _default_options;
      exports2._run_cli = run_cli;
      exports2.minify = minify;
      exports2.minify_sync = minify_sync;
    });
  }
});

// node_modules/html-minifier-terser/dist/htmlminifier.cjs
var require_htmlminifier = __commonJS({
  "node_modules/html-minifier-terser/dist/htmlminifier.cjs"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var CleanCSS = require_clean_css();
    var entities = require_lib2();
    var RelateURL = require_lib3();
    var terser = require_bundle_min();
    async function replaceAsync(str, regex, asyncFn) {
      const promises = [];
      str.replace(regex, (match, ...args) => {
        const promise = asyncFn(match, ...args);
        promises.push(promise);
      });
      const data = await Promise.all(promises);
      return str.replace(regex, () => data.shift());
    }
    var CaseInsensitiveSet = class extends Set {
      has(str) {
        return super.has(str.toLowerCase());
      }
    };
    var singleAttrIdentifier = /([^\s"'<>/=]+)/;
    var singleAttrAssigns = [/=/];
    var singleAttrValues = [
      /"([^"]*)"+/.source,
      /'([^']*)'+/.source,
      /([^ \t\n\f\r"'`=<>]+)/.source
    ];
    var qnameCapture = function() {
      const combiningChar = "\\u0300-\\u0345\\u0360\\u0361\\u0483-\\u0486\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u064B-\\u0652\\u0670\\u06D6-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A02\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A70\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B82\\u0B83\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C82\\u0C83\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F95\\u0F97\\u0F99-\\u0FAD\\u0FB1-\\u0FB7\\u0FB9\\u20D0-\\u20DC\\u20E1\\u302A-\\u302F\\u3099\\u309A";
      const digit = "0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE7-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29";
      const extender = "\\xB7\\u02D0\\u02D1\\u0387\\u0640\\u0E46\\u0EC6\\u3005\\u3031-\\u3035\\u309D\\u309E\\u30FC-\\u30FE";
      const letter = "A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u0180-\\u01C3\\u01CD-\\u01F0\\u01F4\\u01F5\\u01FA-\\u0217\\u0250-\\u02A8\\u02BB-\\u02C1\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03D6\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2-\\u03F3\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E-\\u0481\\u0490-\\u04C4\\u04C7\\u04C8\\u04CB\\u04CC\\u04D0-\\u04EB\\u04EE-\\u04F5\\u04F8\\u04F9\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0641-\\u064A\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D3\\u06D5\\u06E5\\u06E6\\u0905-\\u0939\\u093D\\u0958-\\u0961\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8B\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AE0\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B36-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB5\\u0BB7-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D60\\u0D61\\u0E01-\\u0E2E\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EAE\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0F40-\\u0F47\\u0F49-\\u0F69\\u10A0-\\u10C5\\u10D0-\\u10F6\\u1100\\u1102\\u1103\\u1105-\\u1107\\u1109\\u110B\\u110C\\u110E-\\u1112\\u113C\\u113E\\u1140\\u114C\\u114E\\u1150\\u1154\\u1155\\u1159\\u115F-\\u1161\\u1163\\u1165\\u1167\\u1169\\u116D\\u116E\\u1172\\u1173\\u1175\\u119E\\u11A8\\u11AB\\u11AE\\u11AF\\u11B7\\u11B8\\u11BA\\u11BC-\\u11C2\\u11EB\\u11F0\\u11F9\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A\\u212B\\u212E\\u2180-\\u2182\\u3007\\u3021-\\u3029\\u3041-\\u3094\\u30A1-\\u30FA\\u3105-\\u312C\\u4E00-\\u9FA5\\uAC00-\\uD7A3";
      const ncname = "[" + letter + "_][" + letter + digit + "\\.\\-_" + combiningChar + extender + "]*";
      return "((?:" + ncname + "\\:)?" + ncname + ")";
    }();
    var startTagOpen = new RegExp("^<" + qnameCapture);
    var startTagClose = /^\s*(\/?)>/;
    var endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>");
    var doctype = /^<!DOCTYPE\s?[^>]+>/i;
    var IS_REGEX_CAPTURING_BROKEN = false;
    "x".replace(/x(.)?/g, function(m, g) {
      IS_REGEX_CAPTURING_BROKEN = g === "";
    });
    var empty = new CaseInsensitiveSet(["area", "base", "basefont", "br", "col", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]);
    var inline = new CaseInsensitiveSet(["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br", "button", "cite", "code", "del", "dfn", "em", "font", "i", "iframe", "img", "input", "ins", "kbd", "label", "map", "noscript", "object", "q", "s", "samp", "script", "select", "small", "span", "strike", "strong", "sub", "sup", "svg", "textarea", "tt", "u", "var"]);
    var closeSelf = new CaseInsensitiveSet(["colgroup", "dd", "dt", "li", "option", "p", "td", "tfoot", "th", "thead", "tr", "source"]);
    var fillAttrs = new CaseInsensitiveSet(["checked", "compact", "declare", "defer", "disabled", "ismap", "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly", "selected"]);
    var special = new CaseInsensitiveSet(["script", "style"]);
    var nonPhrasing = new CaseInsensitiveSet(["address", "article", "aside", "base", "blockquote", "body", "caption", "col", "colgroup", "dd", "details", "dialog", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "legend", "li", "menuitem", "meta", "ol", "optgroup", "option", "param", "rp", "rt", "source", "style", "summary", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul"]);
    var reCache = {};
    function attrForHandler(handler) {
      let pattern = singleAttrIdentifier.source + "(?:\\s*(" + joinSingleAttrAssigns(handler) + ")[ \\t\\n\\f\\r]*(?:" + singleAttrValues.join("|") + "))?";
      if (handler.customAttrSurround) {
        const attrClauses = [];
        for (let i = handler.customAttrSurround.length - 1; i >= 0; i--) {
          attrClauses[i] = "(?:(" + handler.customAttrSurround[i][0].source + ")\\s*" + pattern + "\\s*(" + handler.customAttrSurround[i][1].source + "))";
        }
        attrClauses.push("(?:" + pattern + ")");
        pattern = "(?:" + attrClauses.join("|") + ")";
      }
      return new RegExp("^\\s*" + pattern);
    }
    function joinSingleAttrAssigns(handler) {
      return singleAttrAssigns.concat(handler.customAttrAssign || []).map(function(assign) {
        return "(?:" + assign.source + ")";
      }).join("|");
    }
    var HTMLParser = class {
      constructor(html, handler) {
        this.html = html;
        this.handler = handler;
      }
      async parse() {
        let html = this.html;
        const handler = this.handler;
        const stack = [];
        let lastTag;
        const attribute = attrForHandler(handler);
        let last2, prevTag, nextTag;
        while (html) {
          last2 = html;
          if (!lastTag || !special.has(lastTag)) {
            let textEnd = html.indexOf("<");
            if (textEnd === 0) {
              if (/^<!--/.test(html)) {
                const commentEnd = html.indexOf("-->");
                if (commentEnd >= 0) {
                  if (handler.comment) {
                    await handler.comment(html.substring(4, commentEnd));
                  }
                  html = html.substring(commentEnd + 3);
                  prevTag = "";
                  continue;
                }
              }
              if (/^<!\[/.test(html)) {
                const conditionalEnd = html.indexOf("]>");
                if (conditionalEnd >= 0) {
                  if (handler.comment) {
                    await handler.comment(html.substring(2, conditionalEnd + 1), true);
                  }
                  html = html.substring(conditionalEnd + 2);
                  prevTag = "";
                  continue;
                }
              }
              const doctypeMatch = html.match(doctype);
              if (doctypeMatch) {
                if (handler.doctype) {
                  handler.doctype(doctypeMatch[0]);
                }
                html = html.substring(doctypeMatch[0].length);
                prevTag = "";
                continue;
              }
              const endTagMatch = html.match(endTag);
              if (endTagMatch) {
                html = html.substring(endTagMatch[0].length);
                await replaceAsync(endTagMatch[0], endTag, parseEndTag);
                prevTag = "/" + endTagMatch[1].toLowerCase();
                continue;
              }
              const startTagMatch = parseStartTag(html);
              if (startTagMatch) {
                html = startTagMatch.rest;
                await handleStartTag(startTagMatch);
                prevTag = startTagMatch.tagName.toLowerCase();
                continue;
              }
              if (handler.continueOnParseError) {
                textEnd = html.indexOf("<", 1);
              }
            }
            let text;
            if (textEnd >= 0) {
              text = html.substring(0, textEnd);
              html = html.substring(textEnd);
            } else {
              text = html;
              html = "";
            }
            let nextTagMatch = parseStartTag(html);
            if (nextTagMatch) {
              nextTag = nextTagMatch.tagName;
            } else {
              nextTagMatch = html.match(endTag);
              if (nextTagMatch) {
                nextTag = "/" + nextTagMatch[1];
              } else {
                nextTag = "";
              }
            }
            if (handler.chars) {
              await handler.chars(text, prevTag, nextTag);
            }
            prevTag = "";
          } else {
            const stackedTag = lastTag.toLowerCase();
            const reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp("([\\s\\S]*?)</" + stackedTag + "[^>]*>", "i"));
            html = await replaceAsync(html, reStackedTag, async (_, text) => {
              if (stackedTag !== "script" && stackedTag !== "style" && stackedTag !== "noscript") {
                text = text.replace(/<!--([\s\S]*?)-->/g, "$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g, "$1");
              }
              if (handler.chars) {
                await handler.chars(text);
              }
              return "";
            });
            await parseEndTag("</" + stackedTag + ">", stackedTag);
          }
          if (html === last2) {
            throw new Error("Parse Error: " + html);
          }
        }
        if (!handler.partialMarkup) {
          await parseEndTag();
        }
        function parseStartTag(input) {
          const start = input.match(startTagOpen);
          if (start) {
            const match = {
              tagName: start[1],
              attrs: []
            };
            input = input.slice(start[0].length);
            let end, attr;
            while (!(end = input.match(startTagClose)) && (attr = input.match(attribute))) {
              input = input.slice(attr[0].length);
              match.attrs.push(attr);
            }
            if (end) {
              match.unarySlash = end[1];
              match.rest = input.slice(end[0].length);
              return match;
            }
          }
        }
        async function closeIfFound(tagName) {
          if (findTag(tagName) >= 0) {
            await parseEndTag("", tagName);
            return true;
          }
        }
        async function handleStartTag(match) {
          const tagName = match.tagName;
          let unarySlash = match.unarySlash;
          if (handler.html5) {
            if (lastTag === "p" && nonPhrasing.has(tagName)) {
              await parseEndTag("", lastTag);
            } else if (tagName === "tbody") {
              await closeIfFound("thead");
            } else if (tagName === "tfoot") {
              if (!await closeIfFound("tbody")) {
                await closeIfFound("thead");
              }
            }
            if (tagName === "col" && findTag("colgroup") < 0) {
              lastTag = "colgroup";
              stack.push({ tag: lastTag, attrs: [] });
              if (handler.start) {
                await handler.start(lastTag, [], false, "");
              }
            }
          }
          if (!handler.html5 && !inline.has(tagName)) {
            while (lastTag && inline.has(lastTag)) {
              await parseEndTag("", lastTag);
            }
          }
          if (closeSelf.has(tagName) && lastTag === tagName) {
            await parseEndTag("", tagName);
          }
          const unary = empty.has(tagName) || tagName === "html" && lastTag === "head" || !!unarySlash;
          const attrs = match.attrs.map(function(args) {
            let name, value, customOpen, customClose, customAssign, quote;
            const ncp = 7;
            if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) {
              if (args[3] === "") {
                delete args[3];
              }
              if (args[4] === "") {
                delete args[4];
              }
              if (args[5] === "") {
                delete args[5];
              }
            }
            function populate(index) {
              customAssign = args[index];
              value = args[index + 1];
              if (typeof value !== "undefined") {
                return '"';
              }
              value = args[index + 2];
              if (typeof value !== "undefined") {
                return "'";
              }
              value = args[index + 3];
              if (typeof value === "undefined" && fillAttrs.has(name)) {
                value = name;
              }
              return "";
            }
            let j = 1;
            if (handler.customAttrSurround) {
              for (let i = 0, l = handler.customAttrSurround.length; i < l; i++, j += ncp) {
                name = args[j + 1];
                if (name) {
                  quote = populate(j + 2);
                  customOpen = args[j];
                  customClose = args[j + 6];
                  break;
                }
              }
            }
            if (!name && (name = args[j])) {
              quote = populate(j + 1);
            }
            return {
              name,
              value,
              customAssign: customAssign || "=",
              customOpen: customOpen || "",
              customClose: customClose || "",
              quote: quote || ""
            };
          });
          if (!unary) {
            stack.push({ tag: tagName, attrs });
            lastTag = tagName;
            unarySlash = "";
          }
          if (handler.start) {
            await handler.start(tagName, attrs, unary, unarySlash);
          }
        }
        function findTag(tagName) {
          let pos;
          const needle = tagName.toLowerCase();
          for (pos = stack.length - 1; pos >= 0; pos--) {
            if (stack[pos].tag.toLowerCase() === needle) {
              break;
            }
          }
          return pos;
        }
        async function parseEndTag(tag, tagName) {
          let pos;
          if (tagName) {
            pos = findTag(tagName);
          } else {
            pos = 0;
          }
          if (pos >= 0) {
            for (let i = stack.length - 1; i >= pos; i--) {
              if (handler.end) {
                handler.end(stack[i].tag, stack[i].attrs, i > pos || !tag);
              }
            }
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
          } else if (tagName.toLowerCase() === "br") {
            if (handler.start) {
              await handler.start(tagName, [], true, "");
            }
          } else if (tagName.toLowerCase() === "p") {
            if (handler.start) {
              await handler.start(tagName, [], false, "", true);
            }
            if (handler.end) {
              handler.end(tagName, []);
            }
          }
        }
      }
    };
    var Sorter = class {
      sort(tokens, fromIndex = 0) {
        for (let i = 0, len = this.keys.length; i < len; i++) {
          const key = this.keys[i];
          const token = key.slice(1);
          let index = tokens.indexOf(token, fromIndex);
          if (index !== -1) {
            do {
              if (index !== fromIndex) {
                tokens.splice(index, 1);
                tokens.splice(fromIndex, 0, token);
              }
              fromIndex++;
            } while ((index = tokens.indexOf(token, fromIndex)) !== -1);
            return this[key].sort(tokens, fromIndex);
          }
        }
        return tokens;
      }
    };
    var TokenChain = class {
      add(tokens) {
        tokens.forEach((token) => {
          const key = "$" + token;
          if (!this[key]) {
            this[key] = [];
            this[key].processed = 0;
          }
          this[key].push(tokens);
        });
      }
      createSorter() {
        const sorter = new Sorter();
        sorter.keys = Object.keys(this).sort((j, k) => {
          const m = this[j].length;
          const n = this[k].length;
          return m < n ? 1 : m > n ? -1 : j < k ? -1 : j > k ? 1 : 0;
        }).filter((key) => {
          if (this[key].processed < this[key].length) {
            const token = key.slice(1);
            const chain = new TokenChain();
            this[key].forEach((tokens) => {
              let index;
              while ((index = tokens.indexOf(token)) !== -1) {
                tokens.splice(index, 1);
              }
              tokens.forEach((token2) => {
                this["$" + token2].processed++;
              });
              chain.add(tokens.slice(0));
            });
            sorter[key] = chain.createSorter();
            return true;
          }
          return false;
        });
        return sorter;
      }
    };
    function trimWhitespace(str) {
      return str && str.replace(/^[ \n\r\t\f]+/, "").replace(/[ \n\r\t\f]+$/, "");
    }
    function collapseWhitespaceAll(str) {
      return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) {
        return spaces === "	" ? "	" : spaces.replace(/(^|\xA0+)[^\xA0]+/g, "$1 ");
      });
    }
    function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) {
      let lineBreakBefore = "";
      let lineBreakAfter = "";
      if (options.preserveLineBreaks) {
        str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() {
          lineBreakBefore = "\n";
          return "";
        }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() {
          lineBreakAfter = "\n";
          return "";
        });
      }
      if (trimLeft) {
        str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) {
          const conservative = !lineBreakBefore && options.conservativeCollapse;
          if (conservative && spaces === "	") {
            return "	";
          }
          return spaces.replace(/^[^\xA0]+/, "").replace(/(\xA0+)[^\xA0]+/g, "$1 ") || (conservative ? " " : "");
        });
      }
      if (trimRight) {
        str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) {
          const conservative = !lineBreakAfter && options.conservativeCollapse;
          if (conservative && spaces === "	") {
            return "	";
          }
          return spaces.replace(/[^\xA0]+(\xA0+)/g, " $1").replace(/[^\xA0]+$/, "") || (conservative ? " " : "");
        });
      }
      if (collapseAll) {
        str = collapseWhitespaceAll(str);
      }
      return lineBreakBefore + str + lineBreakAfter;
    }
    var inlineTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "b", "bdi", "bdo", "big", "button", "cite", "code", "del", "dfn", "em", "font", "i", "ins", "kbd", "label", "mark", "math", "nobr", "object", "q", "rp", "rt", "rtc", "ruby", "s", "samp", "select", "small", "span", "strike", "strong", "sub", "sup", "svg", "textarea", "time", "tt", "u", "var"]);
    var inlineTextTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "b", "big", "del", "em", "font", "i", "ins", "kbd", "mark", "nobr", "rp", "s", "samp", "small", "span", "strike", "strong", "sub", "sup", "time", "tt", "u", "var"]);
    var selfClosingInlineTags = /* @__PURE__ */ new Set(["comment", "img", "input", "wbr"]);
    function collapseWhitespaceSmart(str, prevTag, nextTag, options) {
      let trimLeft = prevTag && !selfClosingInlineTags.has(prevTag);
      if (trimLeft && !options.collapseInlineTagWhitespace) {
        trimLeft = prevTag.charAt(0) === "/" ? !inlineTags.has(prevTag.slice(1)) : !inlineTextTags.has(prevTag);
      }
      let trimRight = nextTag && !selfClosingInlineTags.has(nextTag);
      if (trimRight && !options.collapseInlineTagWhitespace) {
        trimRight = nextTag.charAt(0) === "/" ? !inlineTextTags.has(nextTag.slice(1)) : !inlineTags.has(nextTag);
      }
      return collapseWhitespace(str, options, trimLeft, trimRight, prevTag && nextTag);
    }
    function isConditionalComment(text) {
      return /^\[if\s[^\]]+]|\[endif]$/.test(text);
    }
    function isIgnoredComment(text, options) {
      for (let i = 0, len = options.ignoreCustomComments.length; i < len; i++) {
        if (options.ignoreCustomComments[i].test(text)) {
          return true;
        }
      }
      return false;
    }
    function isEventAttribute(attrName, options) {
      const patterns = options.customEventAttributes;
      if (patterns) {
        for (let i = patterns.length; i--; ) {
          if (patterns[i].test(attrName)) {
            return true;
          }
        }
        return false;
      }
      return /^on[a-z]{3,}$/.test(attrName);
    }
    function canRemoveAttributeQuotes(value) {
      return /^[^ \t\n\f\r"'`=<>]+$/.test(value);
    }
    function attributesInclude(attributes, attribute) {
      for (let i = attributes.length; i--; ) {
        if (attributes[i].name.toLowerCase() === attribute) {
          return true;
        }
      }
      return false;
    }
    function isAttributeRedundant(tag, attrName, attrValue, attrs) {
      attrValue = attrValue ? trimWhitespace(attrValue.toLowerCase()) : "";
      return tag === "script" && attrName === "language" && attrValue === "javascript" || tag === "form" && attrName === "method" && attrValue === "get" || tag === "input" && attrName === "type" && attrValue === "text" || tag === "script" && attrName === "charset" && !attributesInclude(attrs, "src") || tag === "a" && attrName === "name" && attributesInclude(attrs, "id") || tag === "area" && attrName === "shape" && attrValue === "rect";
    }
    var executableScriptsMimetypes = /* @__PURE__ */ new Set([
      "text/javascript",
      "text/ecmascript",
      "text/jscript",
      "application/javascript",
      "application/x-javascript",
      "application/ecmascript",
      "module"
    ]);
    var keepScriptsMimetypes = /* @__PURE__ */ new Set([
      "module"
    ]);
    function isScriptTypeAttribute(attrValue = "") {
      attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase();
      return attrValue === "" || executableScriptsMimetypes.has(attrValue);
    }
    function keepScriptTypeAttribute(attrValue = "") {
      attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase();
      return keepScriptsMimetypes.has(attrValue);
    }
    function isExecutableScript(tag, attrs) {
      if (tag !== "script") {
        return false;
      }
      for (let i = 0, len = attrs.length; i < len; i++) {
        const attrName = attrs[i].name.toLowerCase();
        if (attrName === "type") {
          return isScriptTypeAttribute(attrs[i].value);
        }
      }
      return true;
    }
    function isStyleLinkTypeAttribute(attrValue = "") {
      attrValue = trimWhitespace(attrValue).toLowerCase();
      return attrValue === "" || attrValue === "text/css";
    }
    function isStyleSheet(tag, attrs) {
      if (tag !== "style") {
        return false;
      }
      for (let i = 0, len = attrs.length; i < len; i++) {
        const attrName = attrs[i].name.toLowerCase();
        if (attrName === "type") {
          return isStyleLinkTypeAttribute(attrs[i].value);
        }
      }
      return true;
    }
    var isSimpleBoolean = /* @__PURE__ */ new Set(["allowfullscreen", "async", "autofocus", "autoplay", "checked", "compact", "controls", "declare", "default", "defaultchecked", "defaultmuted", "defaultselected", "defer", "disabled", "enabled", "formnovalidate", "hidden", "indeterminate", "inert", "ismap", "itemscope", "loop", "multiple", "muted", "nohref", "noresize", "noshade", "novalidate", "nowrap", "open", "pauseonexit", "readonly", "required", "reversed", "scoped", "seamless", "selected", "sortable", "truespeed", "typemustmatch", "visible"]);
    var isBooleanValue = /* @__PURE__ */ new Set(["true", "false"]);
    function isBooleanAttribute(attrName, attrValue) {
      return isSimpleBoolean.has(attrName) || attrName === "draggable" && !isBooleanValue.has(attrValue);
    }
    function isUriTypeAttribute(attrName, tag) {
      return /^(?:a|area|link|base)$/.test(tag) && attrName === "href" || tag === "img" && /^(?:src|longdesc|usemap)$/.test(attrName) || tag === "object" && /^(?:classid|codebase|data|usemap)$/.test(attrName) || tag === "q" && attrName === "cite" || tag === "blockquote" && attrName === "cite" || (tag === "ins" || tag === "del") && attrName === "cite" || tag === "form" && attrName === "action" || tag === "input" && (attrName === "src" || attrName === "usemap") || tag === "head" && attrName === "profile" || tag === "script" && (attrName === "src" || attrName === "for");
    }
    function isNumberTypeAttribute(attrName, tag) {
      return /^(?:a|area|object|button)$/.test(tag) && attrName === "tabindex" || tag === "input" && (attrName === "maxlength" || attrName === "tabindex") || tag === "select" && (attrName === "size" || attrName === "tabindex") || tag === "textarea" && /^(?:rows|cols|tabindex)$/.test(attrName) || tag === "colgroup" && attrName === "span" || tag === "col" && attrName === "span" || (tag === "th" || tag === "td") && (attrName === "rowspan" || attrName === "colspan");
    }
    function isLinkType(tag, attrs, value) {
      if (tag !== "link") {
        return false;
      }
      for (let i = 0, len = attrs.length; i < len; i++) {
        if (attrs[i].name === "rel" && attrs[i].value === value) {
          return true;
        }
      }
    }
    function isMediaQuery(tag, attrs, attrName) {
      return attrName === "media" && (isLinkType(tag, attrs, "stylesheet") || isStyleSheet(tag, attrs));
    }
    var srcsetTags = /* @__PURE__ */ new Set(["img", "source"]);
    function isSrcset(attrName, tag) {
      return attrName === "srcset" && srcsetTags.has(tag);
    }
    async function cleanAttributeValue(tag, attrName, attrValue, options, attrs) {
      if (isEventAttribute(attrName, options)) {
        attrValue = trimWhitespace(attrValue).replace(/^javascript:\s*/i, "");
        return options.minifyJS(attrValue, true);
      } else if (attrName === "class") {
        attrValue = trimWhitespace(attrValue);
        if (options.sortClassName) {
          attrValue = options.sortClassName(attrValue);
        } else {
          attrValue = collapseWhitespaceAll(attrValue);
        }
        return attrValue;
      } else if (isUriTypeAttribute(attrName, tag)) {
        attrValue = trimWhitespace(attrValue);
        return isLinkType(tag, attrs, "canonical") ? attrValue : options.minifyURLs(attrValue);
      } else if (isNumberTypeAttribute(attrName, tag)) {
        return trimWhitespace(attrValue);
      } else if (attrName === "style") {
        attrValue = trimWhitespace(attrValue);
        if (attrValue) {
          if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) {
            attrValue = attrValue.replace(/\s*;$/, ";");
          }
          attrValue = await options.minifyCSS(attrValue, "inline");
        }
        return attrValue;
      } else if (isSrcset(attrName, tag)) {
        attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) {
          let url = candidate;
          let descriptor = "";
          const match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/);
          if (match) {
            url = url.slice(0, -match[0].length);
            const num = +match[1].slice(0, -1);
            const suffix = match[1].slice(-1);
            if (num !== 1 || suffix !== "x") {
              descriptor = " " + num + suffix;
            }
          }
          return options.minifyURLs(url) + descriptor;
        }).join(", ");
      } else if (isMetaViewport(tag, attrs) && attrName === "content") {
        attrValue = attrValue.replace(/\s+/g, "").replace(/[0-9]+\.[0-9]+/g, function(numString) {
          return (+numString).toString();
        });
      } else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === "content") {
        return collapseWhitespaceAll(attrValue);
      } else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) {
        attrValue = trimWhitespace(attrValue.replace(/ ?[\n\r]+ ?/g, "").replace(/\s{2,}/g, options.conservativeCollapse ? " " : ""));
      } else if (tag === "script" && attrName === "type") {
        attrValue = trimWhitespace(attrValue.replace(/\s*;\s*/g, ";"));
      } else if (isMediaQuery(tag, attrs, attrName)) {
        attrValue = trimWhitespace(attrValue);
        return options.minifyCSS(attrValue, "media");
      }
      return attrValue;
    }
    function isMetaViewport(tag, attrs) {
      if (tag !== "meta") {
        return false;
      }
      for (let i = 0, len = attrs.length; i < len; i++) {
        if (attrs[i].name === "name" && attrs[i].value === "viewport") {
          return true;
        }
      }
    }
    function isContentSecurityPolicy(tag, attrs) {
      if (tag !== "meta") {
        return false;
      }
      for (let i = 0, len = attrs.length; i < len; i++) {
        if (attrs[i].name.toLowerCase() === "http-equiv" && attrs[i].value.toLowerCase() === "content-security-policy") {
          return true;
        }
      }
    }
    function ignoreCSS(id) {
      return "/* clean-css ignore:start */" + id + "/* clean-css ignore:end */";
    }
    function wrapCSS(text, type) {
      switch (type) {
        case "inline":
          return "*{" + text + "}";
        case "media":
          return "@media " + text + "{a{top:0}}";
        default:
          return text;
      }
    }
    function unwrapCSS(text, type) {
      let matches;
      switch (type) {
        case "inline":
          matches = text.match(/^\*\{([\s\S]*)\}$/);
          break;
        case "media":
          matches = text.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/);
          break;
      }
      return matches ? matches[1] : text;
    }
    async function cleanConditionalComment(comment2, options) {
      return options.processConditionalComments ? await replaceAsync(comment2, /^(\[if\s[^\]]+]>)([\s\S]*?)(<!\[endif])$/, async function(match, prefix, text, suffix) {
        return prefix + await minifyHTML(text, options, true) + suffix;
      }) : comment2;
    }
    async function processScript(text, options, currentAttrs) {
      for (let i = 0, len = currentAttrs.length; i < len; i++) {
        if (currentAttrs[i].name.toLowerCase() === "type" && options.processScripts.indexOf(currentAttrs[i].value) > -1) {
          return await minifyHTML(text, options);
        }
      }
      return text;
    }
    var optionalStartTags = /* @__PURE__ */ new Set(["html", "head", "body", "colgroup", "tbody"]);
    var optionalEndTags = /* @__PURE__ */ new Set(["html", "head", "body", "li", "dt", "dd", "p", "rb", "rt", "rtc", "rp", "optgroup", "option", "colgroup", "caption", "thead", "tbody", "tfoot", "tr", "td", "th"]);
    var headerTags = /* @__PURE__ */ new Set(["meta", "link", "script", "style", "template", "noscript"]);
    var descriptionTags = /* @__PURE__ */ new Set(["dt", "dd"]);
    var pBlockTags = /* @__PURE__ */ new Set(["address", "article", "aside", "blockquote", "details", "div", "dl", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "main", "menu", "nav", "ol", "p", "pre", "section", "table", "ul"]);
    var pInlineTags = /* @__PURE__ */ new Set(["a", "audio", "del", "ins", "map", "noscript", "video"]);
    var rubyTags = /* @__PURE__ */ new Set(["rb", "rt", "rtc", "rp"]);
    var rtcTag = /* @__PURE__ */ new Set(["rb", "rtc", "rp"]);
    var optionTag = /* @__PURE__ */ new Set(["option", "optgroup"]);
    var tableContentTags = /* @__PURE__ */ new Set(["tbody", "tfoot"]);
    var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody", "tfoot"]);
    var cellTags = /* @__PURE__ */ new Set(["td", "th"]);
    var topLevelTags = /* @__PURE__ */ new Set(["html", "head", "body"]);
    var compactTags = /* @__PURE__ */ new Set(["html", "body"]);
    var looseTags = /* @__PURE__ */ new Set(["head", "colgroup", "caption"]);
    var trailingTags = /* @__PURE__ */ new Set(["dt", "thead"]);
    var htmlTags = /* @__PURE__ */ new Set(["a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", "b", "base", "basefont", "bdi", "bdo", "bgsound", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "command", "content", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "embed", "fieldset", "figcaption", "figure", "font", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "image", "img", "input", "ins", "isindex", "kbd", "keygen", "label", "legend", "li", "link", "listing", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "multicol", "nav", "nobr", "noembed", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "plaintext", "pre", "progress", "q", "rb", "rp", "rt", "rtc", "ruby", "s", "samp", "script", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "tt", "u", "ul", "var", "video", "wbr", "xmp"]);
    function canRemoveParentTag(optionalStartTag, tag) {
      switch (optionalStartTag) {
        case "html":
        case "head":
          return true;
        case "body":
          return !headerTags.has(tag);
        case "colgroup":
          return tag === "col";
        case "tbody":
          return tag === "tr";
      }
      return false;
    }
    function isStartTagMandatory(optionalEndTag, tag) {
      switch (tag) {
        case "colgroup":
          return optionalEndTag === "colgroup";
        case "tbody":
          return tableSectionTags.has(optionalEndTag);
      }
      return false;
    }
    function canRemovePrecedingTag(optionalEndTag, tag) {
      switch (optionalEndTag) {
        case "html":
        case "head":
        case "body":
        case "colgroup":
        case "caption":
          return true;
        case "li":
        case "optgroup":
        case "tr":
          return tag === optionalEndTag;
        case "dt":
        case "dd":
          return descriptionTags.has(tag);
        case "p":
          return pBlockTags.has(tag);
        case "rb":
        case "rt":
        case "rp":
          return rubyTags.has(tag);
        case "rtc":
          return rtcTag.has(tag);
        case "option":
          return optionTag.has(tag);
        case "thead":
        case "tbody":
          return tableContentTags.has(tag);
        case "tfoot":
          return tag === "tbody";
        case "td":
        case "th":
          return cellTags.has(tag);
      }
      return false;
    }
    var reEmptyAttribute = new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$");
    function canDeleteEmptyAttribute(tag, attrName, attrValue, options) {
      const isValueEmpty = !attrValue || /^\s*$/.test(attrValue);
      if (!isValueEmpty) {
        return false;
      }
      if (typeof options.removeEmptyAttributes === "function") {
        return options.removeEmptyAttributes(attrName, tag);
      }
      return tag === "input" && attrName === "value" || reEmptyAttribute.test(attrName);
    }
    function hasAttrName(name, attrs) {
      for (let i = attrs.length - 1; i >= 0; i--) {
        if (attrs[i].name === name) {
          return true;
        }
      }
      return false;
    }
    function canRemoveElement(tag, attrs) {
      switch (tag) {
        case "textarea":
          return false;
        case "audio":
        case "script":
        case "video":
          if (hasAttrName("src", attrs)) {
            return false;
          }
          break;
        case "iframe":
          if (hasAttrName("src", attrs) || hasAttrName("srcdoc", attrs)) {
            return false;
          }
          break;
        case "object":
          if (hasAttrName("data", attrs)) {
            return false;
          }
          break;
        case "applet":
          if (hasAttrName("code", attrs)) {
            return false;
          }
          break;
      }
      return true;
    }
    function canCollapseWhitespace(tag) {
      return !/^(?:script|style|pre|textarea)$/.test(tag);
    }
    function canTrimWhitespace(tag) {
      return !/^(?:pre|textarea)$/.test(tag);
    }
    async function normalizeAttr(attr, attrs, tag, options) {
      const attrName = options.name(attr.name);
      let attrValue = attr.value;
      if (options.decodeEntities && attrValue) {
        attrValue = entities.decodeHTMLStrict(attrValue);
      }
      if (options.removeRedundantAttributes && isAttributeRedundant(tag, attrName, attrValue, attrs) || options.removeScriptTypeAttributes && tag === "script" && attrName === "type" && isScriptTypeAttribute(attrValue) && !keepScriptTypeAttribute(attrValue) || options.removeStyleLinkTypeAttributes && (tag === "style" || tag === "link") && attrName === "type" && isStyleLinkTypeAttribute(attrValue)) {
        return;
      }
      if (attrValue) {
        attrValue = await cleanAttributeValue(tag, attrName, attrValue, options, attrs);
      }
      if (options.removeEmptyAttributes && canDeleteEmptyAttribute(tag, attrName, attrValue, options)) {
        return;
      }
      if (options.decodeEntities && attrValue) {
        attrValue = attrValue.replace(/&(#?[0-9a-zA-Z]+;)/g, "&amp;$1");
      }
      return {
        attr,
        name: attrName,
        value: attrValue
      };
    }
    function buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr) {
      const attrName = normalized.name;
      let attrValue = normalized.value;
      const attr = normalized.attr;
      let attrQuote = attr.quote;
      let attrFragment;
      let emittedAttrValue;
      if (typeof attrValue !== "undefined" && (!options.removeAttributeQuotes || ~attrValue.indexOf(uidAttr) || !canRemoveAttributeQuotes(attrValue))) {
        if (!options.preventAttributesEscaping) {
          if (typeof options.quoteCharacter === "undefined") {
            const apos = (attrValue.match(/'/g) || []).length;
            const quot = (attrValue.match(/"/g) || []).length;
            attrQuote = apos < quot ? "'" : '"';
          } else {
            attrQuote = options.quoteCharacter === "'" ? "'" : '"';
          }
          if (attrQuote === '"') {
            attrValue = attrValue.replace(/"/g, "&#34;");
          } else {
            attrValue = attrValue.replace(/'/g, "&#39;");
          }
        }
        emittedAttrValue = attrQuote + attrValue + attrQuote;
        if (!isLast && !options.removeTagWhitespace) {
          emittedAttrValue += " ";
        }
      } else if (isLast && !hasUnarySlash && !/\/$/.test(attrValue)) {
        emittedAttrValue = attrValue;
      } else {
        emittedAttrValue = attrValue + " ";
      }
      if (typeof attrValue === "undefined" || options.collapseBooleanAttributes && isBooleanAttribute(attrName.toLowerCase(), attrValue.toLowerCase())) {
        attrFragment = attrName;
        if (!isLast) {
          attrFragment += " ";
        }
      } else {
        attrFragment = attrName + attr.customAssign + emittedAttrValue;
      }
      return attr.customOpen + attrFragment + attr.customClose;
    }
    function identity(value) {
      return value;
    }
    function identityAsync(value) {
      return Promise.resolve(value);
    }
    var processOptions = (inputOptions) => {
      const options = {
        name: function(name) {
          return name.toLowerCase();
        },
        canCollapseWhitespace,
        canTrimWhitespace,
        html5: true,
        ignoreCustomComments: [
          /^!/,
          /^\s*#/
        ],
        ignoreCustomFragments: [
          /<%[\s\S]*?%>/,
          /<\?[\s\S]*?\?>/
        ],
        includeAutoGeneratedTags: true,
        log: identity,
        minifyCSS: identityAsync,
        minifyJS: identity,
        minifyURLs: identity
      };
      Object.keys(inputOptions).forEach(function(key) {
        const option = inputOptions[key];
        if (key === "caseSensitive") {
          if (option) {
            options.name = identity;
          }
        } else if (key === "log") {
          if (typeof option === "function") {
            options.log = option;
          }
        } else if (key === "minifyCSS" && typeof option !== "function") {
          if (!option) {
            return;
          }
          const cleanCssOptions = typeof option === "object" ? option : {};
          options.minifyCSS = async function(text, type) {
            text = text.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/ig, function(match, prefix, quote, url, suffix) {
              return prefix + quote + options.minifyURLs(url) + quote + suffix;
            });
            const inputCSS = wrapCSS(text, type);
            return new Promise((resolve) => {
              new CleanCSS(cleanCssOptions).minify(inputCSS, (_err, output) => {
                if (output.errors.length > 0) {
                  output.errors.forEach(options.log);
                  resolve(text);
                }
                const outputCSS = unwrapCSS(output.styles, type);
                resolve(outputCSS);
              });
            });
          };
        } else if (key === "minifyJS" && typeof option !== "function") {
          if (!option) {
            return;
          }
          const terserOptions = typeof option === "object" ? option : {};
          terserOptions.parse = {
            ...terserOptions.parse,
            bare_returns: false
          };
          options.minifyJS = async function(text, inline2) {
            const start = text.match(/^\s*<!--.*/);
            const code = start ? text.slice(start[0].length).replace(/\n\s*-->\s*$/, "") : text;
            terserOptions.parse.bare_returns = inline2;
            try {
              const result = await terser.minify(code, terserOptions);
              return result.code.replace(/;$/, "");
            } catch (error) {
              options.log(error);
              return text;
            }
          };
        } else if (key === "minifyURLs" && typeof option !== "function") {
          if (!option) {
            return;
          }
          let relateUrlOptions = option;
          if (typeof option === "string") {
            relateUrlOptions = { site: option };
          } else if (typeof option !== "object") {
            relateUrlOptions = {};
          }
          options.minifyURLs = function(text) {
            try {
              return RelateURL.relate(text, relateUrlOptions);
            } catch (err) {
              options.log(err);
              return text;
            }
          };
        } else {
          options[key] = option;
        }
      });
      return options;
    };
    function uniqueId(value) {
      let id;
      do {
        id = Math.random().toString(36).replace(/^0\.[0-9]*/, "");
      } while (~value.indexOf(id));
      return id;
    }
    var specialContentTags = /* @__PURE__ */ new Set(["script", "style"]);
    async function createSortFns(value, options, uidIgnore, uidAttr) {
      const attrChains = options.sortAttributes && /* @__PURE__ */ Object.create(null);
      const classChain = options.sortClassName && new TokenChain();
      function attrNames(attrs) {
        return attrs.map(function(attr) {
          return options.name(attr.name);
        });
      }
      function shouldSkipUID(token, uid) {
        return !uid || token.indexOf(uid) === -1;
      }
      function shouldSkipUIDs(token) {
        return shouldSkipUID(token, uidIgnore) && shouldSkipUID(token, uidAttr);
      }
      async function scan(input) {
        let currentTag, currentType;
        const parser = new HTMLParser(input, {
          start: function(tag, attrs) {
            if (attrChains) {
              if (!attrChains[tag]) {
                attrChains[tag] = new TokenChain();
              }
              attrChains[tag].add(attrNames(attrs).filter(shouldSkipUIDs));
            }
            for (let i = 0, len = attrs.length; i < len; i++) {
              const attr = attrs[i];
              if (classChain && attr.value && options.name(attr.name) === "class") {
                classChain.add(trimWhitespace(attr.value).split(/[ \t\n\f\r]+/).filter(shouldSkipUIDs));
              } else if (options.processScripts && attr.name.toLowerCase() === "type") {
                currentTag = tag;
                currentType = attr.value;
              }
            }
          },
          end: function() {
            currentTag = "";
          },
          chars: async function(text) {
            if (options.processScripts && specialContentTags.has(currentTag) && options.processScripts.indexOf(currentType) > -1) {
              await scan(text);
            }
          }
        });
        await parser.parse();
      }
      const log = options.log;
      options.log = identity;
      options.sortAttributes = false;
      options.sortClassName = false;
      await scan(await minifyHTML(value, options));
      options.log = log;
      if (attrChains) {
        const attrSorters = /* @__PURE__ */ Object.create(null);
        for (const tag in attrChains) {
          attrSorters[tag] = attrChains[tag].createSorter();
        }
        options.sortAttributes = function(tag, attrs) {
          const sorter = attrSorters[tag];
          if (sorter) {
            const attrMap = /* @__PURE__ */ Object.create(null);
            const names = attrNames(attrs);
            names.forEach(function(name, index) {
              (attrMap[name] || (attrMap[name] = [])).push(attrs[index]);
            });
            sorter.sort(names).forEach(function(name, index) {
              attrs[index] = attrMap[name].shift();
            });
          }
        };
      }
      if (classChain) {
        const sorter = classChain.createSorter();
        options.sortClassName = function(value2) {
          return sorter.sort(value2.split(/[ \n\f\r]+/)).join(" ");
        };
      }
    }
    async function minifyHTML(value, options, partialMarkup) {
      if (options.collapseWhitespace) {
        value = collapseWhitespace(value, options, true, true);
      }
      const buffer = [];
      let charsPrevTag;
      let currentChars = "";
      let hasChars;
      let currentTag = "";
      let currentAttrs = [];
      const stackNoTrimWhitespace = [];
      const stackNoCollapseWhitespace = [];
      let optionalStartTag = "";
      let optionalEndTag = "";
      const ignoredMarkupChunks = [];
      const ignoredCustomMarkupChunks = [];
      let uidIgnore;
      let uidAttr;
      let uidPattern;
      value = value.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g, function(match, group1) {
        if (!uidIgnore) {
          uidIgnore = uniqueId(value);
          const pattern = new RegExp("^" + uidIgnore + "([0-9]+)$");
          if (options.ignoreCustomComments) {
            options.ignoreCustomComments = options.ignoreCustomComments.slice();
          } else {
            options.ignoreCustomComments = [];
          }
          options.ignoreCustomComments.push(pattern);
        }
        const token = "<!--" + uidIgnore + ignoredMarkupChunks.length + "-->";
        ignoredMarkupChunks.push(group1);
        return token;
      });
      const customFragments = options.ignoreCustomFragments.map(function(re) {
        return re.source;
      });
      if (customFragments.length) {
        const reCustomIgnore = new RegExp("\\s*(?:" + customFragments.join("|") + ")+\\s*", "g");
        value = value.replace(reCustomIgnore, function(match) {
          if (!uidAttr) {
            uidAttr = uniqueId(value);
            uidPattern = new RegExp("(\\s*)" + uidAttr + "([0-9]+)" + uidAttr + "(\\s*)", "g");
            if (options.minifyCSS) {
              options.minifyCSS = function(fn) {
                return function(text, type) {
                  text = text.replace(uidPattern, function(match2, prefix, index) {
                    const chunks = ignoredCustomMarkupChunks[+index];
                    return chunks[1] + uidAttr + index + uidAttr + chunks[2];
                  });
                  const ids = [];
                  new CleanCSS().minify(wrapCSS(text, type)).warnings.forEach(function(warning) {
                    const match2 = uidPattern.exec(warning);
                    if (match2) {
                      const id = uidAttr + match2[2] + uidAttr;
                      text = text.replace(id, ignoreCSS(id));
                      ids.push(id);
                    }
                  });
                  return fn(text, type).then((chunk) => {
                    ids.forEach(function(id) {
                      chunk = chunk.replace(ignoreCSS(id), id);
                    });
                    return chunk;
                  });
                };
              }(options.minifyCSS);
            }
            if (options.minifyJS) {
              options.minifyJS = function(fn) {
                return function(text, type) {
                  return fn(text.replace(uidPattern, function(match2, prefix, index) {
                    const chunks = ignoredCustomMarkupChunks[+index];
                    return chunks[1] + uidAttr + index + uidAttr + chunks[2];
                  }), type);
                };
              }(options.minifyJS);
            }
          }
          const token = uidAttr + ignoredCustomMarkupChunks.length + uidAttr;
          ignoredCustomMarkupChunks.push(/^(\s*)[\s\S]*?(\s*)$/.exec(match));
          return "	" + token + "	";
        });
      }
      if (options.sortAttributes && typeof options.sortAttributes !== "function" || options.sortClassName && typeof options.sortClassName !== "function") {
        await createSortFns(value, options, uidIgnore, uidAttr);
      }
      function _canCollapseWhitespace(tag, attrs) {
        return options.canCollapseWhitespace(tag, attrs, canCollapseWhitespace);
      }
      function _canTrimWhitespace(tag, attrs) {
        return options.canTrimWhitespace(tag, attrs, canTrimWhitespace);
      }
      function removeStartTag() {
        let index = buffer.length - 1;
        while (index > 0 && !/^<[^/!]/.test(buffer[index])) {
          index--;
        }
        buffer.length = Math.max(0, index);
      }
      function removeEndTag() {
        let index = buffer.length - 1;
        while (index > 0 && !/^<\//.test(buffer[index])) {
          index--;
        }
        buffer.length = Math.max(0, index);
      }
      function trimTrailingWhitespace(index, nextTag) {
        for (let endTag2 = null; index >= 0 && _canTrimWhitespace(endTag2); index--) {
          const str = buffer[index];
          const match = str.match(/^<\/([\w:-]+)>$/);
          if (match) {
            endTag2 = match[1];
          } else if (/>$/.test(str) || (buffer[index] = collapseWhitespaceSmart(str, null, nextTag, options))) {
            break;
          }
        }
      }
      function squashTrailingWhitespace(nextTag) {
        let charsIndex = buffer.length - 1;
        if (buffer.length > 1) {
          const item = buffer[buffer.length - 1];
          if (/^(?:<!|$)/.test(item) && item.indexOf(uidIgnore) === -1) {
            charsIndex--;
          }
        }
        trimTrailingWhitespace(charsIndex, nextTag);
      }
      const parser = new HTMLParser(value, {
        partialMarkup,
        continueOnParseError: options.continueOnParseError,
        customAttrAssign: options.customAttrAssign,
        customAttrSurround: options.customAttrSurround,
        html5: options.html5,
        start: async function(tag, attrs, unary, unarySlash, autoGenerated) {
          if (tag.toLowerCase() === "svg") {
            options = Object.create(options);
            options.caseSensitive = true;
            options.keepClosingSlash = true;
            options.name = identity;
          }
          tag = options.name(tag);
          currentTag = tag;
          charsPrevTag = tag;
          if (!inlineTextTags.has(tag)) {
            currentChars = "";
          }
          hasChars = false;
          currentAttrs = attrs;
          let optional = options.removeOptionalTags;
          if (optional) {
            const htmlTag = htmlTags.has(tag);
            if (htmlTag && canRemoveParentTag(optionalStartTag, tag)) {
              removeStartTag();
            }
            optionalStartTag = "";
            if (htmlTag && canRemovePrecedingTag(optionalEndTag, tag)) {
              removeEndTag();
              optional = !isStartTagMandatory(optionalEndTag, tag);
            }
            optionalEndTag = "";
          }
          if (options.collapseWhitespace) {
            if (!stackNoTrimWhitespace.length) {
              squashTrailingWhitespace(tag);
            }
            if (!unary) {
              if (!_canTrimWhitespace(tag, attrs) || stackNoTrimWhitespace.length) {
                stackNoTrimWhitespace.push(tag);
              }
              if (!_canCollapseWhitespace(tag, attrs) || stackNoCollapseWhitespace.length) {
                stackNoCollapseWhitespace.push(tag);
              }
            }
          }
          const openTag = "<" + tag;
          const hasUnarySlash = unarySlash && options.keepClosingSlash;
          buffer.push(openTag);
          if (options.sortAttributes) {
            options.sortAttributes(tag, attrs);
          }
          const parts = [];
          for (let i = attrs.length, isLast = true; --i >= 0; ) {
            const normalized = await normalizeAttr(attrs[i], attrs, tag, options);
            if (normalized) {
              parts.unshift(buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr));
              isLast = false;
            }
          }
          if (parts.length > 0) {
            buffer.push(" ");
            buffer.push.apply(buffer, parts);
          } else if (optional && optionalStartTags.has(tag)) {
            optionalStartTag = tag;
          }
          buffer.push(buffer.pop() + (hasUnarySlash ? "/" : "") + ">");
          if (autoGenerated && !options.includeAutoGeneratedTags) {
            removeStartTag();
            optionalStartTag = "";
          }
        },
        end: function(tag, attrs, autoGenerated) {
          if (tag.toLowerCase() === "svg") {
            options = Object.getPrototypeOf(options);
          }
          tag = options.name(tag);
          if (options.collapseWhitespace) {
            if (stackNoTrimWhitespace.length) {
              if (tag === stackNoTrimWhitespace[stackNoTrimWhitespace.length - 1]) {
                stackNoTrimWhitespace.pop();
              }
            } else {
              squashTrailingWhitespace("/" + tag);
            }
            if (stackNoCollapseWhitespace.length && tag === stackNoCollapseWhitespace[stackNoCollapseWhitespace.length - 1]) {
              stackNoCollapseWhitespace.pop();
            }
          }
          let isElementEmpty = false;
          if (tag === currentTag) {
            currentTag = "";
            isElementEmpty = !hasChars;
          }
          if (options.removeOptionalTags) {
            if (isElementEmpty && topLevelTags.has(optionalStartTag)) {
              removeStartTag();
            }
            optionalStartTag = "";
            if (htmlTags.has(tag) && optionalEndTag && !trailingTags.has(optionalEndTag) && (optionalEndTag !== "p" || !pInlineTags.has(tag))) {
              removeEndTag();
            }
            optionalEndTag = optionalEndTags.has(tag) ? tag : "";
          }
          if (options.removeEmptyElements && isElementEmpty && canRemoveElement(tag, attrs)) {
            removeStartTag();
            optionalStartTag = "";
            optionalEndTag = "";
          } else {
            if (autoGenerated && !options.includeAutoGeneratedTags) {
              optionalEndTag = "";
            } else {
              buffer.push("</" + tag + ">");
            }
            charsPrevTag = "/" + tag;
            if (!inlineTags.has(tag)) {
              currentChars = "";
            } else if (isElementEmpty) {
              currentChars += "|";
            }
          }
        },
        chars: async function(text, prevTag, nextTag) {
          prevTag = prevTag === "" ? "comment" : prevTag;
          nextTag = nextTag === "" ? "comment" : nextTag;
          if (options.decodeEntities && text && !specialContentTags.has(currentTag)) {
            text = entities.decodeHTML(text);
          }
          if (options.collapseWhitespace) {
            if (!stackNoTrimWhitespace.length) {
              if (prevTag === "comment") {
                const prevComment = buffer[buffer.length - 1];
                if (prevComment.indexOf(uidIgnore) === -1) {
                  if (!prevComment) {
                    prevTag = charsPrevTag;
                  }
                  if (buffer.length > 1 && (!prevComment || !options.conservativeCollapse && / $/.test(currentChars))) {
                    const charsIndex = buffer.length - 2;
                    buffer[charsIndex] = buffer[charsIndex].replace(/\s+$/, function(trailingSpaces) {
                      text = trailingSpaces + text;
                      return "";
                    });
                  }
                }
              }
              if (prevTag) {
                if (prevTag === "/nobr" || prevTag === "wbr") {
                  if (/^\s/.test(text)) {
                    let tagIndex = buffer.length - 1;
                    while (tagIndex > 0 && buffer[tagIndex].lastIndexOf("<" + prevTag) !== 0) {
                      tagIndex--;
                    }
                    trimTrailingWhitespace(tagIndex - 1, "br");
                  }
                } else if (inlineTextTags.has(prevTag.charAt(0) === "/" ? prevTag.slice(1) : prevTag)) {
                  text = collapseWhitespace(text, options, /(?:^|\s)$/.test(currentChars));
                }
              }
              if (prevTag || nextTag) {
                text = collapseWhitespaceSmart(text, prevTag, nextTag, options);
              } else {
                text = collapseWhitespace(text, options, true, true);
              }
              if (!text && /\s$/.test(currentChars) && prevTag && prevTag.charAt(0) === "/") {
                trimTrailingWhitespace(buffer.length - 1, nextTag);
              }
            }
            if (!stackNoCollapseWhitespace.length && nextTag !== "html" && !(prevTag && nextTag)) {
              text = collapseWhitespace(text, options, false, false, true);
            }
          }
          if (options.processScripts && specialContentTags.has(currentTag)) {
            text = await processScript(text, options, currentAttrs);
          }
          if (isExecutableScript(currentTag, currentAttrs)) {
            text = await options.minifyJS(text);
          }
          if (isStyleSheet(currentTag, currentAttrs)) {
            text = await options.minifyCSS(text);
          }
          if (options.removeOptionalTags && text) {
            if (optionalStartTag === "html" || optionalStartTag === "body" && !/^\s/.test(text)) {
              removeStartTag();
            }
            optionalStartTag = "";
            if (compactTags.has(optionalEndTag) || looseTags.has(optionalEndTag) && !/^\s/.test(text)) {
              removeEndTag();
            }
            optionalEndTag = "";
          }
          charsPrevTag = /^\s*$/.test(text) ? prevTag : "comment";
          if (options.decodeEntities && text && !specialContentTags.has(currentTag)) {
            text = text.replace(/&((?:Iacute|aacute|uacute|plusmn|Otilde|otilde|agrave|Agrave|Yacute|yacute|Oslash|oslash|atilde|Atilde|brvbar|ccedil|Ccedil|Ograve|curren|divide|eacute|Eacute|ograve|Oacute|egrave|Egrave|Ugrave|frac12|frac14|frac34|ugrave|oacute|iacute|Ntilde|ntilde|Uacute|middot|igrave|Igrave|iquest|Aacute|cedil|laquo|micro|iexcl|Icirc|icirc|acirc|Ucirc|Ecirc|ocirc|Ocirc|ecirc|ucirc|Aring|aring|AElig|aelig|acute|pound|raquo|Acirc|times|THORN|szlig|thorn|COPY|auml|ordf|ordm|Uuml|macr|uuml|Auml|ouml|Ouml|para|nbsp|euml|quot|QUOT|Euml|yuml|cent|sect|copy|sup1|sup2|sup3|iuml|Iuml|ETH|shy|reg|not|yen|amp|AMP|REG|uml|eth|deg|gt|GT|LT|lt)(?!;)|(?:#?[0-9a-zA-Z]+;))/g, "&amp$1").replace(/</g, "&lt;");
          }
          if (uidPattern && options.collapseWhitespace && stackNoTrimWhitespace.length) {
            text = text.replace(uidPattern, function(match, prefix, index) {
              return ignoredCustomMarkupChunks[+index][0];
            });
          }
          currentChars += text;
          if (text) {
            hasChars = true;
          }
          buffer.push(text);
        },
        comment: async function(text, nonStandard) {
          const prefix = nonStandard ? "<!" : "<!--";
          const suffix = nonStandard ? ">" : "-->";
          if (isConditionalComment(text)) {
            text = prefix + await cleanConditionalComment(text, options) + suffix;
          } else if (options.removeComments) {
            if (isIgnoredComment(text, options)) {
              text = "<!--" + text + "-->";
            } else {
              text = "";
            }
          } else {
            text = prefix + text + suffix;
          }
          if (options.removeOptionalTags && text) {
            optionalStartTag = "";
            optionalEndTag = "";
          }
          buffer.push(text);
        },
        doctype: function(doctype2) {
          buffer.push(options.useShortDoctype ? "<!doctype" + (options.removeTagWhitespace ? "" : " ") + "html>" : collapseWhitespaceAll(doctype2));
        }
      });
      await parser.parse();
      if (options.removeOptionalTags) {
        if (topLevelTags.has(optionalStartTag)) {
          removeStartTag();
        }
        if (optionalEndTag && !trailingTags.has(optionalEndTag)) {
          removeEndTag();
        }
      }
      if (options.collapseWhitespace) {
        squashTrailingWhitespace("br");
      }
      return joinResultSegments(buffer, options, uidPattern ? function(str) {
        return str.replace(uidPattern, function(match, prefix, index, suffix) {
          let chunk = ignoredCustomMarkupChunks[+index][0];
          if (options.collapseWhitespace) {
            if (prefix !== "	") {
              chunk = prefix + chunk;
            }
            if (suffix !== "	") {
              chunk += suffix;
            }
            return collapseWhitespace(chunk, {
              preserveLineBreaks: options.preserveLineBreaks,
              conservativeCollapse: !options.trimCustomFragments
            }, /^[ \n\r\t\f]/.test(chunk), /[ \n\r\t\f]$/.test(chunk));
          }
          return chunk;
        });
      } : identity, uidIgnore ? function(str) {
        return str.replace(new RegExp("<!--" + uidIgnore + "([0-9]+)-->", "g"), function(match, index) {
          return ignoredMarkupChunks[+index];
        });
      } : identity);
    }
    function joinResultSegments(results, options, restoreCustom, restoreIgnore) {
      let str;
      const maxLineLength = options.maxLineLength;
      const noNewlinesBeforeTagClose = options.noNewlinesBeforeTagClose;
      if (maxLineLength) {
        let line = "";
        const lines = [];
        while (results.length) {
          const len = line.length;
          const end = results[0].indexOf("\n");
          const isClosingTag = Boolean(results[0].match(endTag));
          const shouldKeepSameLine = noNewlinesBeforeTagClose && isClosingTag;
          if (end < 0) {
            line += restoreIgnore(restoreCustom(results.shift()));
          } else {
            line += restoreIgnore(restoreCustom(results[0].slice(0, end)));
            results[0] = results[0].slice(end + 1);
          }
          if (len > 0 && line.length > maxLineLength && !shouldKeepSameLine) {
            lines.push(line.slice(0, len));
            line = line.slice(len);
          } else if (end >= 0) {
            lines.push(line);
            line = "";
          }
        }
        if (line) {
          lines.push(line);
        }
        str = lines.join("\n");
      } else {
        str = restoreIgnore(restoreCustom(results.join("")));
      }
      return options.collapseWhitespace ? collapseWhitespace(str, options, true, true) : str;
    }
    var minify = async function(value, options) {
      const start = Date.now();
      options = processOptions(options || {});
      const result = await minifyHTML(value, options);
      options.log("minified in: " + (Date.now() - start) + "ms");
      return result;
    };
    var htmlminifier = { minify };
    exports.default = htmlminifier;
    exports.minify = minify;
  }
});

// node_modules/readable-stream/lib/internal/streams/stream-browser.js
var require_stream_browser = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/stream-browser.js"(exports, module2) {
    module2.exports = require("events").EventEmitter;
  }
});

// node_modules/readable-stream/lib/internal/streams/buffer_list.js
var require_buffer_list = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/buffer_list.js"(exports, module2) {
    "use strict";
    function ownKeys(object, enumerableOnly) {
      var keys = Object.keys(object);
      if (Object.getOwnPropertySymbols) {
        var symbols = Object.getOwnPropertySymbols(object);
        enumerableOnly && (symbols = symbols.filter(function(sym) {
          return Object.getOwnPropertyDescriptor(object, sym).enumerable;
        })), keys.push.apply(keys, symbols);
      }
      return keys;
    }
    function _objectSpread(target) {
      for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i] != null ? arguments[i] : {};
        i % 2 ? ownKeys(Object(source), true).forEach(function(key) {
          _defineProperty(target, key, source[key]);
        }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
        });
      }
      return target;
    }
    function _defineProperty(obj, key, value) {
      key = _toPropertyKey(key);
      if (key in obj) {
        Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
      } else {
        obj[key] = value;
      }
      return obj;
    }
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
      }
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor)
          descriptor.writable = true;
        Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      if (protoProps)
        _defineProperties(Constructor.prototype, protoProps);
      if (staticProps)
        _defineProperties(Constructor, staticProps);
      Object.defineProperty(Constructor, "prototype", { writable: false });
      return Constructor;
    }
    function _toPropertyKey(arg) {
      var key = _toPrimitive(arg, "string");
      return typeof key === "symbol" ? key : String(key);
    }
    function _toPrimitive(input, hint) {
      if (typeof input !== "object" || input === null)
        return input;
      var prim = input[Symbol.toPrimitive];
      if (prim !== void 0) {
        var res = prim.call(input, hint || "default");
        if (typeof res !== "object")
          return res;
        throw new TypeError("@@toPrimitive must return a primitive value.");
      }
      return (hint === "string" ? String : Number)(input);
    }
    var _require = require("buffer");
    var Buffer5 = _require.Buffer;
    var _require2 = require("util");
    var inspect = _require2.inspect;
    var custom = inspect && inspect.custom || "inspect";
    function copyBuffer(src, target, offset) {
      Buffer5.prototype.copy.call(src, target, offset);
    }
    module2.exports = /* @__PURE__ */ function() {
      function BufferList() {
        _classCallCheck(this, BufferList);
        this.head = null;
        this.tail = null;
        this.length = 0;
      }
      _createClass(BufferList, [{
        key: "push",
        value: function push(v) {
          var entry = {
            data: v,
            next: null
          };
          if (this.length > 0)
            this.tail.next = entry;
          else
            this.head = entry;
          this.tail = entry;
          ++this.length;
        }
      }, {
        key: "unshift",
        value: function unshift(v) {
          var entry = {
            data: v,
            next: this.head
          };
          if (this.length === 0)
            this.tail = entry;
          this.head = entry;
          ++this.length;
        }
      }, {
        key: "shift",
        value: function shift() {
          if (this.length === 0)
            return;
          var ret = this.head.data;
          if (this.length === 1)
            this.head = this.tail = null;
          else
            this.head = this.head.next;
          --this.length;
          return ret;
        }
      }, {
        key: "clear",
        value: function clear() {
          this.head = this.tail = null;
          this.length = 0;
        }
      }, {
        key: "join",
        value: function join(s) {
          if (this.length === 0)
            return "";
          var p = this.head;
          var ret = "" + p.data;
          while (p = p.next)
            ret += s + p.data;
          return ret;
        }
      }, {
        key: "concat",
        value: function concat(n) {
          if (this.length === 0)
            return Buffer5.alloc(0);
          var ret = Buffer5.allocUnsafe(n >>> 0);
          var p = this.head;
          var i = 0;
          while (p) {
            copyBuffer(p.data, ret, i);
            i += p.data.length;
            p = p.next;
          }
          return ret;
        }
      }, {
        key: "consume",
        value: function consume(n, hasStrings) {
          var ret;
          if (n < this.head.data.length) {
            ret = this.head.data.slice(0, n);
            this.head.data = this.head.data.slice(n);
          } else if (n === this.head.data.length) {
            ret = this.shift();
          } else {
            ret = hasStrings ? this._getString(n) : this._getBuffer(n);
          }
          return ret;
        }
      }, {
        key: "first",
        value: function first() {
          return this.head.data;
        }
      }, {
        key: "_getString",
        value: function _getString(n) {
          var p = this.head;
          var c = 1;
          var ret = p.data;
          n -= ret.length;
          while (p = p.next) {
            var str = p.data;
            var nb = n > str.length ? str.length : n;
            if (nb === str.length)
              ret += str;
            else
              ret += str.slice(0, n);
            n -= nb;
            if (n === 0) {
              if (nb === str.length) {
                ++c;
                if (p.next)
                  this.head = p.next;
                else
                  this.head = this.tail = null;
              } else {
                this.head = p;
                p.data = str.slice(nb);
              }
              break;
            }
            ++c;
          }
          this.length -= c;
          return ret;
        }
      }, {
        key: "_getBuffer",
        value: function _getBuffer(n) {
          var ret = Buffer5.allocUnsafe(n);
          var p = this.head;
          var c = 1;
          p.data.copy(ret);
          n -= p.data.length;
          while (p = p.next) {
            var buf = p.data;
            var nb = n > buf.length ? buf.length : n;
            buf.copy(ret, ret.length - n, 0, nb);
            n -= nb;
            if (n === 0) {
              if (nb === buf.length) {
                ++c;
                if (p.next)
                  this.head = p.next;
                else
                  this.head = this.tail = null;
              } else {
                this.head = p;
                p.data = buf.slice(nb);
              }
              break;
            }
            ++c;
          }
          this.length -= c;
          return ret;
        }
      }, {
        key: custom,
        value: function value(_, options) {
          return inspect(this, _objectSpread(_objectSpread({}, options), {}, {
            depth: 0,
            customInspect: false
          }));
        }
      }]);
      return BufferList;
    }();
  }
});

// node_modules/readable-stream/lib/internal/streams/destroy.js
var require_destroy = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/destroy.js"(exports, module2) {
    "use strict";
    function destroy(err, cb) {
      var _this = this;
      var readableDestroyed = this._readableState && this._readableState.destroyed;
      var writableDestroyed = this._writableState && this._writableState.destroyed;
      if (readableDestroyed || writableDestroyed) {
        if (cb) {
          cb(err);
        } else if (err) {
          if (!this._writableState) {
            process.nextTick(emitErrorNT, this, err);
          } else if (!this._writableState.errorEmitted) {
            this._writableState.errorEmitted = true;
            process.nextTick(emitErrorNT, this, err);
          }
        }
        return this;
      }
      if (this._readableState) {
        this._readableState.destroyed = true;
      }
      if (this._writableState) {
        this._writableState.destroyed = true;
      }
      this._destroy(err || null, function(err2) {
        if (!cb && err2) {
          if (!_this._writableState) {
            process.nextTick(emitErrorAndCloseNT, _this, err2);
          } else if (!_this._writableState.errorEmitted) {
            _this._writableState.errorEmitted = true;
            process.nextTick(emitErrorAndCloseNT, _this, err2);
          } else {
            process.nextTick(emitCloseNT, _this);
          }
        } else if (cb) {
          process.nextTick(emitCloseNT, _this);
          cb(err2);
        } else {
          process.nextTick(emitCloseNT, _this);
        }
      });
      return this;
    }
    function emitErrorAndCloseNT(self2, err) {
      emitErrorNT(self2, err);
      emitCloseNT(self2);
    }
    function emitCloseNT(self2) {
      if (self2._writableState && !self2._writableState.emitClose)
        return;
      if (self2._readableState && !self2._readableState.emitClose)
        return;
      self2.emit("close");
    }
    function undestroy() {
      if (this._readableState) {
        this._readableState.destroyed = false;
        this._readableState.reading = false;
        this._readableState.ended = false;
        this._readableState.endEmitted = false;
      }
      if (this._writableState) {
        this._writableState.destroyed = false;
        this._writableState.ended = false;
        this._writableState.ending = false;
        this._writableState.finalCalled = false;
        this._writableState.prefinished = false;
        this._writableState.finished = false;
        this._writableState.errorEmitted = false;
      }
    }
    function emitErrorNT(self2, err) {
      self2.emit("error", err);
    }
    function errorOrDestroy(stream, err) {
      var rState = stream._readableState;
      var wState = stream._writableState;
      if (rState && rState.autoDestroy || wState && wState.autoDestroy)
        stream.destroy(err);
      else
        stream.emit("error", err);
    }
    module2.exports = {
      destroy,
      undestroy,
      errorOrDestroy
    };
  }
});

// node_modules/readable-stream/errors-browser.js
var require_errors_browser = __commonJS({
  "node_modules/readable-stream/errors-browser.js"(exports, module2) {
    "use strict";
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    var codes = {};
    function createErrorType(code, message, Base) {
      if (!Base) {
        Base = Error;
      }
      function getMessage(arg1, arg2, arg3) {
        if (typeof message === "string") {
          return message;
        } else {
          return message(arg1, arg2, arg3);
        }
      }
      var NodeError = /* @__PURE__ */ function(_Base) {
        _inheritsLoose(NodeError2, _Base);
        function NodeError2(arg1, arg2, arg3) {
          return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;
        }
        return NodeError2;
      }(Base);
      NodeError.prototype.name = Base.name;
      NodeError.prototype.code = code;
      codes[code] = NodeError;
    }
    function oneOf(expected, thing) {
      if (Array.isArray(expected)) {
        var len = expected.length;
        expected = expected.map(function(i) {
          return String(i);
        });
        if (len > 2) {
          return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(", "), ", or ") + expected[len - 1];
        } else if (len === 2) {
          return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
        } else {
          return "of ".concat(thing, " ").concat(expected[0]);
        }
      } else {
        return "of ".concat(thing, " ").concat(String(expected));
      }
    }
    function startsWith(str, search, pos) {
      return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
    }
    function endsWith(str, search, this_len) {
      if (this_len === void 0 || this_len > str.length) {
        this_len = str.length;
      }
      return str.substring(this_len - search.length, this_len) === search;
    }
    function includes(str, search, start) {
      if (typeof start !== "number") {
        start = 0;
      }
      if (start + search.length > str.length) {
        return false;
      } else {
        return str.indexOf(search, start) !== -1;
      }
    }
    createErrorType("ERR_INVALID_OPT_VALUE", function(name, value) {
      return 'The value "' + value + '" is invalid for option "' + name + '"';
    }, TypeError);
    createErrorType("ERR_INVALID_ARG_TYPE", function(name, expected, actual) {
      var determiner;
      if (typeof expected === "string" && startsWith(expected, "not ")) {
        determiner = "must not be";
        expected = expected.replace(/^not /, "");
      } else {
        determiner = "must be";
      }
      var msg;
      if (endsWith(name, " argument")) {
        msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, "type"));
      } else {
        var type = includes(name, ".") ? "property" : "argument";
        msg = 'The "'.concat(name, '" ').concat(type, " ").concat(determiner, " ").concat(oneOf(expected, "type"));
      }
      msg += ". Received type ".concat(typeof actual);
      return msg;
    }, TypeError);
    createErrorType("ERR_STREAM_PUSH_AFTER_EOF", "stream.push() after EOF");
    createErrorType("ERR_METHOD_NOT_IMPLEMENTED", function(name) {
      return "The " + name + " method is not implemented";
    });
    createErrorType("ERR_STREAM_PREMATURE_CLOSE", "Premature close");
    createErrorType("ERR_STREAM_DESTROYED", function(name) {
      return "Cannot call " + name + " after a stream was destroyed";
    });
    createErrorType("ERR_MULTIPLE_CALLBACK", "Callback called multiple times");
    createErrorType("ERR_STREAM_CANNOT_PIPE", "Cannot pipe, not readable");
    createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end");
    createErrorType("ERR_STREAM_NULL_VALUES", "May not write null values to stream", TypeError);
    createErrorType("ERR_UNKNOWN_ENCODING", function(arg) {
      return "Unknown encoding: " + arg;
    }, TypeError);
    createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "stream.unshift() after end event");
    module2.exports.codes = codes;
  }
});

// node_modules/readable-stream/lib/internal/streams/state.js
var require_state = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/state.js"(exports, module2) {
    "use strict";
    var ERR_INVALID_OPT_VALUE = require_errors_browser().codes.ERR_INVALID_OPT_VALUE;
    function highWaterMarkFrom(options, isDuplex, duplexKey) {
      return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
    }
    function getHighWaterMark(state, options, duplexKey, isDuplex) {
      var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
      if (hwm != null) {
        if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
          var name = isDuplex ? duplexKey : "highWaterMark";
          throw new ERR_INVALID_OPT_VALUE(name, hwm);
        }
        return Math.floor(hwm);
      }
      return state.objectMode ? 16 : 16 * 1024;
    }
    module2.exports = {
      getHighWaterMark
    };
  }
});

// node_modules/inherits/inherits_browser.js
var require_inherits_browser = __commonJS({
  "node_modules/inherits/inherits_browser.js"(exports, module2) {
    if (typeof Object.create === "function") {
      module2.exports = function inherits(ctor, superCtor) {
        if (superCtor) {
          ctor.super_ = superCtor;
          ctor.prototype = Object.create(superCtor.prototype, {
            constructor: {
              value: ctor,
              enumerable: false,
              writable: true,
              configurable: true
            }
          });
        }
      };
    } else {
      module2.exports = function inherits(ctor, superCtor) {
        if (superCtor) {
          ctor.super_ = superCtor;
          var TempCtor = function() {
          };
          TempCtor.prototype = superCtor.prototype;
          ctor.prototype = new TempCtor();
          ctor.prototype.constructor = ctor;
        }
      };
    }
  }
});

// node_modules/util-deprecate/browser.js
var require_browser = __commonJS({
  "node_modules/util-deprecate/browser.js"(exports, module2) {
    module2.exports = deprecate;
    function deprecate(fn, msg) {
      if (config("noDeprecation")) {
        return fn;
      }
      var warned = false;
      function deprecated() {
        if (!warned) {
          if (config("throwDeprecation")) {
            throw new Error(msg);
          } else if (config("traceDeprecation")) {
            console.trace(msg);
          } else {
            console.warn(msg);
          }
          warned = true;
        }
        return fn.apply(this, arguments);
      }
      return deprecated;
    }
    function config(name) {
      try {
        if (!global.localStorage)
          return false;
      } catch (_) {
        return false;
      }
      var val = global.localStorage[name];
      if (val == null)
        return false;
      return String(val).toLowerCase() === "true";
    }
  }
});

// node_modules/readable-stream/lib/_stream_writable.js
var require_stream_writable = __commonJS({
  "node_modules/readable-stream/lib/_stream_writable.js"(exports, module2) {
    "use strict";
    module2.exports = Writable;
    function CorkedRequest(state) {
      var _this = this;
      this.next = null;
      this.entry = null;
      this.finish = function() {
        onCorkedFinish(_this, state);
      };
    }
    var Duplex;
    Writable.WritableState = WritableState;
    var internalUtil = {
      deprecate: require_browser()
    };
    var Stream = require_stream_browser();
    var Buffer5 = require("buffer").Buffer;
    var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
    };
    function _uint8ArrayToBuffer(chunk) {
      return Buffer5.from(chunk);
    }
    function _isUint8Array(obj) {
      return Buffer5.isBuffer(obj) || obj instanceof OurUint8Array;
    }
    var destroyImpl = require_destroy();
    var _require = require_state();
    var getHighWaterMark = _require.getHighWaterMark;
    var _require$codes = require_errors_browser().codes;
    var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE;
    var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED;
    var ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK;
    var ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE;
    var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
    var ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES;
    var ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END;
    var ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
    var errorOrDestroy = destroyImpl.errorOrDestroy;
    require_inherits_browser()(Writable, Stream);
    function nop() {
    }
    function WritableState(options, stream, isDuplex) {
      Duplex = Duplex || require_stream_duplex();
      options = options || {};
      if (typeof isDuplex !== "boolean")
        isDuplex = stream instanceof Duplex;
      this.objectMode = !!options.objectMode;
      if (isDuplex)
        this.objectMode = this.objectMode || !!options.writableObjectMode;
      this.highWaterMark = getHighWaterMark(this, options, "writableHighWaterMark", isDuplex);
      this.finalCalled = false;
      this.needDrain = false;
      this.ending = false;
      this.ended = false;
      this.finished = false;
      this.destroyed = false;
      var noDecode = options.decodeStrings === false;
      this.decodeStrings = !noDecode;
      this.defaultEncoding = options.defaultEncoding || "utf8";
      this.length = 0;
      this.writing = false;
      this.corked = 0;
      this.sync = true;
      this.bufferProcessing = false;
      this.onwrite = function(er) {
        onwrite(stream, er);
      };
      this.writecb = null;
      this.writelen = 0;
      this.bufferedRequest = null;
      this.lastBufferedRequest = null;
      this.pendingcb = 0;
      this.prefinished = false;
      this.errorEmitted = false;
      this.emitClose = options.emitClose !== false;
      this.autoDestroy = !!options.autoDestroy;
      this.bufferedRequestCount = 0;
      this.corkedRequestsFree = new CorkedRequest(this);
    }
    WritableState.prototype.getBuffer = function getBuffer() {
      var current = this.bufferedRequest;
      var out = [];
      while (current) {
        out.push(current);
        current = current.next;
      }
      return out;
    };
    (function() {
      try {
        Object.defineProperty(WritableState.prototype, "buffer", {
          get: internalUtil.deprecate(function writableStateBufferGetter() {
            return this.getBuffer();
          }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003")
        });
      } catch (_) {
      }
    })();
    var realHasInstance;
    if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") {
      realHasInstance = Function.prototype[Symbol.hasInstance];
      Object.defineProperty(Writable, Symbol.hasInstance, {
        value: function value(object) {
          if (realHasInstance.call(this, object))
            return true;
          if (this !== Writable)
            return false;
          return object && object._writableState instanceof WritableState;
        }
      });
    } else {
      realHasInstance = function realHasInstance2(object) {
        return object instanceof this;
      };
    }
    function Writable(options) {
      Duplex = Duplex || require_stream_duplex();
      var isDuplex = this instanceof Duplex;
      if (!isDuplex && !realHasInstance.call(Writable, this))
        return new Writable(options);
      this._writableState = new WritableState(options, this, isDuplex);
      this.writable = true;
      if (options) {
        if (typeof options.write === "function")
          this._write = options.write;
        if (typeof options.writev === "function")
          this._writev = options.writev;
        if (typeof options.destroy === "function")
          this._destroy = options.destroy;
        if (typeof options.final === "function")
          this._final = options.final;
      }
      Stream.call(this);
    }
    Writable.prototype.pipe = function() {
      errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
    };
    function writeAfterEnd(stream, cb) {
      var er = new ERR_STREAM_WRITE_AFTER_END();
      errorOrDestroy(stream, er);
      process.nextTick(cb, er);
    }
    function validChunk(stream, state, chunk, cb) {
      var er;
      if (chunk === null) {
        er = new ERR_STREAM_NULL_VALUES();
      } else if (typeof chunk !== "string" && !state.objectMode) {
        er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer"], chunk);
      }
      if (er) {
        errorOrDestroy(stream, er);
        process.nextTick(cb, er);
        return false;
      }
      return true;
    }
    Writable.prototype.write = function(chunk, encoding, cb) {
      var state = this._writableState;
      var ret = false;
      var isBuf = !state.objectMode && _isUint8Array(chunk);
      if (isBuf && !Buffer5.isBuffer(chunk)) {
        chunk = _uint8ArrayToBuffer(chunk);
      }
      if (typeof encoding === "function") {
        cb = encoding;
        encoding = null;
      }
      if (isBuf)
        encoding = "buffer";
      else if (!encoding)
        encoding = state.defaultEncoding;
      if (typeof cb !== "function")
        cb = nop;
      if (state.ending)
        writeAfterEnd(this, cb);
      else if (isBuf || validChunk(this, state, chunk, cb)) {
        state.pendingcb++;
        ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
      }
      return ret;
    };
    Writable.prototype.cork = function() {
      this._writableState.corked++;
    };
    Writable.prototype.uncork = function() {
      var state = this._writableState;
      if (state.corked) {
        state.corked--;
        if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest)
          clearBuffer(this, state);
      }
    };
    Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
      if (typeof encoding === "string")
        encoding = encoding.toLowerCase();
      if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1))
        throw new ERR_UNKNOWN_ENCODING(encoding);
      this._writableState.defaultEncoding = encoding;
      return this;
    };
    Object.defineProperty(Writable.prototype, "writableBuffer", {
      enumerable: false,
      get: function get() {
        return this._writableState && this._writableState.getBuffer();
      }
    });
    function decodeChunk(state, chunk, encoding) {
      if (!state.objectMode && state.decodeStrings !== false && typeof chunk === "string") {
        chunk = Buffer5.from(chunk, encoding);
      }
      return chunk;
    }
    Object.defineProperty(Writable.prototype, "writableHighWaterMark", {
      enumerable: false,
      get: function get() {
        return this._writableState.highWaterMark;
      }
    });
    function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
      if (!isBuf) {
        var newChunk = decodeChunk(state, chunk, encoding);
        if (chunk !== newChunk) {
          isBuf = true;
          encoding = "buffer";
          chunk = newChunk;
        }
      }
      var len = state.objectMode ? 1 : chunk.length;
      state.length += len;
      var ret = state.length < state.highWaterMark;
      if (!ret)
        state.needDrain = true;
      if (state.writing || state.corked) {
        var last2 = state.lastBufferedRequest;
        state.lastBufferedRequest = {
          chunk,
          encoding,
          isBuf,
          callback: cb,
          next: null
        };
        if (last2) {
          last2.next = state.lastBufferedRequest;
        } else {
          state.bufferedRequest = state.lastBufferedRequest;
        }
        state.bufferedRequestCount += 1;
      } else {
        doWrite(stream, state, false, len, chunk, encoding, cb);
      }
      return ret;
    }
    function doWrite(stream, state, writev, len, chunk, encoding, cb) {
      state.writelen = len;
      state.writecb = cb;
      state.writing = true;
      state.sync = true;
      if (state.destroyed)
        state.onwrite(new ERR_STREAM_DESTROYED("write"));
      else if (writev)
        stream._writev(chunk, state.onwrite);
      else
        stream._write(chunk, encoding, state.onwrite);
      state.sync = false;
    }
    function onwriteError(stream, state, sync, er, cb) {
      --state.pendingcb;
      if (sync) {
        process.nextTick(cb, er);
        process.nextTick(finishMaybe, stream, state);
        stream._writableState.errorEmitted = true;
        errorOrDestroy(stream, er);
      } else {
        cb(er);
        stream._writableState.errorEmitted = true;
        errorOrDestroy(stream, er);
        finishMaybe(stream, state);
      }
    }
    function onwriteStateUpdate(state) {
      state.writing = false;
      state.writecb = null;
      state.length -= state.writelen;
      state.writelen = 0;
    }
    function onwrite(stream, er) {
      var state = stream._writableState;
      var sync = state.sync;
      var cb = state.writecb;
      if (typeof cb !== "function")
        throw new ERR_MULTIPLE_CALLBACK();
      onwriteStateUpdate(state);
      if (er)
        onwriteError(stream, state, sync, er, cb);
      else {
        var finished = needFinish(state) || stream.destroyed;
        if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
          clearBuffer(stream, state);
        }
        if (sync) {
          process.nextTick(afterWrite, stream, state, finished, cb);
        } else {
          afterWrite(stream, state, finished, cb);
        }
      }
    }
    function afterWrite(stream, state, finished, cb) {
      if (!finished)
        onwriteDrain(stream, state);
      state.pendingcb--;
      cb();
      finishMaybe(stream, state);
    }
    function onwriteDrain(stream, state) {
      if (state.length === 0 && state.needDrain) {
        state.needDrain = false;
        stream.emit("drain");
      }
    }
    function clearBuffer(stream, state) {
      state.bufferProcessing = true;
      var entry = state.bufferedRequest;
      if (stream._writev && entry && entry.next) {
        var l = state.bufferedRequestCount;
        var buffer = new Array(l);
        var holder = state.corkedRequestsFree;
        holder.entry = entry;
        var count = 0;
        var allBuffers = true;
        while (entry) {
          buffer[count] = entry;
          if (!entry.isBuf)
            allBuffers = false;
          entry = entry.next;
          count += 1;
        }
        buffer.allBuffers = allBuffers;
        doWrite(stream, state, true, state.length, buffer, "", holder.finish);
        state.pendingcb++;
        state.lastBufferedRequest = null;
        if (holder.next) {
          state.corkedRequestsFree = holder.next;
          holder.next = null;
        } else {
          state.corkedRequestsFree = new CorkedRequest(state);
        }
        state.bufferedRequestCount = 0;
      } else {
        while (entry) {
          var chunk = entry.chunk;
          var encoding = entry.encoding;
          var cb = entry.callback;
          var len = state.objectMode ? 1 : chunk.length;
          doWrite(stream, state, false, len, chunk, encoding, cb);
          entry = entry.next;
          state.bufferedRequestCount--;
          if (state.writing) {
            break;
          }
        }
        if (entry === null)
          state.lastBufferedRequest = null;
      }
      state.bufferedRequest = entry;
      state.bufferProcessing = false;
    }
    Writable.prototype._write = function(chunk, encoding, cb) {
      cb(new ERR_METHOD_NOT_IMPLEMENTED("_write()"));
    };
    Writable.prototype._writev = null;
    Writable.prototype.end = function(chunk, encoding, cb) {
      var state = this._writableState;
      if (typeof chunk === "function") {
        cb = chunk;
        chunk = null;
        encoding = null;
      } else if (typeof encoding === "function") {
        cb = encoding;
        encoding = null;
      }
      if (chunk !== null && chunk !== void 0)
        this.write(chunk, encoding);
      if (state.corked) {
        state.corked = 1;
        this.uncork();
      }
      if (!state.ending)
        endWritable(this, state, cb);
      return this;
    };
    Object.defineProperty(Writable.prototype, "writableLength", {
      enumerable: false,
      get: function get() {
        return this._writableState.length;
      }
    });
    function needFinish(state) {
      return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
    }
    function callFinal(stream, state) {
      stream._final(function(err) {
        state.pendingcb--;
        if (err) {
          errorOrDestroy(stream, err);
        }
        state.prefinished = true;
        stream.emit("prefinish");
        finishMaybe(stream, state);
      });
    }
    function prefinish(stream, state) {
      if (!state.prefinished && !state.finalCalled) {
        if (typeof stream._final === "function" && !state.destroyed) {
          state.pendingcb++;
          state.finalCalled = true;
          process.nextTick(callFinal, stream, state);
        } else {
          state.prefinished = true;
          stream.emit("prefinish");
        }
      }
    }
    function finishMaybe(stream, state) {
      var need = needFinish(state);
      if (need) {
        prefinish(stream, state);
        if (state.pendingcb === 0) {
          state.finished = true;
          stream.emit("finish");
          if (state.autoDestroy) {
            var rState = stream._readableState;
            if (!rState || rState.autoDestroy && rState.endEmitted) {
              stream.destroy();
            }
          }
        }
      }
      return need;
    }
    function endWritable(stream, state, cb) {
      state.ending = true;
      finishMaybe(stream, state);
      if (cb) {
        if (state.finished)
          process.nextTick(cb);
        else
          stream.once("finish", cb);
      }
      state.ended = true;
      stream.writable = false;
    }
    function onCorkedFinish(corkReq, state, err) {
      var entry = corkReq.entry;
      corkReq.entry = null;
      while (entry) {
        var cb = entry.callback;
        state.pendingcb--;
        cb(err);
        entry = entry.next;
      }
      state.corkedRequestsFree.next = corkReq;
    }
    Object.defineProperty(Writable.prototype, "destroyed", {
      enumerable: false,
      get: function get() {
        if (this._writableState === void 0) {
          return false;
        }
        return this._writableState.destroyed;
      },
      set: function set(value) {
        if (!this._writableState) {
          return;
        }
        this._writableState.destroyed = value;
      }
    });
    Writable.prototype.destroy = destroyImpl.destroy;
    Writable.prototype._undestroy = destroyImpl.undestroy;
    Writable.prototype._destroy = function(err, cb) {
      cb(err);
    };
  }
});

// node_modules/readable-stream/lib/_stream_duplex.js
var require_stream_duplex = __commonJS({
  "node_modules/readable-stream/lib/_stream_duplex.js"(exports, module2) {
    "use strict";
    var objectKeys = Object.keys || function(obj) {
      var keys2 = [];
      for (var key in obj)
        keys2.push(key);
      return keys2;
    };
    module2.exports = Duplex;
    var Readable = require_stream_readable();
    var Writable = require_stream_writable();
    require_inherits_browser()(Duplex, Readable);
    {
      keys = objectKeys(Writable.prototype);
      for (v = 0; v < keys.length; v++) {
        method = keys[v];
        if (!Duplex.prototype[method])
          Duplex.prototype[method] = Writable.prototype[method];
      }
    }
    var keys;
    var method;
    var v;
    function Duplex(options) {
      if (!(this instanceof Duplex))
        return new Duplex(options);
      Readable.call(this, options);
      Writable.call(this, options);
      this.allowHalfOpen = true;
      if (options) {
        if (options.readable === false)
          this.readable = false;
        if (options.writable === false)
          this.writable = false;
        if (options.allowHalfOpen === false) {
          this.allowHalfOpen = false;
          this.once("end", onend);
        }
      }
    }
    Object.defineProperty(Duplex.prototype, "writableHighWaterMark", {
      enumerable: false,
      get: function get() {
        return this._writableState.highWaterMark;
      }
    });
    Object.defineProperty(Duplex.prototype, "writableBuffer", {
      enumerable: false,
      get: function get() {
        return this._writableState && this._writableState.getBuffer();
      }
    });
    Object.defineProperty(Duplex.prototype, "writableLength", {
      enumerable: false,
      get: function get() {
        return this._writableState.length;
      }
    });
    function onend() {
      if (this._writableState.ended)
        return;
      process.nextTick(onEndNT, this);
    }
    function onEndNT(self2) {
      self2.end();
    }
    Object.defineProperty(Duplex.prototype, "destroyed", {
      enumerable: false,
      get: function get() {
        if (this._readableState === void 0 || this._writableState === void 0) {
          return false;
        }
        return this._readableState.destroyed && this._writableState.destroyed;
      },
      set: function set(value) {
        if (this._readableState === void 0 || this._writableState === void 0) {
          return;
        }
        this._readableState.destroyed = value;
        this._writableState.destroyed = value;
      }
    });
  }
});

// node_modules/readable-stream/lib/internal/streams/end-of-stream.js
var require_end_of_stream = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/end-of-stream.js"(exports, module2) {
    "use strict";
    var ERR_STREAM_PREMATURE_CLOSE = require_errors_browser().codes.ERR_STREAM_PREMATURE_CLOSE;
    function once(callback) {
      var called = false;
      return function() {
        if (called)
          return;
        called = true;
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }
        callback.apply(this, args);
      };
    }
    function noop() {
    }
    function isRequest(stream) {
      return stream.setHeader && typeof stream.abort === "function";
    }
    function eos(stream, opts, callback) {
      if (typeof opts === "function")
        return eos(stream, null, opts);
      if (!opts)
        opts = {};
      callback = once(callback || noop);
      var readable = opts.readable || opts.readable !== false && stream.readable;
      var writable = opts.writable || opts.writable !== false && stream.writable;
      var onlegacyfinish = function onlegacyfinish2() {
        if (!stream.writable)
          onfinish();
      };
      var writableEnded = stream._writableState && stream._writableState.finished;
      var onfinish = function onfinish2() {
        writable = false;
        writableEnded = true;
        if (!readable)
          callback.call(stream);
      };
      var readableEnded = stream._readableState && stream._readableState.endEmitted;
      var onend = function onend2() {
        readable = false;
        readableEnded = true;
        if (!writable)
          callback.call(stream);
      };
      var onerror = function onerror2(err) {
        callback.call(stream, err);
      };
      var onclose = function onclose2() {
        var err;
        if (readable && !readableEnded) {
          if (!stream._readableState || !stream._readableState.ended)
            err = new ERR_STREAM_PREMATURE_CLOSE();
          return callback.call(stream, err);
        }
        if (writable && !writableEnded) {
          if (!stream._writableState || !stream._writableState.ended)
            err = new ERR_STREAM_PREMATURE_CLOSE();
          return callback.call(stream, err);
        }
      };
      var onrequest = function onrequest2() {
        stream.req.on("finish", onfinish);
      };
      if (isRequest(stream)) {
        stream.on("complete", onfinish);
        stream.on("abort", onclose);
        if (stream.req)
          onrequest();
        else
          stream.on("request", onrequest);
      } else if (writable && !stream._writableState) {
        stream.on("end", onlegacyfinish);
        stream.on("close", onlegacyfinish);
      }
      stream.on("end", onend);
      stream.on("finish", onfinish);
      if (opts.error !== false)
        stream.on("error", onerror);
      stream.on("close", onclose);
      return function() {
        stream.removeListener("complete", onfinish);
        stream.removeListener("abort", onclose);
        stream.removeListener("request", onrequest);
        if (stream.req)
          stream.req.removeListener("finish", onfinish);
        stream.removeListener("end", onlegacyfinish);
        stream.removeListener("close", onlegacyfinish);
        stream.removeListener("finish", onfinish);
        stream.removeListener("end", onend);
        stream.removeListener("error", onerror);
        stream.removeListener("close", onclose);
      };
    }
    module2.exports = eos;
  }
});

// node_modules/readable-stream/lib/internal/streams/async_iterator.js
var require_async_iterator = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/async_iterator.js"(exports, module2) {
    "use strict";
    var _Object$setPrototypeO;
    function _defineProperty(obj, key, value) {
      key = _toPropertyKey(key);
      if (key in obj) {
        Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
      } else {
        obj[key] = value;
      }
      return obj;
    }
    function _toPropertyKey(arg) {
      var key = _toPrimitive(arg, "string");
      return typeof key === "symbol" ? key : String(key);
    }
    function _toPrimitive(input, hint) {
      if (typeof input !== "object" || input === null)
        return input;
      var prim = input[Symbol.toPrimitive];
      if (prim !== void 0) {
        var res = prim.call(input, hint || "default");
        if (typeof res !== "object")
          return res;
        throw new TypeError("@@toPrimitive must return a primitive value.");
      }
      return (hint === "string" ? String : Number)(input);
    }
    var finished = require_end_of_stream();
    var kLastResolve = Symbol("lastResolve");
    var kLastReject = Symbol("lastReject");
    var kError = Symbol("error");
    var kEnded = Symbol("ended");
    var kLastPromise = Symbol("lastPromise");
    var kHandlePromise = Symbol("handlePromise");
    var kStream = Symbol("stream");
    function createIterResult(value, done) {
      return {
        value,
        done
      };
    }
    function readAndResolve(iter) {
      var resolve = iter[kLastResolve];
      if (resolve !== null) {
        var data = iter[kStream].read();
        if (data !== null) {
          iter[kLastPromise] = null;
          iter[kLastResolve] = null;
          iter[kLastReject] = null;
          resolve(createIterResult(data, false));
        }
      }
    }
    function onReadable(iter) {
      process.nextTick(readAndResolve, iter);
    }
    function wrapForNext(lastPromise, iter) {
      return function(resolve, reject) {
        lastPromise.then(function() {
          if (iter[kEnded]) {
            resolve(createIterResult(void 0, true));
            return;
          }
          iter[kHandlePromise](resolve, reject);
        }, reject);
      };
    }
    var AsyncIteratorPrototype = Object.getPrototypeOf(function() {
    });
    var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
      get stream() {
        return this[kStream];
      },
      next: function next() {
        var _this = this;
        var error = this[kError];
        if (error !== null) {
          return Promise.reject(error);
        }
        if (this[kEnded]) {
          return Promise.resolve(createIterResult(void 0, true));
        }
        if (this[kStream].destroyed) {
          return new Promise(function(resolve, reject) {
            process.nextTick(function() {
              if (_this[kError]) {
                reject(_this[kError]);
              } else {
                resolve(createIterResult(void 0, true));
              }
            });
          });
        }
        var lastPromise = this[kLastPromise];
        var promise;
        if (lastPromise) {
          promise = new Promise(wrapForNext(lastPromise, this));
        } else {
          var data = this[kStream].read();
          if (data !== null) {
            return Promise.resolve(createIterResult(data, false));
          }
          promise = new Promise(this[kHandlePromise]);
        }
        this[kLastPromise] = promise;
        return promise;
      }
    }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function() {
      return this;
    }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
      var _this2 = this;
      return new Promise(function(resolve, reject) {
        _this2[kStream].destroy(null, function(err) {
          if (err) {
            reject(err);
            return;
          }
          resolve(createIterResult(void 0, true));
        });
      });
    }), _Object$setPrototypeO), AsyncIteratorPrototype);
    var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator2(stream) {
      var _Object$create;
      var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
        value: stream,
        writable: true
      }), _defineProperty(_Object$create, kLastResolve, {
        value: null,
        writable: true
      }), _defineProperty(_Object$create, kLastReject, {
        value: null,
        writable: true
      }), _defineProperty(_Object$create, kError, {
        value: null,
        writable: true
      }), _defineProperty(_Object$create, kEnded, {
        value: stream._readableState.endEmitted,
        writable: true
      }), _defineProperty(_Object$create, kHandlePromise, {
        value: function value(resolve, reject) {
          var data = iterator[kStream].read();
          if (data) {
            iterator[kLastPromise] = null;
            iterator[kLastResolve] = null;
            iterator[kLastReject] = null;
            resolve(createIterResult(data, false));
          } else {
            iterator[kLastResolve] = resolve;
            iterator[kLastReject] = reject;
          }
        },
        writable: true
      }), _Object$create));
      iterator[kLastPromise] = null;
      finished(stream, function(err) {
        if (err && err.code !== "ERR_STREAM_PREMATURE_CLOSE") {
          var reject = iterator[kLastReject];
          if (reject !== null) {
            iterator[kLastPromise] = null;
            iterator[kLastResolve] = null;
            iterator[kLastReject] = null;
            reject(err);
          }
          iterator[kError] = err;
          return;
        }
        var resolve = iterator[kLastResolve];
        if (resolve !== null) {
          iterator[kLastPromise] = null;
          iterator[kLastResolve] = null;
          iterator[kLastReject] = null;
          resolve(createIterResult(void 0, true));
        }
        iterator[kEnded] = true;
      });
      stream.on("readable", onReadable.bind(null, iterator));
      return iterator;
    };
    module2.exports = createReadableStreamAsyncIterator;
  }
});

// node_modules/readable-stream/lib/internal/streams/from-browser.js
var require_from_browser = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/from-browser.js"(exports, module2) {
    module2.exports = function() {
      throw new Error("Readable.from is not available in the browser");
    };
  }
});

// node_modules/readable-stream/lib/_stream_readable.js
var require_stream_readable = __commonJS({
  "node_modules/readable-stream/lib/_stream_readable.js"(exports, module2) {
    "use strict";
    module2.exports = Readable;
    var Duplex;
    Readable.ReadableState = ReadableState;
    var EE = require("events").EventEmitter;
    var EElistenerCount = function EElistenerCount2(emitter, type) {
      return emitter.listeners(type).length;
    };
    var Stream = require_stream_browser();
    var Buffer5 = require("buffer").Buffer;
    var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
    };
    function _uint8ArrayToBuffer(chunk) {
      return Buffer5.from(chunk);
    }
    function _isUint8Array(obj) {
      return Buffer5.isBuffer(obj) || obj instanceof OurUint8Array;
    }
    var debugUtil = require("util");
    var debug;
    if (debugUtil && debugUtil.debuglog) {
      debug = debugUtil.debuglog("stream");
    } else {
      debug = function debug2() {
      };
    }
    var BufferList = require_buffer_list();
    var destroyImpl = require_destroy();
    var _require = require_state();
    var getHighWaterMark = _require.getHighWaterMark;
    var _require$codes = require_errors_browser().codes;
    var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE;
    var ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF;
    var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED;
    var ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
    var StringDecoder;
    var createReadableStreamAsyncIterator;
    var from;
    require_inherits_browser()(Readable, Stream);
    var errorOrDestroy = destroyImpl.errorOrDestroy;
    var kProxyEvents = ["error", "close", "destroy", "pause", "resume"];
    function prependListener(emitter, event, fn) {
      if (typeof emitter.prependListener === "function")
        return emitter.prependListener(event, fn);
      if (!emitter._events || !emitter._events[event])
        emitter.on(event, fn);
      else if (Array.isArray(emitter._events[event]))
        emitter._events[event].unshift(fn);
      else
        emitter._events[event] = [fn, emitter._events[event]];
    }
    function ReadableState(options, stream, isDuplex) {
      Duplex = Duplex || require_stream_duplex();
      options = options || {};
      if (typeof isDuplex !== "boolean")
        isDuplex = stream instanceof Duplex;
      this.objectMode = !!options.objectMode;
      if (isDuplex)
        this.objectMode = this.objectMode || !!options.readableObjectMode;
      this.highWaterMark = getHighWaterMark(this, options, "readableHighWaterMark", isDuplex);
      this.buffer = new BufferList();
      this.length = 0;
      this.pipes = null;
      this.pipesCount = 0;
      this.flowing = null;
      this.ended = false;
      this.endEmitted = false;
      this.reading = false;
      this.sync = true;
      this.needReadable = false;
      this.emittedReadable = false;
      this.readableListening = false;
      this.resumeScheduled = false;
      this.paused = true;
      this.emitClose = options.emitClose !== false;
      this.autoDestroy = !!options.autoDestroy;
      this.destroyed = false;
      this.defaultEncoding = options.defaultEncoding || "utf8";
      this.awaitDrain = 0;
      this.readingMore = false;
      this.decoder = null;
      this.encoding = null;
      if (options.encoding) {
        if (!StringDecoder)
          StringDecoder = require("string_decoder/").StringDecoder;
        this.decoder = new StringDecoder(options.encoding);
        this.encoding = options.encoding;
      }
    }
    function Readable(options) {
      Duplex = Duplex || require_stream_duplex();
      if (!(this instanceof Readable))
        return new Readable(options);
      var isDuplex = this instanceof Duplex;
      this._readableState = new ReadableState(options, this, isDuplex);
      this.readable = true;
      if (options) {
        if (typeof options.read === "function")
          this._read = options.read;
        if (typeof options.destroy === "function")
          this._destroy = options.destroy;
      }
      Stream.call(this);
    }
    Object.defineProperty(Readable.prototype, "destroyed", {
      enumerable: false,
      get: function get() {
        if (this._readableState === void 0) {
          return false;
        }
        return this._readableState.destroyed;
      },
      set: function set(value) {
        if (!this._readableState) {
          return;
        }
        this._readableState.destroyed = value;
      }
    });
    Readable.prototype.destroy = destroyImpl.destroy;
    Readable.prototype._undestroy = destroyImpl.undestroy;
    Readable.prototype._destroy = function(err, cb) {
      cb(err);
    };
    Readable.prototype.push = function(chunk, encoding) {
      var state = this._readableState;
      var skipChunkCheck;
      if (!state.objectMode) {
        if (typeof chunk === "string") {
          encoding = encoding || state.defaultEncoding;
          if (encoding !== state.encoding) {
            chunk = Buffer5.from(chunk, encoding);
            encoding = "";
          }
          skipChunkCheck = true;
        }
      } else {
        skipChunkCheck = true;
      }
      return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
    };
    Readable.prototype.unshift = function(chunk) {
      return readableAddChunk(this, chunk, null, true, false);
    };
    function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
      debug("readableAddChunk", chunk);
      var state = stream._readableState;
      if (chunk === null) {
        state.reading = false;
        onEofChunk(stream, state);
      } else {
        var er;
        if (!skipChunkCheck)
          er = chunkInvalid(state, chunk);
        if (er) {
          errorOrDestroy(stream, er);
        } else if (state.objectMode || chunk && chunk.length > 0) {
          if (typeof chunk !== "string" && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer5.prototype) {
            chunk = _uint8ArrayToBuffer(chunk);
          }
          if (addToFront) {
            if (state.endEmitted)
              errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());
            else
              addChunk(stream, state, chunk, true);
          } else if (state.ended) {
            errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
          } else if (state.destroyed) {
            return false;
          } else {
            state.reading = false;
            if (state.decoder && !encoding) {
              chunk = state.decoder.write(chunk);
              if (state.objectMode || chunk.length !== 0)
                addChunk(stream, state, chunk, false);
              else
                maybeReadMore(stream, state);
            } else {
              addChunk(stream, state, chunk, false);
            }
          }
        } else if (!addToFront) {
          state.reading = false;
          maybeReadMore(stream, state);
        }
      }
      return !state.ended && (state.length < state.highWaterMark || state.length === 0);
    }
    function addChunk(stream, state, chunk, addToFront) {
      if (state.flowing && state.length === 0 && !state.sync) {
        state.awaitDrain = 0;
        stream.emit("data", chunk);
      } else {
        state.length += state.objectMode ? 1 : chunk.length;
        if (addToFront)
          state.buffer.unshift(chunk);
        else
          state.buffer.push(chunk);
        if (state.needReadable)
          emitReadable(stream);
      }
      maybeReadMore(stream, state);
    }
    function chunkInvalid(state, chunk) {
      var er;
      if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== void 0 && !state.objectMode) {
        er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer", "Uint8Array"], chunk);
      }
      return er;
    }
    Readable.prototype.isPaused = function() {
      return this._readableState.flowing === false;
    };
    Readable.prototype.setEncoding = function(enc) {
      if (!StringDecoder)
        StringDecoder = require("string_decoder/").StringDecoder;
      var decoder = new StringDecoder(enc);
      this._readableState.decoder = decoder;
      this._readableState.encoding = this._readableState.decoder.encoding;
      var p = this._readableState.buffer.head;
      var content = "";
      while (p !== null) {
        content += decoder.write(p.data);
        p = p.next;
      }
      this._readableState.buffer.clear();
      if (content !== "")
        this._readableState.buffer.push(content);
      this._readableState.length = content.length;
      return this;
    };
    var MAX_HWM = 1073741824;
    function computeNewHighWaterMark(n) {
      if (n >= MAX_HWM) {
        n = MAX_HWM;
      } else {
        n--;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        n++;
      }
      return n;
    }
    function howMuchToRead(n, state) {
      if (n <= 0 || state.length === 0 && state.ended)
        return 0;
      if (state.objectMode)
        return 1;
      if (n !== n) {
        if (state.flowing && state.length)
          return state.buffer.head.data.length;
        else
          return state.length;
      }
      if (n > state.highWaterMark)
        state.highWaterMark = computeNewHighWaterMark(n);
      if (n <= state.length)
        return n;
      if (!state.ended) {
        state.needReadable = true;
        return 0;
      }
      return state.length;
    }
    Readable.prototype.read = function(n) {
      debug("read", n);
      n = parseInt(n, 10);
      var state = this._readableState;
      var nOrig = n;
      if (n !== 0)
        state.emittedReadable = false;
      if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
        debug("read: emitReadable", state.length, state.ended);
        if (state.length === 0 && state.ended)
          endReadable(this);
        else
          emitReadable(this);
        return null;
      }
      n = howMuchToRead(n, state);
      if (n === 0 && state.ended) {
        if (state.length === 0)
          endReadable(this);
        return null;
      }
      var doRead = state.needReadable;
      debug("need readable", doRead);
      if (state.length === 0 || state.length - n < state.highWaterMark) {
        doRead = true;
        debug("length less than watermark", doRead);
      }
      if (state.ended || state.reading) {
        doRead = false;
        debug("reading or ended", doRead);
      } else if (doRead) {
        debug("do read");
        state.reading = true;
        state.sync = true;
        if (state.length === 0)
          state.needReadable = true;
        this._read(state.highWaterMark);
        state.sync = false;
        if (!state.reading)
          n = howMuchToRead(nOrig, state);
      }
      var ret;
      if (n > 0)
        ret = fromList(n, state);
      else
        ret = null;
      if (ret === null) {
        state.needReadable = state.length <= state.highWaterMark;
        n = 0;
      } else {
        state.length -= n;
        state.awaitDrain = 0;
      }
      if (state.length === 0) {
        if (!state.ended)
          state.needReadable = true;
        if (nOrig !== n && state.ended)
          endReadable(this);
      }
      if (ret !== null)
        this.emit("data", ret);
      return ret;
    };
    function onEofChunk(stream, state) {
      debug("onEofChunk");
      if (state.ended)
        return;
      if (state.decoder) {
        var chunk = state.decoder.end();
        if (chunk && chunk.length) {
          state.buffer.push(chunk);
          state.length += state.objectMode ? 1 : chunk.length;
        }
      }
      state.ended = true;
      if (state.sync) {
        emitReadable(stream);
      } else {
        state.needReadable = false;
        if (!state.emittedReadable) {
          state.emittedReadable = true;
          emitReadable_(stream);
        }
      }
    }
    function emitReadable(stream) {
      var state = stream._readableState;
      debug("emitReadable", state.needReadable, state.emittedReadable);
      state.needReadable = false;
      if (!state.emittedReadable) {
        debug("emitReadable", state.flowing);
        state.emittedReadable = true;
        process.nextTick(emitReadable_, stream);
      }
    }
    function emitReadable_(stream) {
      var state = stream._readableState;
      debug("emitReadable_", state.destroyed, state.length, state.ended);
      if (!state.destroyed && (state.length || state.ended)) {
        stream.emit("readable");
        state.emittedReadable = false;
      }
      state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
      flow(stream);
    }
    function maybeReadMore(stream, state) {
      if (!state.readingMore) {
        state.readingMore = true;
        process.nextTick(maybeReadMore_, stream, state);
      }
    }
    function maybeReadMore_(stream, state) {
      while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
        var len = state.length;
        debug("maybeReadMore read 0");
        stream.read(0);
        if (len === state.length)
          break;
      }
      state.readingMore = false;
    }
    Readable.prototype._read = function(n) {
      errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED("_read()"));
    };
    Readable.prototype.pipe = function(dest, pipeOpts) {
      var src = this;
      var state = this._readableState;
      switch (state.pipesCount) {
        case 0:
          state.pipes = dest;
          break;
        case 1:
          state.pipes = [state.pipes, dest];
          break;
        default:
          state.pipes.push(dest);
          break;
      }
      state.pipesCount += 1;
      debug("pipe count=%d opts=%j", state.pipesCount, pipeOpts);
      var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
      var endFn = doEnd ? onend : unpipe;
      if (state.endEmitted)
        process.nextTick(endFn);
      else
        src.once("end", endFn);
      dest.on("unpipe", onunpipe);
      function onunpipe(readable, unpipeInfo) {
        debug("onunpipe");
        if (readable === src) {
          if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
            unpipeInfo.hasUnpiped = true;
            cleanup2();
          }
        }
      }
      function onend() {
        debug("onend");
        dest.end();
      }
      var ondrain = pipeOnDrain(src);
      dest.on("drain", ondrain);
      var cleanedUp = false;
      function cleanup2() {
        debug("cleanup");
        dest.removeListener("close", onclose);
        dest.removeListener("finish", onfinish);
        dest.removeListener("drain", ondrain);
        dest.removeListener("error", onerror);
        dest.removeListener("unpipe", onunpipe);
        src.removeListener("end", onend);
        src.removeListener("end", unpipe);
        src.removeListener("data", ondata);
        cleanedUp = true;
        if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain))
          ondrain();
      }
      src.on("data", ondata);
      function ondata(chunk) {
        debug("ondata");
        var ret = dest.write(chunk);
        debug("dest.write", ret);
        if (ret === false) {
          if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
            debug("false write response, pause", state.awaitDrain);
            state.awaitDrain++;
          }
          src.pause();
        }
      }
      function onerror(er) {
        debug("onerror", er);
        unpipe();
        dest.removeListener("error", onerror);
        if (EElistenerCount(dest, "error") === 0)
          errorOrDestroy(dest, er);
      }
      prependListener(dest, "error", onerror);
      function onclose() {
        dest.removeListener("finish", onfinish);
        unpipe();
      }
      dest.once("close", onclose);
      function onfinish() {
        debug("onfinish");
        dest.removeListener("close", onclose);
        unpipe();
      }
      dest.once("finish", onfinish);
      function unpipe() {
        debug("unpipe");
        src.unpipe(dest);
      }
      dest.emit("pipe", src);
      if (!state.flowing) {
        debug("pipe resume");
        src.resume();
      }
      return dest;
    };
    function pipeOnDrain(src) {
      return function pipeOnDrainFunctionResult() {
        var state = src._readableState;
        debug("pipeOnDrain", state.awaitDrain);
        if (state.awaitDrain)
          state.awaitDrain--;
        if (state.awaitDrain === 0 && EElistenerCount(src, "data")) {
          state.flowing = true;
          flow(src);
        }
      };
    }
    Readable.prototype.unpipe = function(dest) {
      var state = this._readableState;
      var unpipeInfo = {
        hasUnpiped: false
      };
      if (state.pipesCount === 0)
        return this;
      if (state.pipesCount === 1) {
        if (dest && dest !== state.pipes)
          return this;
        if (!dest)
          dest = state.pipes;
        state.pipes = null;
        state.pipesCount = 0;
        state.flowing = false;
        if (dest)
          dest.emit("unpipe", this, unpipeInfo);
        return this;
      }
      if (!dest) {
        var dests = state.pipes;
        var len = state.pipesCount;
        state.pipes = null;
        state.pipesCount = 0;
        state.flowing = false;
        for (var i = 0; i < len; i++)
          dests[i].emit("unpipe", this, {
            hasUnpiped: false
          });
        return this;
      }
      var index = indexOf(state.pipes, dest);
      if (index === -1)
        return this;
      state.pipes.splice(index, 1);
      state.pipesCount -= 1;
      if (state.pipesCount === 1)
        state.pipes = state.pipes[0];
      dest.emit("unpipe", this, unpipeInfo);
      return this;
    };
    Readable.prototype.on = function(ev, fn) {
      var res = Stream.prototype.on.call(this, ev, fn);
      var state = this._readableState;
      if (ev === "data") {
        state.readableListening = this.listenerCount("readable") > 0;
        if (state.flowing !== false)
          this.resume();
      } else if (ev === "readable") {
        if (!state.endEmitted && !state.readableListening) {
          state.readableListening = state.needReadable = true;
          state.flowing = false;
          state.emittedReadable = false;
          debug("on readable", state.length, state.reading);
          if (state.length) {
            emitReadable(this);
          } else if (!state.reading) {
            process.nextTick(nReadingNextTick, this);
          }
        }
      }
      return res;
    };
    Readable.prototype.addListener = Readable.prototype.on;
    Readable.prototype.removeListener = function(ev, fn) {
      var res = Stream.prototype.removeListener.call(this, ev, fn);
      if (ev === "readable") {
        process.nextTick(updateReadableListening, this);
      }
      return res;
    };
    Readable.prototype.removeAllListeners = function(ev) {
      var res = Stream.prototype.removeAllListeners.apply(this, arguments);
      if (ev === "readable" || ev === void 0) {
        process.nextTick(updateReadableListening, this);
      }
      return res;
    };
    function updateReadableListening(self2) {
      var state = self2._readableState;
      state.readableListening = self2.listenerCount("readable") > 0;
      if (state.resumeScheduled && !state.paused) {
        state.flowing = true;
      } else if (self2.listenerCount("data") > 0) {
        self2.resume();
      }
    }
    function nReadingNextTick(self2) {
      debug("readable nexttick read 0");
      self2.read(0);
    }
    Readable.prototype.resume = function() {
      var state = this._readableState;
      if (!state.flowing) {
        debug("resume");
        state.flowing = !state.readableListening;
        resume(this, state);
      }
      state.paused = false;
      return this;
    };
    function resume(stream, state) {
      if (!state.resumeScheduled) {
        state.resumeScheduled = true;
        process.nextTick(resume_, stream, state);
      }
    }
    function resume_(stream, state) {
      debug("resume", state.reading);
      if (!state.reading) {
        stream.read(0);
      }
      state.resumeScheduled = false;
      stream.emit("resume");
      flow(stream);
      if (state.flowing && !state.reading)
        stream.read(0);
    }
    Readable.prototype.pause = function() {
      debug("call pause flowing=%j", this._readableState.flowing);
      if (this._readableState.flowing !== false) {
        debug("pause");
        this._readableState.flowing = false;
        this.emit("pause");
      }
      this._readableState.paused = true;
      return this;
    };
    function flow(stream) {
      var state = stream._readableState;
      debug("flow", state.flowing);
      while (state.flowing && stream.read() !== null)
        ;
    }
    Readable.prototype.wrap = function(stream) {
      var _this = this;
      var state = this._readableState;
      var paused = false;
      stream.on("end", function() {
        debug("wrapped end");
        if (state.decoder && !state.ended) {
          var chunk = state.decoder.end();
          if (chunk && chunk.length)
            _this.push(chunk);
        }
        _this.push(null);
      });
      stream.on("data", function(chunk) {
        debug("wrapped data");
        if (state.decoder)
          chunk = state.decoder.write(chunk);
        if (state.objectMode && (chunk === null || chunk === void 0))
          return;
        else if (!state.objectMode && (!chunk || !chunk.length))
          return;
        var ret = _this.push(chunk);
        if (!ret) {
          paused = true;
          stream.pause();
        }
      });
      for (var i in stream) {
        if (this[i] === void 0 && typeof stream[i] === "function") {
          this[i] = function methodWrap(method) {
            return function methodWrapReturnFunction() {
              return stream[method].apply(stream, arguments);
            };
          }(i);
        }
      }
      for (var n = 0; n < kProxyEvents.length; n++) {
        stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
      }
      this._read = function(n2) {
        debug("wrapped _read", n2);
        if (paused) {
          paused = false;
          stream.resume();
        }
      };
      return this;
    };
    if (typeof Symbol === "function") {
      Readable.prototype[Symbol.asyncIterator] = function() {
        if (createReadableStreamAsyncIterator === void 0) {
          createReadableStreamAsyncIterator = require_async_iterator();
        }
        return createReadableStreamAsyncIterator(this);
      };
    }
    Object.defineProperty(Readable.prototype, "readableHighWaterMark", {
      enumerable: false,
      get: function get() {
        return this._readableState.highWaterMark;
      }
    });
    Object.defineProperty(Readable.prototype, "readableBuffer", {
      enumerable: false,
      get: function get() {
        return this._readableState && this._readableState.buffer;
      }
    });
    Object.defineProperty(Readable.prototype, "readableFlowing", {
      enumerable: false,
      get: function get() {
        return this._readableState.flowing;
      },
      set: function set(state) {
        if (this._readableState) {
          this._readableState.flowing = state;
        }
      }
    });
    Readable._fromList = fromList;
    Object.defineProperty(Readable.prototype, "readableLength", {
      enumerable: false,
      get: function get() {
        return this._readableState.length;
      }
    });
    function fromList(n, state) {
      if (state.length === 0)
        return null;
      var ret;
      if (state.objectMode)
        ret = state.buffer.shift();
      else if (!n || n >= state.length) {
        if (state.decoder)
          ret = state.buffer.join("");
        else if (state.buffer.length === 1)
          ret = state.buffer.first();
        else
          ret = state.buffer.concat(state.length);
        state.buffer.clear();
      } else {
        ret = state.buffer.consume(n, state.decoder);
      }
      return ret;
    }
    function endReadable(stream) {
      var state = stream._readableState;
      debug("endReadable", state.endEmitted);
      if (!state.endEmitted) {
        state.ended = true;
        process.nextTick(endReadableNT, state, stream);
      }
    }
    function endReadableNT(state, stream) {
      debug("endReadableNT", state.endEmitted, state.length);
      if (!state.endEmitted && state.length === 0) {
        state.endEmitted = true;
        stream.readable = false;
        stream.emit("end");
        if (state.autoDestroy) {
          var wState = stream._writableState;
          if (!wState || wState.autoDestroy && wState.finished) {
            stream.destroy();
          }
        }
      }
    }
    if (typeof Symbol === "function") {
      Readable.from = function(iterable, opts) {
        if (from === void 0) {
          from = require_from_browser();
        }
        return from(Readable, iterable, opts);
      };
    }
    function indexOf(xs, x) {
      for (var i = 0, l = xs.length; i < l; i++) {
        if (xs[i] === x)
          return i;
      }
      return -1;
    }
  }
});

// node_modules/readable-stream/lib/_stream_transform.js
var require_stream_transform = __commonJS({
  "node_modules/readable-stream/lib/_stream_transform.js"(exports, module2) {
    "use strict";
    module2.exports = Transform;
    var _require$codes = require_errors_browser().codes;
    var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED;
    var ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK;
    var ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING;
    var ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
    var Duplex = require_stream_duplex();
    require_inherits_browser()(Transform, Duplex);
    function afterTransform(er, data) {
      var ts = this._transformState;
      ts.transforming = false;
      var cb = ts.writecb;
      if (cb === null) {
        return this.emit("error", new ERR_MULTIPLE_CALLBACK());
      }
      ts.writechunk = null;
      ts.writecb = null;
      if (data != null)
        this.push(data);
      cb(er);
      var rs = this._readableState;
      rs.reading = false;
      if (rs.needReadable || rs.length < rs.highWaterMark) {
        this._read(rs.highWaterMark);
      }
    }
    function Transform(options) {
      if (!(this instanceof Transform))
        return new Transform(options);
      Duplex.call(this, options);
      this._transformState = {
        afterTransform: afterTransform.bind(this),
        needTransform: false,
        transforming: false,
        writecb: null,
        writechunk: null,
        writeencoding: null
      };
      this._readableState.needReadable = true;
      this._readableState.sync = false;
      if (options) {
        if (typeof options.transform === "function")
          this._transform = options.transform;
        if (typeof options.flush === "function")
          this._flush = options.flush;
      }
      this.on("prefinish", prefinish);
    }
    function prefinish() {
      var _this = this;
      if (typeof this._flush === "function" && !this._readableState.destroyed) {
        this._flush(function(er, data) {
          done(_this, er, data);
        });
      } else {
        done(this, null, null);
      }
    }
    Transform.prototype.push = function(chunk, encoding) {
      this._transformState.needTransform = false;
      return Duplex.prototype.push.call(this, chunk, encoding);
    };
    Transform.prototype._transform = function(chunk, encoding, cb) {
      cb(new ERR_METHOD_NOT_IMPLEMENTED("_transform()"));
    };
    Transform.prototype._write = function(chunk, encoding, cb) {
      var ts = this._transformState;
      ts.writecb = cb;
      ts.writechunk = chunk;
      ts.writeencoding = encoding;
      if (!ts.transforming) {
        var rs = this._readableState;
        if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark)
          this._read(rs.highWaterMark);
      }
    };
    Transform.prototype._read = function(n) {
      var ts = this._transformState;
      if (ts.writechunk !== null && !ts.transforming) {
        ts.transforming = true;
        this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
      } else {
        ts.needTransform = true;
      }
    };
    Transform.prototype._destroy = function(err, cb) {
      Duplex.prototype._destroy.call(this, err, function(err2) {
        cb(err2);
      });
    };
    function done(stream, er, data) {
      if (er)
        return stream.emit("error", er);
      if (data != null)
        stream.push(data);
      if (stream._writableState.length)
        throw new ERR_TRANSFORM_WITH_LENGTH_0();
      if (stream._transformState.transforming)
        throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
      return stream.push(null);
    }
  }
});

// node_modules/readable-stream/lib/_stream_passthrough.js
var require_stream_passthrough = __commonJS({
  "node_modules/readable-stream/lib/_stream_passthrough.js"(exports, module2) {
    "use strict";
    module2.exports = PassThrough;
    var Transform = require_stream_transform();
    require_inherits_browser()(PassThrough, Transform);
    function PassThrough(options) {
      if (!(this instanceof PassThrough))
        return new PassThrough(options);
      Transform.call(this, options);
    }
    PassThrough.prototype._transform = function(chunk, encoding, cb) {
      cb(null, chunk);
    };
  }
});

// node_modules/readable-stream/lib/internal/streams/pipeline.js
var require_pipeline = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/pipeline.js"(exports, module2) {
    "use strict";
    var eos;
    function once(callback) {
      var called = false;
      return function() {
        if (called)
          return;
        called = true;
        callback.apply(void 0, arguments);
      };
    }
    var _require$codes = require_errors_browser().codes;
    var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
    var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
    function noop(err) {
      if (err)
        throw err;
    }
    function isRequest(stream) {
      return stream.setHeader && typeof stream.abort === "function";
    }
    function destroyer(stream, reading, writing, callback) {
      callback = once(callback);
      var closed = false;
      stream.on("close", function() {
        closed = true;
      });
      if (eos === void 0)
        eos = require_end_of_stream();
      eos(stream, {
        readable: reading,
        writable: writing
      }, function(err) {
        if (err)
          return callback(err);
        closed = true;
        callback();
      });
      var destroyed = false;
      return function(err) {
        if (closed)
          return;
        if (destroyed)
          return;
        destroyed = true;
        if (isRequest(stream))
          return stream.abort();
        if (typeof stream.destroy === "function")
          return stream.destroy();
        callback(err || new ERR_STREAM_DESTROYED("pipe"));
      };
    }
    function call(fn) {
      fn();
    }
    function pipe(from, to) {
      return from.pipe(to);
    }
    function popCallback(streams) {
      if (!streams.length)
        return noop;
      if (typeof streams[streams.length - 1] !== "function")
        return noop;
      return streams.pop();
    }
    function pipeline() {
      for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
        streams[_key] = arguments[_key];
      }
      var callback = popCallback(streams);
      if (Array.isArray(streams[0]))
        streams = streams[0];
      if (streams.length < 2) {
        throw new ERR_MISSING_ARGS("streams");
      }
      var error;
      var destroys = streams.map(function(stream, i) {
        var reading = i < streams.length - 1;
        var writing = i > 0;
        return destroyer(stream, reading, writing, function(err) {
          if (!error)
            error = err;
          if (err)
            destroys.forEach(call);
          if (reading)
            return;
          destroys.forEach(call);
          callback(error);
        });
      });
      return streams.reduce(pipe);
    }
    module2.exports = pipeline;
  }
});

// node_modules/readable-stream/readable-browser.js
var require_readable_browser = __commonJS({
  "node_modules/readable-stream/readable-browser.js"(exports, module2) {
    exports = module2.exports = require_stream_readable();
    exports.Stream = exports;
    exports.Readable = exports;
    exports.Writable = require_stream_writable();
    exports.Duplex = require_stream_duplex();
    exports.Transform = require_stream_transform();
    exports.PassThrough = require_stream_passthrough();
    exports.finished = require_end_of_stream();
    exports.pipeline = require_pipeline();
  }
});

// node_modules/readable-web-to-node-stream/lib/index.js
var require_lib4 = __commonJS({
  "node_modules/readable-web-to-node-stream/lib/index.js"(exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.ReadableWebToNodeStream = void 0;
    var readable_stream_1 = require_readable_browser();
    var ReadableWebToNodeStream2 = class extends readable_stream_1.Readable {
      constructor(stream) {
        super();
        this.bytesRead = 0;
        this.released = false;
        this.reader = stream.getReader();
      }
      async _read() {
        if (this.released) {
          this.push(null);
          return;
        }
        this.pendingRead = this.reader.read();
        const data = await this.pendingRead;
        delete this.pendingRead;
        if (data.done || this.released) {
          this.push(null);
        } else {
          this.bytesRead += data.value.length;
          this.push(data.value);
        }
      }
      async waitForReadToComplete() {
        if (this.pendingRead) {
          await this.pendingRead;
        }
      }
      async close() {
        await this.syncAndRelease();
      }
      async syncAndRelease() {
        this.released = true;
        await this.waitForReadToComplete();
        await this.reader.releaseLock();
      }
    };
    exports.ReadableWebToNodeStream = ReadableWebToNodeStream2;
  }
});

// node_modules/ieee754/index.js
var require_ieee754 = __commonJS({
  "node_modules/ieee754/index.js"(exports) {
    exports.read = function(buffer, offset, isLE, mLen, nBytes) {
      var e, m;
      var eLen = nBytes * 8 - mLen - 1;
      var eMax = (1 << eLen) - 1;
      var eBias = eMax >> 1;
      var nBits = -7;
      var i = isLE ? nBytes - 1 : 0;
      var d = isLE ? -1 : 1;
      var s = buffer[offset + i];
      i += d;
      e = s & (1 << -nBits) - 1;
      s >>= -nBits;
      nBits += eLen;
      for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {
      }
      m = e & (1 << -nBits) - 1;
      e >>= -nBits;
      nBits += mLen;
      for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {
      }
      if (e === 0) {
        e = 1 - eBias;
      } else if (e === eMax) {
        return m ? NaN : (s ? -1 : 1) * Infinity;
      } else {
        m = m + Math.pow(2, mLen);
        e = e - eBias;
      }
      return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
    };
    exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
      var e, m, c;
      var eLen = nBytes * 8 - mLen - 1;
      var eMax = (1 << eLen) - 1;
      var eBias = eMax >> 1;
      var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
      var i = isLE ? 0 : nBytes - 1;
      var d = isLE ? 1 : -1;
      var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
      value = Math.abs(value);
      if (isNaN(value) || value === Infinity) {
        m = isNaN(value) ? 1 : 0;
        e = eMax;
      } else {
        e = Math.floor(Math.log(value) / Math.LN2);
        if (value * (c = Math.pow(2, -e)) < 1) {
          e--;
          c *= 2;
        }
        if (e + eBias >= 1) {
          value += rt / c;
        } else {
          value += rt * Math.pow(2, 1 - eBias);
        }
        if (value * c >= 2) {
          e++;
          c /= 2;
        }
        if (e + eBias >= eMax) {
          m = 0;
          e = eMax;
        } else if (e + eBias >= 1) {
          m = (value * c - 1) * Math.pow(2, mLen);
          e = e + eBias;
        } else {
          m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
          e = 0;
        }
      }
      for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {
      }
      e = e << mLen | m;
      eLen += mLen;
      for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {
      }
      buffer[offset + i - d] |= s * 128;
    };
  }
});

// node_modules/mime-db/db.json
var require_db = __commonJS({
  "node_modules/mime-db/db.json"(exports, module2) {
    module2.exports = {
      "application/1d-interleaved-parityfec": {
        source: "iana"
      },
      "application/3gpdash-qoe-report+xml": {
        source: "iana"
      },
      "application/3gpp-ims+xml": {
        source: "iana"
      },
      "application/a2l": {
        source: "iana"
      },
      "application/activemessage": {
        source: "iana"
      },
      "application/alto-costmap+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-costmapfilter+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-directory+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-endpointcost+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-endpointcostparams+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-endpointprop+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-endpointpropparams+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-error+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-networkmap+json": {
        source: "iana",
        compressible: true
      },
      "application/alto-networkmapfilter+json": {
        source: "iana",
        compressible: true
      },
      "application/aml": {
        source: "iana"
      },
      "application/andrew-inset": {
        source: "iana",
        extensions: ["ez"]
      },
      "application/applefile": {
        source: "iana"
      },
      "application/applixware": {
        source: "apache",
        extensions: ["aw"]
      },
      "application/atf": {
        source: "iana"
      },
      "application/atfx": {
        source: "iana"
      },
      "application/atom+xml": {
        source: "iana",
        compressible: true,
        extensions: ["atom"]
      },
      "application/atomcat+xml": {
        source: "iana",
        extensions: ["atomcat"]
      },
      "application/atomdeleted+xml": {
        source: "iana"
      },
      "application/atomicmail": {
        source: "iana"
      },
      "application/atomsvc+xml": {
        source: "iana",
        extensions: ["atomsvc"]
      },
      "application/atxml": {
        source: "iana"
      },
      "application/auth-policy+xml": {
        source: "iana"
      },
      "application/bacnet-xdd+zip": {
        source: "iana"
      },
      "application/batch-smtp": {
        source: "iana"
      },
      "application/bdoc": {
        compressible: false,
        extensions: ["bdoc"]
      },
      "application/beep+xml": {
        source: "iana"
      },
      "application/calendar+json": {
        source: "iana",
        compressible: true
      },
      "application/calendar+xml": {
        source: "iana"
      },
      "application/call-completion": {
        source: "iana"
      },
      "application/cals-1840": {
        source: "iana"
      },
      "application/cbor": {
        source: "iana"
      },
      "application/ccmp+xml": {
        source: "iana"
      },
      "application/ccxml+xml": {
        source: "iana",
        extensions: ["ccxml"]
      },
      "application/cdfx+xml": {
        source: "iana"
      },
      "application/cdmi-capability": {
        source: "iana",
        extensions: ["cdmia"]
      },
      "application/cdmi-container": {
        source: "iana",
        extensions: ["cdmic"]
      },
      "application/cdmi-domain": {
        source: "iana",
        extensions: ["cdmid"]
      },
      "application/cdmi-object": {
        source: "iana",
        extensions: ["cdmio"]
      },
      "application/cdmi-queue": {
        source: "iana",
        extensions: ["cdmiq"]
      },
      "application/cdni": {
        source: "iana"
      },
      "application/cea": {
        source: "iana"
      },
      "application/cea-2018+xml": {
        source: "iana"
      },
      "application/cellml+xml": {
        source: "iana"
      },
      "application/cfw": {
        source: "iana"
      },
      "application/clue_info+xml": {
        source: "iana"
      },
      "application/cms": {
        source: "iana"
      },
      "application/cnrp+xml": {
        source: "iana"
      },
      "application/coap-group+json": {
        source: "iana",
        compressible: true
      },
      "application/commonground": {
        source: "iana"
      },
      "application/conference-info+xml": {
        source: "iana"
      },
      "application/cpl+xml": {
        source: "iana"
      },
      "application/csrattrs": {
        source: "iana"
      },
      "application/csta+xml": {
        source: "iana"
      },
      "application/cstadata+xml": {
        source: "iana"
      },
      "application/csvm+json": {
        source: "iana",
        compressible: true
      },
      "application/cu-seeme": {
        source: "apache",
        extensions: ["cu"]
      },
      "application/cybercash": {
        source: "iana"
      },
      "application/dart": {
        compressible: true
      },
      "application/dash+xml": {
        source: "iana",
        extensions: ["mpd"]
      },
      "application/dashdelta": {
        source: "iana"
      },
      "application/davmount+xml": {
        source: "iana",
        extensions: ["davmount"]
      },
      "application/dca-rft": {
        source: "iana"
      },
      "application/dcd": {
        source: "iana"
      },
      "application/dec-dx": {
        source: "iana"
      },
      "application/dialog-info+xml": {
        source: "iana"
      },
      "application/dicom": {
        source: "iana"
      },
      "application/dicom+json": {
        source: "iana",
        compressible: true
      },
      "application/dicom+xml": {
        source: "iana"
      },
      "application/dii": {
        source: "iana"
      },
      "application/dit": {
        source: "iana"
      },
      "application/dns": {
        source: "iana"
      },
      "application/docbook+xml": {
        source: "apache",
        extensions: ["dbk"]
      },
      "application/dskpp+xml": {
        source: "iana"
      },
      "application/dssc+der": {
        source: "iana",
        extensions: ["dssc"]
      },
      "application/dssc+xml": {
        source: "iana",
        extensions: ["xdssc"]
      },
      "application/dvcs": {
        source: "iana"
      },
      "application/ecmascript": {
        source: "iana",
        compressible: true,
        extensions: ["ecma"]
      },
      "application/edi-consent": {
        source: "iana"
      },
      "application/edi-x12": {
        source: "iana",
        compressible: false
      },
      "application/edifact": {
        source: "iana",
        compressible: false
      },
      "application/efi": {
        source: "iana"
      },
      "application/emergencycalldata.comment+xml": {
        source: "iana"
      },
      "application/emergencycalldata.deviceinfo+xml": {
        source: "iana"
      },
      "application/emergencycalldata.providerinfo+xml": {
        source: "iana"
      },
      "application/emergencycalldata.serviceinfo+xml": {
        source: "iana"
      },
      "application/emergencycalldata.subscriberinfo+xml": {
        source: "iana"
      },
      "application/emma+xml": {
        source: "iana",
        extensions: ["emma"]
      },
      "application/emotionml+xml": {
        source: "iana"
      },
      "application/encaprtp": {
        source: "iana"
      },
      "application/epp+xml": {
        source: "iana"
      },
      "application/epub+zip": {
        source: "iana",
        extensions: ["epub"]
      },
      "application/eshop": {
        source: "iana"
      },
      "application/exi": {
        source: "iana",
        extensions: ["exi"]
      },
      "application/fastinfoset": {
        source: "iana"
      },
      "application/fastsoap": {
        source: "iana"
      },
      "application/fdt+xml": {
        source: "iana"
      },
      "application/fits": {
        source: "iana"
      },
      "application/font-sfnt": {
        source: "iana"
      },
      "application/font-tdpfr": {
        source: "iana",
        extensions: ["pfr"]
      },
      "application/font-woff": {
        source: "iana",
        compressible: false,
        extensions: ["woff"]
      },
      "application/font-woff2": {
        compressible: false,
        extensions: ["woff2"]
      },
      "application/framework-attributes+xml": {
        source: "iana"
      },
      "application/geo+json": {
        source: "iana",
        compressible: true
      },
      "application/gml+xml": {
        source: "apache",
        extensions: ["gml"]
      },
      "application/gpx+xml": {
        source: "apache",
        extensions: ["gpx"]
      },
      "application/gxf": {
        source: "apache",
        extensions: ["gxf"]
      },
      "application/gzip": {
        source: "iana",
        compressible: false
      },
      "application/h224": {
        source: "iana"
      },
      "application/held+xml": {
        source: "iana"
      },
      "application/http": {
        source: "iana"
      },
      "application/hyperstudio": {
        source: "iana",
        extensions: ["stk"]
      },
      "application/ibe-key-request+xml": {
        source: "iana"
      },
      "application/ibe-pkg-reply+xml": {
        source: "iana"
      },
      "application/ibe-pp-data": {
        source: "iana"
      },
      "application/iges": {
        source: "iana"
      },
      "application/im-iscomposing+xml": {
        source: "iana"
      },
      "application/index": {
        source: "iana"
      },
      "application/index.cmd": {
        source: "iana"
      },
      "application/index.obj": {
        source: "iana"
      },
      "application/index.response": {
        source: "iana"
      },
      "application/index.vnd": {
        source: "iana"
      },
      "application/inkml+xml": {
        source: "iana",
        extensions: ["ink", "inkml"]
      },
      "application/iotp": {
        source: "iana"
      },
      "application/ipfix": {
        source: "iana",
        extensions: ["ipfix"]
      },
      "application/ipp": {
        source: "iana"
      },
      "application/isup": {
        source: "iana"
      },
      "application/its+xml": {
        source: "iana"
      },
      "application/java-archive": {
        source: "apache",
        compressible: false,
        extensions: ["jar", "war", "ear"]
      },
      "application/java-serialized-object": {
        source: "apache",
        compressible: false,
        extensions: ["ser"]
      },
      "application/java-vm": {
        source: "apache",
        compressible: false,
        extensions: ["class"]
      },
      "application/javascript": {
        source: "iana",
        charset: "UTF-8",
        compressible: true,
        extensions: ["js"]
      },
      "application/jose": {
        source: "iana"
      },
      "application/jose+json": {
        source: "iana",
        compressible: true
      },
      "application/jrd+json": {
        source: "iana",
        compressible: true
      },
      "application/json": {
        source: "iana",
        charset: "UTF-8",
        compressible: true,
        extensions: ["json", "map"]
      },
      "application/json-patch+json": {
        source: "iana",
        compressible: true
      },
      "application/json-seq": {
        source: "iana"
      },
      "application/json5": {
        extensions: ["json5"]
      },
      "application/jsonml+json": {
        source: "apache",
        compressible: true,
        extensions: ["jsonml"]
      },
      "application/jwk+json": {
        source: "iana",
        compressible: true
      },
      "application/jwk-set+json": {
        source: "iana",
        compressible: true
      },
      "application/jwt": {
        source: "iana"
      },
      "application/kpml-request+xml": {
        source: "iana"
      },
      "application/kpml-response+xml": {
        source: "iana"
      },
      "application/ld+json": {
        source: "iana",
        compressible: true,
        extensions: ["jsonld"]
      },
      "application/lgr+xml": {
        source: "iana"
      },
      "application/link-format": {
        source: "iana"
      },
      "application/load-control+xml": {
        source: "iana"
      },
      "application/lost+xml": {
        source: "iana",
        extensions: ["lostxml"]
      },
      "application/lostsync+xml": {
        source: "iana"
      },
      "application/lxf": {
        source: "iana"
      },
      "application/mac-binhex40": {
        source: "iana",
        extensions: ["hqx"]
      },
      "application/mac-compactpro": {
        source: "apache",
        extensions: ["cpt"]
      },
      "application/macwriteii": {
        source: "iana"
      },
      "application/mads+xml": {
        source: "iana",
        extensions: ["mads"]
      },
      "application/manifest+json": {
        charset: "UTF-8",
        compressible: true,
        extensions: ["webmanifest"]
      },
      "application/marc": {
        source: "iana",
        extensions: ["mrc"]
      },
      "application/marcxml+xml": {
        source: "iana",
        extensions: ["mrcx"]
      },
      "application/mathematica": {
        source: "iana",
        extensions: ["ma", "nb", "mb"]
      },
      "application/mathml+xml": {
        source: "iana",
        extensions: ["mathml"]
      },
      "application/mathml-content+xml": {
        source: "iana"
      },
      "application/mathml-presentation+xml": {
        source: "iana"
      },
      "application/mbms-associated-procedure-description+xml": {
        source: "iana"
      },
      "application/mbms-deregister+xml": {
        source: "iana"
      },
      "application/mbms-envelope+xml": {
        source: "iana"
      },
      "application/mbms-msk+xml": {
        source: "iana"
      },
      "application/mbms-msk-response+xml": {
        source: "iana"
      },
      "application/mbms-protection-description+xml": {
        source: "iana"
      },
      "application/mbms-reception-report+xml": {
        source: "iana"
      },
      "application/mbms-register+xml": {
        source: "iana"
      },
      "application/mbms-register-response+xml": {
        source: "iana"
      },
      "application/mbms-schedule+xml": {
        source: "iana"
      },
      "application/mbms-user-service-description+xml": {
        source: "iana"
      },
      "application/mbox": {
        source: "iana",
        extensions: ["mbox"]
      },
      "application/media-policy-dataset+xml": {
        source: "iana"
      },
      "application/media_control+xml": {
        source: "iana"
      },
      "application/mediaservercontrol+xml": {
        source: "iana",
        extensions: ["mscml"]
      },
      "application/merge-patch+json": {
        source: "iana",
        compressible: true
      },
      "application/metalink+xml": {
        source: "apache",
        extensions: ["metalink"]
      },
      "application/metalink4+xml": {
        source: "iana",
        extensions: ["meta4"]
      },
      "application/mets+xml": {
        source: "iana",
        extensions: ["mets"]
      },
      "application/mf4": {
        source: "iana"
      },
      "application/mikey": {
        source: "iana"
      },
      "application/mods+xml": {
        source: "iana",
        extensions: ["mods"]
      },
      "application/moss-keys": {
        source: "iana"
      },
      "application/moss-signature": {
        source: "iana"
      },
      "application/mosskey-data": {
        source: "iana"
      },
      "application/mosskey-request": {
        source: "iana"
      },
      "application/mp21": {
        source: "iana",
        extensions: ["m21", "mp21"]
      },
      "application/mp4": {
        source: "iana",
        extensions: ["mp4s", "m4p"]
      },
      "application/mpeg4-generic": {
        source: "iana"
      },
      "application/mpeg4-iod": {
        source: "iana"
      },
      "application/mpeg4-iod-xmt": {
        source: "iana"
      },
      "application/mrb-consumer+xml": {
        source: "iana"
      },
      "application/mrb-publish+xml": {
        source: "iana"
      },
      "application/msc-ivr+xml": {
        source: "iana"
      },
      "application/msc-mixer+xml": {
        source: "iana"
      },
      "application/msword": {
        source: "iana",
        compressible: false,
        extensions: ["doc", "dot"]
      },
      "application/mxf": {
        source: "iana",
        extensions: ["mxf"]
      },
      "application/nasdata": {
        source: "iana"
      },
      "application/news-checkgroups": {
        source: "iana"
      },
      "application/news-groupinfo": {
        source: "iana"
      },
      "application/news-transmission": {
        source: "iana"
      },
      "application/nlsml+xml": {
        source: "iana"
      },
      "application/nss": {
        source: "iana"
      },
      "application/ocsp-request": {
        source: "iana"
      },
      "application/ocsp-response": {
        source: "iana"
      },
      "application/octet-stream": {
        source: "iana",
        compressible: false,
        extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
      },
      "application/oda": {
        source: "iana",
        extensions: ["oda"]
      },
      "application/odx": {
        source: "iana"
      },
      "application/oebps-package+xml": {
        source: "iana",
        extensions: ["opf"]
      },
      "application/ogg": {
        source: "iana",
        compressible: false,
        extensions: ["ogx"]
      },
      "application/omdoc+xml": {
        source: "apache",
        extensions: ["omdoc"]
      },
      "application/onenote": {
        source: "apache",
        extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"]
      },
      "application/oxps": {
        source: "iana",
        extensions: ["oxps"]
      },
      "application/p2p-overlay+xml": {
        source: "iana"
      },
      "application/parityfec": {
        source: "iana"
      },
      "application/patch-ops-error+xml": {
        source: "iana",
        extensions: ["xer"]
      },
      "application/pdf": {
        source: "iana",
        compressible: false,
        extensions: ["pdf"]
      },
      "application/pdx": {
        source: "iana"
      },
      "application/pgp-encrypted": {
        source: "iana",
        compressible: false,
        extensions: ["pgp"]
      },
      "application/pgp-keys": {
        source: "iana"
      },
      "application/pgp-signature": {
        source: "iana",
        extensions: ["asc", "sig"]
      },
      "application/pics-rules": {
        source: "apache",
        extensions: ["prf"]
      },
      "application/pidf+xml": {
        source: "iana"
      },
      "application/pidf-diff+xml": {
        source: "iana"
      },
      "application/pkcs10": {
        source: "iana",
        extensions: ["p10"]
      },
      "application/pkcs12": {
        source: "iana"
      },
      "application/pkcs7-mime": {
        source: "iana",
        extensions: ["p7m", "p7c"]
      },
      "application/pkcs7-signature": {
        source: "iana",
        extensions: ["p7s"]
      },
      "application/pkcs8": {
        source: "iana",
        extensions: ["p8"]
      },
      "application/pkix-attr-cert": {
        source: "iana",
        extensions: ["ac"]
      },
      "application/pkix-cert": {
        source: "iana",
        extensions: ["cer"]
      },
      "application/pkix-crl": {
        source: "iana",
        extensions: ["crl"]
      },
      "application/pkix-pkipath": {
        source: "iana",
        extensions: ["pkipath"]
      },
      "application/pkixcmp": {
        source: "iana",
        extensions: ["pki"]
      },
      "application/pls+xml": {
        source: "iana",
        extensions: ["pls"]
      },
      "application/poc-settings+xml": {
        source: "iana"
      },
      "application/postscript": {
        source: "iana",
        compressible: true,
        extensions: ["ai", "eps", "ps"]
      },
      "application/ppsp-tracker+json": {
        source: "iana",
        compressible: true
      },
      "application/problem+json": {
        source: "iana",
        compressible: true
      },
      "application/problem+xml": {
        source: "iana"
      },
      "application/provenance+xml": {
        source: "iana"
      },
      "application/prs.alvestrand.titrax-sheet": {
        source: "iana"
      },
      "application/prs.cww": {
        source: "iana",
        extensions: ["cww"]
      },
      "application/prs.hpub+zip": {
        source: "iana"
      },
      "application/prs.nprend": {
        source: "iana"
      },
      "application/prs.plucker": {
        source: "iana"
      },
      "application/prs.rdf-xml-crypt": {
        source: "iana"
      },
      "application/prs.xsf+xml": {
        source: "iana"
      },
      "application/pskc+xml": {
        source: "iana",
        extensions: ["pskcxml"]
      },
      "application/qsig": {
        source: "iana"
      },
      "application/raptorfec": {
        source: "iana"
      },
      "application/rdap+json": {
        source: "iana",
        compressible: true
      },
      "application/rdf+xml": {
        source: "iana",
        compressible: true,
        extensions: ["rdf"]
      },
      "application/reginfo+xml": {
        source: "iana",
        extensions: ["rif"]
      },
      "application/relax-ng-compact-syntax": {
        source: "iana",
        extensions: ["rnc"]
      },
      "application/remote-printing": {
        source: "iana"
      },
      "application/reputon+json": {
        source: "iana",
        compressible: true
      },
      "application/resource-lists+xml": {
        source: "iana",
        extensions: ["rl"]
      },
      "application/resource-lists-diff+xml": {
        source: "iana",
        extensions: ["rld"]
      },
      "application/rfc+xml": {
        source: "iana"
      },
      "application/riscos": {
        source: "iana"
      },
      "application/rlmi+xml": {
        source: "iana"
      },
      "application/rls-services+xml": {
        source: "iana",
        extensions: ["rs"]
      },
      "application/rpki-ghostbusters": {
        source: "iana",
        extensions: ["gbr"]
      },
      "application/rpki-manifest": {
        source: "iana",
        extensions: ["mft"]
      },
      "application/rpki-roa": {
        source: "iana",
        extensions: ["roa"]
      },
      "application/rpki-updown": {
        source: "iana"
      },
      "application/rsd+xml": {
        source: "apache",
        extensions: ["rsd"]
      },
      "application/rss+xml": {
        source: "apache",
        compressible: true,
        extensions: ["rss"]
      },
      "application/rtf": {
        source: "iana",
        compressible: true,
        extensions: ["rtf"]
      },
      "application/rtploopback": {
        source: "iana"
      },
      "application/rtx": {
        source: "iana"
      },
      "application/samlassertion+xml": {
        source: "iana"
      },
      "application/samlmetadata+xml": {
        source: "iana"
      },
      "application/sbml+xml": {
        source: "iana",
        extensions: ["sbml"]
      },
      "application/scaip+xml": {
        source: "iana"
      },
      "application/scim+json": {
        source: "iana",
        compressible: true
      },
      "application/scvp-cv-request": {
        source: "iana",
        extensions: ["scq"]
      },
      "application/scvp-cv-response": {
        source: "iana",
        extensions: ["scs"]
      },
      "application/scvp-vp-request": {
        source: "iana",
        extensions: ["spq"]
      },
      "application/scvp-vp-response": {
        source: "iana",
        extensions: ["spp"]
      },
      "application/sdp": {
        source: "iana",
        extensions: ["sdp"]
      },
      "application/sep+xml": {
        source: "iana"
      },
      "application/sep-exi": {
        source: "iana"
      },
      "application/session-info": {
        source: "iana"
      },
      "application/set-payment": {
        source: "iana"
      },
      "application/set-payment-initiation": {
        source: "iana",
        extensions: ["setpay"]
      },
      "application/set-registration": {
        source: "iana"
      },
      "application/set-registration-initiation": {
        source: "iana",
        extensions: ["setreg"]
      },
      "application/sgml": {
        source: "iana"
      },
      "application/sgml-open-catalog": {
        source: "iana"
      },
      "application/shf+xml": {
        source: "iana",
        extensions: ["shf"]
      },
      "application/sieve": {
        source: "iana"
      },
      "application/simple-filter+xml": {
        source: "iana"
      },
      "application/simple-message-summary": {
        source: "iana"
      },
      "application/simplesymbolcontainer": {
        source: "iana"
      },
      "application/slate": {
        source: "iana"
      },
      "application/smil": {
        source: "iana"
      },
      "application/smil+xml": {
        source: "iana",
        extensions: ["smi", "smil"]
      },
      "application/smpte336m": {
        source: "iana"
      },
      "application/soap+fastinfoset": {
        source: "iana"
      },
      "application/soap+xml": {
        source: "iana",
        compressible: true
      },
      "application/sparql-query": {
        source: "iana",
        extensions: ["rq"]
      },
      "application/sparql-results+xml": {
        source: "iana",
        extensions: ["srx"]
      },
      "application/spirits-event+xml": {
        source: "iana"
      },
      "application/sql": {
        source: "iana"
      },
      "application/srgs": {
        source: "iana",
        extensions: ["gram"]
      },
      "application/srgs+xml": {
        source: "iana",
        extensions: ["grxml"]
      },
      "application/sru+xml": {
        source: "iana",
        extensions: ["sru"]
      },
      "application/ssdl+xml": {
        source: "apache",
        extensions: ["ssdl"]
      },
      "application/ssml+xml": {
        source: "iana",
        extensions: ["ssml"]
      },
      "application/tamp-apex-update": {
        source: "iana"
      },
      "application/tamp-apex-update-confirm": {
        source: "iana"
      },
      "application/tamp-community-update": {
        source: "iana"
      },
      "application/tamp-community-update-confirm": {
        source: "iana"
      },
      "application/tamp-error": {
        source: "iana"
      },
      "application/tamp-sequence-adjust": {
        source: "iana"
      },
      "application/tamp-sequence-adjust-confirm": {
        source: "iana"
      },
      "application/tamp-status-query": {
        source: "iana"
      },
      "application/tamp-status-response": {
        source: "iana"
      },
      "application/tamp-update": {
        source: "iana"
      },
      "application/tamp-update-confirm": {
        source: "iana"
      },
      "application/tar": {
        compressible: true
      },
      "application/tei+xml": {
        source: "iana",
        extensions: ["tei", "teicorpus"]
      },
      "application/thraud+xml": {
        source: "iana",
        extensions: ["tfi"]
      },
      "application/timestamp-query": {
        source: "iana"
      },
      "application/timestamp-reply": {
        source: "iana"
      },
      "application/timestamped-data": {
        source: "iana",
        extensions: ["tsd"]
      },
      "application/ttml+xml": {
        source: "iana"
      },
      "application/tve-trigger": {
        source: "iana"
      },
      "application/ulpfec": {
        source: "iana"
      },
      "application/urc-grpsheet+xml": {
        source: "iana"
      },
      "application/urc-ressheet+xml": {
        source: "iana"
      },
      "application/urc-targetdesc+xml": {
        source: "iana"
      },
      "application/urc-uisocketdesc+xml": {
        source: "iana"
      },
      "application/vcard+json": {
        source: "iana",
        compressible: true
      },
      "application/vcard+xml": {
        source: "iana"
      },
      "application/vemmi": {
        source: "iana"
      },
      "application/vividence.scriptfile": {
        source: "apache"
      },
      "application/vnd.3gpp-prose+xml": {
        source: "iana"
      },
      "application/vnd.3gpp-prose-pc3ch+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.access-transfer-events+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.bsf+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.mid-call+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.pic-bw-large": {
        source: "iana",
        extensions: ["plb"]
      },
      "application/vnd.3gpp.pic-bw-small": {
        source: "iana",
        extensions: ["psb"]
      },
      "application/vnd.3gpp.pic-bw-var": {
        source: "iana",
        extensions: ["pvb"]
      },
      "application/vnd.3gpp.sms": {
        source: "iana"
      },
      "application/vnd.3gpp.sms+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.srvcc-ext+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.srvcc-info+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.state-and-event-info+xml": {
        source: "iana"
      },
      "application/vnd.3gpp.ussd+xml": {
        source: "iana"
      },
      "application/vnd.3gpp2.bcmcsinfo+xml": {
        source: "iana"
      },
      "application/vnd.3gpp2.sms": {
        source: "iana"
      },
      "application/vnd.3gpp2.tcap": {
        source: "iana",
        extensions: ["tcap"]
      },
      "application/vnd.3lightssoftware.imagescal": {
        source: "iana"
      },
      "application/vnd.3m.post-it-notes": {
        source: "iana",
        extensions: ["pwn"]
      },
      "application/vnd.accpac.simply.aso": {
        source: "iana",
        extensions: ["aso"]
      },
      "application/vnd.accpac.simply.imp": {
        source: "iana",
        extensions: ["imp"]
      },
      "application/vnd.acucobol": {
        source: "iana",
        extensions: ["acu"]
      },
      "application/vnd.acucorp": {
        source: "iana",
        extensions: ["atc", "acutc"]
      },
      "application/vnd.adobe.air-application-installer-package+zip": {
        source: "apache",
        extensions: ["air"]
      },
      "application/vnd.adobe.flash.movie": {
        source: "iana"
      },
      "application/vnd.adobe.formscentral.fcdt": {
        source: "iana",
        extensions: ["fcdt"]
      },
      "application/vnd.adobe.fxp": {
        source: "iana",
        extensions: ["fxp", "fxpl"]
      },
      "application/vnd.adobe.partial-upload": {
        source: "iana"
      },
      "application/vnd.adobe.xdp+xml": {
        source: "iana",
        extensions: ["xdp"]
      },
      "application/vnd.adobe.xfdf": {
        source: "iana",
        extensions: ["xfdf"]
      },
      "application/vnd.aether.imp": {
        source: "iana"
      },
      "application/vnd.ah-barcode": {
        source: "iana"
      },
      "application/vnd.ahead.space": {
        source: "iana",
        extensions: ["ahead"]
      },
      "application/vnd.airzip.filesecure.azf": {
        source: "iana",
        extensions: ["azf"]
      },
      "application/vnd.airzip.filesecure.azs": {
        source: "iana",
        extensions: ["azs"]
      },
      "application/vnd.amazon.ebook": {
        source: "apache",
        extensions: ["azw"]
      },
      "application/vnd.amazon.mobi8-ebook": {
        source: "iana"
      },
      "application/vnd.americandynamics.acc": {
        source: "iana",
        extensions: ["acc"]
      },
      "application/vnd.amiga.ami": {
        source: "iana",
        extensions: ["ami"]
      },
      "application/vnd.amundsen.maze+xml": {
        source: "iana"
      },
      "application/vnd.android.package-archive": {
        source: "apache",
        compressible: false,
        extensions: ["apk"]
      },
      "application/vnd.anki": {
        source: "iana"
      },
      "application/vnd.anser-web-certificate-issue-initiation": {
        source: "iana",
        extensions: ["cii"]
      },
      "application/vnd.anser-web-funds-transfer-initiation": {
        source: "apache",
        extensions: ["fti"]
      },
      "application/vnd.antix.game-component": {
        source: "iana",
        extensions: ["atx"]
      },
      "application/vnd.apache.thrift.binary": {
        source: "iana"
      },
      "application/vnd.apache.thrift.compact": {
        source: "iana"
      },
      "application/vnd.apache.thrift.json": {
        source: "iana"
      },
      "application/vnd.api+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.apple.installer+xml": {
        source: "iana",
        extensions: ["mpkg"]
      },
      "application/vnd.apple.mpegurl": {
        source: "iana",
        extensions: ["m3u8"]
      },
      "application/vnd.apple.pkpass": {
        compressible: false,
        extensions: ["pkpass"]
      },
      "application/vnd.arastra.swi": {
        source: "iana"
      },
      "application/vnd.aristanetworks.swi": {
        source: "iana",
        extensions: ["swi"]
      },
      "application/vnd.artsquare": {
        source: "iana"
      },
      "application/vnd.astraea-software.iota": {
        source: "iana",
        extensions: ["iota"]
      },
      "application/vnd.audiograph": {
        source: "iana",
        extensions: ["aep"]
      },
      "application/vnd.autopackage": {
        source: "iana"
      },
      "application/vnd.avistar+xml": {
        source: "iana"
      },
      "application/vnd.balsamiq.bmml+xml": {
        source: "iana"
      },
      "application/vnd.balsamiq.bmpr": {
        source: "iana"
      },
      "application/vnd.bekitzur-stech+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.biopax.rdf+xml": {
        source: "iana"
      },
      "application/vnd.blueice.multipass": {
        source: "iana",
        extensions: ["mpm"]
      },
      "application/vnd.bluetooth.ep.oob": {
        source: "iana"
      },
      "application/vnd.bluetooth.le.oob": {
        source: "iana"
      },
      "application/vnd.bmi": {
        source: "iana",
        extensions: ["bmi"]
      },
      "application/vnd.businessobjects": {
        source: "iana",
        extensions: ["rep"]
      },
      "application/vnd.cab-jscript": {
        source: "iana"
      },
      "application/vnd.canon-cpdl": {
        source: "iana"
      },
      "application/vnd.canon-lips": {
        source: "iana"
      },
      "application/vnd.cendio.thinlinc.clientconf": {
        source: "iana"
      },
      "application/vnd.century-systems.tcp_stream": {
        source: "iana"
      },
      "application/vnd.chemdraw+xml": {
        source: "iana",
        extensions: ["cdxml"]
      },
      "application/vnd.chess-pgn": {
        source: "iana"
      },
      "application/vnd.chipnuts.karaoke-mmd": {
        source: "iana",
        extensions: ["mmd"]
      },
      "application/vnd.cinderella": {
        source: "iana",
        extensions: ["cdy"]
      },
      "application/vnd.cirpack.isdn-ext": {
        source: "iana"
      },
      "application/vnd.citationstyles.style+xml": {
        source: "iana"
      },
      "application/vnd.claymore": {
        source: "iana",
        extensions: ["cla"]
      },
      "application/vnd.cloanto.rp9": {
        source: "iana",
        extensions: ["rp9"]
      },
      "application/vnd.clonk.c4group": {
        source: "iana",
        extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
      },
      "application/vnd.cluetrust.cartomobile-config": {
        source: "iana",
        extensions: ["c11amc"]
      },
      "application/vnd.cluetrust.cartomobile-config-pkg": {
        source: "iana",
        extensions: ["c11amz"]
      },
      "application/vnd.coffeescript": {
        source: "iana"
      },
      "application/vnd.collection+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.collection.doc+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.collection.next+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.comicbook+zip": {
        source: "iana"
      },
      "application/vnd.commerce-battelle": {
        source: "iana"
      },
      "application/vnd.commonspace": {
        source: "iana",
        extensions: ["csp"]
      },
      "application/vnd.contact.cmsg": {
        source: "iana",
        extensions: ["cdbcmsg"]
      },
      "application/vnd.coreos.ignition+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.cosmocaller": {
        source: "iana",
        extensions: ["cmc"]
      },
      "application/vnd.crick.clicker": {
        source: "iana",
        extensions: ["clkx"]
      },
      "application/vnd.crick.clicker.keyboard": {
        source: "iana",
        extensions: ["clkk"]
      },
      "application/vnd.crick.clicker.palette": {
        source: "iana",
        extensions: ["clkp"]
      },
      "application/vnd.crick.clicker.template": {
        source: "iana",
        extensions: ["clkt"]
      },
      "application/vnd.crick.clicker.wordbank": {
        source: "iana",
        extensions: ["clkw"]
      },
      "application/vnd.criticaltools.wbs+xml": {
        source: "iana",
        extensions: ["wbs"]
      },
      "application/vnd.ctc-posml": {
        source: "iana",
        extensions: ["pml"]
      },
      "application/vnd.ctct.ws+xml": {
        source: "iana"
      },
      "application/vnd.cups-pdf": {
        source: "iana"
      },
      "application/vnd.cups-postscript": {
        source: "iana"
      },
      "application/vnd.cups-ppd": {
        source: "iana",
        extensions: ["ppd"]
      },
      "application/vnd.cups-raster": {
        source: "iana"
      },
      "application/vnd.cups-raw": {
        source: "iana"
      },
      "application/vnd.curl": {
        source: "iana"
      },
      "application/vnd.curl.car": {
        source: "apache",
        extensions: ["car"]
      },
      "application/vnd.curl.pcurl": {
        source: "apache",
        extensions: ["pcurl"]
      },
      "application/vnd.cyan.dean.root+xml": {
        source: "iana"
      },
      "application/vnd.cybank": {
        source: "iana"
      },
      "application/vnd.d2l.coursepackage1p0+zip": {
        source: "iana"
      },
      "application/vnd.dart": {
        source: "iana",
        compressible: true,
        extensions: ["dart"]
      },
      "application/vnd.data-vision.rdz": {
        source: "iana",
        extensions: ["rdz"]
      },
      "application/vnd.debian.binary-package": {
        source: "iana"
      },
      "application/vnd.dece.data": {
        source: "iana",
        extensions: ["uvf", "uvvf", "uvd", "uvvd"]
      },
      "application/vnd.dece.ttml+xml": {
        source: "iana",
        extensions: ["uvt", "uvvt"]
      },
      "application/vnd.dece.unspecified": {
        source: "iana",
        extensions: ["uvx", "uvvx"]
      },
      "application/vnd.dece.zip": {
        source: "iana",
        extensions: ["uvz", "uvvz"]
      },
      "application/vnd.denovo.fcselayout-link": {
        source: "iana",
        extensions: ["fe_launch"]
      },
      "application/vnd.desmume-movie": {
        source: "iana"
      },
      "application/vnd.desmume.movie": {
        source: "apache"
      },
      "application/vnd.dir-bi.plate-dl-nosuffix": {
        source: "iana"
      },
      "application/vnd.dm.delegation+xml": {
        source: "iana"
      },
      "application/vnd.dna": {
        source: "iana",
        extensions: ["dna"]
      },
      "application/vnd.document+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.dolby.mlp": {
        source: "apache",
        extensions: ["mlp"]
      },
      "application/vnd.dolby.mobile.1": {
        source: "iana"
      },
      "application/vnd.dolby.mobile.2": {
        source: "iana"
      },
      "application/vnd.doremir.scorecloud-binary-document": {
        source: "iana"
      },
      "application/vnd.dpgraph": {
        source: "iana",
        extensions: ["dpg"]
      },
      "application/vnd.dreamfactory": {
        source: "iana",
        extensions: ["dfac"]
      },
      "application/vnd.drive+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ds-keypoint": {
        source: "apache",
        extensions: ["kpxx"]
      },
      "application/vnd.dtg.local": {
        source: "iana"
      },
      "application/vnd.dtg.local.flash": {
        source: "iana"
      },
      "application/vnd.dtg.local.html": {
        source: "iana"
      },
      "application/vnd.dvb.ait": {
        source: "iana",
        extensions: ["ait"]
      },
      "application/vnd.dvb.dvbj": {
        source: "iana"
      },
      "application/vnd.dvb.esgcontainer": {
        source: "iana"
      },
      "application/vnd.dvb.ipdcdftnotifaccess": {
        source: "iana"
      },
      "application/vnd.dvb.ipdcesgaccess": {
        source: "iana"
      },
      "application/vnd.dvb.ipdcesgaccess2": {
        source: "iana"
      },
      "application/vnd.dvb.ipdcesgpdd": {
        source: "iana"
      },
      "application/vnd.dvb.ipdcroaming": {
        source: "iana"
      },
      "application/vnd.dvb.iptv.alfec-base": {
        source: "iana"
      },
      "application/vnd.dvb.iptv.alfec-enhancement": {
        source: "iana"
      },
      "application/vnd.dvb.notif-aggregate-root+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-container+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-generic+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-ia-msglist+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-ia-registration-request+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-ia-registration-response+xml": {
        source: "iana"
      },
      "application/vnd.dvb.notif-init+xml": {
        source: "iana"
      },
      "application/vnd.dvb.pfr": {
        source: "iana"
      },
      "application/vnd.dvb.service": {
        source: "iana",
        extensions: ["svc"]
      },
      "application/vnd.dxr": {
        source: "iana"
      },
      "application/vnd.dynageo": {
        source: "iana",
        extensions: ["geo"]
      },
      "application/vnd.dzr": {
        source: "iana"
      },
      "application/vnd.easykaraoke.cdgdownload": {
        source: "iana"
      },
      "application/vnd.ecdis-update": {
        source: "iana"
      },
      "application/vnd.ecowin.chart": {
        source: "iana",
        extensions: ["mag"]
      },
      "application/vnd.ecowin.filerequest": {
        source: "iana"
      },
      "application/vnd.ecowin.fileupdate": {
        source: "iana"
      },
      "application/vnd.ecowin.series": {
        source: "iana"
      },
      "application/vnd.ecowin.seriesrequest": {
        source: "iana"
      },
      "application/vnd.ecowin.seriesupdate": {
        source: "iana"
      },
      "application/vnd.emclient.accessrequest+xml": {
        source: "iana"
      },
      "application/vnd.enliven": {
        source: "iana",
        extensions: ["nml"]
      },
      "application/vnd.enphase.envoy": {
        source: "iana"
      },
      "application/vnd.eprints.data+xml": {
        source: "iana"
      },
      "application/vnd.epson.esf": {
        source: "iana",
        extensions: ["esf"]
      },
      "application/vnd.epson.msf": {
        source: "iana",
        extensions: ["msf"]
      },
      "application/vnd.epson.quickanime": {
        source: "iana",
        extensions: ["qam"]
      },
      "application/vnd.epson.salt": {
        source: "iana",
        extensions: ["slt"]
      },
      "application/vnd.epson.ssf": {
        source: "iana",
        extensions: ["ssf"]
      },
      "application/vnd.ericsson.quickcall": {
        source: "iana"
      },
      "application/vnd.espass-espass+zip": {
        source: "iana"
      },
      "application/vnd.eszigno3+xml": {
        source: "iana",
        extensions: ["es3", "et3"]
      },
      "application/vnd.etsi.aoc+xml": {
        source: "iana"
      },
      "application/vnd.etsi.asic-e+zip": {
        source: "iana"
      },
      "application/vnd.etsi.asic-s+zip": {
        source: "iana"
      },
      "application/vnd.etsi.cug+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvcommand+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvdiscovery+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvprofile+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvsad-bc+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvsad-cod+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvsad-npvr+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvservice+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvsync+xml": {
        source: "iana"
      },
      "application/vnd.etsi.iptvueprofile+xml": {
        source: "iana"
      },
      "application/vnd.etsi.mcid+xml": {
        source: "iana"
      },
      "application/vnd.etsi.mheg5": {
        source: "iana"
      },
      "application/vnd.etsi.overload-control-policy-dataset+xml": {
        source: "iana"
      },
      "application/vnd.etsi.pstn+xml": {
        source: "iana"
      },
      "application/vnd.etsi.sci+xml": {
        source: "iana"
      },
      "application/vnd.etsi.simservs+xml": {
        source: "iana"
      },
      "application/vnd.etsi.timestamp-token": {
        source: "iana"
      },
      "application/vnd.etsi.tsl+xml": {
        source: "iana"
      },
      "application/vnd.etsi.tsl.der": {
        source: "iana"
      },
      "application/vnd.eudora.data": {
        source: "iana"
      },
      "application/vnd.ezpix-album": {
        source: "iana",
        extensions: ["ez2"]
      },
      "application/vnd.ezpix-package": {
        source: "iana",
        extensions: ["ez3"]
      },
      "application/vnd.f-secure.mobile": {
        source: "iana"
      },
      "application/vnd.fastcopy-disk-image": {
        source: "iana"
      },
      "application/vnd.fdf": {
        source: "iana",
        extensions: ["fdf"]
      },
      "application/vnd.fdsn.mseed": {
        source: "iana",
        extensions: ["mseed"]
      },
      "application/vnd.fdsn.seed": {
        source: "iana",
        extensions: ["seed", "dataless"]
      },
      "application/vnd.ffsns": {
        source: "iana"
      },
      "application/vnd.filmit.zfc": {
        source: "iana"
      },
      "application/vnd.fints": {
        source: "iana"
      },
      "application/vnd.firemonkeys.cloudcell": {
        source: "iana"
      },
      "application/vnd.flographit": {
        source: "iana",
        extensions: ["gph"]
      },
      "application/vnd.fluxtime.clip": {
        source: "iana",
        extensions: ["ftc"]
      },
      "application/vnd.font-fontforge-sfd": {
        source: "iana"
      },
      "application/vnd.framemaker": {
        source: "iana",
        extensions: ["fm", "frame", "maker", "book"]
      },
      "application/vnd.frogans.fnc": {
        source: "iana",
        extensions: ["fnc"]
      },
      "application/vnd.frogans.ltf": {
        source: "iana",
        extensions: ["ltf"]
      },
      "application/vnd.fsc.weblaunch": {
        source: "iana",
        extensions: ["fsc"]
      },
      "application/vnd.fujitsu.oasys": {
        source: "iana",
        extensions: ["oas"]
      },
      "application/vnd.fujitsu.oasys2": {
        source: "iana",
        extensions: ["oa2"]
      },
      "application/vnd.fujitsu.oasys3": {
        source: "iana",
        extensions: ["oa3"]
      },
      "application/vnd.fujitsu.oasysgp": {
        source: "iana",
        extensions: ["fg5"]
      },
      "application/vnd.fujitsu.oasysprs": {
        source: "iana",
        extensions: ["bh2"]
      },
      "application/vnd.fujixerox.art-ex": {
        source: "iana"
      },
      "application/vnd.fujixerox.art4": {
        source: "iana"
      },
      "application/vnd.fujixerox.ddd": {
        source: "iana",
        extensions: ["ddd"]
      },
      "application/vnd.fujixerox.docuworks": {
        source: "iana",
        extensions: ["xdw"]
      },
      "application/vnd.fujixerox.docuworks.binder": {
        source: "iana",
        extensions: ["xbd"]
      },
      "application/vnd.fujixerox.docuworks.container": {
        source: "iana"
      },
      "application/vnd.fujixerox.hbpl": {
        source: "iana"
      },
      "application/vnd.fut-misnet": {
        source: "iana"
      },
      "application/vnd.fuzzysheet": {
        source: "iana",
        extensions: ["fzs"]
      },
      "application/vnd.genomatix.tuxedo": {
        source: "iana",
        extensions: ["txd"]
      },
      "application/vnd.geo+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.geocube+xml": {
        source: "iana"
      },
      "application/vnd.geogebra.file": {
        source: "iana",
        extensions: ["ggb"]
      },
      "application/vnd.geogebra.tool": {
        source: "iana",
        extensions: ["ggt"]
      },
      "application/vnd.geometry-explorer": {
        source: "iana",
        extensions: ["gex", "gre"]
      },
      "application/vnd.geonext": {
        source: "iana",
        extensions: ["gxt"]
      },
      "application/vnd.geoplan": {
        source: "iana",
        extensions: ["g2w"]
      },
      "application/vnd.geospace": {
        source: "iana",
        extensions: ["g3w"]
      },
      "application/vnd.gerber": {
        source: "iana"
      },
      "application/vnd.globalplatform.card-content-mgt": {
        source: "iana"
      },
      "application/vnd.globalplatform.card-content-mgt-response": {
        source: "iana"
      },
      "application/vnd.gmx": {
        source: "iana",
        extensions: ["gmx"]
      },
      "application/vnd.google-apps.document": {
        compressible: false,
        extensions: ["gdoc"]
      },
      "application/vnd.google-apps.presentation": {
        compressible: false,
        extensions: ["gslides"]
      },
      "application/vnd.google-apps.spreadsheet": {
        compressible: false,
        extensions: ["gsheet"]
      },
      "application/vnd.google-earth.kml+xml": {
        source: "iana",
        compressible: true,
        extensions: ["kml"]
      },
      "application/vnd.google-earth.kmz": {
        source: "iana",
        compressible: false,
        extensions: ["kmz"]
      },
      "application/vnd.gov.sk.e-form+xml": {
        source: "iana"
      },
      "application/vnd.gov.sk.e-form+zip": {
        source: "iana"
      },
      "application/vnd.gov.sk.xmldatacontainer+xml": {
        source: "iana"
      },
      "application/vnd.grafeq": {
        source: "iana",
        extensions: ["gqf", "gqs"]
      },
      "application/vnd.gridmp": {
        source: "iana"
      },
      "application/vnd.groove-account": {
        source: "iana",
        extensions: ["gac"]
      },
      "application/vnd.groove-help": {
        source: "iana",
        extensions: ["ghf"]
      },
      "application/vnd.groove-identity-message": {
        source: "iana",
        extensions: ["gim"]
      },
      "application/vnd.groove-injector": {
        source: "iana",
        extensions: ["grv"]
      },
      "application/vnd.groove-tool-message": {
        source: "iana",
        extensions: ["gtm"]
      },
      "application/vnd.groove-tool-template": {
        source: "iana",
        extensions: ["tpl"]
      },
      "application/vnd.groove-vcard": {
        source: "iana",
        extensions: ["vcg"]
      },
      "application/vnd.hal+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.hal+xml": {
        source: "iana",
        extensions: ["hal"]
      },
      "application/vnd.handheld-entertainment+xml": {
        source: "iana",
        extensions: ["zmm"]
      },
      "application/vnd.hbci": {
        source: "iana",
        extensions: ["hbci"]
      },
      "application/vnd.hcl-bireports": {
        source: "iana"
      },
      "application/vnd.hdt": {
        source: "iana"
      },
      "application/vnd.heroku+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.hhe.lesson-player": {
        source: "iana",
        extensions: ["les"]
      },
      "application/vnd.hp-hpgl": {
        source: "iana",
        extensions: ["hpgl"]
      },
      "application/vnd.hp-hpid": {
        source: "iana",
        extensions: ["hpid"]
      },
      "application/vnd.hp-hps": {
        source: "iana",
        extensions: ["hps"]
      },
      "application/vnd.hp-jlyt": {
        source: "iana",
        extensions: ["jlt"]
      },
      "application/vnd.hp-pcl": {
        source: "iana",
        extensions: ["pcl"]
      },
      "application/vnd.hp-pclxl": {
        source: "iana",
        extensions: ["pclxl"]
      },
      "application/vnd.httphone": {
        source: "iana"
      },
      "application/vnd.hydrostatix.sof-data": {
        source: "iana",
        extensions: ["sfd-hdstx"]
      },
      "application/vnd.hyperdrive+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.hzn-3d-crossword": {
        source: "iana"
      },
      "application/vnd.ibm.afplinedata": {
        source: "iana"
      },
      "application/vnd.ibm.electronic-media": {
        source: "iana"
      },
      "application/vnd.ibm.minipay": {
        source: "iana",
        extensions: ["mpy"]
      },
      "application/vnd.ibm.modcap": {
        source: "iana",
        extensions: ["afp", "listafp", "list3820"]
      },
      "application/vnd.ibm.rights-management": {
        source: "iana",
        extensions: ["irm"]
      },
      "application/vnd.ibm.secure-container": {
        source: "iana",
        extensions: ["sc"]
      },
      "application/vnd.iccprofile": {
        source: "iana",
        extensions: ["icc", "icm"]
      },
      "application/vnd.ieee.1905": {
        source: "iana"
      },
      "application/vnd.igloader": {
        source: "iana",
        extensions: ["igl"]
      },
      "application/vnd.immervision-ivp": {
        source: "iana",
        extensions: ["ivp"]
      },
      "application/vnd.immervision-ivu": {
        source: "iana",
        extensions: ["ivu"]
      },
      "application/vnd.ims.imsccv1p1": {
        source: "iana"
      },
      "application/vnd.ims.imsccv1p2": {
        source: "iana"
      },
      "application/vnd.ims.imsccv1p3": {
        source: "iana"
      },
      "application/vnd.ims.lis.v2.result+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ims.lti.v2.toolproxy+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ims.lti.v2.toolproxy.id+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ims.lti.v2.toolsettings+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.ims.lti.v2.toolsettings.simple+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.informedcontrol.rms+xml": {
        source: "iana"
      },
      "application/vnd.informix-visionary": {
        source: "iana"
      },
      "application/vnd.infotech.project": {
        source: "iana"
      },
      "application/vnd.infotech.project+xml": {
        source: "iana"
      },
      "application/vnd.innopath.wamp.notification": {
        source: "iana"
      },
      "application/vnd.insors.igm": {
        source: "iana",
        extensions: ["igm"]
      },
      "application/vnd.intercon.formnet": {
        source: "iana",
        extensions: ["xpw", "xpx"]
      },
      "application/vnd.intergeo": {
        source: "iana",
        extensions: ["i2g"]
      },
      "application/vnd.intertrust.digibox": {
        source: "iana"
      },
      "application/vnd.intertrust.nncp": {
        source: "iana"
      },
      "application/vnd.intu.qbo": {
        source: "iana",
        extensions: ["qbo"]
      },
      "application/vnd.intu.qfx": {
        source: "iana",
        extensions: ["qfx"]
      },
      "application/vnd.iptc.g2.catalogitem+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.conceptitem+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.knowledgeitem+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.newsitem+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.newsmessage+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.packageitem+xml": {
        source: "iana"
      },
      "application/vnd.iptc.g2.planningitem+xml": {
        source: "iana"
      },
      "application/vnd.ipunplugged.rcprofile": {
        source: "iana",
        extensions: ["rcprofile"]
      },
      "application/vnd.irepository.package+xml": {
        source: "iana",
        extensions: ["irp"]
      },
      "application/vnd.is-xpr": {
        source: "iana",
        extensions: ["xpr"]
      },
      "application/vnd.isac.fcs": {
        source: "iana",
        extensions: ["fcs"]
      },
      "application/vnd.jam": {
        source: "iana",
        extensions: ["jam"]
      },
      "application/vnd.japannet-directory-service": {
        source: "iana"
      },
      "application/vnd.japannet-jpnstore-wakeup": {
        source: "iana"
      },
      "application/vnd.japannet-payment-wakeup": {
        source: "iana"
      },
      "application/vnd.japannet-registration": {
        source: "iana"
      },
      "application/vnd.japannet-registration-wakeup": {
        source: "iana"
      },
      "application/vnd.japannet-setstore-wakeup": {
        source: "iana"
      },
      "application/vnd.japannet-verification": {
        source: "iana"
      },
      "application/vnd.japannet-verification-wakeup": {
        source: "iana"
      },
      "application/vnd.jcp.javame.midlet-rms": {
        source: "iana",
        extensions: ["rms"]
      },
      "application/vnd.jisp": {
        source: "iana",
        extensions: ["jisp"]
      },
      "application/vnd.joost.joda-archive": {
        source: "iana",
        extensions: ["joda"]
      },
      "application/vnd.jsk.isdn-ngn": {
        source: "iana"
      },
      "application/vnd.kahootz": {
        source: "iana",
        extensions: ["ktz", "ktr"]
      },
      "application/vnd.kde.karbon": {
        source: "iana",
        extensions: ["karbon"]
      },
      "application/vnd.kde.kchart": {
        source: "iana",
        extensions: ["chrt"]
      },
      "application/vnd.kde.kformula": {
        source: "iana",
        extensions: ["kfo"]
      },
      "application/vnd.kde.kivio": {
        source: "iana",
        extensions: ["flw"]
      },
      "application/vnd.kde.kontour": {
        source: "iana",
        extensions: ["kon"]
      },
      "application/vnd.kde.kpresenter": {
        source: "iana",
        extensions: ["kpr", "kpt"]
      },
      "application/vnd.kde.kspread": {
        source: "iana",
        extensions: ["ksp"]
      },
      "application/vnd.kde.kword": {
        source: "iana",
        extensions: ["kwd", "kwt"]
      },
      "application/vnd.kenameaapp": {
        source: "iana",
        extensions: ["htke"]
      },
      "application/vnd.kidspiration": {
        source: "iana",
        extensions: ["kia"]
      },
      "application/vnd.kinar": {
        source: "iana",
        extensions: ["kne", "knp"]
      },
      "application/vnd.koan": {
        source: "iana",
        extensions: ["skp", "skd", "skt", "skm"]
      },
      "application/vnd.kodak-descriptor": {
        source: "iana",
        extensions: ["sse"]
      },
      "application/vnd.las.las+xml": {
        source: "iana",
        extensions: ["lasxml"]
      },
      "application/vnd.liberty-request+xml": {
        source: "iana"
      },
      "application/vnd.llamagraphics.life-balance.desktop": {
        source: "iana",
        extensions: ["lbd"]
      },
      "application/vnd.llamagraphics.life-balance.exchange+xml": {
        source: "iana",
        extensions: ["lbe"]
      },
      "application/vnd.lotus-1-2-3": {
        source: "iana",
        extensions: ["123"]
      },
      "application/vnd.lotus-approach": {
        source: "iana",
        extensions: ["apr"]
      },
      "application/vnd.lotus-freelance": {
        source: "iana",
        extensions: ["pre"]
      },
      "application/vnd.lotus-notes": {
        source: "iana",
        extensions: ["nsf"]
      },
      "application/vnd.lotus-organizer": {
        source: "iana",
        extensions: ["org"]
      },
      "application/vnd.lotus-screencam": {
        source: "iana",
        extensions: ["scm"]
      },
      "application/vnd.lotus-wordpro": {
        source: "iana",
        extensions: ["lwp"]
      },
      "application/vnd.macports.portpkg": {
        source: "iana",
        extensions: ["portpkg"]
      },
      "application/vnd.mapbox-vector-tile": {
        source: "iana"
      },
      "application/vnd.marlin.drm.actiontoken+xml": {
        source: "iana"
      },
      "application/vnd.marlin.drm.conftoken+xml": {
        source: "iana"
      },
      "application/vnd.marlin.drm.license+xml": {
        source: "iana"
      },
      "application/vnd.marlin.drm.mdcf": {
        source: "iana"
      },
      "application/vnd.mason+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.maxmind.maxmind-db": {
        source: "iana"
      },
      "application/vnd.mcd": {
        source: "iana",
        extensions: ["mcd"]
      },
      "application/vnd.medcalcdata": {
        source: "iana",
        extensions: ["mc1"]
      },
      "application/vnd.mediastation.cdkey": {
        source: "iana",
        extensions: ["cdkey"]
      },
      "application/vnd.meridian-slingshot": {
        source: "iana"
      },
      "application/vnd.mfer": {
        source: "iana",
        extensions: ["mwf"]
      },
      "application/vnd.mfmp": {
        source: "iana",
        extensions: ["mfm"]
      },
      "application/vnd.micro+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.micrografx.flo": {
        source: "iana",
        extensions: ["flo"]
      },
      "application/vnd.micrografx.igx": {
        source: "iana",
        extensions: ["igx"]
      },
      "application/vnd.microsoft.portable-executable": {
        source: "iana"
      },
      "application/vnd.miele+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.mif": {
        source: "iana",
        extensions: ["mif"]
      },
      "application/vnd.minisoft-hp3000-save": {
        source: "iana"
      },
      "application/vnd.mitsubishi.misty-guard.trustweb": {
        source: "iana"
      },
      "application/vnd.mobius.daf": {
        source: "iana",
        extensions: ["daf"]
      },
      "application/vnd.mobius.dis": {
        source: "iana",
        extensions: ["dis"]
      },
      "application/vnd.mobius.mbk": {
        source: "iana",
        extensions: ["mbk"]
      },
      "application/vnd.mobius.mqy": {
        source: "iana",
        extensions: ["mqy"]
      },
      "application/vnd.mobius.msl": {
        source: "iana",
        extensions: ["msl"]
      },
      "application/vnd.mobius.plc": {
        source: "iana",
        extensions: ["plc"]
      },
      "application/vnd.mobius.txf": {
        source: "iana",
        extensions: ["txf"]
      },
      "application/vnd.mophun.application": {
        source: "iana",
        extensions: ["mpn"]
      },
      "application/vnd.mophun.certificate": {
        source: "iana",
        extensions: ["mpc"]
      },
      "application/vnd.motorola.flexsuite": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.adsi": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.fis": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.gotap": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.kmr": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.ttc": {
        source: "iana"
      },
      "application/vnd.motorola.flexsuite.wem": {
        source: "iana"
      },
      "application/vnd.motorola.iprm": {
        source: "iana"
      },
      "application/vnd.mozilla.xul+xml": {
        source: "iana",
        compressible: true,
        extensions: ["xul"]
      },
      "application/vnd.ms-3mfdocument": {
        source: "iana"
      },
      "application/vnd.ms-artgalry": {
        source: "iana",
        extensions: ["cil"]
      },
      "application/vnd.ms-asf": {
        source: "iana"
      },
      "application/vnd.ms-cab-compressed": {
        source: "iana",
        extensions: ["cab"]
      },
      "application/vnd.ms-color.iccprofile": {
        source: "apache"
      },
      "application/vnd.ms-excel": {
        source: "iana",
        compressible: false,
        extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
      },
      "application/vnd.ms-excel.addin.macroenabled.12": {
        source: "iana",
        extensions: ["xlam"]
      },
      "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
        source: "iana",
        extensions: ["xlsb"]
      },
      "application/vnd.ms-excel.sheet.macroenabled.12": {
        source: "iana",
        extensions: ["xlsm"]
      },
      "application/vnd.ms-excel.template.macroenabled.12": {
        source: "iana",
        extensions: ["xltm"]
      },
      "application/vnd.ms-fontobject": {
        source: "iana",
        compressible: true,
        extensions: ["eot"]
      },
      "application/vnd.ms-htmlhelp": {
        source: "iana",
        extensions: ["chm"]
      },
      "application/vnd.ms-ims": {
        source: "iana",
        extensions: ["ims"]
      },
      "application/vnd.ms-lrm": {
        source: "iana",
        extensions: ["lrm"]
      },
      "application/vnd.ms-office.activex+xml": {
        source: "iana"
      },
      "application/vnd.ms-officetheme": {
        source: "iana",
        extensions: ["thmx"]
      },
      "application/vnd.ms-opentype": {
        source: "apache",
        compressible: true
      },
      "application/vnd.ms-package.obfuscated-opentype": {
        source: "apache"
      },
      "application/vnd.ms-pki.seccat": {
        source: "apache",
        extensions: ["cat"]
      },
      "application/vnd.ms-pki.stl": {
        source: "apache",
        extensions: ["stl"]
      },
      "application/vnd.ms-playready.initiator+xml": {
        source: "iana"
      },
      "application/vnd.ms-powerpoint": {
        source: "iana",
        compressible: false,
        extensions: ["ppt", "pps", "pot"]
      },
      "application/vnd.ms-powerpoint.addin.macroenabled.12": {
        source: "iana",
        extensions: ["ppam"]
      },
      "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
        source: "iana",
        extensions: ["pptm"]
      },
      "application/vnd.ms-powerpoint.slide.macroenabled.12": {
        source: "iana",
        extensions: ["sldm"]
      },
      "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
        source: "iana",
        extensions: ["ppsm"]
      },
      "application/vnd.ms-powerpoint.template.macroenabled.12": {
        source: "iana",
        extensions: ["potm"]
      },
      "application/vnd.ms-printdevicecapabilities+xml": {
        source: "iana"
      },
      "application/vnd.ms-printing.printticket+xml": {
        source: "apache"
      },
      "application/vnd.ms-printschematicket+xml": {
        source: "iana"
      },
      "application/vnd.ms-project": {
        source: "iana",
        extensions: ["mpp", "mpt"]
      },
      "application/vnd.ms-tnef": {
        source: "iana"
      },
      "application/vnd.ms-windows.devicepairing": {
        source: "iana"
      },
      "application/vnd.ms-windows.nwprinting.oob": {
        source: "iana"
      },
      "application/vnd.ms-windows.printerpairing": {
        source: "iana"
      },
      "application/vnd.ms-windows.wsd.oob": {
        source: "iana"
      },
      "application/vnd.ms-wmdrm.lic-chlg-req": {
        source: "iana"
      },
      "application/vnd.ms-wmdrm.lic-resp": {
        source: "iana"
      },
      "application/vnd.ms-wmdrm.meter-chlg-req": {
        source: "iana"
      },
      "application/vnd.ms-wmdrm.meter-resp": {
        source: "iana"
      },
      "application/vnd.ms-word.document.macroenabled.12": {
        source: "iana",
        extensions: ["docm"]
      },
      "application/vnd.ms-word.template.macroenabled.12": {
        source: "iana",
        extensions: ["dotm"]
      },
      "application/vnd.ms-works": {
        source: "iana",
        extensions: ["wps", "wks", "wcm", "wdb"]
      },
      "application/vnd.ms-wpl": {
        source: "iana",
        extensions: ["wpl"]
      },
      "application/vnd.ms-xpsdocument": {
        source: "iana",
        compressible: false,
        extensions: ["xps"]
      },
      "application/vnd.msa-disk-image": {
        source: "iana"
      },
      "application/vnd.mseq": {
        source: "iana",
        extensions: ["mseq"]
      },
      "application/vnd.msign": {
        source: "iana"
      },
      "application/vnd.multiad.creator": {
        source: "iana"
      },
      "application/vnd.multiad.creator.cif": {
        source: "iana"
      },
      "application/vnd.music-niff": {
        source: "iana"
      },
      "application/vnd.musician": {
        source: "iana",
        extensions: ["mus"]
      },
      "application/vnd.muvee.style": {
        source: "iana",
        extensions: ["msty"]
      },
      "application/vnd.mynfc": {
        source: "iana",
        extensions: ["taglet"]
      },
      "application/vnd.ncd.control": {
        source: "iana"
      },
      "application/vnd.ncd.reference": {
        source: "iana"
      },
      "application/vnd.nearst.inv+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.nervana": {
        source: "iana"
      },
      "application/vnd.netfpx": {
        source: "iana"
      },
      "application/vnd.neurolanguage.nlu": {
        source: "iana",
        extensions: ["nlu"]
      },
      "application/vnd.nintendo.nitro.rom": {
        source: "iana"
      },
      "application/vnd.nintendo.snes.rom": {
        source: "iana"
      },
      "application/vnd.nitf": {
        source: "iana",
        extensions: ["ntf", "nitf"]
      },
      "application/vnd.noblenet-directory": {
        source: "iana",
        extensions: ["nnd"]
      },
      "application/vnd.noblenet-sealer": {
        source: "iana",
        extensions: ["nns"]
      },
      "application/vnd.noblenet-web": {
        source: "iana",
        extensions: ["nnw"]
      },
      "application/vnd.nokia.catalogs": {
        source: "iana"
      },
      "application/vnd.nokia.conml+wbxml": {
        source: "iana"
      },
      "application/vnd.nokia.conml+xml": {
        source: "iana"
      },
      "application/vnd.nokia.iptv.config+xml": {
        source: "iana"
      },
      "application/vnd.nokia.isds-radio-presets": {
        source: "iana"
      },
      "application/vnd.nokia.landmark+wbxml": {
        source: "iana"
      },
      "application/vnd.nokia.landmark+xml": {
        source: "iana"
      },
      "application/vnd.nokia.landmarkcollection+xml": {
        source: "iana"
      },
      "application/vnd.nokia.n-gage.ac+xml": {
        source: "iana"
      },
      "application/vnd.nokia.n-gage.data": {
        source: "iana",
        extensions: ["ngdat"]
      },
      "application/vnd.nokia.n-gage.symbian.install": {
        source: "iana",
        extensions: ["n-gage"]
      },
      "application/vnd.nokia.ncd": {
        source: "iana"
      },
      "application/vnd.nokia.pcd+wbxml": {
        source: "iana"
      },
      "application/vnd.nokia.pcd+xml": {
        source: "iana"
      },
      "application/vnd.nokia.radio-preset": {
        source: "iana",
        extensions: ["rpst"]
      },
      "application/vnd.nokia.radio-presets": {
        source: "iana",
        extensions: ["rpss"]
      },
      "application/vnd.novadigm.edm": {
        source: "iana",
        extensions: ["edm"]
      },
      "application/vnd.novadigm.edx": {
        source: "iana",
        extensions: ["edx"]
      },
      "application/vnd.novadigm.ext": {
        source: "iana",
        extensions: ["ext"]
      },
      "application/vnd.ntt-local.content-share": {
        source: "iana"
      },
      "application/vnd.ntt-local.file-transfer": {
        source: "iana"
      },
      "application/vnd.ntt-local.ogw_remote-access": {
        source: "iana"
      },
      "application/vnd.ntt-local.sip-ta_remote": {
        source: "iana"
      },
      "application/vnd.ntt-local.sip-ta_tcp_stream": {
        source: "iana"
      },
      "application/vnd.oasis.opendocument.chart": {
        source: "iana",
        extensions: ["odc"]
      },
      "application/vnd.oasis.opendocument.chart-template": {
        source: "iana",
        extensions: ["otc"]
      },
      "application/vnd.oasis.opendocument.database": {
        source: "iana",
        extensions: ["odb"]
      },
      "application/vnd.oasis.opendocument.formula": {
        source: "iana",
        extensions: ["odf"]
      },
      "application/vnd.oasis.opendocument.formula-template": {
        source: "iana",
        extensions: ["odft"]
      },
      "application/vnd.oasis.opendocument.graphics": {
        source: "iana",
        compressible: false,
        extensions: ["odg"]
      },
      "application/vnd.oasis.opendocument.graphics-template": {
        source: "iana",
        extensions: ["otg"]
      },
      "application/vnd.oasis.opendocument.image": {
        source: "iana",
        extensions: ["odi"]
      },
      "application/vnd.oasis.opendocument.image-template": {
        source: "iana",
        extensions: ["oti"]
      },
      "application/vnd.oasis.opendocument.presentation": {
        source: "iana",
        compressible: false,
        extensions: ["odp"]
      },
      "application/vnd.oasis.opendocument.presentation-template": {
        source: "iana",
        extensions: ["otp"]
      },
      "application/vnd.oasis.opendocument.spreadsheet": {
        source: "iana",
        compressible: false,
        extensions: ["ods"]
      },
      "application/vnd.oasis.opendocument.spreadsheet-template": {
        source: "iana",
        extensions: ["ots"]
      },
      "application/vnd.oasis.opendocument.text": {
        source: "iana",
        compressible: false,
        extensions: ["odt"]
      },
      "application/vnd.oasis.opendocument.text-master": {
        source: "iana",
        extensions: ["odm"]
      },
      "application/vnd.oasis.opendocument.text-template": {
        source: "iana",
        extensions: ["ott"]
      },
      "application/vnd.oasis.opendocument.text-web": {
        source: "iana",
        extensions: ["oth"]
      },
      "application/vnd.obn": {
        source: "iana"
      },
      "application/vnd.oftn.l10n+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.oipf.contentaccessdownload+xml": {
        source: "iana"
      },
      "application/vnd.oipf.contentaccessstreaming+xml": {
        source: "iana"
      },
      "application/vnd.oipf.cspg-hexbinary": {
        source: "iana"
      },
      "application/vnd.oipf.dae.svg+xml": {
        source: "iana"
      },
      "application/vnd.oipf.dae.xhtml+xml": {
        source: "iana"
      },
      "application/vnd.oipf.mippvcontrolmessage+xml": {
        source: "iana"
      },
      "application/vnd.oipf.pae.gem": {
        source: "iana"
      },
      "application/vnd.oipf.spdiscovery+xml": {
        source: "iana"
      },
      "application/vnd.oipf.spdlist+xml": {
        source: "iana"
      },
      "application/vnd.oipf.ueprofile+xml": {
        source: "iana"
      },
      "application/vnd.oipf.userprofile+xml": {
        source: "iana"
      },
      "application/vnd.olpc-sugar": {
        source: "iana",
        extensions: ["xo"]
      },
      "application/vnd.oma-scws-config": {
        source: "iana"
      },
      "application/vnd.oma-scws-http-request": {
        source: "iana"
      },
      "application/vnd.oma-scws-http-response": {
        source: "iana"
      },
      "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.drm-trigger+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.imd+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.ltkm": {
        source: "iana"
      },
      "application/vnd.oma.bcast.notification+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.provisioningtrigger": {
        source: "iana"
      },
      "application/vnd.oma.bcast.sgboot": {
        source: "iana"
      },
      "application/vnd.oma.bcast.sgdd+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.sgdu": {
        source: "iana"
      },
      "application/vnd.oma.bcast.simple-symbol-container": {
        source: "iana"
      },
      "application/vnd.oma.bcast.smartcard-trigger+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.sprov+xml": {
        source: "iana"
      },
      "application/vnd.oma.bcast.stkm": {
        source: "iana"
      },
      "application/vnd.oma.cab-address-book+xml": {
        source: "iana"
      },
      "application/vnd.oma.cab-feature-handler+xml": {
        source: "iana"
      },
      "application/vnd.oma.cab-pcc+xml": {
        source: "iana"
      },
      "application/vnd.oma.cab-subs-invite+xml": {
        source: "iana"
      },
      "application/vnd.oma.cab-user-prefs+xml": {
        source: "iana"
      },
      "application/vnd.oma.dcd": {
        source: "iana"
      },
      "application/vnd.oma.dcdc": {
        source: "iana"
      },
      "application/vnd.oma.dd2+xml": {
        source: "iana",
        extensions: ["dd2"]
      },
      "application/vnd.oma.drm.risd+xml": {
        source: "iana"
      },
      "application/vnd.oma.group-usage-list+xml": {
        source: "iana"
      },
      "application/vnd.oma.lwm2m+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.oma.lwm2m+tlv": {
        source: "iana"
      },
      "application/vnd.oma.pal+xml": {
        source: "iana"
      },
      "application/vnd.oma.poc.detailed-progress-report+xml": {
        source: "iana"
      },
      "application/vnd.oma.poc.final-report+xml": {
        source: "iana"
      },
      "application/vnd.oma.poc.groups+xml": {
        source: "iana"
      },
      "application/vnd.oma.poc.invocation-descriptor+xml": {
        source: "iana"
      },
      "application/vnd.oma.poc.optimized-progress-report+xml": {
        source: "iana"
      },
      "application/vnd.oma.push": {
        source: "iana"
      },
      "application/vnd.oma.scidm.messages+xml": {
        source: "iana"
      },
      "application/vnd.oma.xcap-directory+xml": {
        source: "iana"
      },
      "application/vnd.omads-email+xml": {
        source: "iana"
      },
      "application/vnd.omads-file+xml": {
        source: "iana"
      },
      "application/vnd.omads-folder+xml": {
        source: "iana"
      },
      "application/vnd.omaloc-supl-init": {
        source: "iana"
      },
      "application/vnd.onepager": {
        source: "iana"
      },
      "application/vnd.openblox.game+xml": {
        source: "iana"
      },
      "application/vnd.openblox.game-binary": {
        source: "iana"
      },
      "application/vnd.openeye.oeb": {
        source: "iana"
      },
      "application/vnd.openofficeorg.extension": {
        source: "apache",
        extensions: ["oxt"]
      },
      "application/vnd.openstreetmap.data+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawing+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml-template": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
        source: "iana",
        compressible: false,
        extensions: ["pptx"]
      },
      "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slide": {
        source: "iana",
        extensions: ["sldx"]
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
        source: "iana",
        extensions: ["ppsx"]
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.template": {
        source: "apache",
        extensions: ["potx"]
      },
      "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml-template": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
        source: "iana",
        compressible: false,
        extensions: ["xlsx"]
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
        source: "apache",
        extensions: ["xltx"]
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.theme+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.vmldrawing": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml-template": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
        source: "iana",
        compressible: false,
        extensions: ["docx"]
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
        source: "apache",
        extensions: ["dotx"]
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-package.core-properties+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
        source: "iana"
      },
      "application/vnd.openxmlformats-package.relationships+xml": {
        source: "iana"
      },
      "application/vnd.oracle.resource+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.orange.indata": {
        source: "iana"
      },
      "application/vnd.osa.netdeploy": {
        source: "iana"
      },
      "application/vnd.osgeo.mapguide.package": {
        source: "iana",
        extensions: ["mgp"]
      },
      "application/vnd.osgi.bundle": {
        source: "iana"
      },
      "application/vnd.osgi.dp": {
        source: "iana",
        extensions: ["dp"]
      },
      "application/vnd.osgi.subsystem": {
        source: "iana",
        extensions: ["esa"]
      },
      "application/vnd.otps.ct-kip+xml": {
        source: "iana"
      },
      "application/vnd.oxli.countgraph": {
        source: "iana"
      },
      "application/vnd.pagerduty+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.palm": {
        source: "iana",
        extensions: ["pdb", "pqa", "oprc"]
      },
      "application/vnd.panoply": {
        source: "iana"
      },
      "application/vnd.paos+xml": {
        source: "iana"
      },
      "application/vnd.paos.xml": {
        source: "apache"
      },
      "application/vnd.pawaafile": {
        source: "iana",
        extensions: ["paw"]
      },
      "application/vnd.pcos": {
        source: "iana"
      },
      "application/vnd.pg.format": {
        source: "iana",
        extensions: ["str"]
      },
      "application/vnd.pg.osasli": {
        source: "iana",
        extensions: ["ei6"]
      },
      "application/vnd.piaccess.application-licence": {
        source: "iana"
      },
      "application/vnd.picsel": {
        source: "iana",
        extensions: ["efif"]
      },
      "application/vnd.pmi.widget": {
        source: "iana",
        extensions: ["wg"]
      },
      "application/vnd.poc.group-advertisement+xml": {
        source: "iana"
      },
      "application/vnd.pocketlearn": {
        source: "iana",
        extensions: ["plf"]
      },
      "application/vnd.powerbuilder6": {
        source: "iana",
        extensions: ["pbd"]
      },
      "application/vnd.powerbuilder6-s": {
        source: "iana"
      },
      "application/vnd.powerbuilder7": {
        source: "iana"
      },
      "application/vnd.powerbuilder7-s": {
        source: "iana"
      },
      "application/vnd.powerbuilder75": {
        source: "iana"
      },
      "application/vnd.powerbuilder75-s": {
        source: "iana"
      },
      "application/vnd.preminet": {
        source: "iana"
      },
      "application/vnd.previewsystems.box": {
        source: "iana",
        extensions: ["box"]
      },
      "application/vnd.proteus.magazine": {
        source: "iana",
        extensions: ["mgz"]
      },
      "application/vnd.publishare-delta-tree": {
        source: "iana",
        extensions: ["qps"]
      },
      "application/vnd.pvi.ptid1": {
        source: "iana",
        extensions: ["ptid"]
      },
      "application/vnd.pwg-multiplexed": {
        source: "iana"
      },
      "application/vnd.pwg-xhtml-print+xml": {
        source: "iana"
      },
      "application/vnd.qualcomm.brew-app-res": {
        source: "iana"
      },
      "application/vnd.quarantainenet": {
        source: "iana"
      },
      "application/vnd.quark.quarkxpress": {
        source: "iana",
        extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
      },
      "application/vnd.quobject-quoxdocument": {
        source: "iana"
      },
      "application/vnd.radisys.moml+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-audit+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-audit-conf+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-audit-conn+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-audit-dialog+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-audit-stream+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-conf+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-base+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-fax-detect+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-group+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-speech+xml": {
        source: "iana"
      },
      "application/vnd.radisys.msml-dialog-transform+xml": {
        source: "iana"
      },
      "application/vnd.rainstor.data": {
        source: "iana"
      },
      "application/vnd.rapid": {
        source: "iana"
      },
      "application/vnd.rar": {
        source: "iana"
      },
      "application/vnd.realvnc.bed": {
        source: "iana",
        extensions: ["bed"]
      },
      "application/vnd.recordare.musicxml": {
        source: "iana",
        extensions: ["mxl"]
      },
      "application/vnd.recordare.musicxml+xml": {
        source: "iana",
        extensions: ["musicxml"]
      },
      "application/vnd.renlearn.rlprint": {
        source: "iana"
      },
      "application/vnd.rig.cryptonote": {
        source: "iana",
        extensions: ["cryptonote"]
      },
      "application/vnd.rim.cod": {
        source: "apache",
        extensions: ["cod"]
      },
      "application/vnd.rn-realmedia": {
        source: "apache",
        extensions: ["rm"]
      },
      "application/vnd.rn-realmedia-vbr": {
        source: "apache",
        extensions: ["rmvb"]
      },
      "application/vnd.route66.link66+xml": {
        source: "iana",
        extensions: ["link66"]
      },
      "application/vnd.rs-274x": {
        source: "iana"
      },
      "application/vnd.ruckus.download": {
        source: "iana"
      },
      "application/vnd.s3sms": {
        source: "iana"
      },
      "application/vnd.sailingtracker.track": {
        source: "iana",
        extensions: ["st"]
      },
      "application/vnd.sbm.cid": {
        source: "iana"
      },
      "application/vnd.sbm.mid2": {
        source: "iana"
      },
      "application/vnd.scribus": {
        source: "iana"
      },
      "application/vnd.sealed.3df": {
        source: "iana"
      },
      "application/vnd.sealed.csf": {
        source: "iana"
      },
      "application/vnd.sealed.doc": {
        source: "iana"
      },
      "application/vnd.sealed.eml": {
        source: "iana"
      },
      "application/vnd.sealed.mht": {
        source: "iana"
      },
      "application/vnd.sealed.net": {
        source: "iana"
      },
      "application/vnd.sealed.ppt": {
        source: "iana"
      },
      "application/vnd.sealed.tiff": {
        source: "iana"
      },
      "application/vnd.sealed.xls": {
        source: "iana"
      },
      "application/vnd.sealedmedia.softseal.html": {
        source: "iana"
      },
      "application/vnd.sealedmedia.softseal.pdf": {
        source: "iana"
      },
      "application/vnd.seemail": {
        source: "iana",
        extensions: ["see"]
      },
      "application/vnd.sema": {
        source: "iana",
        extensions: ["sema"]
      },
      "application/vnd.semd": {
        source: "iana",
        extensions: ["semd"]
      },
      "application/vnd.semf": {
        source: "iana",
        extensions: ["semf"]
      },
      "application/vnd.shana.informed.formdata": {
        source: "iana",
        extensions: ["ifm"]
      },
      "application/vnd.shana.informed.formtemplate": {
        source: "iana",
        extensions: ["itp"]
      },
      "application/vnd.shana.informed.interchange": {
        source: "iana",
        extensions: ["iif"]
      },
      "application/vnd.shana.informed.package": {
        source: "iana",
        extensions: ["ipk"]
      },
      "application/vnd.simtech-mindmapper": {
        source: "iana",
        extensions: ["twd", "twds"]
      },
      "application/vnd.siren+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.smaf": {
        source: "iana",
        extensions: ["mmf"]
      },
      "application/vnd.smart.notebook": {
        source: "iana"
      },
      "application/vnd.smart.teacher": {
        source: "iana",
        extensions: ["teacher"]
      },
      "application/vnd.software602.filler.form+xml": {
        source: "iana"
      },
      "application/vnd.software602.filler.form-xml-zip": {
        source: "iana"
      },
      "application/vnd.solent.sdkm+xml": {
        source: "iana",
        extensions: ["sdkm", "sdkd"]
      },
      "application/vnd.spotfire.dxp": {
        source: "iana",
        extensions: ["dxp"]
      },
      "application/vnd.spotfire.sfs": {
        source: "iana",
        extensions: ["sfs"]
      },
      "application/vnd.sss-cod": {
        source: "iana"
      },
      "application/vnd.sss-dtf": {
        source: "iana"
      },
      "application/vnd.sss-ntf": {
        source: "iana"
      },
      "application/vnd.stardivision.calc": {
        source: "apache",
        extensions: ["sdc"]
      },
      "application/vnd.stardivision.draw": {
        source: "apache",
        extensions: ["sda"]
      },
      "application/vnd.stardivision.impress": {
        source: "apache",
        extensions: ["sdd"]
      },
      "application/vnd.stardivision.math": {
        source: "apache",
        extensions: ["smf"]
      },
      "application/vnd.stardivision.writer": {
        source: "apache",
        extensions: ["sdw", "vor"]
      },
      "application/vnd.stardivision.writer-global": {
        source: "apache",
        extensions: ["sgl"]
      },
      "application/vnd.stepmania.package": {
        source: "iana",
        extensions: ["smzip"]
      },
      "application/vnd.stepmania.stepchart": {
        source: "iana",
        extensions: ["sm"]
      },
      "application/vnd.street-stream": {
        source: "iana"
      },
      "application/vnd.sun.wadl+xml": {
        source: "iana"
      },
      "application/vnd.sun.xml.calc": {
        source: "apache",
        extensions: ["sxc"]
      },
      "application/vnd.sun.xml.calc.template": {
        source: "apache",
        extensions: ["stc"]
      },
      "application/vnd.sun.xml.draw": {
        source: "apache",
        extensions: ["sxd"]
      },
      "application/vnd.sun.xml.draw.template": {
        source: "apache",
        extensions: ["std"]
      },
      "application/vnd.sun.xml.impress": {
        source: "apache",
        extensions: ["sxi"]
      },
      "application/vnd.sun.xml.impress.template": {
        source: "apache",
        extensions: ["sti"]
      },
      "application/vnd.sun.xml.math": {
        source: "apache",
        extensions: ["sxm"]
      },
      "application/vnd.sun.xml.writer": {
        source: "apache",
        extensions: ["sxw"]
      },
      "application/vnd.sun.xml.writer.global": {
        source: "apache",
        extensions: ["sxg"]
      },
      "application/vnd.sun.xml.writer.template": {
        source: "apache",
        extensions: ["stw"]
      },
      "application/vnd.sus-calendar": {
        source: "iana",
        extensions: ["sus", "susp"]
      },
      "application/vnd.svd": {
        source: "iana",
        extensions: ["svd"]
      },
      "application/vnd.swiftview-ics": {
        source: "iana"
      },
      "application/vnd.symbian.install": {
        source: "apache",
        extensions: ["sis", "sisx"]
      },
      "application/vnd.syncml+xml": {
        source: "iana",
        extensions: ["xsm"]
      },
      "application/vnd.syncml.dm+wbxml": {
        source: "iana",
        extensions: ["bdm"]
      },
      "application/vnd.syncml.dm+xml": {
        source: "iana",
        extensions: ["xdm"]
      },
      "application/vnd.syncml.dm.notification": {
        source: "iana"
      },
      "application/vnd.syncml.dmddf+wbxml": {
        source: "iana"
      },
      "application/vnd.syncml.dmddf+xml": {
        source: "iana"
      },
      "application/vnd.syncml.dmtnds+wbxml": {
        source: "iana"
      },
      "application/vnd.syncml.dmtnds+xml": {
        source: "iana"
      },
      "application/vnd.syncml.ds.notification": {
        source: "iana"
      },
      "application/vnd.tao.intent-module-archive": {
        source: "iana",
        extensions: ["tao"]
      },
      "application/vnd.tcpdump.pcap": {
        source: "iana",
        extensions: ["pcap", "cap", "dmp"]
      },
      "application/vnd.tmd.mediaflex.api+xml": {
        source: "iana"
      },
      "application/vnd.tml": {
        source: "iana"
      },
      "application/vnd.tmobile-livetv": {
        source: "iana",
        extensions: ["tmo"]
      },
      "application/vnd.tri.onesource": {
        source: "iana"
      },
      "application/vnd.trid.tpt": {
        source: "iana",
        extensions: ["tpt"]
      },
      "application/vnd.triscape.mxs": {
        source: "iana",
        extensions: ["mxs"]
      },
      "application/vnd.trueapp": {
        source: "iana",
        extensions: ["tra"]
      },
      "application/vnd.truedoc": {
        source: "iana"
      },
      "application/vnd.ubisoft.webplayer": {
        source: "iana"
      },
      "application/vnd.ufdl": {
        source: "iana",
        extensions: ["ufd", "ufdl"]
      },
      "application/vnd.uiq.theme": {
        source: "iana",
        extensions: ["utz"]
      },
      "application/vnd.umajin": {
        source: "iana",
        extensions: ["umj"]
      },
      "application/vnd.unity": {
        source: "iana",
        extensions: ["unityweb"]
      },
      "application/vnd.uoml+xml": {
        source: "iana",
        extensions: ["uoml"]
      },
      "application/vnd.uplanet.alert": {
        source: "iana"
      },
      "application/vnd.uplanet.alert-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.bearer-choice": {
        source: "iana"
      },
      "application/vnd.uplanet.bearer-choice-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.cacheop": {
        source: "iana"
      },
      "application/vnd.uplanet.cacheop-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.channel": {
        source: "iana"
      },
      "application/vnd.uplanet.channel-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.list": {
        source: "iana"
      },
      "application/vnd.uplanet.list-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.listcmd": {
        source: "iana"
      },
      "application/vnd.uplanet.listcmd-wbxml": {
        source: "iana"
      },
      "application/vnd.uplanet.signal": {
        source: "iana"
      },
      "application/vnd.uri-map": {
        source: "iana"
      },
      "application/vnd.valve.source.material": {
        source: "iana"
      },
      "application/vnd.vcx": {
        source: "iana",
        extensions: ["vcx"]
      },
      "application/vnd.vd-study": {
        source: "iana"
      },
      "application/vnd.vectorworks": {
        source: "iana"
      },
      "application/vnd.vel+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.verimatrix.vcas": {
        source: "iana"
      },
      "application/vnd.vidsoft.vidconference": {
        source: "iana"
      },
      "application/vnd.visio": {
        source: "iana",
        extensions: ["vsd", "vst", "vss", "vsw"]
      },
      "application/vnd.visionary": {
        source: "iana",
        extensions: ["vis"]
      },
      "application/vnd.vividence.scriptfile": {
        source: "iana"
      },
      "application/vnd.vsf": {
        source: "iana",
        extensions: ["vsf"]
      },
      "application/vnd.wap.sic": {
        source: "iana"
      },
      "application/vnd.wap.slc": {
        source: "iana"
      },
      "application/vnd.wap.wbxml": {
        source: "iana",
        extensions: ["wbxml"]
      },
      "application/vnd.wap.wmlc": {
        source: "iana",
        extensions: ["wmlc"]
      },
      "application/vnd.wap.wmlscriptc": {
        source: "iana",
        extensions: ["wmlsc"]
      },
      "application/vnd.webturbo": {
        source: "iana",
        extensions: ["wtb"]
      },
      "application/vnd.wfa.p2p": {
        source: "iana"
      },
      "application/vnd.wfa.wsc": {
        source: "iana"
      },
      "application/vnd.windows.devicepairing": {
        source: "iana"
      },
      "application/vnd.wmc": {
        source: "iana"
      },
      "application/vnd.wmf.bootstrap": {
        source: "iana"
      },
      "application/vnd.wolfram.mathematica": {
        source: "iana"
      },
      "application/vnd.wolfram.mathematica.package": {
        source: "iana"
      },
      "application/vnd.wolfram.player": {
        source: "iana",
        extensions: ["nbp"]
      },
      "application/vnd.wordperfect": {
        source: "iana",
        extensions: ["wpd"]
      },
      "application/vnd.wqd": {
        source: "iana",
        extensions: ["wqd"]
      },
      "application/vnd.wrq-hp3000-labelled": {
        source: "iana"
      },
      "application/vnd.wt.stf": {
        source: "iana",
        extensions: ["stf"]
      },
      "application/vnd.wv.csp+wbxml": {
        source: "iana"
      },
      "application/vnd.wv.csp+xml": {
        source: "iana"
      },
      "application/vnd.wv.ssp+xml": {
        source: "iana"
      },
      "application/vnd.xacml+json": {
        source: "iana",
        compressible: true
      },
      "application/vnd.xara": {
        source: "iana",
        extensions: ["xar"]
      },
      "application/vnd.xfdl": {
        source: "iana",
        extensions: ["xfdl"]
      },
      "application/vnd.xfdl.webform": {
        source: "iana"
      },
      "application/vnd.xmi+xml": {
        source: "iana"
      },
      "application/vnd.xmpie.cpkg": {
        source: "iana"
      },
      "application/vnd.xmpie.dpkg": {
        source: "iana"
      },
      "application/vnd.xmpie.plan": {
        source: "iana"
      },
      "application/vnd.xmpie.ppkg": {
        source: "iana"
      },
      "application/vnd.xmpie.xlim": {
        source: "iana"
      },
      "application/vnd.yamaha.hv-dic": {
        source: "iana",
        extensions: ["hvd"]
      },
      "application/vnd.yamaha.hv-script": {
        source: "iana",
        extensions: ["hvs"]
      },
      "application/vnd.yamaha.hv-voice": {
        source: "iana",
        extensions: ["hvp"]
      },
      "application/vnd.yamaha.openscoreformat": {
        source: "iana",
        extensions: ["osf"]
      },
      "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
        source: "iana",
        extensions: ["osfpvg"]
      },
      "application/vnd.yamaha.remote-setup": {
        source: "iana"
      },
      "application/vnd.yamaha.smaf-audio": {
        source: "iana",
        extensions: ["saf"]
      },
      "application/vnd.yamaha.smaf-phrase": {
        source: "iana",
        extensions: ["spf"]
      },
      "application/vnd.yamaha.through-ngn": {
        source: "iana"
      },
      "application/vnd.yamaha.tunnel-udpencap": {
        source: "iana"
      },
      "application/vnd.yaoweme": {
        source: "iana"
      },
      "application/vnd.yellowriver-custom-menu": {
        source: "iana",
        extensions: ["cmp"]
      },
      "application/vnd.zul": {
        source: "iana",
        extensions: ["zir", "zirz"]
      },
      "application/vnd.zzazz.deck+xml": {
        source: "iana",
        extensions: ["zaz"]
      },
      "application/voicexml+xml": {
        source: "iana",
        extensions: ["vxml"]
      },
      "application/vq-rtcpxr": {
        source: "iana"
      },
      "application/watcherinfo+xml": {
        source: "iana"
      },
      "application/whoispp-query": {
        source: "iana"
      },
      "application/whoispp-response": {
        source: "iana"
      },
      "application/widget": {
        source: "iana",
        extensions: ["wgt"]
      },
      "application/winhlp": {
        source: "apache",
        extensions: ["hlp"]
      },
      "application/wita": {
        source: "iana"
      },
      "application/wordperfect5.1": {
        source: "iana"
      },
      "application/wsdl+xml": {
        source: "iana",
        extensions: ["wsdl"]
      },
      "application/wspolicy+xml": {
        source: "iana",
        extensions: ["wspolicy"]
      },
      "application/x-7z-compressed": {
        source: "apache",
        compressible: false,
        extensions: ["7z"]
      },
      "application/x-abiword": {
        source: "apache",
        extensions: ["abw"]
      },
      "application/x-ace-compressed": {
        source: "apache",
        extensions: ["ace"]
      },
      "application/x-amf": {
        source: "apache"
      },
      "application/x-apple-diskimage": {
        source: "apache",
        extensions: ["dmg"]
      },
      "application/x-authorware-bin": {
        source: "apache",
        extensions: ["aab", "x32", "u32", "vox"]
      },
      "application/x-authorware-map": {
        source: "apache",
        extensions: ["aam"]
      },
      "application/x-authorware-seg": {
        source: "apache",
        extensions: ["aas"]
      },
      "application/x-bcpio": {
        source: "apache",
        extensions: ["bcpio"]
      },
      "application/x-bdoc": {
        compressible: false,
        extensions: ["bdoc"]
      },
      "application/x-bittorrent": {
        source: "apache",
        extensions: ["torrent"]
      },
      "application/x-blorb": {
        source: "apache",
        extensions: ["blb", "blorb"]
      },
      "application/x-bzip": {
        source: "apache",
        compressible: false,
        extensions: ["bz"]
      },
      "application/x-bzip2": {
        source: "apache",
        compressible: false,
        extensions: ["bz2", "boz"]
      },
      "application/x-cbr": {
        source: "apache",
        extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
      },
      "application/x-cdlink": {
        source: "apache",
        extensions: ["vcd"]
      },
      "application/x-cfs-compressed": {
        source: "apache",
        extensions: ["cfs"]
      },
      "application/x-chat": {
        source: "apache",
        extensions: ["chat"]
      },
      "application/x-chess-pgn": {
        source: "apache",
        extensions: ["pgn"]
      },
      "application/x-chrome-extension": {
        extensions: ["crx"]
      },
      "application/x-cocoa": {
        source: "nginx",
        extensions: ["cco"]
      },
      "application/x-compress": {
        source: "apache"
      },
      "application/x-conference": {
        source: "apache",
        extensions: ["nsc"]
      },
      "application/x-cpio": {
        source: "apache",
        extensions: ["cpio"]
      },
      "application/x-csh": {
        source: "apache",
        extensions: ["csh"]
      },
      "application/x-deb": {
        compressible: false
      },
      "application/x-debian-package": {
        source: "apache",
        extensions: ["deb", "udeb"]
      },
      "application/x-dgc-compressed": {
        source: "apache",
        extensions: ["dgc"]
      },
      "application/x-director": {
        source: "apache",
        extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
      },
      "application/x-doom": {
        source: "apache",
        extensions: ["wad"]
      },
      "application/x-dtbncx+xml": {
        source: "apache",
        extensions: ["ncx"]
      },
      "application/x-dtbook+xml": {
        source: "apache",
        extensions: ["dtb"]
      },
      "application/x-dtbresource+xml": {
        source: "apache",
        extensions: ["res"]
      },
      "application/x-dvi": {
        source: "apache",
        compressible: false,
        extensions: ["dvi"]
      },
      "application/x-envoy": {
        source: "apache",
        extensions: ["evy"]
      },
      "application/x-eva": {
        source: "apache",
        extensions: ["eva"]
      },
      "application/x-font-bdf": {
        source: "apache",
        extensions: ["bdf"]
      },
      "application/x-font-dos": {
        source: "apache"
      },
      "application/x-font-framemaker": {
        source: "apache"
      },
      "application/x-font-ghostscript": {
        source: "apache",
        extensions: ["gsf"]
      },
      "application/x-font-libgrx": {
        source: "apache"
      },
      "application/x-font-linux-psf": {
        source: "apache",
        extensions: ["psf"]
      },
      "application/x-font-otf": {
        source: "apache",
        compressible: true,
        extensions: ["otf"]
      },
      "application/x-font-pcf": {
        source: "apache",
        extensions: ["pcf"]
      },
      "application/x-font-snf": {
        source: "apache",
        extensions: ["snf"]
      },
      "application/x-font-speedo": {
        source: "apache"
      },
      "application/x-font-sunos-news": {
        source: "apache"
      },
      "application/x-font-ttf": {
        source: "apache",
        compressible: true,
        extensions: ["ttf", "ttc"]
      },
      "application/x-font-type1": {
        source: "apache",
        extensions: ["pfa", "pfb", "pfm", "afm"]
      },
      "application/x-font-vfont": {
        source: "apache"
      },
      "application/x-freearc": {
        source: "apache",
        extensions: ["arc"]
      },
      "application/x-futuresplash": {
        source: "apache",
        extensions: ["spl"]
      },
      "application/x-gca-compressed": {
        source: "apache",
        extensions: ["gca"]
      },
      "application/x-glulx": {
        source: "apache",
        extensions: ["ulx"]
      },
      "application/x-gnumeric": {
        source: "apache",
        extensions: ["gnumeric"]
      },
      "application/x-gramps-xml": {
        source: "apache",
        extensions: ["gramps"]
      },
      "application/x-gtar": {
        source: "apache",
        extensions: ["gtar"]
      },
      "application/x-gzip": {
        source: "apache"
      },
      "application/x-hdf": {
        source: "apache",
        extensions: ["hdf"]
      },
      "application/x-httpd-php": {
        compressible: true,
        extensions: ["php"]
      },
      "application/x-install-instructions": {
        source: "apache",
        extensions: ["install"]
      },
      "application/x-iso9660-image": {
        source: "apache",
        extensions: ["iso"]
      },
      "application/x-java-archive-diff": {
        source: "nginx",
        extensions: ["jardiff"]
      },
      "application/x-java-jnlp-file": {
        source: "apache",
        compressible: false,
        extensions: ["jnlp"]
      },
      "application/x-javascript": {
        compressible: true
      },
      "application/x-latex": {
        source: "apache",
        compressible: false,
        extensions: ["latex"]
      },
      "application/x-lua-bytecode": {
        extensions: ["luac"]
      },
      "application/x-lzh-compressed": {
        source: "apache",
        extensions: ["lzh", "lha"]
      },
      "application/x-makeself": {
        source: "nginx",
        extensions: ["run"]
      },
      "application/x-mie": {
        source: "apache",
        extensions: ["mie"]
      },
      "application/x-mobipocket-ebook": {
        source: "apache",
        extensions: ["prc", "mobi"]
      },
      "application/x-mpegurl": {
        compressible: false
      },
      "application/x-ms-application": {
        source: "apache",
        extensions: ["application"]
      },
      "application/x-ms-shortcut": {
        source: "apache",
        extensions: ["lnk"]
      },
      "application/x-ms-wmd": {
        source: "apache",
        extensions: ["wmd"]
      },
      "application/x-ms-wmz": {
        source: "apache",
        extensions: ["wmz"]
      },
      "application/x-ms-xbap": {
        source: "apache",
        extensions: ["xbap"]
      },
      "application/x-msaccess": {
        source: "apache",
        extensions: ["mdb"]
      },
      "application/x-msbinder": {
        source: "apache",
        extensions: ["obd"]
      },
      "application/x-mscardfile": {
        source: "apache",
        extensions: ["crd"]
      },
      "application/x-msclip": {
        source: "apache",
        extensions: ["clp"]
      },
      "application/x-msdos-program": {
        extensions: ["exe"]
      },
      "application/x-msdownload": {
        source: "apache",
        extensions: ["exe", "dll", "com", "bat", "msi"]
      },
      "application/x-msmediaview": {
        source: "apache",
        extensions: ["mvb", "m13", "m14"]
      },
      "application/x-msmetafile": {
        source: "apache",
        extensions: ["wmf", "wmz", "emf", "emz"]
      },
      "application/x-msmoney": {
        source: "apache",
        extensions: ["mny"]
      },
      "application/x-mspublisher": {
        source: "apache",
        extensions: ["pub"]
      },
      "application/x-msschedule": {
        source: "apache",
        extensions: ["scd"]
      },
      "application/x-msterminal": {
        source: "apache",
        extensions: ["trm"]
      },
      "application/x-mswrite": {
        source: "apache",
        extensions: ["wri"]
      },
      "application/x-netcdf": {
        source: "apache",
        extensions: ["nc", "cdf"]
      },
      "application/x-ns-proxy-autoconfig": {
        compressible: true,
        extensions: ["pac"]
      },
      "application/x-nzb": {
        source: "apache",
        extensions: ["nzb"]
      },
      "application/x-perl": {
        source: "nginx",
        extensions: ["pl", "pm"]
      },
      "application/x-pilot": {
        source: "nginx",
        extensions: ["prc", "pdb"]
      },
      "application/x-pkcs12": {
        source: "apache",
        compressible: false,
        extensions: ["p12", "pfx"]
      },
      "application/x-pkcs7-certificates": {
        source: "apache",
        extensions: ["p7b", "spc"]
      },
      "application/x-pkcs7-certreqresp": {
        source: "apache",
        extensions: ["p7r"]
      },
      "application/x-rar-compressed": {
        source: "apache",
        compressible: false,
        extensions: ["rar"]
      },
      "application/x-redhat-package-manager": {
        source: "nginx",
        extensions: ["rpm"]
      },
      "application/x-research-info-systems": {
        source: "apache",
        extensions: ["ris"]
      },
      "application/x-sea": {
        source: "nginx",
        extensions: ["sea"]
      },
      "application/x-sh": {
        source: "apache",
        compressible: true,
        extensions: ["sh"]
      },
      "application/x-shar": {
        source: "apache",
        extensions: ["shar"]
      },
      "application/x-shockwave-flash": {
        source: "apache",
        compressible: false,
        extensions: ["swf"]
      },
      "application/x-silverlight-app": {
        source: "apache",
        extensions: ["xap"]
      },
      "application/x-sql": {
        source: "apache",
        extensions: ["sql"]
      },
      "application/x-stuffit": {
        source: "apache",
        compressible: false,
        extensions: ["sit"]
      },
      "application/x-stuffitx": {
        source: "apache",
        extensions: ["sitx"]
      },
      "application/x-subrip": {
        source: "apache",
        extensions: ["srt"]
      },
      "application/x-sv4cpio": {
        source: "apache",
        extensions: ["sv4cpio"]
      },
      "application/x-sv4crc": {
        source: "apache",
        extensions: ["sv4crc"]
      },
      "application/x-t3vm-image": {
        source: "apache",
        extensions: ["t3"]
      },
      "application/x-tads": {
        source: "apache",
        extensions: ["gam"]
      },
      "application/x-tar": {
        source: "apache",
        compressible: true,
        extensions: ["tar"]
      },
      "application/x-tcl": {
        source: "apache",
        extensions: ["tcl", "tk"]
      },
      "application/x-tex": {
        source: "apache",
        extensions: ["tex"]
      },
      "application/x-tex-tfm": {
        source: "apache",
        extensions: ["tfm"]
      },
      "application/x-texinfo": {
        source: "apache",
        extensions: ["texinfo", "texi"]
      },
      "application/x-tgif": {
        source: "apache",
        extensions: ["obj"]
      },
      "application/x-ustar": {
        source: "apache",
        extensions: ["ustar"]
      },
      "application/x-wais-source": {
        source: "apache",
        extensions: ["src"]
      },
      "application/x-web-app-manifest+json": {
        compressible: true,
        extensions: ["webapp"]
      },
      "application/x-www-form-urlencoded": {
        source: "iana",
        compressible: true
      },
      "application/x-x509-ca-cert": {
        source: "apache",
        extensions: ["der", "crt", "pem"]
      },
      "application/x-xfig": {
        source: "apache",
        extensions: ["fig"]
      },
      "application/x-xliff+xml": {
        source: "apache",
        extensions: ["xlf"]
      },
      "application/x-xpinstall": {
        source: "apache",
        compressible: false,
        extensions: ["xpi"]
      },
      "application/x-xz": {
        source: "apache",
        extensions: ["xz"]
      },
      "application/x-zmachine": {
        source: "apache",
        extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
      },
      "application/x400-bp": {
        source: "iana"
      },
      "application/xacml+xml": {
        source: "iana"
      },
      "application/xaml+xml": {
        source: "apache",
        extensions: ["xaml"]
      },
      "application/xcap-att+xml": {
        source: "iana"
      },
      "application/xcap-caps+xml": {
        source: "iana"
      },
      "application/xcap-diff+xml": {
        source: "iana",
        extensions: ["xdf"]
      },
      "application/xcap-el+xml": {
        source: "iana"
      },
      "application/xcap-error+xml": {
        source: "iana"
      },
      "application/xcap-ns+xml": {
        source: "iana"
      },
      "application/xcon-conference-info+xml": {
        source: "iana"
      },
      "application/xcon-conference-info-diff+xml": {
        source: "iana"
      },
      "application/xenc+xml": {
        source: "iana",
        extensions: ["xenc"]
      },
      "application/xhtml+xml": {
        source: "iana",
        compressible: true,
        extensions: ["xhtml", "xht"]
      },
      "application/xhtml-voice+xml": {
        source: "apache"
      },
      "application/xml": {
        source: "iana",
        compressible: true,
        extensions: ["xml", "xsl", "xsd", "rng"]
      },
      "application/xml-dtd": {
        source: "iana",
        compressible: true,
        extensions: ["dtd"]
      },
      "application/xml-external-parsed-entity": {
        source: "iana"
      },
      "application/xml-patch+xml": {
        source: "iana"
      },
      "application/xmpp+xml": {
        source: "iana"
      },
      "application/xop+xml": {
        source: "iana",
        compressible: true,
        extensions: ["xop"]
      },
      "application/xproc+xml": {
        source: "apache",
        extensions: ["xpl"]
      },
      "application/xslt+xml": {
        source: "iana",
        extensions: ["xslt"]
      },
      "application/xspf+xml": {
        source: "apache",
        extensions: ["xspf"]
      },
      "application/xv+xml": {
        source: "iana",
        extensions: ["mxml", "xhvml", "xvml", "xvm"]
      },
      "application/yang": {
        source: "iana",
        extensions: ["yang"]
      },
      "application/yang-data+json": {
        source: "iana",
        compressible: true
      },
      "application/yang-data+xml": {
        source: "iana"
      },
      "application/yin+xml": {
        source: "iana",
        extensions: ["yin"]
      },
      "application/zip": {
        source: "iana",
        compressible: false,
        extensions: ["zip"]
      },
      "application/zlib": {
        source: "iana"
      },
      "audio/1d-interleaved-parityfec": {
        source: "iana"
      },
      "audio/32kadpcm": {
        source: "iana"
      },
      "audio/3gpp": {
        source: "iana",
        compressible: false,
        extensions: ["3gpp"]
      },
      "audio/3gpp2": {
        source: "iana"
      },
      "audio/ac3": {
        source: "iana"
      },
      "audio/adpcm": {
        source: "apache",
        extensions: ["adp"]
      },
      "audio/amr": {
        source: "iana"
      },
      "audio/amr-wb": {
        source: "iana"
      },
      "audio/amr-wb+": {
        source: "iana"
      },
      "audio/aptx": {
        source: "iana"
      },
      "audio/asc": {
        source: "iana"
      },
      "audio/atrac-advanced-lossless": {
        source: "iana"
      },
      "audio/atrac-x": {
        source: "iana"
      },
      "audio/atrac3": {
        source: "iana"
      },
      "audio/basic": {
        source: "iana",
        compressible: false,
        extensions: ["au", "snd"]
      },
      "audio/bv16": {
        source: "iana"
      },
      "audio/bv32": {
        source: "iana"
      },
      "audio/clearmode": {
        source: "iana"
      },
      "audio/cn": {
        source: "iana"
      },
      "audio/dat12": {
        source: "iana"
      },
      "audio/dls": {
        source: "iana"
      },
      "audio/dsr-es201108": {
        source: "iana"
      },
      "audio/dsr-es202050": {
        source: "iana"
      },
      "audio/dsr-es202211": {
        source: "iana"
      },
      "audio/dsr-es202212": {
        source: "iana"
      },
      "audio/dv": {
        source: "iana"
      },
      "audio/dvi4": {
        source: "iana"
      },
      "audio/eac3": {
        source: "iana"
      },
      "audio/encaprtp": {
        source: "iana"
      },
      "audio/evrc": {
        source: "iana"
      },
      "audio/evrc-qcp": {
        source: "iana"
      },
      "audio/evrc0": {
        source: "iana"
      },
      "audio/evrc1": {
        source: "iana"
      },
      "audio/evrcb": {
        source: "iana"
      },
      "audio/evrcb0": {
        source: "iana"
      },
      "audio/evrcb1": {
        source: "iana"
      },
      "audio/evrcnw": {
        source: "iana"
      },
      "audio/evrcnw0": {
        source: "iana"
      },
      "audio/evrcnw1": {
        source: "iana"
      },
      "audio/evrcwb": {
        source: "iana"
      },
      "audio/evrcwb0": {
        source: "iana"
      },
      "audio/evrcwb1": {
        source: "iana"
      },
      "audio/evs": {
        source: "iana"
      },
      "audio/fwdred": {
        source: "iana"
      },
      "audio/g711-0": {
        source: "iana"
      },
      "audio/g719": {
        source: "iana"
      },
      "audio/g722": {
        source: "iana"
      },
      "audio/g7221": {
        source: "iana"
      },
      "audio/g723": {
        source: "iana"
      },
      "audio/g726-16": {
        source: "iana"
      },
      "audio/g726-24": {
        source: "iana"
      },
      "audio/g726-32": {
        source: "iana"
      },
      "audio/g726-40": {
        source: "iana"
      },
      "audio/g728": {
        source: "iana"
      },
      "audio/g729": {
        source: "iana"
      },
      "audio/g7291": {
        source: "iana"
      },
      "audio/g729d": {
        source: "iana"
      },
      "audio/g729e": {
        source: "iana"
      },
      "audio/gsm": {
        source: "iana"
      },
      "audio/gsm-efr": {
        source: "iana"
      },
      "audio/gsm-hr-08": {
        source: "iana"
      },
      "audio/ilbc": {
        source: "iana"
      },
      "audio/ip-mr_v2.5": {
        source: "iana"
      },
      "audio/isac": {
        source: "apache"
      },
      "audio/l16": {
        source: "iana"
      },
      "audio/l20": {
        source: "iana"
      },
      "audio/l24": {
        source: "iana",
        compressible: false
      },
      "audio/l8": {
        source: "iana"
      },
      "audio/lpc": {
        source: "iana"
      },
      "audio/midi": {
        source: "apache",
        extensions: ["mid", "midi", "kar", "rmi"]
      },
      "audio/mobile-xmf": {
        source: "iana"
      },
      "audio/mp3": {
        compressible: false,
        extensions: ["mp3"]
      },
      "audio/mp4": {
        source: "iana",
        compressible: false,
        extensions: ["m4a", "mp4a"]
      },
      "audio/mp4a-latm": {
        source: "iana"
      },
      "audio/mpa": {
        source: "iana"
      },
      "audio/mpa-robust": {
        source: "iana"
      },
      "audio/mpeg": {
        source: "iana",
        compressible: false,
        extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
      },
      "audio/mpeg4-generic": {
        source: "iana"
      },
      "audio/musepack": {
        source: "apache"
      },
      "audio/ogg": {
        source: "iana",
        compressible: false,
        extensions: ["oga", "ogg", "spx"]
      },
      "audio/opus": {
        source: "iana"
      },
      "audio/parityfec": {
        source: "iana"
      },
      "audio/pcma": {
        source: "iana"
      },
      "audio/pcma-wb": {
        source: "iana"
      },
      "audio/pcmu": {
        source: "iana"
      },
      "audio/pcmu-wb": {
        source: "iana"
      },
      "audio/prs.sid": {
        source: "iana"
      },
      "audio/qcelp": {
        source: "iana"
      },
      "audio/raptorfec": {
        source: "iana"
      },
      "audio/red": {
        source: "iana"
      },
      "audio/rtp-enc-aescm128": {
        source: "iana"
      },
      "audio/rtp-midi": {
        source: "iana"
      },
      "audio/rtploopback": {
        source: "iana"
      },
      "audio/rtx": {
        source: "iana"
      },
      "audio/s3m": {
        source: "apache",
        extensions: ["s3m"]
      },
      "audio/silk": {
        source: "apache",
        extensions: ["sil"]
      },
      "audio/smv": {
        source: "iana"
      },
      "audio/smv-qcp": {
        source: "iana"
      },
      "audio/smv0": {
        source: "iana"
      },
      "audio/sp-midi": {
        source: "iana"
      },
      "audio/speex": {
        source: "iana"
      },
      "audio/t140c": {
        source: "iana"
      },
      "audio/t38": {
        source: "iana"
      },
      "audio/telephone-event": {
        source: "iana"
      },
      "audio/tone": {
        source: "iana"
      },
      "audio/uemclip": {
        source: "iana"
      },
      "audio/ulpfec": {
        source: "iana"
      },
      "audio/vdvi": {
        source: "iana"
      },
      "audio/vmr-wb": {
        source: "iana"
      },
      "audio/vnd.3gpp.iufp": {
        source: "iana"
      },
      "audio/vnd.4sb": {
        source: "iana"
      },
      "audio/vnd.audiokoz": {
        source: "iana"
      },
      "audio/vnd.celp": {
        source: "iana"
      },
      "audio/vnd.cisco.nse": {
        source: "iana"
      },
      "audio/vnd.cmles.radio-events": {
        source: "iana"
      },
      "audio/vnd.cns.anp1": {
        source: "iana"
      },
      "audio/vnd.cns.inf1": {
        source: "iana"
      },
      "audio/vnd.dece.audio": {
        source: "iana",
        extensions: ["uva", "uvva"]
      },
      "audio/vnd.digital-winds": {
        source: "iana",
        extensions: ["eol"]
      },
      "audio/vnd.dlna.adts": {
        source: "iana"
      },
      "audio/vnd.dolby.heaac.1": {
        source: "iana"
      },
      "audio/vnd.dolby.heaac.2": {
        source: "iana"
      },
      "audio/vnd.dolby.mlp": {
        source: "iana"
      },
      "audio/vnd.dolby.mps": {
        source: "iana"
      },
      "audio/vnd.dolby.pl2": {
        source: "iana"
      },
      "audio/vnd.dolby.pl2x": {
        source: "iana"
      },
      "audio/vnd.dolby.pl2z": {
        source: "iana"
      },
      "audio/vnd.dolby.pulse.1": {
        source: "iana"
      },
      "audio/vnd.dra": {
        source: "iana",
        extensions: ["dra"]
      },
      "audio/vnd.dts": {
        source: "iana",
        extensions: ["dts"]
      },
      "audio/vnd.dts.hd": {
        source: "iana",
        extensions: ["dtshd"]
      },
      "audio/vnd.dvb.file": {
        source: "iana"
      },
      "audio/vnd.everad.plj": {
        source: "iana"
      },
      "audio/vnd.hns.audio": {
        source: "iana"
      },
      "audio/vnd.lucent.voice": {
        source: "iana",
        extensions: ["lvp"]
      },
      "audio/vnd.ms-playready.media.pya": {
        source: "iana",
        extensions: ["pya"]
      },
      "audio/vnd.nokia.mobile-xmf": {
        source: "iana"
      },
      "audio/vnd.nortel.vbk": {
        source: "iana"
      },
      "audio/vnd.nuera.ecelp4800": {
        source: "iana",
        extensions: ["ecelp4800"]
      },
      "audio/vnd.nuera.ecelp7470": {
        source: "iana",
        extensions: ["ecelp7470"]
      },
      "audio/vnd.nuera.ecelp9600": {
        source: "iana",
        extensions: ["ecelp9600"]
      },
      "audio/vnd.octel.sbc": {
        source: "iana"
      },
      "audio/vnd.qcelp": {
        source: "iana"
      },
      "audio/vnd.rhetorex.32kadpcm": {
        source: "iana"
      },
      "audio/vnd.rip": {
        source: "iana",
        extensions: ["rip"]
      },
      "audio/vnd.rn-realaudio": {
        compressible: false
      },
      "audio/vnd.sealedmedia.softseal.mpeg": {
        source: "iana"
      },
      "audio/vnd.vmx.cvsd": {
        source: "iana"
      },
      "audio/vnd.wave": {
        compressible: false
      },
      "audio/vorbis": {
        source: "iana",
        compressible: false
      },
      "audio/vorbis-config": {
        source: "iana"
      },
      "audio/wav": {
        compressible: false,
        extensions: ["wav"]
      },
      "audio/wave": {
        compressible: false,
        extensions: ["wav"]
      },
      "audio/webm": {
        source: "apache",
        compressible: false,
        extensions: ["weba"]
      },
      "audio/x-aac": {
        source: "apache",
        compressible: false,
        extensions: ["aac"]
      },
      "audio/x-aiff": {
        source: "apache",
        extensions: ["aif", "aiff", "aifc"]
      },
      "audio/x-caf": {
        source: "apache",
        compressible: false,
        extensions: ["caf"]
      },
      "audio/x-flac": {
        source: "apache",
        extensions: ["flac"]
      },
      "audio/x-m4a": {
        source: "nginx",
        extensions: ["m4a"]
      },
      "audio/x-matroska": {
        source: "apache",
        extensions: ["mka"]
      },
      "audio/x-mpegurl": {
        source: "apache",
        extensions: ["m3u"]
      },
      "audio/x-ms-wax": {
        source: "apache",
        extensions: ["wax"]
      },
      "audio/x-ms-wma": {
        source: "apache",
        extensions: ["wma"]
      },
      "audio/x-pn-realaudio": {
        source: "apache",
        extensions: ["ram", "ra"]
      },
      "audio/x-pn-realaudio-plugin": {
        source: "apache",
        extensions: ["rmp"]
      },
      "audio/x-realaudio": {
        source: "nginx",
        extensions: ["ra"]
      },
      "audio/x-tta": {
        source: "apache"
      },
      "audio/x-wav": {
        source: "apache",
        extensions: ["wav"]
      },
      "audio/xm": {
        source: "apache",
        extensions: ["xm"]
      },
      "chemical/x-cdx": {
        source: "apache",
        extensions: ["cdx"]
      },
      "chemical/x-cif": {
        source: "apache",
        extensions: ["cif"]
      },
      "chemical/x-cmdf": {
        source: "apache",
        extensions: ["cmdf"]
      },
      "chemical/x-cml": {
        source: "apache",
        extensions: ["cml"]
      },
      "chemical/x-csml": {
        source: "apache",
        extensions: ["csml"]
      },
      "chemical/x-pdb": {
        source: "apache"
      },
      "chemical/x-xyz": {
        source: "apache",
        extensions: ["xyz"]
      },
      "font/opentype": {
        compressible: true,
        extensions: ["otf"]
      },
      "image/bmp": {
        source: "iana",
        compressible: true,
        extensions: ["bmp"]
      },
      "image/cgm": {
        source: "iana",
        extensions: ["cgm"]
      },
      "image/dicom-rle": {
        source: "iana"
      },
      "image/emf": {
        source: "iana"
      },
      "image/fits": {
        source: "iana"
      },
      "image/g3fax": {
        source: "iana",
        extensions: ["g3"]
      },
      "image/gif": {
        source: "iana",
        compressible: false,
        extensions: ["gif"]
      },
      "image/ief": {
        source: "iana",
        extensions: ["ief"]
      },
      "image/jls": {
        source: "iana"
      },
      "image/jp2": {
        source: "iana"
      },
      "image/jpeg": {
        source: "iana",
        compressible: false,
        extensions: ["jpeg", "jpg", "jpe"]
      },
      "image/jpm": {
        source: "iana"
      },
      "image/jpx": {
        source: "iana"
      },
      "image/ktx": {
        source: "iana",
        extensions: ["ktx"]
      },
      "image/naplps": {
        source: "iana"
      },
      "image/pjpeg": {
        compressible: false
      },
      "image/png": {
        source: "iana",
        compressible: false,
        extensions: ["png"]
      },
      "image/prs.btif": {
        source: "iana",
        extensions: ["btif"]
      },
      "image/prs.pti": {
        source: "iana"
      },
      "image/pwg-raster": {
        source: "iana"
      },
      "image/sgi": {
        source: "apache",
        extensions: ["sgi"]
      },
      "image/svg+xml": {
        source: "iana",
        compressible: true,
        extensions: ["svg", "svgz"]
      },
      "image/t38": {
        source: "iana"
      },
      "image/tiff": {
        source: "iana",
        compressible: false,
        extensions: ["tiff", "tif"]
      },
      "image/tiff-fx": {
        source: "iana"
      },
      "image/vnd.adobe.photoshop": {
        source: "iana",
        compressible: true,
        extensions: ["psd"]
      },
      "image/vnd.airzip.accelerator.azv": {
        source: "iana"
      },
      "image/vnd.cns.inf2": {
        source: "iana"
      },
      "image/vnd.dece.graphic": {
        source: "iana",
        extensions: ["uvi", "uvvi", "uvg", "uvvg"]
      },
      "image/vnd.djvu": {
        source: "iana",
        extensions: ["djvu", "djv"]
      },
      "image/vnd.dvb.subtitle": {
        source: "iana",
        extensions: ["sub"]
      },
      "image/vnd.dwg": {
        source: "iana",
        extensions: ["dwg"]
      },
      "image/vnd.dxf": {
        source: "iana",
        extensions: ["dxf"]
      },
      "image/vnd.fastbidsheet": {
        source: "iana",
        extensions: ["fbs"]
      },
      "image/vnd.fpx": {
        source: "iana",
        extensions: ["fpx"]
      },
      "image/vnd.fst": {
        source: "iana",
        extensions: ["fst"]
      },
      "image/vnd.fujixerox.edmics-mmr": {
        source: "iana",
        extensions: ["mmr"]
      },
      "image/vnd.fujixerox.edmics-rlc": {
        source: "iana",
        extensions: ["rlc"]
      },
      "image/vnd.globalgraphics.pgb": {
        source: "iana"
      },
      "image/vnd.microsoft.icon": {
        source: "iana"
      },
      "image/vnd.mix": {
        source: "iana"
      },
      "image/vnd.mozilla.apng": {
        source: "iana"
      },
      "image/vnd.ms-modi": {
        source: "iana",
        extensions: ["mdi"]
      },
      "image/vnd.ms-photo": {
        source: "apache",
        extensions: ["wdp"]
      },
      "image/vnd.net-fpx": {
        source: "iana",
        extensions: ["npx"]
      },
      "image/vnd.radiance": {
        source: "iana"
      },
      "image/vnd.sealed.png": {
        source: "iana"
      },
      "image/vnd.sealedmedia.softseal.gif": {
        source: "iana"
      },
      "image/vnd.sealedmedia.softseal.jpg": {
        source: "iana"
      },
      "image/vnd.svf": {
        source: "iana"
      },
      "image/vnd.tencent.tap": {
        source: "iana"
      },
      "image/vnd.valve.source.texture": {
        source: "iana"
      },
      "image/vnd.wap.wbmp": {
        source: "iana",
        extensions: ["wbmp"]
      },
      "image/vnd.xiff": {
        source: "iana",
        extensions: ["xif"]
      },
      "image/vnd.zbrush.pcx": {
        source: "iana"
      },
      "image/webp": {
        source: "apache",
        extensions: ["webp"]
      },
      "image/wmf": {
        source: "iana"
      },
      "image/x-3ds": {
        source: "apache",
        extensions: ["3ds"]
      },
      "image/x-cmu-raster": {
        source: "apache",
        extensions: ["ras"]
      },
      "image/x-cmx": {
        source: "apache",
        extensions: ["cmx"]
      },
      "image/x-freehand": {
        source: "apache",
        extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
      },
      "image/x-icon": {
        source: "apache",
        compressible: true,
        extensions: ["ico"]
      },
      "image/x-jng": {
        source: "nginx",
        extensions: ["jng"]
      },
      "image/x-mrsid-image": {
        source: "apache",
        extensions: ["sid"]
      },
      "image/x-ms-bmp": {
        source: "nginx",
        compressible: true,
        extensions: ["bmp"]
      },
      "image/x-pcx": {
        source: "apache",
        extensions: ["pcx"]
      },
      "image/x-pict": {
        source: "apache",
        extensions: ["pic", "pct"]
      },
      "image/x-portable-anymap": {
        source: "apache",
        extensions: ["pnm"]
      },
      "image/x-portable-bitmap": {
        source: "apache",
        extensions: ["pbm"]
      },
      "image/x-portable-graymap": {
        source: "apache",
        extensions: ["pgm"]
      },
      "image/x-portable-pixmap": {
        source: "apache",
        extensions: ["ppm"]
      },
      "image/x-rgb": {
        source: "apache",
        extensions: ["rgb"]
      },
      "image/x-tga": {
        source: "apache",
        extensions: ["tga"]
      },
      "image/x-xbitmap": {
        source: "apache",
        extensions: ["xbm"]
      },
      "image/x-xcf": {
        compressible: false
      },
      "image/x-xpixmap": {
        source: "apache",
        extensions: ["xpm"]
      },
      "image/x-xwindowdump": {
        source: "apache",
        extensions: ["xwd"]
      },
      "message/cpim": {
        source: "iana"
      },
      "message/delivery-status": {
        source: "iana"
      },
      "message/disposition-notification": {
        source: "iana"
      },
      "message/external-body": {
        source: "iana"
      },
      "message/feedback-report": {
        source: "iana"
      },
      "message/global": {
        source: "iana"
      },
      "message/global-delivery-status": {
        source: "iana"
      },
      "message/global-disposition-notification": {
        source: "iana"
      },
      "message/global-headers": {
        source: "iana"
      },
      "message/http": {
        source: "iana",
        compressible: false
      },
      "message/imdn+xml": {
        source: "iana",
        compressible: true
      },
      "message/news": {
        source: "iana"
      },
      "message/partial": {
        source: "iana",
        compressible: false
      },
      "message/rfc822": {
        source: "iana",
        compressible: true,
        extensions: ["eml", "mime"]
      },
      "message/s-http": {
        source: "iana"
      },
      "message/sip": {
        source: "iana"
      },
      "message/sipfrag": {
        source: "iana"
      },
      "message/tracking-status": {
        source: "iana"
      },
      "message/vnd.si.simp": {
        source: "iana"
      },
      "message/vnd.wfa.wsc": {
        source: "iana"
      },
      "model/gltf+json": {
        source: "iana",
        compressible: true
      },
      "model/iges": {
        source: "iana",
        compressible: false,
        extensions: ["igs", "iges"]
      },
      "model/mesh": {
        source: "iana",
        compressible: false,
        extensions: ["msh", "mesh", "silo"]
      },
      "model/vnd.collada+xml": {
        source: "iana",
        extensions: ["dae"]
      },
      "model/vnd.dwf": {
        source: "iana",
        extensions: ["dwf"]
      },
      "model/vnd.flatland.3dml": {
        source: "iana"
      },
      "model/vnd.gdl": {
        source: "iana",
        extensions: ["gdl"]
      },
      "model/vnd.gs-gdl": {
        source: "apache"
      },
      "model/vnd.gs.gdl": {
        source: "iana"
      },
      "model/vnd.gtw": {
        source: "iana",
        extensions: ["gtw"]
      },
      "model/vnd.moml+xml": {
        source: "iana"
      },
      "model/vnd.mts": {
        source: "iana",
        extensions: ["mts"]
      },
      "model/vnd.opengex": {
        source: "iana"
      },
      "model/vnd.parasolid.transmit.binary": {
        source: "iana"
      },
      "model/vnd.parasolid.transmit.text": {
        source: "iana"
      },
      "model/vnd.rosette.annotated-data-model": {
        source: "iana"
      },
      "model/vnd.valve.source.compiled-map": {
        source: "iana"
      },
      "model/vnd.vtu": {
        source: "iana",
        extensions: ["vtu"]
      },
      "model/vrml": {
        source: "iana",
        compressible: false,
        extensions: ["wrl", "vrml"]
      },
      "model/x3d+binary": {
        source: "apache",
        compressible: false,
        extensions: ["x3db", "x3dbz"]
      },
      "model/x3d+fastinfoset": {
        source: "iana"
      },
      "model/x3d+vrml": {
        source: "apache",
        compressible: false,
        extensions: ["x3dv", "x3dvz"]
      },
      "model/x3d+xml": {
        source: "iana",
        compressible: true,
        extensions: ["x3d", "x3dz"]
      },
      "model/x3d-vrml": {
        source: "iana"
      },
      "multipart/alternative": {
        source: "iana",
        compressible: false
      },
      "multipart/appledouble": {
        source: "iana"
      },
      "multipart/byteranges": {
        source: "iana"
      },
      "multipart/digest": {
        source: "iana"
      },
      "multipart/encrypted": {
        source: "iana",
        compressible: false
      },
      "multipart/form-data": {
        source: "iana",
        compressible: false
      },
      "multipart/header-set": {
        source: "iana"
      },
      "multipart/mixed": {
        source: "iana",
        compressible: false
      },
      "multipart/parallel": {
        source: "iana"
      },
      "multipart/related": {
        source: "iana",
        compressible: false
      },
      "multipart/report": {
        source: "iana"
      },
      "multipart/signed": {
        source: "iana",
        compressible: false
      },
      "multipart/voice-message": {
        source: "iana"
      },
      "multipart/x-mixed-replace": {
        source: "iana"
      },
      "text/1d-interleaved-parityfec": {
        source: "iana"
      },
      "text/cache-manifest": {
        source: "iana",
        compressible: true,
        extensions: ["appcache", "manifest"]
      },
      "text/calendar": {
        source: "iana",
        extensions: ["ics", "ifb"]
      },
      "text/calender": {
        compressible: true
      },
      "text/cmd": {
        compressible: true
      },
      "text/coffeescript": {
        extensions: ["coffee", "litcoffee"]
      },
      "text/css": {
        source: "iana",
        compressible: true,
        extensions: ["css"]
      },
      "text/csv": {
        source: "iana",
        compressible: true,
        extensions: ["csv"]
      },
      "text/csv-schema": {
        source: "iana"
      },
      "text/directory": {
        source: "iana"
      },
      "text/dns": {
        source: "iana"
      },
      "text/ecmascript": {
        source: "iana"
      },
      "text/encaprtp": {
        source: "iana"
      },
      "text/enriched": {
        source: "iana"
      },
      "text/fwdred": {
        source: "iana"
      },
      "text/grammar-ref-list": {
        source: "iana"
      },
      "text/hjson": {
        extensions: ["hjson"]
      },
      "text/html": {
        source: "iana",
        compressible: true,
        extensions: ["html", "htm", "shtml"]
      },
      "text/jade": {
        extensions: ["jade"]
      },
      "text/javascript": {
        source: "iana",
        compressible: true
      },
      "text/jcr-cnd": {
        source: "iana"
      },
      "text/jsx": {
        compressible: true,
        extensions: ["jsx"]
      },
      "text/less": {
        extensions: ["less"]
      },
      "text/markdown": {
        source: "iana"
      },
      "text/mathml": {
        source: "nginx",
        extensions: ["mml"]
      },
      "text/mizar": {
        source: "iana"
      },
      "text/n3": {
        source: "iana",
        compressible: true,
        extensions: ["n3"]
      },
      "text/parameters": {
        source: "iana"
      },
      "text/parityfec": {
        source: "iana"
      },
      "text/plain": {
        source: "iana",
        compressible: true,
        extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
      },
      "text/provenance-notation": {
        source: "iana"
      },
      "text/prs.fallenstein.rst": {
        source: "iana"
      },
      "text/prs.lines.tag": {
        source: "iana",
        extensions: ["dsc"]
      },
      "text/prs.prop.logic": {
        source: "iana"
      },
      "text/raptorfec": {
        source: "iana"
      },
      "text/red": {
        source: "iana"
      },
      "text/rfc822-headers": {
        source: "iana"
      },
      "text/richtext": {
        source: "iana",
        compressible: true,
        extensions: ["rtx"]
      },
      "text/rtf": {
        source: "iana",
        compressible: true,
        extensions: ["rtf"]
      },
      "text/rtp-enc-aescm128": {
        source: "iana"
      },
      "text/rtploopback": {
        source: "iana"
      },
      "text/rtx": {
        source: "iana"
      },
      "text/sgml": {
        source: "iana",
        extensions: ["sgml", "sgm"]
      },
      "text/slim": {
        extensions: ["slim", "slm"]
      },
      "text/stylus": {
        extensions: ["stylus", "styl"]
      },
      "text/t140": {
        source: "iana"
      },
      "text/tab-separated-values": {
        source: "iana",
        compressible: true,
        extensions: ["tsv"]
      },
      "text/troff": {
        source: "iana",
        extensions: ["t", "tr", "roff", "man", "me", "ms"]
      },
      "text/turtle": {
        source: "iana",
        extensions: ["ttl"]
      },
      "text/ulpfec": {
        source: "iana"
      },
      "text/uri-list": {
        source: "iana",
        compressible: true,
        extensions: ["uri", "uris", "urls"]
      },
      "text/vcard": {
        source: "iana",
        compressible: true,
        extensions: ["vcard"]
      },
      "text/vnd.a": {
        source: "iana"
      },
      "text/vnd.abc": {
        source: "iana"
      },
      "text/vnd.ascii-art": {
        source: "iana"
      },
      "text/vnd.curl": {
        source: "iana",
        extensions: ["curl"]
      },
      "text/vnd.curl.dcurl": {
        source: "apache",
        extensions: ["dcurl"]
      },
      "text/vnd.curl.mcurl": {
        source: "apache",
        extensions: ["mcurl"]
      },
      "text/vnd.curl.scurl": {
        source: "apache",
        extensions: ["scurl"]
      },
      "text/vnd.debian.copyright": {
        source: "iana"
      },
      "text/vnd.dmclientscript": {
        source: "iana"
      },
      "text/vnd.dvb.subtitle": {
        source: "iana",
        extensions: ["sub"]
      },
      "text/vnd.esmertec.theme-descriptor": {
        source: "iana"
      },
      "text/vnd.fly": {
        source: "iana",
        extensions: ["fly"]
      },
      "text/vnd.fmi.flexstor": {
        source: "iana",
        extensions: ["flx"]
      },
      "text/vnd.graphviz": {
        source: "iana",
        extensions: ["gv"]
      },
      "text/vnd.in3d.3dml": {
        source: "iana",
        extensions: ["3dml"]
      },
      "text/vnd.in3d.spot": {
        source: "iana",
        extensions: ["spot"]
      },
      "text/vnd.iptc.newsml": {
        source: "iana"
      },
      "text/vnd.iptc.nitf": {
        source: "iana"
      },
      "text/vnd.latex-z": {
        source: "iana"
      },
      "text/vnd.motorola.reflex": {
        source: "iana"
      },
      "text/vnd.ms-mediapackage": {
        source: "iana"
      },
      "text/vnd.net2phone.commcenter.command": {
        source: "iana"
      },
      "text/vnd.radisys.msml-basic-layout": {
        source: "iana"
      },
      "text/vnd.si.uricatalogue": {
        source: "iana"
      },
      "text/vnd.sun.j2me.app-descriptor": {
        source: "iana",
        extensions: ["jad"]
      },
      "text/vnd.trolltech.linguist": {
        source: "iana"
      },
      "text/vnd.wap.si": {
        source: "iana"
      },
      "text/vnd.wap.sl": {
        source: "iana"
      },
      "text/vnd.wap.wml": {
        source: "iana",
        extensions: ["wml"]
      },
      "text/vnd.wap.wmlscript": {
        source: "iana",
        extensions: ["wmls"]
      },
      "text/vtt": {
        charset: "UTF-8",
        compressible: true,
        extensions: ["vtt"]
      },
      "text/x-asm": {
        source: "apache",
        extensions: ["s", "asm"]
      },
      "text/x-c": {
        source: "apache",
        extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
      },
      "text/x-component": {
        source: "nginx",
        extensions: ["htc"]
      },
      "text/x-fortran": {
        source: "apache",
        extensions: ["f", "for", "f77", "f90"]
      },
      "text/x-gwt-rpc": {
        compressible: true
      },
      "text/x-handlebars-template": {
        extensions: ["hbs"]
      },
      "text/x-java-source": {
        source: "apache",
        extensions: ["java"]
      },
      "text/x-jquery-tmpl": {
        compressible: true
      },
      "text/x-lua": {
        extensions: ["lua"]
      },
      "text/x-markdown": {
        compressible: true,
        extensions: ["markdown", "md", "mkd"]
      },
      "text/x-nfo": {
        source: "apache",
        extensions: ["nfo"]
      },
      "text/x-opml": {
        source: "apache",
        extensions: ["opml"]
      },
      "text/x-pascal": {
        source: "apache",
        extensions: ["p", "pas"]
      },
      "text/x-processing": {
        compressible: true,
        extensions: ["pde"]
      },
      "text/x-sass": {
        extensions: ["sass"]
      },
      "text/x-scss": {
        extensions: ["scss"]
      },
      "text/x-setext": {
        source: "apache",
        extensions: ["etx"]
      },
      "text/x-sfv": {
        source: "apache",
        extensions: ["sfv"]
      },
      "text/x-suse-ymp": {
        compressible: true,
        extensions: ["ymp"]
      },
      "text/x-uuencode": {
        source: "apache",
        extensions: ["uu"]
      },
      "text/x-vcalendar": {
        source: "apache",
        extensions: ["vcs"]
      },
      "text/x-vcard": {
        source: "apache",
        extensions: ["vcf"]
      },
      "text/xml": {
        source: "iana",
        compressible: true,
        extensions: ["xml"]
      },
      "text/xml-external-parsed-entity": {
        source: "iana"
      },
      "text/yaml": {
        extensions: ["yaml", "yml"]
      },
      "video/1d-interleaved-parityfec": {
        source: "apache"
      },
      "video/3gpp": {
        source: "apache",
        extensions: ["3gp", "3gpp"]
      },
      "video/3gpp-tt": {
        source: "apache"
      },
      "video/3gpp2": {
        source: "apache",
        extensions: ["3g2"]
      },
      "video/bmpeg": {
        source: "apache"
      },
      "video/bt656": {
        source: "apache"
      },
      "video/celb": {
        source: "apache"
      },
      "video/dv": {
        source: "apache"
      },
      "video/encaprtp": {
        source: "apache"
      },
      "video/h261": {
        source: "apache",
        extensions: ["h261"]
      },
      "video/h263": {
        source: "apache",
        extensions: ["h263"]
      },
      "video/h263-1998": {
        source: "apache"
      },
      "video/h263-2000": {
        source: "apache"
      },
      "video/h264": {
        source: "apache",
        extensions: ["h264"]
      },
      "video/h264-rcdo": {
        source: "apache"
      },
      "video/h264-svc": {
        source: "apache"
      },
      "video/h265": {
        source: "apache"
      },
      "video/iso.segment": {
        source: "apache"
      },
      "video/jpeg": {
        source: "apache",
        extensions: ["jpgv"]
      },
      "video/jpeg2000": {
        source: "apache"
      },
      "video/jpm": {
        source: "apache",
        extensions: ["jpm", "jpgm"]
      },
      "video/mj2": {
        source: "apache",
        extensions: ["mj2", "mjp2"]
      },
      "video/mp1s": {
        source: "apache"
      },
      "video/mp2p": {
        source: "apache"
      },
      "video/mp2t": {
        source: "apache",
        extensions: ["ts"]
      },
      "video/mp4": {
        source: "apache",
        compressible: false,
        extensions: ["mp4", "mp4v", "mpg4"]
      },
      "video/mp4v-es": {
        source: "apache"
      },
      "video/mpeg": {
        source: "apache",
        compressible: false,
        extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
      },
      "video/mpeg4-generic": {
        source: "apache"
      },
      "video/mpv": {
        source: "apache"
      },
      "video/nv": {
        source: "apache"
      },
      "video/ogg": {
        source: "apache",
        compressible: false,
        extensions: ["ogv"]
      },
      "video/parityfec": {
        source: "apache"
      },
      "video/pointer": {
        source: "apache"
      },
      "video/quicktime": {
        source: "apache",
        compressible: false,
        extensions: ["qt", "mov"]
      },
      "video/raptorfec": {
        source: "apache"
      },
      "video/raw": {
        source: "apache"
      },
      "video/rtp-enc-aescm128": {
        source: "apache"
      },
      "video/rtploopback": {
        source: "apache"
      },
      "video/rtx": {
        source: "apache"
      },
      "video/smpte292m": {
        source: "apache"
      },
      "video/ulpfec": {
        source: "apache"
      },
      "video/vc1": {
        source: "apache"
      },
      "video/vnd.cctv": {
        source: "apache"
      },
      "video/vnd.dece.hd": {
        source: "apache",
        extensions: ["uvh", "uvvh"]
      },
      "video/vnd.dece.mobile": {
        source: "apache",
        extensions: ["uvm", "uvvm"]
      },
      "video/vnd.dece.mp4": {
        source: "apache"
      },
      "video/vnd.dece.pd": {
        source: "apache",
        extensions: ["uvp", "uvvp"]
      },
      "video/vnd.dece.sd": {
        source: "apache",
        extensions: ["uvs", "uvvs"]
      },
      "video/vnd.dece.video": {
        source: "apache",
        extensions: ["uvv", "uvvv"]
      },
      "video/vnd.directv.mpeg": {
        source: "apache"
      },
      "video/vnd.directv.mpeg-tts": {
        source: "apache"
      },
      "video/vnd.dlna.mpeg-tts": {
        source: "apache"
      },
      "video/vnd.dvb.file": {
        source: "apache",
        extensions: ["dvb"]
      },
      "video/vnd.fvt": {
        source: "apache",
        extensions: ["fvt"]
      },
      "video/vnd.hns.video": {
        source: "apache"
      },
      "video/vnd.iptvforum.1dparityfec-1010": {
        source: "apache"
      },
      "video/vnd.iptvforum.1dparityfec-2005": {
        source: "apache"
      },
      "video/vnd.iptvforum.2dparityfec-1010": {
        source: "apache"
      },
      "video/vnd.iptvforum.2dparityfec-2005": {
        source: "apache"
      },
      "video/vnd.iptvforum.ttsavc": {
        source: "apache"
      },
      "video/vnd.iptvforum.ttsmpeg2": {
        source: "apache"
      },
      "video/vnd.motorola.video": {
        source: "apache"
      },
      "video/vnd.motorola.videop": {
        source: "apache"
      },
      "video/vnd.mpegurl": {
        source: "apache",
        extensions: ["mxu", "m4u"]
      },
      "video/vnd.ms-playready.media.pyv": {
        source: "apache",
        extensions: ["pyv"]
      },
      "video/vnd.nokia.interleaved-multimedia": {
        source: "apache"
      },
      "video/vnd.nokia.videovoip": {
        source: "apache"
      },
      "video/vnd.objectvideo": {
        source: "apache"
      },
      "video/vnd.radgamettools.bink": {
        source: "apache"
      },
      "video/vnd.radgamettools.smacker": {
        source: "apache"
      },
      "video/vnd.sealed.mpeg1": {
        source: "apache"
      },
      "video/vnd.sealed.mpeg4": {
        source: "apache"
      },
      "video/vnd.sealed.swf": {
        source: "apache"
      },
      "video/vnd.sealedmedia.softseal.mov": {
        source: "apache"
      },
      "video/vnd.uvvu.mp4": {
        source: "apache",
        extensions: ["uvu", "uvvu"]
      },
      "video/vnd.vivo": {
        source: "apache",
        extensions: ["viv"]
      },
      "video/vp8": {
        source: "apache"
      },
      "video/webm": {
        source: "apache",
        compressible: false,
        extensions: ["webm"]
      },
      "video/x-f4v": {
        source: "apache",
        extensions: ["f4v"]
      },
      "video/x-fli": {
        source: "apache",
        extensions: ["fli"]
      },
      "video/x-flv": {
        source: "apache",
        compressible: false,
        extensions: ["flv"]
      },
      "video/x-m4v": {
        source: "apache",
        extensions: ["m4v"]
      },
      "video/x-matroska": {
        source: "apache",
        compressible: false,
        extensions: ["mkv", "mk3d", "mks"]
      },
      "video/x-mng": {
        source: "apache",
        extensions: ["mng"]
      },
      "video/x-ms-asf": {
        source: "apache",
        extensions: ["asf", "asx"]
      },
      "video/x-ms-vob": {
        source: "apache",
        extensions: ["vob"]
      },
      "video/x-ms-wm": {
        source: "apache",
        extensions: ["wm"]
      },
      "video/x-ms-wmv": {
        source: "apache",
        compressible: false,
        extensions: ["wmv"]
      },
      "video/x-ms-wmx": {
        source: "apache",
        extensions: ["wmx"]
      },
      "video/x-ms-wvx": {
        source: "apache",
        extensions: ["wvx"]
      },
      "video/x-msvideo": {
        source: "apache",
        extensions: ["avi"]
      },
      "video/x-sgi-movie": {
        source: "apache",
        extensions: ["movie"]
      },
      "video/x-smv": {
        source: "apache",
        extensions: ["smv"]
      },
      "x-conference/x-cooltalk": {
        source: "apache",
        extensions: ["ice"]
      },
      "x-shader/x-fragment": {
        compressible: true
      },
      "x-shader/x-vertex": {
        compressible: true
      }
    };
  }
});

// node_modules/mime-db/index.js
var require_mime_db = __commonJS({
  "node_modules/mime-db/index.js"(exports, module2) {
    module2.exports = require_db();
  }
});

// node_modules/mime-types/index.js
var require_mime_types = __commonJS({
  "node_modules/mime-types/index.js"(exports) {
    "use strict";
    var db = require_mime_db();
    var extname = require("path").extname;
    var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/;
    var textTypeRegExp = /^text\//i;
    exports.charset = charset;
    exports.charsets = { lookup: charset };
    exports.contentType = contentType;
    exports.extension = extension;
    exports.extensions = /* @__PURE__ */ Object.create(null);
    exports.lookup = lookup2;
    exports.types = /* @__PURE__ */ Object.create(null);
    populateMaps(exports.extensions, exports.types);
    function charset(type) {
      if (!type || typeof type !== "string") {
        return false;
      }
      var match = extractTypeRegExp.exec(type);
      var mime3 = match && db[match[1].toLowerCase()];
      if (mime3 && mime3.charset) {
        return mime3.charset;
      }
      if (match && textTypeRegExp.test(match[1])) {
        return "UTF-8";
      }
      return false;
    }
    function contentType(str) {
      if (!str || typeof str !== "string") {
        return false;
      }
      var mime3 = str.indexOf("/") === -1 ? exports.lookup(str) : str;
      if (!mime3) {
        return false;
      }
      if (mime3.indexOf("charset") === -1) {
        var charset2 = exports.charset(mime3);
        if (charset2)
          mime3 += "; charset=" + charset2.toLowerCase();
      }
      return mime3;
    }
    function extension(type) {
      if (!type || typeof type !== "string") {
        return false;
      }
      var match = extractTypeRegExp.exec(type);
      var exts = match && exports.extensions[match[1].toLowerCase()];
      if (!exts || !exts.length) {
        return false;
      }
      return exts[0];
    }
    function lookup2(path) {
      if (!path || typeof path !== "string") {
        return false;
      }
      var extension2 = extname("x." + path).toLowerCase().substr(1);
      if (!extension2) {
        return false;
      }
      return exports.types[extension2] || false;
    }
    function populateMaps(extensions2, types) {
      var preference = ["nginx", "apache", void 0, "iana"];
      Object.keys(db).forEach(function forEachMimeType(type) {
        var mime3 = db[type];
        var exts = mime3.extensions;
        if (!exts || !exts.length) {
          return;
        }
        extensions2[type] = exts;
        for (var i = 0; i < exts.length; i++) {
          var extension2 = exts[i];
          if (types[extension2]) {
            var from = preference.indexOf(db[types[extension2]].source);
            var to = preference.indexOf(mime3.source);
            if (types[extension2] !== "application/octet-stream" && from > to || from === to && types[extension2].substr(0, 12) === "application/") {
              continue;
            }
          }
          types[extension2] = type;
        }
      });
    }
  }
});

// node_modules/xml/lib/escapeForXML.js
var require_escapeForXML = __commonJS({
  "node_modules/xml/lib/escapeForXML.js"(exports, module2) {
    var XML_CHARACTER_MAP = {
      "&": "&amp;",
      '"': "&quot;",
      "'": "&apos;",
      "<": "&lt;",
      ">": "&gt;"
    };
    function escapeForXML(string) {
      return string && string.replace ? string.replace(/([&"<>'])/g, function(str, item) {
        return XML_CHARACTER_MAP[item];
      }) : string;
    }
    module2.exports = escapeForXML;
  }
});

// node_modules/xml/lib/xml.js
var require_xml = __commonJS({
  "node_modules/xml/lib/xml.js"(exports, module2) {
    var escapeForXML = require_escapeForXML();
    var Stream = require("stream").Stream;
    var DEFAULT_INDENT = "    ";
    function xml(input, options) {
      if (typeof options !== "object") {
        options = {
          indent: options
        };
      }
      var stream = options.stream ? new Stream() : null, output = "", interrupted = false, indent = !options.indent ? "" : options.indent === true ? DEFAULT_INDENT : options.indent, instant = true;
      function delay(func) {
        if (!instant) {
          func();
        } else {
          process.nextTick(func);
        }
      }
      function append(interrupt, out) {
        if (out !== void 0) {
          output += out;
        }
        if (interrupt && !interrupted) {
          stream = stream || new Stream();
          interrupted = true;
        }
        if (interrupt && interrupted) {
          var data = output;
          delay(function() {
            stream.emit("data", data);
          });
          output = "";
        }
      }
      function add(value, last2) {
        format(append, resolve(value, indent, indent ? 1 : 0), last2);
      }
      function end() {
        if (stream) {
          var data = output;
          delay(function() {
            stream.emit("data", data);
            stream.emit("end");
            stream.readable = false;
            stream.emit("close");
          });
        }
      }
      function addXmlDeclaration(declaration) {
        var encoding = declaration.encoding || "UTF-8", attr = { version: "1.0", encoding };
        if (declaration.standalone) {
          attr.standalone = declaration.standalone;
        }
        add({ "?xml": { _attr: attr } });
        output = output.replace("/>", "?>");
      }
      delay(function() {
        instant = false;
      });
      if (options.declaration) {
        addXmlDeclaration(options.declaration);
      }
      if (input && input.forEach) {
        input.forEach(function(value, i) {
          var last2;
          if (i + 1 === input.length)
            last2 = end;
          add(value, last2);
        });
      } else {
        add(input, end);
      }
      if (stream) {
        stream.readable = true;
        return stream;
      }
      return output;
    }
    function element() {
      var input = Array.prototype.slice.call(arguments), self2 = {
        _elem: resolve(input)
      };
      self2.push = function(input2) {
        if (!this.append) {
          throw new Error("not assigned to a parent!");
        }
        var that = this;
        var indent = this._elem.indent;
        format(this.append, resolve(input2, indent, this._elem.icount + (indent ? 1 : 0)), function() {
          that.append(true);
        });
      };
      self2.close = function(input2) {
        if (input2 !== void 0) {
          this.push(input2);
        }
        if (this.end) {
          this.end();
        }
      };
      return self2;
    }
    function create_indent(character, count) {
      return new Array(count || 0).join(character || "");
    }
    function resolve(data, indent, indent_count) {
      indent_count = indent_count || 0;
      var indent_spaces = create_indent(indent, indent_count);
      var name;
      var values = data;
      var interrupt = false;
      if (typeof data === "object") {
        var keys = Object.keys(data);
        name = keys[0];
        values = data[name];
        if (values && values._elem) {
          values._elem.name = name;
          values._elem.icount = indent_count;
          values._elem.indent = indent;
          values._elem.indents = indent_spaces;
          values._elem.interrupt = values;
          return values._elem;
        }
      }
      var attributes = [], content = [];
      var isStringContent;
      function get_attributes(obj) {
        var keys2 = Object.keys(obj);
        keys2.forEach(function(key) {
          attributes.push(attribute(key, obj[key]));
        });
      }
      switch (typeof values) {
        case "object":
          if (values === null)
            break;
          if (values._attr) {
            get_attributes(values._attr);
          }
          if (values._cdata) {
            content.push(("<![CDATA[" + values._cdata).replace(/\]\]>/g, "]]]]><![CDATA[>") + "]]>");
          }
          if (values.forEach) {
            isStringContent = false;
            content.push("");
            values.forEach(function(value) {
              if (typeof value == "object") {
                var _name = Object.keys(value)[0];
                if (_name == "_attr") {
                  get_attributes(value._attr);
                } else {
                  content.push(resolve(value, indent, indent_count + 1));
                }
              } else {
                content.pop();
                isStringContent = true;
                content.push(escapeForXML(value));
              }
            });
            if (!isStringContent) {
              content.push("");
            }
          }
          break;
        default:
          content.push(escapeForXML(values));
      }
      return {
        name,
        interrupt,
        attributes,
        content,
        icount: indent_count,
        indents: indent_spaces,
        indent
      };
    }
    function format(append, elem, end) {
      if (typeof elem != "object") {
        return append(false, elem);
      }
      var len = elem.interrupt ? 1 : elem.content.length;
      function proceed() {
        while (elem.content.length) {
          var value = elem.content.shift();
          if (value === void 0)
            continue;
          if (interrupt(value))
            return;
          format(append, value);
        }
        append(false, (len > 1 ? elem.indents : "") + (elem.name ? "</" + elem.name + ">" : "") + (elem.indent && !end ? "\n" : ""));
        if (end) {
          end();
        }
      }
      function interrupt(value) {
        if (value.interrupt) {
          value.interrupt.append = append;
          value.interrupt.end = proceed;
          value.interrupt = false;
          append(true);
          return true;
        }
        return false;
      }
      append(false, elem.indents + (elem.name ? "<" + elem.name : "") + (elem.attributes.length ? " " + elem.attributes.join(" ") : "") + (len ? elem.name ? ">" : "" : elem.name ? "/>" : "") + (elem.indent && len > 1 ? "\n" : ""));
      if (!len) {
        return append(false, elem.indent ? "\n" : "");
      }
      if (!interrupt(elem)) {
        proceed();
      }
    }
    function attribute(key, value) {
      return key + '="' + escapeForXML(value) + '"';
    }
    module2.exports = xml;
    module2.exports.element = module2.exports.Element = element;
  }
});

// node_modules/rss/lib/index.js
var require_lib5 = __commonJS({
  "node_modules/rss/lib/index.js"(exports, module2) {
    "use strict";
    var mime3 = require_mime_types();
    var xml = require_xml();
    var fs2 = require("fs");
    function ifTruePush(bool, array, data) {
      if (bool) {
        array.push(data);
      }
    }
    function ifTruePushArray(bool, array, dataArray) {
      if (!bool) {
        return;
      }
      dataArray.forEach(function(item) {
        ifTruePush(item, array, item);
      });
    }
    function getSize(filename) {
      if (typeof fs2 === "undefined") {
        return 0;
      }
      return fs2.statSync(filename).size;
    }
    function generateXML(data) {
      var channel = [];
      channel.push({ title: { _cdata: data.title } });
      channel.push({ description: { _cdata: data.description || data.title } });
      channel.push({ link: data.site_url || "http://github.com/dylang/node-rss" });
      if (data.image_url) {
        channel.push({ image: [{ url: data.image_url }, { title: data.title }, { link: data.site_url }] });
      }
      channel.push({ generator: data.generator });
      channel.push({ lastBuildDate: new Date().toUTCString() });
      ifTruePush(data.feed_url, channel, { "atom:link": { _attr: { href: data.feed_url, rel: "self", type: "application/rss+xml" } } });
      ifTruePush(data.author, channel, { "author": { _cdata: data.author } });
      ifTruePush(data.pubDate, channel, { "pubDate": new Date(data.pubDate).toGMTString() });
      ifTruePush(data.copyright, channel, { "copyright": { _cdata: data.copyright } });
      ifTruePush(data.language, channel, { "language": { _cdata: data.language } });
      ifTruePush(data.managingEditor, channel, { "managingEditor": { _cdata: data.managingEditor } });
      ifTruePush(data.webMaster, channel, { "webMaster": { _cdata: data.webMaster } });
      ifTruePush(data.docs, channel, { "docs": data.docs });
      ifTruePush(data.ttl, channel, { "ttl": data.ttl });
      ifTruePush(data.hub, channel, { "atom:link": { _attr: { href: data.hub, rel: "hub" } } });
      if (data.categories) {
        data.categories.forEach(function(category) {
          ifTruePush(category, channel, { category: { _cdata: category } });
        });
      }
      ifTruePushArray(data.custom_elements, channel, data.custom_elements);
      data.items.forEach(function(item) {
        var item_values = [
          { title: { _cdata: item.title } }
        ];
        ifTruePush(item.description, item_values, { description: { _cdata: item.description } });
        ifTruePush(item.url, item_values, { link: item.url });
        ifTruePush(item.link || item.guid || item.title, item_values, { guid: [{ _attr: { isPermaLink: !item.guid && !!item.url } }, item.guid || item.url || item.title] });
        item.categories.forEach(function(category) {
          ifTruePush(category, item_values, { category: { _cdata: category } });
        });
        ifTruePush(item.author || data.author, item_values, { "dc:creator": { _cdata: item.author || data.author } });
        ifTruePush(item.date, item_values, { pubDate: new Date(item.date).toGMTString() });
        data.geoRSS = data.geoRSS || item.lat && item.long;
        ifTruePush(item.lat, item_values, { "geo:lat": item.lat });
        ifTruePush(item.long, item_values, { "geo:long": item.long });
        if (item.enclosure && item.enclosure.url) {
          if (item.enclosure.file) {
            item_values.push({
              enclosure: {
                _attr: {
                  url: item.enclosure.url,
                  length: item.enclosure.size || getSize(item.enclosure.file),
                  type: item.enclosure.type || mime3.lookup(item.enclosure.file)
                }
              }
            });
          } else {
            item_values.push({
              enclosure: {
                _attr: {
                  url: item.enclosure.url,
                  length: item.enclosure.size || 0,
                  type: item.enclosure.type || mime3.lookup(item.enclosure.url)
                }
              }
            });
          }
        }
        ifTruePushArray(item.custom_elements, item_values, item.custom_elements);
        channel.push({ item: item_values });
      });
      var _attr = {
        "xmlns:dc": "http://purl.org/dc/elements/1.1/",
        "xmlns:content": "http://purl.org/rss/1.0/modules/content/",
        "xmlns:atom": "http://www.w3.org/2005/Atom",
        version: "2.0"
      };
      Object.keys(data.custom_namespaces).forEach(function(name) {
        _attr["xmlns:" + name] = data.custom_namespaces[name];
      });
      if (data.geoRSS) {
        _attr["xmlns:geo"] = "http://www.w3.org/2003/01/geo/wgs84_pos#";
      }
      return {
        rss: [
          { _attr },
          { channel }
        ]
      };
    }
    function RSS2(options, items) {
      options = options || {};
      this.title = options.title || "Untitled RSS Feed";
      this.description = options.description || "";
      this.generator = options.generator || "RSS for Node";
      this.feed_url = options.feed_url;
      this.site_url = options.site_url;
      this.image_url = options.image_url;
      this.author = options.author;
      this.categories = options.categories;
      this.pubDate = options.pubDate;
      this.hub = options.hub;
      this.docs = options.docs;
      this.copyright = options.copyright;
      this.language = options.language;
      this.managingEditor = options.managingEditor;
      this.webMaster = options.webMaster;
      this.ttl = options.ttl;
      this.geoRSS = options.geoRSS || false;
      this.custom_namespaces = options.custom_namespaces || {};
      this.custom_elements = options.custom_elements || [];
      this.items = items || [];
      this.item = function(options2) {
        options2 = options2 || {};
        var item = {
          title: options2.title || "No title",
          description: options2.description || "",
          url: options2.url,
          guid: options2.guid,
          categories: options2.categories || [],
          author: options2.author,
          date: options2.date,
          lat: options2.lat,
          long: options2.long,
          enclosure: options2.enclosure || false,
          custom_elements: options2.custom_elements || []
        };
        this.items.push(item);
        return this;
      };
      this.xml = function(indent) {
        return '<?xml version="1.0" encoding="UTF-8"?>' + xml(generateXML(this), indent);
      };
    }
    module2.exports = RSS2;
  }
});

// src/plugin/main.ts
var main_exports = {};
__export(main_exports, {
  default: () => HTMLExportPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian12 = require("obsidian");

// src/frontend/graph-view/graph-wasm.txt.js
var graph_wasm_txt_default = 'var Module = typeof Module != "undefined" ? Module : {};\nvar ENVIRONMENT_IS_WEB = typeof window == "object";\nvar ENVIRONMENT_IS_WORKER = typeof importScripts == "function";\nvar ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string";\nif (ENVIRONMENT_IS_NODE) {}\nvar moduleOverrides = Object.assign({}, Module);\nvar arguments_ = [];\nvar thisProgram = "./this.program";\nvar quit_ = (status, toThrow) => {\n    throw toThrow\n};\nvar scriptDirectory = "";\n\nfunction locateFile(path) {\n    if (Module["locateFile"]) {\n        return Module["locateFile"](path, scriptDirectory)\n    }\n    return scriptDirectory + path\n}\nvar read_, readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n    var fs = require("fs");\n    var nodePath = require("path");\n    if (ENVIRONMENT_IS_WORKER) {\n        scriptDirectory = nodePath.dirname(scriptDirectory) + "/"\n    } else {\n        scriptDirectory = __dirname + "/"\n    }\n    read_ = (filename, binary) => {\n        filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);\n        return fs.readFileSync(filename, binary ? undefined : "utf8")\n    };\n    readBinary = filename => {\n        var ret = read_(filename, true);\n        if (!ret.buffer) {\n            ret = new Uint8Array(ret)\n        }\n        return ret\n    };\n    readAsync = (filename, onload, onerror, binary = true) => {\n        filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);\n        fs.readFile(filename, binary ? undefined : "utf8", (err, data) => {\n            if (err) onerror(err);\n            else onload(binary ? data.buffer : data)\n        })\n    };\n    if (!Module["thisProgram"] && process.argv.length > 1) {\n        thisProgram = process.argv[1].replace(/\\\\/g, "/")\n    }\n    arguments_ = process.argv.slice(2);\n    if (typeof module != "undefined") {\n        module["exports"] = Module\n    }\n    process.on("uncaughtException", ex => {\n        if (ex !== "unwind" && !(ex instanceof ExitStatus) && !(ex.context instanceof ExitStatus)) {\n            throw ex\n        }\n    });\n    quit_ = (status, toThrow) => {\n        process.exitCode = status;\n        throw toThrow\n    }\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n    if (ENVIRONMENT_IS_WORKER) {\n        scriptDirectory = self.location.href\n    } else if (typeof document != "undefined" && document.currentScript) {\n        scriptDirectory = document.currentScript.src\n    }\n    if (scriptDirectory.startsWith("blob:")) {\n        scriptDirectory = ""\n    } else {\n        scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1)\n    } {\n        read_ = url => {\n            var xhr = new XMLHttpRequest;\n            xhr.open("GET", url, false);\n            xhr.send(null);\n            return xhr.responseText\n        };\n        if (ENVIRONMENT_IS_WORKER) {\n            readBinary = url => {\n                var xhr = new XMLHttpRequest;\n                xhr.open("GET", url, false);\n                xhr.responseType = "arraybuffer";\n                xhr.send(null);\n                return new Uint8Array(xhr.response)\n            }\n        }\n        readAsync = (url, onload, onerror) => {\n            var xhr = new XMLHttpRequest;\n            xhr.open("GET", url, true);\n            xhr.responseType = "arraybuffer";\n            xhr.onload = () => {\n                if (xhr.status == 200 || xhr.status == 0 && xhr.response) {\n                    onload(xhr.response);\n                    return\n                }\n                onerror()\n            };\n            xhr.onerror = onerror;\n            xhr.send(null)\n        }\n    }\n} else {}\nvar out = Module["print"] || console.log.bind(console);\nvar err = Module["printErr"] || console.error.bind(console);\nObject.assign(Module, moduleOverrides);\nmoduleOverrides = null;\nif (Module["arguments"]) arguments_ = Module["arguments"];\nif (Module["thisProgram"]) thisProgram = Module["thisProgram"];\nif (Module["quit"]) quit_ = Module["quit"];\nvar wasmBinary;\nif (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];\nvar wasmMemory;\nvar ABORT = false;\nvar EXITSTATUS;\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n\nfunction updateMemoryViews() {\n    var b = wasmMemory.buffer;\n    Module["HEAP8"] = HEAP8 = new Int8Array(b);\n    Module["HEAP16"] = HEAP16 = new Int16Array(b);\n    Module["HEAPU8"] = HEAPU8 = new Uint8Array(b);\n    Module["HEAPU16"] = HEAPU16 = new Uint16Array(b);\n    Module["HEAP32"] = HEAP32 = new Int32Array(b);\n    Module["HEAPU32"] = HEAPU32 = new Uint32Array(b);\n    Module["HEAPF32"] = HEAPF32 = new Float32Array(b);\n    Module["HEAPF64"] = HEAPF64 = new Float64Array(b)\n}\nvar __ATPRERUN__ = [];\nvar __ATINIT__ = [];\nvar __ATPOSTRUN__ = [];\nvar runtimeInitialized = false;\n\nfunction preRun() {\n    if (Module["preRun"]) {\n        if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];\n        while (Module["preRun"].length) {\n            addOnPreRun(Module["preRun"].shift())\n        }\n    }\n    callRuntimeCallbacks(__ATPRERUN__)\n}\n\nfunction initRuntime() {\n    runtimeInitialized = true;\n    callRuntimeCallbacks(__ATINIT__)\n}\n\nfunction postRun() {\n    if (Module["postRun"]) {\n        if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];\n        while (Module["postRun"].length) {\n            addOnPostRun(Module["postRun"].shift())\n        }\n    }\n    callRuntimeCallbacks(__ATPOSTRUN__)\n}\n\nfunction addOnPreRun(cb) {\n    __ATPRERUN__.unshift(cb)\n}\n\nfunction addOnInit(cb) {\n    __ATINIT__.unshift(cb)\n}\n\nfunction addOnPostRun(cb) {\n    __ATPOSTRUN__.unshift(cb)\n}\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null;\n\nfunction addRunDependency(id) {\n    runDependencies++;\n    Module["monitorRunDependencies"]?.(runDependencies)\n}\n\nfunction removeRunDependency(id) {\n    runDependencies--;\n    Module["monitorRunDependencies"]?.(runDependencies);\n    if (runDependencies == 0) {\n        if (runDependencyWatcher !== null) {\n            clearInterval(runDependencyWatcher);\n            runDependencyWatcher = null\n        }\n        if (dependenciesFulfilled) {\n            var callback = dependenciesFulfilled;\n            dependenciesFulfilled = null;\n            callback()\n        }\n    }\n}\n\nfunction abort(what) {\n    Module["onAbort"]?.(what);\n    what = "Aborted(" + what + ")";\n    err(what);\n    ABORT = true;\n    EXITSTATUS = 1;\n    what += ". Build with -sASSERTIONS for more info.";\n    var e = new WebAssembly.RuntimeError(what);\n    throw e\n}\nvar dataURIPrefix = "data:application/octet-stream;base64,";\nvar isDataURI = filename => filename.startsWith(dataURIPrefix);\nvar isFileURI = filename => filename.startsWith("file://");\nvar wasmBinaryFile;\nwasmBinaryFile = "graph-wasm.wasm";\nif (!isDataURI(wasmBinaryFile)) {\n    wasmBinaryFile = locateFile(wasmBinaryFile)\n}\n\nfunction getBinarySync(file) {\n    if (file == wasmBinaryFile && wasmBinary) {\n        return new Uint8Array(wasmBinary)\n    }\n    if (readBinary) {\n        return readBinary(file)\n    }\n    throw "both async and sync fetching of the wasm failed"\n}\n\nfunction getBinaryPromise(binaryFile) \n{\n	if (window.location.protocol === \'file:\')\n	{\n		return new Promise((resolve, reject) =>\n		{\n			let id = btoa(encodeURI(`site-lib/scripts/${binaryFile}`));\n			window.addEventListener(\'DOMContentLoaded\', () => \n			{\n				const dataEl = document.getElementById(id);\n				if (dataEl)\n				{\n					const data = Uint8Array.from(Array.from(atob(JSON.parse(decodeURI(atob(dataEl.value))).data)).map(s => s.charCodeAt(0)));\n					resolve(data);\n				}\n			});\n		});\n	}\n\n    if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {\n        if (typeof fetch == "function" && !isFileURI(binaryFile)) {\n            return fetch(binaryFile, {\n                credentials: "same-origin"\n            }).then(response => {\n                if (!response["ok"]) {\n                    throw `failed to load wasm binary file at \'${binaryFile}\'`\n                }\n                return response["arrayBuffer"]()\n            }).catch(() => getBinarySync(binaryFile))\n        } else if (readAsync) {\n            return new Promise((resolve, reject) => {\n                readAsync(binaryFile, response => resolve(new Uint8Array(response)), reject)\n            })\n        }\n    }\n    return Promise.resolve().then(() => getBinarySync(binaryFile))\n}\n\nfunction instantiateArrayBuffer(binaryFile, imports, receiver) \n{\n	return getBinaryPromise(binaryFile).then(binary => \n		{\n			console.log("loaded wasm from", binary);\n			return WebAssembly.instantiate(binary, imports)\n		}).then(receiver, reason => {\n		err(`failed to asynchronously prepare wasm: ${reason}`);\n		abort(reason)\n	})\n}\n\nfunction instantiateAsync(binary, binaryFile, imports, callback) {\n    // if (!binary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(binaryFile) && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") {\n    //     return fetch(binaryFile, {\n    //         credentials: "same-origin"\n    //     }).then(response => {\n	// 		response.headers.set(\'Content-Type\', \'application/wasm\');\n    //         var result = WebAssembly.instantiateStreaming(response, imports);\n    //         return result.then(callback, function(reason) {\n    //             err(`wasm streaming compile failed: ${reason}`);\n    //             err("falling back to ArrayBuffer instantiation");\n    //             return instantiateArrayBuffer(binaryFile, imports, callback)\n    //         })\n    //     })\n    // }\n    return instantiateArrayBuffer(binaryFile, imports, callback)\n}\n\nfunction getWasmImports() {\n    return {\n        "a": wasmImports\n    }\n}\n\nfunction createWasm() {\n    var info = getWasmImports();\n\n    function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n        wasmMemory = wasmExports["f"];\n        updateMemoryViews();\n        addOnInit(wasmExports["g"]);\n        removeRunDependency("wasm-instantiate");\n        return wasmExports\n    }\n    addRunDependency("wasm-instantiate");\n\n    function receiveInstantiationResult(result) {\n        receiveInstance(result["instance"])\n    }\n    if (Module["instantiateWasm"]) {\n        try {\n            return Module["instantiateWasm"](info, receiveInstance)\n        } catch (e) {\n            err(`Module.instantiateWasm callback failed with error: ${e}`);\n            return false\n        }\n    }\n    instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult);\n    return {}\n}\nvar ASM_CONSTS = {\n    2408: $0 => {\n        console.log(UTF8ToString($0))\n    }\n};\n\nfunction ExitStatus(status) {\n    this.name = "ExitStatus";\n    this.message = `Program terminated with exit(${status})`;\n    this.status = status\n}\nvar callRuntimeCallbacks = callbacks => {\n    while (callbacks.length > 0) {\n        callbacks.shift()(Module)\n    }\n};\n\nfunction getValue(ptr, type = "i8") {\n    if (type.endsWith("*")) type = "*";\n    switch (type) {\n        case "i1":\n            return HEAP8[ptr];\n        case "i8":\n            return HEAP8[ptr];\n        case "i16":\n            return HEAP16[ptr >> 1];\n        case "i32":\n            return HEAP32[ptr >> 2];\n        case "i64":\n            abort("to do getValue(i64) use WASM_BIGINT");\n        case "float":\n            return HEAPF32[ptr >> 2];\n        case "double":\n            return HEAPF64[ptr >> 3];\n        case "*":\n            return HEAPU32[ptr >> 2];\n        default:\n            abort(`invalid type for getValue: ${type}`)\n    }\n}\nvar noExitRuntime = Module["noExitRuntime"] || true;\n\nfunction setValue(ptr, value, type = "i8") {\n    if (type.endsWith("*")) type = "*";\n    switch (type) {\n        case "i1":\n            HEAP8[ptr] = value;\n            break;\n        case "i8":\n            HEAP8[ptr] = value;\n            break;\n        case "i16":\n            HEAP16[ptr >> 1] = value;\n            break;\n        case "i32":\n            HEAP32[ptr >> 2] = value;\n            break;\n        case "i64":\n            abort("to do setValue(i64) use WASM_BIGINT");\n        case "float":\n            HEAPF32[ptr >> 2] = value;\n            break;\n        case "double":\n            HEAPF64[ptr >> 3] = value;\n            break;\n        case "*":\n            HEAPU32[ptr >> 2] = value;\n            break;\n        default:\n            abort(`invalid type for setValue: ${type}`)\n    }\n}\nvar stackRestore = val => __emscripten_stack_restore(val);\nvar stackSave = () => _emscripten_stack_get_current();\nvar __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);\nvar _abort = () => {\n    abort("")\n};\nvar readEmAsmArgsArray = [];\nvar readEmAsmArgs = (sigPtr, buf) => {\n    readEmAsmArgsArray.length = 0;\n    var ch;\n    while (ch = HEAPU8[sigPtr++]) {\n        var wide = ch != 105;\n        wide &= ch != 112;\n        buf += wide && buf % 8 ? 4 : 0;\n        readEmAsmArgsArray.push(ch == 112 ? HEAPU32[buf >> 2] : ch == 105 ? HEAP32[buf >> 2] : HEAPF64[buf >> 3]);\n        buf += wide ? 8 : 4\n    }\n    return readEmAsmArgsArray\n};\nvar runEmAsmFunction = (code, sigPtr, argbuf) => {\n    var args = readEmAsmArgs(sigPtr, argbuf);\n    return ASM_CONSTS[code](...args)\n};\nvar _emscripten_asm_const_int = (code, sigPtr, argbuf) => runEmAsmFunction(code, sigPtr, argbuf);\nvar _emscripten_date_now = () => Date.now();\nvar getHeapMax = () => 2147483648;\nvar growMemory = size => {\n    var b = wasmMemory.buffer;\n    var pages = (size - b.byteLength + 65535) / 65536;\n    try {\n        wasmMemory.grow(pages);\n        updateMemoryViews();\n        return 1\n    } catch (e) {}\n};\nvar _emscripten_resize_heap = requestedSize => {\n    var oldSize = HEAPU8.length;\n    requestedSize >>>= 0;\n    var maxHeapSize = getHeapMax();\n    if (requestedSize > maxHeapSize) {\n        return false\n    }\n    var alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\n    for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + .2 / cutDown);\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n        var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n        var replacement = growMemory(newSize);\n        if (replacement) {\n            return true\n        }\n    }\n    return false\n};\nvar getCFunc = ident => {\n    var func = Module["_" + ident];\n    return func\n};\nvar writeArrayToMemory = (array, buffer) => {\n    HEAP8.set(array, buffer)\n};\nvar lengthBytesUTF8 = str => {\n    var len = 0;\n    for (var i = 0; i < str.length; ++i) {\n        var c = str.charCodeAt(i);\n        if (c <= 127) {\n            len++\n        } else if (c <= 2047) {\n            len += 2\n        } else if (c >= 55296 && c <= 57343) {\n            len += 4;\n            ++i\n        } else {\n            len += 3\n        }\n    }\n    return len\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n    if (!(maxBytesToWrite > 0)) return 0;\n    var startIdx = outIdx;\n    var endIdx = outIdx + maxBytesToWrite - 1;\n    for (var i = 0; i < str.length; ++i) {\n        var u = str.charCodeAt(i);\n        if (u >= 55296 && u <= 57343) {\n            var u1 = str.charCodeAt(++i);\n            u = 65536 + ((u & 1023) << 10) | u1 & 1023\n        }\n        if (u <= 127) {\n            if (outIdx >= endIdx) break;\n            heap[outIdx++] = u\n        } else if (u <= 2047) {\n            if (outIdx + 1 >= endIdx) break;\n            heap[outIdx++] = 192 | u >> 6;\n            heap[outIdx++] = 128 | u & 63\n        } else if (u <= 65535) {\n            if (outIdx + 2 >= endIdx) break;\n            heap[outIdx++] = 224 | u >> 12;\n            heap[outIdx++] = 128 | u >> 6 & 63;\n            heap[outIdx++] = 128 | u & 63\n        } else {\n            if (outIdx + 3 >= endIdx) break;\n            heap[outIdx++] = 240 | u >> 18;\n            heap[outIdx++] = 128 | u >> 12 & 63;\n            heap[outIdx++] = 128 | u >> 6 & 63;\n            heap[outIdx++] = 128 | u & 63\n        }\n    }\n    heap[outIdx] = 0;\n    return outIdx - startIdx\n};\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\nvar stackAlloc = sz => __emscripten_stack_alloc(sz);\nvar stringToUTF8OnStack = str => {\n    var size = lengthBytesUTF8(str) + 1;\n    var ret = stackAlloc(size);\n    stringToUTF8(str, ret, size);\n    return ret\n};\nvar UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined;\nvar UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {\n    var endIdx = idx + maxBytesToRead;\n    var endPtr = idx;\n    while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n    if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n        return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr))\n    }\n    var str = "";\n    while (idx < endPtr) {\n        var u0 = heapOrArray[idx++];\n        if (!(u0 & 128)) {\n            str += String.fromCharCode(u0);\n            continue\n        }\n        var u1 = heapOrArray[idx++] & 63;\n        if ((u0 & 224) == 192) {\n            str += String.fromCharCode((u0 & 31) << 6 | u1);\n            continue\n        }\n        var u2 = heapOrArray[idx++] & 63;\n        if ((u0 & 240) == 224) {\n            u0 = (u0 & 15) << 12 | u1 << 6 | u2\n        } else {\n            u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63\n        }\n        if (u0 < 65536) {\n            str += String.fromCharCode(u0)\n        } else {\n            var ch = u0 - 65536;\n            str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)\n        }\n    }\n    return str\n};\nvar UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n    var toC = {\n        "string": str => {\n            var ret = 0;\n            if (str !== null && str !== undefined && str !== 0) {\n                ret = stringToUTF8OnStack(str)\n            }\n            return ret\n        },\n        "array": arr => {\n            var ret = stackAlloc(arr.length);\n            writeArrayToMemory(arr, ret);\n            return ret\n        }\n    };\n\n    function convertReturnValue(ret) {\n        if (returnType === "string") {\n            return UTF8ToString(ret)\n        }\n        if (returnType === "boolean") return Boolean(ret);\n        return ret\n    }\n    var func = getCFunc(ident);\n    var cArgs = [];\n    var stack = 0;\n    if (args) {\n        for (var i = 0; i < args.length; i++) {\n            var converter = toC[argTypes[i]];\n            if (converter) {\n                if (stack === 0) stack = stackSave();\n                cArgs[i] = converter(args[i])\n            } else {\n                cArgs[i] = args[i]\n            }\n        }\n    }\n    var ret = func(...cArgs);\n\n    function onDone(ret) {\n        if (stack !== 0) stackRestore(stack);\n        return convertReturnValue(ret)\n    }\n    ret = onDone(ret);\n    return ret\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n    var numericArgs = !argTypes || argTypes.every(type => type === "number" || type === "boolean");\n    var numericRet = returnType !== "string";\n    if (numericRet && numericArgs && !opts) {\n        return getCFunc(ident)\n    }\n    return (...args) => ccall(ident, returnType, argTypes, args, opts)\n};\nvar wasmImports = {\n    c: __emscripten_memcpy_js,\n    a: _abort,\n    e: _emscripten_asm_const_int,\n    d: _emscripten_date_now,\n    b: _emscripten_resize_heap\n};\nvar wasmExports = createWasm();\nvar ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports["g"])();\nvar _SetBatchFractionSize = Module["_SetBatchFractionSize"] = a0 => (_SetBatchFractionSize = Module["_SetBatchFractionSize"] = wasmExports["h"])(a0);\nvar _SetAttractionForce = Module["_SetAttractionForce"] = a0 => (_SetAttractionForce = Module["_SetAttractionForce"] = wasmExports["i"])(a0);\nvar _SetLinkLength = Module["_SetLinkLength"] = a0 => (_SetLinkLength = Module["_SetLinkLength"] = wasmExports["j"])(a0);\nvar _SetRepulsionForce = Module["_SetRepulsionForce"] = a0 => (_SetRepulsionForce = Module["_SetRepulsionForce"] = wasmExports["k"])(a0);\nvar _SetCentralForce = Module["_SetCentralForce"] = a0 => (_SetCentralForce = Module["_SetCentralForce"] = wasmExports["l"])(a0);\nvar _SetDt = Module["_SetDt"] = a0 => (_SetDt = Module["_SetDt"] = wasmExports["m"])(a0);\nvar _Init = Module["_Init"] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) => (_Init = Module["_Init"] = wasmExports["n"])(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\nvar _Update = Module["_Update"] = (a0, a1, a2, a3) => (_Update = Module["_Update"] = wasmExports["o"])(a0, a1, a2, a3);\nvar _SetPosition = Module["_SetPosition"] = (a0, a1, a2) => (_SetPosition = Module["_SetPosition"] = wasmExports["p"])(a0, a1, a2);\nvar _SetSettleness = Module["_SetSettleness"] = a0 => (_SetSettleness = Module["_SetSettleness"] = wasmExports["q"])(a0);\nvar _FreeMemory = Module["_FreeMemory"] = () => (_FreeMemory = Module["_FreeMemory"] = wasmExports["r"])();\nvar _malloc = Module["_malloc"] = a0 => (_malloc = Module["_malloc"] = wasmExports["t"])(a0);\nvar _free = Module["_free"] = a0 => (_free = Module["_free"] = wasmExports["u"])(a0);\nvar __emscripten_stack_restore = a0 => (__emscripten_stack_restore = wasmExports["v"])(a0);\nvar __emscripten_stack_alloc = a0 => (__emscripten_stack_alloc = wasmExports["w"])(a0);\nvar _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports["x"])();\nvar ___cxa_increment_exception_refcount = a0 => (___cxa_increment_exception_refcount = wasmExports["__cxa_increment_exception_refcount"])(a0);\nvar ___cxa_is_pointer_type = a0 => (___cxa_is_pointer_type = wasmExports["__cxa_is_pointer_type"])(a0);\nModule["cwrap"] = cwrap;\nModule["setValue"] = setValue;\nModule["getValue"] = getValue;\nvar calledRun;\ndependenciesFulfilled = function runCaller() {\n    // if (!calledRun) run();\n    // if (!calledRun) dependenciesFulfilled = runCaller\n};\n\nfunction run() \n{\n    if (runDependencies > 0) {\n        return\n    }\n    preRun();\n    if (runDependencies > 0) {\n        return\n    }\n\n    function doRun() {\n        if (calledRun) return;\n        calledRun = true;\n        Module["calledRun"] = true;\n        if (ABORT) return;\n        initRuntime();\n		console.log("wasm loaded");\n        if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"]();\n		console.log("wasm initialized");\n        postRun()\n    }\n    if (Module["setStatus"]) {\n        Module["setStatus"]("Running...");\n        setTimeout(function() {\n            setTimeout(function() {\n                Module["setStatus"]("")\n            }, 1);\n            doRun()\n        }, 1)\n    } else {\n        doRun()\n    }\n}\nif (Module["preInit"]) {\n    if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];\n    while (Module["preInit"].length > 0) {\n        Module["preInit"].pop()()\n    }\n}\n';

// src/frontend/graph-view/graph-render-worker.txt.js
var graph_render_worker_txt_default = `if ('function' === typeof importScripts) {
	importScripts('https://d157l7jdn8e5sf.cloudfront.net/v7.2.0/webworker.js');

	addEventListener('message', onMessage);

	self.WebGLRenderingContext = self.WebGL2RenderingContext || self.WebGLRenderingContext;

	let app = null;
	let container = null;
	let graphics = null;

	isDrawing = false;

	let linkCount = 0;
	let linkSources = [];
	let linkTargets = [];
	let nodeCount = 0;
	let radii = [];
	let labels = [];
	let labelFade = [];
	let labelWidths = [];
	let pixiLabels = [];
	let cameraOffset = { x: 0, y: 0 };
	let positions = new Float32Array(0);
	let linkLength = 0;
	let edgePruning = 0;
	let colors =
	{
		background: 0x232323,
		link: 0xAAAAAA,
		node: 0xCCCCCC,
		outline: 0xAAAAAA,
		text: 0xFFFFFF,
		accent: 0x4023AA
	}

	let hoveredNode = -1;
	let lastHoveredNode = -1;
	let grabbedNode = -1;
	let updateAttached = false;
	let attachedToGrabbed = [];
	let activeNode = -1;
	let attachedToActive = [];

	let cameraScale = 1;
	let cameraScaleRoot = 1;

	function toScreenSpace(x, y, floor = true) {
		if (floor) {
			return { x: Math.floor((x * cameraScale) + cameraOffset.x), y: Math.floor((y * cameraScale) + cameraOffset.y) };
		}
		else {
			return { x: (x * cameraScale) + cameraOffset.x, y: (y * cameraScale) + cameraOffset.y };
		}
	}

	function vecToScreenSpace({ x, y }, floor = true) {
		return toScreenSpace(x, y, floor);
	}

	function toWorldspace(x, y) {
		return { x: (x - cameraOffset.x) / cameraScale, y: (y - cameraOffset.y) / cameraScale };
	}

	function vecToWorldspace({ x, y }) {
		return toWorldspace(x, y);
	}

	function setCameraCenterWorldspace({ x, y }) {
		cameraOffset.x = (canvas.width / 2) - (x * cameraScale);
		cameraOffset.y = (canvas.height / 2) - (y * cameraScale);
	}

	function getCameraCenterWorldspace() {
		return toWorldspace(canvas.width / 2, canvas.height / 2);
	}

	function getNodeScreenRadius(radius) {
		return radius * cameraScaleRoot;
	}

	function getNodeWorldspaceRadius(radius) {
		return radius / cameraScaleRoot;
	}

	function getPosition(index) {
		return { x: positions[index * 2], y: positions[index * 2 + 1] };
	}
	
	function parseHex(hex) 
	{
		if (typeof hex === 'number') {
			return hex;
		} else if (typeof hex === 'string') {
			// Remove '#' if present
			hex = hex.replace(/^#/, '');
			// Parse the string as a hexadecimal number
			return parseInt(hex, 16);
		} else {
			throw new Error('Invalid hex color. Must be a string or number.');
		}
	}
	
	function hexToRgb(hex) 
	{
		const parsed = parseHex(hex);
		return {
			r: (parsed >> 16) & 255,
			g: (parsed >> 8) & 255,
			b: parsed & 255
		};
	}
	
	function rgbToHex(r, g, b) {
		return (clamp(r, 0, 255) << 16) | (clamp(g, 0, 255) << 8) | clamp(b, 0, 255);
	}
	
	function mixColors(hexStart, hexEnd, factor) {
		const start = hexToRgb(hexStart);
		const end = hexToRgb(hexEnd);
		const safeFactor = clamp(factor, 0, 1);
		return rgbToHex(
			Math.round(start.r + (end.r - start.r) * safeFactor),
			Math.round(start.g + (end.g - start.g) * safeFactor),
			Math.round(start.b + (end.b - start.b) * safeFactor)
		);
	}
	
	function toHexString(hexNumber) {
		return '#' + hexNumber.toString(16).padStart(6, '0');
	}

	
	

	function invertColor(hex, bw) {
		hex = hex.toString(16); // force conversion
		// fill extra space up to 6 characters with 0
		while (hex.length < 6) hex = "0" + hex;

		if (hex.indexOf('#') === 0) {
			hex = hex.slice(1);
		}
		// convert 3-digit hex to 6-digits.
		if (hex.length === 3) {
			hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
		}
		if (hex.length !== 6) {
			throw new Error('Invalid HEX color:' + hex);
		}
		var r = parseInt(hex.slice(0, 2), 16),
			g = parseInt(hex.slice(2, 4), 16),
			b = parseInt(hex.slice(4, 6), 16);
		if (bw) {
			// https://stackoverflow.com/a/3943023/112731
			return (r * 0.299 + g * 0.587 + b * 0.114) > 186
				? '#000000'
				: '#FFFFFF';
		}
		// invert color components
		r = (255 - r).toString(16);
		g = (255 - g).toString(16);
		b = (255 - b).toString(16);
		// pad each with zeros and return
		return "#" + padZero(r) + padZero(g) + padZero(b);
	}

	function clamp(value, min, max) {
		return Math.min(Math.max(value, min), max);
	}

	function lerp(a, b, t) {
		return a + (b - a) * t;
	}

	let hoverFade = 0;
	let hoverFadeSpeed = 0.04;
	let hoverFadeSecondary = 0;
	let hoverFadeSecondarySpeed = 0.08;
	let hoverFontSize = 15;
	let normalFontSize = 12;
	let fontRatio = hoverFontSize / normalFontSize;

	function showLabel(index, fade, hoverFade = 0) {
		let label = pixiLabels[index];
		if (!label) return;
		labelFade[index] = fade;

		if (fade > 0.01) label.visible = true;
		else {
			hideLabel(index);
			return;
		}

		label.style.fontSize = lerp(normalFontSize, hoverFontSize, hoverFade);

		let nodePos = vecToScreenSpace(getPosition(index));
		let width = labelWidths[index] * lerp(1, fontRatio, hoverFade) / 2;
		label.x = nodePos.x - width;
		label.y = nodePos.y + getNodeScreenRadius(radii[index]) + 9;
		label.alpha = fade;
	}

	function hideLabel(index) {
		let label = pixiLabels[index];
		label.visible = false;
	}

	function draw() {
		graphics.clear();

		let topLines = [];
		if (updateAttached) {
			attachedToGrabbed = [];
			// hoverFade = 0;
		}

		if (hoveredNode != -1 || grabbedNode != -1) {
			hoverFade = Math.min(1, hoverFade + hoverFadeSpeed);
			hoverFadeSecondary = Math.min(1, hoverFadeSecondary + hoverFadeSecondarySpeed);
		}
		else {
			hoverFade = Math.max(0, hoverFade - hoverFadeSpeed);
			hoverFadeSecondary = Math.max(0, hoverFadeSecondary - hoverFadeSecondarySpeed);
		}

		graphics.lineStyle(1, mixColors(colors.link, colors.background, hoverFade * 0.5), 0.7);

		for (let i = 0; i < linkCount; i++) {
			let target = linkTargets[i];
			let source = linkSources[i];

			if (hoveredNode == source || hoveredNode == target || ((lastHoveredNode == source || lastHoveredNode == target) && hoverFade != 0)) {
				if (updateAttached && hoveredNode == source)
					attachedToGrabbed.push(target);

				else if (updateAttached && hoveredNode == target)
					attachedToGrabbed.push(source);

				topLines.push(i);
			}

			let startWorld = getPosition(source);
			let endWorld = getPosition(target);

			let start = vecToScreenSpace(startWorld);
			let end = vecToScreenSpace(endWorld);

			let dist = Math.sqrt(Math.pow(startWorld.x - endWorld.x, 2) + Math.pow(startWorld.y - endWorld.y, 2));

			if (dist < (radii[source] + radii[target]) * edgePruning) {
				graphics.moveTo(start.x, start.y);
				graphics.lineTo(end.x, end.y);
			}
		}

		let opacity = 1 - (hoverFade * 0.5);
		graphics.beginFill(mixColors(colors.node, colors.background, hoverFade * 0.5), opacity);
		graphics.lineStyle(0, 0xffffff);
		for (let i = 0; i < nodeCount; i++) {
			let screenRadius = getNodeScreenRadius(radii[i]);

			if (hoveredNode != i) {
				if (screenRadius > 2) {

					let labelFade = lerp(0, (screenRadius - 4) / 8 - (1 / cameraScaleRoot) / 6 * 0.9, Math.max(1 - hoverFade, 0.2));
					showLabel(i, labelFade);
				}
				else {
					hideLabel(i);
				}
			}

			if (hoveredNode == i || (lastHoveredNode == i && hoverFade != 0) || (hoveredNode != -1 && attachedToGrabbed.includes(i))) continue;

			let pos = vecToScreenSpace(getPosition(i));
			graphics.drawCircle(pos.x, pos.y, screenRadius);
		}

		graphics.endFill();


		opacity = hoverFade * 0.7;
		graphics.lineStyle(1, mixColors(mixColors(colors.link, colors.accent, hoverFade), colors.background, 0.2), opacity);

		for (let i = 0; i < topLines.length; i++) {
			let target = linkTargets[topLines[i]];
			let source = linkSources[topLines[i]];

			// draw lines on top when hovered
			let start = vecToScreenSpace(getPosition(source));
			let end = vecToScreenSpace(getPosition(target));


			graphics.moveTo(start.x, start.y);
			graphics.lineTo(end.x, end.y);
		}

		if (hoveredNode != -1 || (lastHoveredNode != -1 && hoverFade != 0)) {
			graphics.beginFill(mixColors(colors.node, colors.accent, hoverFade * 0.2), 0.9);
			graphics.lineStyle(0, 0xffffff);
			for (let i = 0; i < attachedToGrabbed.length; i++) {
				let point = attachedToGrabbed[i];

				let pos = vecToScreenSpace(getPosition(point));

				graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[point]));
				showLabel(point, Math.max(hoverFade * 0.6, labelFade[point]));
			}
			graphics.endFill();

			let index = hoveredNode != -1 ? hoveredNode : lastHoveredNode;

			let pos = vecToScreenSpace(getPosition(index));
			graphics.beginFill(mixColors(colors.node, colors.accent, hoverFade), 1);
			graphics.lineStyle(hoverFade, mixColors(invertColor(colors.background, true), colors.accent, 0.5));
			graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[index]));
			graphics.endFill();

			showLabel(index, Math.max(hoverFade, labelFade[index]), hoverFadeSecondary);
		}



		updateAttached = false;

		graphics.lineStyle(2, colors.accent);
		// draw the active node
		if (activeNode != -1) {
			let pos = vecToScreenSpace(getPosition(activeNode));
			graphics.drawCircle(pos.x, pos.y, getNodeScreenRadius(radii[activeNode]) + 4);

		}
	}

	function onMessage(event) {
		if (event.data.type == "draw") {
			positions = new Float32Array(event.data.positions);
			draw();
		}
		else if (event.data.type == "update_camera") {
			cameraOffset = event.data.cameraOffset;
			cameraScale = event.data.cameraScale;
			cameraScaleRoot = Math.sqrt(cameraScale);
		}
		else if (event.data.type == "update_interaction") {
			if (hoveredNode != event.data.hoveredNode && event.data.hoveredNode != -1) updateAttached = true;
			if (grabbedNode != event.data.grabbedNode && event.data.hoveredNode != -1) updateAttached = true;

			if (event.data.hoveredNode == -1) lastHoveredNode = hoveredNode;
			else lastHoveredNode = -1;

			hoveredNode = event.data.hoveredNode;
			grabbedNode = event.data.grabbedNode;
		}
		else if (event.data.type == "resize") {
			app.renderer.resize(event.data.width, event.data.height);
		}
		else if (event.data.type == "set_active") {
			activeNode = event.data.active;
		}
		else if (event.data.type == "update_colors") {
			colors = event.data.colors;

			for (let label of pixiLabels) {
				label.style.fill = invertColor(colors.background, true);
			}
		}
		else if (event.data.type == "init") {
			// Extract data from message
			linkCount = event.data.linkCount;
			linkSources = event.data.linkSources;
			linkTargets = event.data.linkTargets;
			nodeCount = event.data.nodeCount;
			radii = event.data.radii;
			labels = event.data.labels;
			linkLength = event.data.linkLength;
			edgePruning = event.data.edgePruning;
			positions = new Float32Array(nodeCount);

			if (!app) {
				app = new PIXI.Application({ ...event.data.options, antialias: true, resolution: 2, backgroundAlpha: 0, transparent: true });
				container = new PIXI.Container();
				graphics = new PIXI.Graphics();
				app.stage.addChild(container);
				container.addChild(graphics);
			}

			// destroy old labels
			for (let label of pixiLabels) {
				label.destroy();
			}

			pixiLabels = [];
			labelWidths = [];
			labelFade = [];
			for (let i = 0; i < nodeCount; i++) {
				let label = new PIXI.Text(labels[i], { fontFamily: 'Arial', fontSize: 12, fontWeight: "normal", fill: invertColor(colors.background, true), align: 'center', anchor: 0.5 });
				pixiLabels.push(label);
				labelWidths.push(label.width);
				labelFade.push(0);
				app.stage.addChild(label);
			}

		}
		else {
			console.log("Unknown message type sent to graph worker: " + event.data.type);
		}
	}
}


`;

// src/frontend/graph-view/graph-wasm.wasm
var graph_wasm_default = __toBinary(" ");

// src/assets/plugin-styles.txt.css
var plugin_styles_txt_default = `
/*#region Variables */
body {
	--color-fade-speed: 0.2s;
}

/*#endregion */

/*#region Tree */

.tree-icon {
	border: 1px solid transparent;
	margin: 0px 4px 0px 0px;
	display: flex;
	align-self: center;
}

.tree-icon :is(svg, img) {
	width: 1em !important;
	height: 1em !important;
}

.tree-icon *:has(svg, img) {
	display: contents !important;
}

a.tree-item-self.is-clickable {
	text-decoration: none !important;
	text-decoration-line: none !important;
}

.tree-item-inner>p {
	display: contents !important;
}


.tree-container .feature-title {
	flex-grow: 0 !important;
	margin-right: .5em !important;
	font-size: inherit !important;
	color: var(--text-normal) !important;
}

.tree-item-children:empty {
	display: none !important;
}

.tree-item.filtered-out {
	display: none;
}

#outline .tree-item[data-depth="1"]:not(.mod-collapsible)>.tree-item-self {
	font-weight: 900;
	font-size: 1.05em;
}

.tree-item:not(.mod-collapsible)>.tree-item-self
{
	padding-left: calc(var(--nav-item-children-margin-start,var(--nav-item-children-margin-left)) - 0.35em);
}

.tree-item-self {
	display: flex !important;
	align-items: center !important;
}

#file-explorer {
	padding: 0 !important;
}

/*#region Headers */

.heading p {
	margin: 0 !important;
}

#webpage-icon :is(svg, img) {
	width: 100%;
	height: 100%;
	box-shadow: none !important;
	border: none !important;
	border-radius: 0 !important;
	stroke: currentColor;
	margin: 0 !important;
	padding: 0 !important;
}

#webpage-icon *:has(:is(svg, img)) {
	display: contents !important;
}

#webpage-icon:has(:is(svg, img)) {
	font-size: 40px;
	width: 40px;
	height: 40px;
}

#webpage-icon {
	font-size: 40px;
	margin-bottom: 8px;
	font-family: emoji;
	width: fit-content;
}

body.show-inline-title .page-title {
	font-weight: var(--inline-title-weight);
	font-size: var(--inline-title-size);
	font-style: var(--inline-title-style);
	font-variant: var(--inline-title-variant);
	font-family: var(--inline-title-font);
	letter-spacing: -0.015em;
	color: var(--inline-title-color);
}

h1 li {
	translate: calc(0px - var(--list-indent)) 0;
}

.heading {
	position: relative;
}

.heading.is-collapsed::after {
	content: "..." !important;
	display: inline-block !important;
	position: absolute !important;
	margin: 0 !important;
	padding: 0 !important;
	margin-left: 0.3em !important;
	color: var(--text-muted);
}

/* high specificity in order to override other style */
html>body>#main-horizontal>#center-content>.obsidian-document>.markdown-preview-sizer>div:not(:is(.footer, .header)) {
	margin-inline: 0 !important;
	margin: 0 !important;
	padding: 0 !important;
}

html>body>#main-horizontal>#center-content>.obsidian-document>.markdown-preview-sizer>div {
	width: 100%;
	max-width: 100%;
}

.collapse-icon:not(.list-collapse-indicator) svg.svg-icon {
	color: var(--nav-collapse-icon-color);
	width: var(--collapse-arrow-size);
	height: var(--collapse-arrow-size);
	transition: transform 100ms ease-in-out 0s;
	stroke-width: 4px;
	min-width: 10px;
	min-height: 10px;
	max-width: 24px;
	max-height: 24px;
}

.heading-collapse-indicator.collapse-icon.is-collapsed>svg {
	transition: transform 0.1s ease-in-out;
	transform: rotate(-90deg);
}

.heading .heading-collapse-indicator {
	opacity: 0;
	transition: opacity 0.15s ease-in-out;
	position: absolute;
	z-index: 1;
	padding: 0 !important;
	padding-left: 2em !important;
	padding-right: 1em !important;
	left: -2em !important;
}

.heading:hover>.heading-collapse-indicator{
	opacity: 1;
}

.tree-container {
	--nav-item-size: 1em;
	overflow: hidden auto;
	height: 100%;
}

.nav-file-title,
.nav-folder-title {
	line-height: var(--tree-vertical-spacing) !important;
}


/*#endregion */

/*#region Theme Toggle */

.theme-toggle-container {
	--toggle-width: 3.5em;
	--toggle-height: 1.75em;
	--border-radius: calc(var(--toggle-height) / 2);
	--handle-width: calc(var(--toggle-height) * 0.65);
	--handle-radius: calc(var(--handle-width) / 2);
	--handle-margin: calc((var(--toggle-height) / 2.0) - var(--handle-radius));
	--handle-translation: calc(var(--toggle-width) - var(--handle-width) - (var(--handle-margin) * 2));

	cursor: pointer;
	display: flex;
	flex-direction: row;
	align-items: center;
	gap: 1em;
}

.feature-title,
.clickable-icon {
	transition: color var(--color-fade-speed) ease-in-out;
}

/* animation to expand width, move handle, then contract width */
@keyframes toggle-slide-right {
	0% {
		width: var(--handle-width);
		transform: translateX(0);
	}

	50% {
		width: calc(var(--toggle-width) * 0.5);
	}

	90% {
		width: var(--handle-width);
	}

	100% {
		transform: translateX(var(--handle-translation));
	}
}

@keyframes toggle-slide-left {
	0% {
		width: var(--handle-width);
		transform: translateX(calc(var(--handle-translation) - ((var(--toggle-width) * 0.33) - var(--handle-width))));
	}

	70% {
		width: calc(var(--toggle-width) * 0.5);
	}

	100% {
		width: var(--handle-width);
		transform: translateX(0);
	}
}

/* just exapnd and contract */
@keyframes toggle-expand-right {
	0% {
		width: var(--handle-width);
	}

	100% {
		width: calc(var(--toggle-width) * 0.33);
	}
}

@keyframes toggle-expand-left {
	0% {
		width: var(--handle-width);
		transform: translateX(var(--handle-translation));
	}

	100% {
		width: calc(var(--toggle-width) * 0.33);
		transform: translateX(calc(var(--handle-translation) - ((var(--toggle-width) * 0.33) - var(--handle-width))));
	}
}

@keyframes toggle-contract {
	0% {
		width: calc(var(--toggle-width) * 0.33);
	}

	100% {
		width: var(--handle-width);
	}
}

.theme-toggle-input {
	display: none;
	z-index: 1000;
}

/* Fill in dark mode / default */
.toggle-background {
	position: relative;
	width: var(--toggle-width);
	height: var(--toggle-height);
	border-radius: var(--border-radius);
	background-color: var(--background-modifier-border);

	transition: background-color var(--color-fade-speed);
	z-index: 1000;

	animation-duration: 0.2s;
}

/* Handle default */
.toggle-background::before {
	content: "";
	position: absolute;
	left: var(--handle-margin);
	top: var(--handle-margin);
	height: var(--handle-width);
	width: var(--handle-width);

	border-radius: var(--handle-radius);
	background-color: var(--text-normal);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
	animation: toggle-slide-left ease-in-out normal both;
	animation-duration: inherit;
	z-index: 1000;
}

/* handle light*/
.theme-toggle-input:checked~.toggle-background::before {
	animation: toggle-slide-right ease-in-out normal both;
	animation-duration: inherit;
}

.theme-toggle-input:active~.toggle-background::before {
	animation: toggle-expand-right ease-in-out normal both;
	animation-duration: inherit;
}

.theme-toggle-input:active:checked~.toggle-background::before {
	animation: toggle-expand-left ease-in-out normal both;
	animation-duration: inherit;
}

/* sun moon icon icon default */
.toggle-background::after {
	content: "";
	position: absolute;
	right: var(--handle-margin);
	top: calc(var(--handle-margin));
	height: var(--handle-width);
	width: var(--handle-width);
	transition: transform 0.3s;
	background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg>') no-repeat center center;
	transform: scale(0.9);
}

/* sun moon icon icon light */
.theme-toggle-input:checked~.toggle-background::after {
	transform: translateX(calc(var(--handle-translation) * -1)) scale(0.9);
	background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></svg>') no-repeat center center;
}

/*#endregion */

/*#region Graph View */

.graph-view-wrapper {
	--graph-view-max-height: 35vh;
}

#graph-canvas {
	width: 100%;
	height: 100%;
	aspect-ratio: 1;
	transition: opacity 0.2s ease-in-out;
}

.graph-view-container.expanded {
	position: fixed;
	width: 90%;
	height: 90%;
	max-height: unset;
	right: 5%;
	top: 5%;
	background-color: var(--background-secondary);
	z-index: 100;
}

body:is(.is-phone, .is-tablet) .graph-view-container.expanded {
	width: 95%;
	height: 95%;
	right: 2.5%;
	top: 2.5%;
}

.graph-view-container {
	position: relative;
	width: 100%;
	aspect-ratio: 1;
	max-height: var(--graph-view-max-height);
	display: flex;
	transition: background-color var(--color-fade-speed) ease-in-out;
	touch-action: none;
	border: 1px solid var(--modal-border-color);
	border-radius: var(--modal-radius);
	overflow: hidden;
}

.graph-icon {
	position: absolute;
	cursor: pointer;
	color: var(--text-muted);
	transition: color 0.2s ease-in-out;
}

.graph-icon svg {
	width: 20px;
	height: 20px;
}

.graph-icon:hover {
	color: var(--interactive-accent);
}

.graph-icon.graph-expand {
	top: 6px;
	right: 6px;
}

.graph-icon.graph-global {
	top: 6px;
	right: 32px;
}


.graph-view-placeholder {
	padding: 0;
	width: 100%;
	aspect-ratio: 1;
	max-height: var(--graph-view-max-height);
	position: relative;
	flex: none;
}

.graph-view-placeholder:has(.expanded) {
	border-radius: var(--modal-radius);
	border: 1px solid var(--modal-border-color);
}

.scale-down {
	transition: transform 0.2s ease-in-out;
	transform: scale(0.9);
}

.scale-up {
	transition: transform 0.2s ease-in-out;
	transform: scale(1);
}




/*#endregion */

/*#region Canvas */

body :is(.canvas-node-container, .canvas-wrapper) {
	cursor: unset !important;
}

body .canvas-wrapper {
	max-width: 100% !important;
}

.canvas {
	translate: 0 0;
	scale: 1 1;
	will-change: translate, scale;
}

.canvas-controls {
	display: none;
	cursor: default !important;
}

.canvas-card-menu {
	display: none;
	cursor: default !important;
}

.canvas-node-content-blocker {
	pointer-events: none;
}

.canvas.small-scale :is(.canvas-node-label, .canvas-path-label, .obsidian-document) {
	display: none;
}

/*#endregion */

/*#region Phone */

body.is-phone .sidebar {
	font-size: 1.15em;
	--tree-vertical-spacing: 1.8em;
	--sidebar-width: 85vw !important;
}

body.is-phone {
	--collapse-arrow-size: 14px;
	--tree-vertical-spacing: 0.8em;
}

/*#endregion */

/*#region Loading */

.loading-icon {
	--width: 80px;
	--height: 80px;

	display: inline-block;
	position: fixed;
	left: calc(50% - var(--width) / 2);
	top: calc(50% - var(--height) / 2);
	width: var(--width);
	height: var(--height);

	opacity: 0;
	transition: opacity 0.5s ease-in-out;
	pointer-events: none;
}

.loading-icon.show {
	opacity: 1;
}

.loading-icon div {
	position: absolute;
	top: 33px;
	width: 13px;
	height: 13px;
	border-radius: 50%;
	background: var(--interactive-accent);
	animation-timing-function: cubic-bezier(0, 1, 1, 0);
}

.loading-icon div:nth-child(1) {
	left: 8px;
	animation: lds-ellipsis1 0.6s infinite;
}

.loading-icon div:nth-child(2) {
	left: 8px;
	animation: lds-ellipsis2 0.6s infinite;
}

.loading-icon div:nth-child(3) {
	left: 32px;
	animation: lds-ellipsis2 0.6s infinite;
}

.loading-icon div:nth-child(4) {
	left: 56px;
	animation: lds-ellipsis3 0.6s infinite;
}

.loading-icon:not(.show) div {
	animation-play-state: paused;
}

@keyframes lds-ellipsis1 {
	0% {
		transform: scale(0);
	}

	100% {
		transform: scale(1);
	}
}

@keyframes lds-ellipsis3 {
	0% {
		transform: scale(1);
	}

	100% {
		transform: scale(0);
	}
}

@keyframes lds-ellipsis2 {
	0% {
		transform: translate(0, 0);
	}

	100% {
		transform: translate(24px, 0);
	}
}

/*#endregion  */

/*#region Media Queries */

@media print {
	html body.publish :is(.sidebar, script, style, include) {
		display: none !important;
	}

	:root,
	html body.publish> :is(#main-horizontal, #center-content, .obsidian-document):not(script, style, include) {
		display: contents !important;
	}

	:root,
	html body.publish #center-content>.obsidian-document {
		background-color: transparent !important;
	}

	body {
		display: inline !important;
		background: var(--background-primary);
	}

	body #center-content>.obsidian-document>.markdown-preview-sizer {
		padding: 0;
		margin: 0;
		padding: var(--file-margins);
		padding-bottom: 0;
	}

	html body.publish :is(#center-content, .obsidian-document) {
		margin: 0 !important;
		padding: 0 !important;
	}


}

/*#endregion  */

/*#region Search */

#search-results {
	padding: 1em;
}

.search-result {
	display: flex;
}

.search-result a {
	padding: calc(var(--tree-vertical-spacing) / 2);
	border-radius: var(--radius-s);
	width: 100%;
	color: var(--nav-item-color);
	text-decoration: none;
}

.search-result a:hover {
	background-color: var(--nav-item-background-hover);
	text-decoration: underline;
	color: var(--nav-item-color-active);
}

.tree-hint-label {
	font-size: var(--font-smallest);
	color: var(--text-accent);
	width: 100%;
	width: -webkit-fill-available;
	width: -moz-available;
	width: fill-available;
	text-decoration-line: none;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.tree-hint-label.internal-link::before {
	content: "H";
	font-size: 1.2em;
	font-weight: 700;
	position: relative;
	display: inline-block;
	margin-right: 0.5em;
	translate: 0 0.05em;
	color: var(--nav-item-color);
}

.tree-hint-label:hover {
	text-decoration-line: underline;
}

.tree-hint-container {
	width: 100%;
	padding: var(--nav-item-padding);
	padding-bottom: 0;
	padding-top: 0;
	padding-right: 0;
	display: flex;
	flex-direction: column;
	margin-left: 22px;
}

/* find hints inside folders with no other folders in them */
.tree-container .nav-folder:not(:has(.nav-folder)) .nav-file>.tree-link>.tree-hint-container {
	padding-left: calc(1em * 2);
}

a.tree-hint-label:hover {
	text-decoration-line: underline;
}

.search-mark {
	margin: 0 !important;
	padding: 0 !important;
	scroll-margin: 2em !important;
}

.search-input-container:has(+ #search-results)>input[type="search"] {
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
}

#search-container {
	--input-height: 2.6em;
}

input[type=search] {
	box-shadow: none !important;
	height: var(--input-height);
	font-size: 1em;
	transition: background, background-color, border;
	transition-duration: var(--color-fade-speed);
	transition-timing-function: ease-in-out;
}

.search-input-container {
	display: flex !important;
}

.search-input-wrapper {
	position: relative;
	width: 100%;
}

.search-input-container::before {
	mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'></circle><line x1='21' y1='21' x2='16.65' y2='16.65'></line></svg>");
	mask-repeat: no-repeat;
	top: 50%;
	transform: translateY(-50%);
	z-index: 1;
}

/*#endregion */

/*#region Sidebar Resize */

.sidebar .sidebar-handle:hover~.leaf-content,
.sidebar.is-resizing .leaf-content {
	box-shadow: 0 0 0 var(--divider-width-hover) var(--divider-color-hover);
}

.sidebar-handle {
	width: min(max(calc(var(--sidebar-margin) / 2.0), 3px), 12px);
	height: calc(100vh - 2 * var(--radius-l));
	margin-top: var(--radius-l);
	margin-bottom: var(--radius-l);
	top: 0;
	position: absolute;
	cursor: ew-resize;
	z-index: 1;
	transition: background-color .2s ease-in-out;
}

#left-sidebar .sidebar-handle {
	right: 0;
}

#right-sidebar .sidebar-handle {
	left: 0;
}



/*#endregion */

/* Themes */

/*#region General */

.nav-folder-children .nav-folder-title-content::before {
	margin-right: 0.5em;
}

.tree-item-contents:has(.tree-item-icon) .tree-item-title::before,
.tree-item-contents:has(.tree-item-icon)::before,
.tree-item:has(.tree-item-contents > .tree-item-icon)::before {
	display: none !important;
}

/*#endregion */

/*#endregion */

/*#region Backlinks */

#backlinks {
	border: 1px solid var(--background-modifier-border);
	border-radius: var(--radius-m);
	transition: opacity 0.2s ease-in-out;
}

#backlinks .feature-header {
	border-bottom: 1px solid;
	border-color: inherit;
	padding: var(--size-4-2);
	padding-left: var(--size-4-3);
}

#backlinks .feature-header .feature-title {
	margin: 0.25em;
}

.backlinks-content {
	padding: var(--size-4-1);
	gap: var(--size-4-1);
	display: flex;
	flex-direction: column;
}

a.backlink {
	display: flex;
	gap: 0.5em;
	color: var(--text-muted);
	text-decoration: none;
	padding: var(--size-4-1);
	padding-left: var(--size-4-2);
	border-radius: var(--radius-s);
}

a.backlink:hover {
	background-color: var(--background-modifier-hover);
	text-decoration: underline;
}

.backlink-icon {
	display: flex;
	align-items: center;
}

/*#endregion */

/*#region Tags */

#tags, #aliases {
	display: flex;
	align-items: baseline;
	gap: 1em;
}

#tags .tags-content, #aliases .aliases-content {
	display: flex;
	gap: 0.5em;
}

#aliases .aliases-content .alias
{
	font-size: var(--tag-size);
	padding-inline: 0.25em;
}

/*#endregion */

/*#region Features */

.data-bar .feature-title {
	color: var(--text-muted);
	font-weight: 400;
	font-size: 0.9em;
}

.feature-header:empty,
.feature-title:empty {
	display: none;
}

/*#endregion */

/*#region Header & Footer */

.header .data-bar
{
	display: flex;
	flex-wrap: wrap;
}

.header .data-bar > :not(:first-child)
{
	border-left: 1px solid var(--background-modifier-border);
	padding-left: 0.5em;
	margin-left: 0.5em;
}

.header .data-bar:not(:empty) {
	padding-bottom: 1em;
	margin-bottom: 1em;
	border-bottom: 1px solid var(--background-modifier-border);
}

.footer:not(:has(div:first-child:last-child)):not(:empty),
.footer .data-bar:not(:empty) {
	border-top: 1px solid var(--background-modifier-border);
	padding-top: var(--size-4-6);
	margin-top: var(--size-4-6);
}

.header:last-child {
	margin-bottom: var(--p-spacing);
}

/*#endregion */

/*#region Hover Preview*/

.file-preview.popover.hover-popover .markdown-embed {
	max-height: unset !important;
	width: 100% !important;
	min-width: var(--popover-width);
	min-height: 8em;
}

.file-preview.popover.hover-popover {
	opacity: 1;
	transition: opacity 0.2s ease-in-out;
	resize: both;
	min-width: var(--popover-width);
	min-height: 8em;
	height: var(--popover-height);
	width: var(--popover-width);
}

.preview-action-container {
	position: absolute;
	top: 0;
	left: 0;
	padding: 5px;
	padding-right: 10px;
	width: 100% !important;
	display: flex;
	gap: 5px;
	z-index: 1000;
}

.popover-action {
	display: block;
	background-color: var(--icon-color);
	width: var(--icon-size);
	height: var(--icon-size);
	mask-size: 100% 100%;
	mask-position: center;
	mask-repeat: no-repeat;
}

.popover-action:hover {
	background-color: var(--icon-color-hover);
}

.popover-action:active {
	background-color: var(--interactive-accent);
}

.popover-action.drag-handle {
	margin-right: auto;
	cursor: move;
	mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-grip"><circle cx="12" cy="5" r="1"/><circle cx="19" cy="5" r="1"/><circle cx="5" cy="5" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/><circle cx="12" cy="19" r="1"/><circle cx="19" cy="19" r="1"/><circle cx="5" cy="19" r="1"/></svg>');
}

.popover-action.pin-button {
	cursor: pointer;
	mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pin"><path d="M12 17v5"/><path d="M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z"/></svg>');
	transition: mask-image 0.3s ease;
}

.popover-action.pin-button.pinned {
	background-color: var(--interactive-accent);
	mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pin-off"><path d="M12 17v5"/><path d="M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89"/><path d="m2 2 20 20"/><path d="M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11"/></svg>');
}

.popover-action.go-to-button {
	cursor: pointer;
	mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-symlink"><path d="m10 18 3-3-3-3"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M4 11V4a2 2 0 0 1 2-2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7"/></svg>');
}


/*#endregion*/

/* Plugins: */

/*#region Kanban */

#center-content .kanban-plugin {
	position: absolute;
	padding: 0;
	margin: 0;
	height: 100%;
}

#center-content .kanban-plugin {
	font-family: var(--font-text, var(--default-font));
	font-size: .875rem;
	line-height: var(--line-height-tight);
	width: unset;
	overflow-y: unset;
	overflow-wrap: unset;
	color: unset;
	user-select: unset;
	-webkit-user-select: unset;
}

#center-content .kanban-plugin__item-button-wrapper,
.kanban-plugin__lane-grip,
.kanban-plugin__lane-settings-button.clickable-icon,
.kanban-plugin__item-postfix-button.clickable-icon {
	display: none;
}

/*#endregion */

/*#region Excalidraw */

.excalidraw-svg rect,
.excalidraw-plugin rect {
	fill: transparent;
}

/** Preserve mask fill **/
.excalidraw-plugin mask rect[fill="#fff"],
.excalidraw-svg mask rect[fill="#fff"],
.excalidraw-plugin mask rect[fill="#ffffff"],
.excalidraw-svg mask rect[fill="#ffffff"] {
	fill: #ffffff;
}

.excalidraw-plugin mask rect[fill="#000"],
.excalidraw-svg mask rect[fill="#000"],
.excalidraw-plugin mask rect[fill="#000000"],
.excalidraw-svg mask rect[fill="#000000"] {
	fill: #000000;
}

body.theme-dark .excalidraw-svg svg.dark,
body.theme-dark .excalidraw-plugin svg.dark,
body.theme-light .excalidraw-svg svg.light,
body.theme-light .excalidraw-plugin svg.light {
	filter: invert(93%) hue-rotate(180deg);
}


.excalidraw-plugin>svg {
	width: 100%;
	height: 100%;
}

.excalidraw-plugin {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;

	height: 100%;
	width: 100%;

	padding: 10px;
}

/*#endregion  */

/*#region Obsidian Columns Plugin */
.columnParent {
	display: flex;
	padding: 15px 20px;
	flex-wrap: wrap;
	gap: 20px;
}

.columnParent {
	white-space: normal;
}

.columnChild {
	flex-grow: 1;
	flex-basis: 0px;
}

/*#endregion */

/*#region Banners */

.obsidian-banner .lock-button {
	display: none;
}

.obsidian-document:has(.obsidian-banner-wrapper) {
	padding-top: 0 !important;
}

/*#endregion */

/*#region Mind Map  */

.obsidian-document:not([data-type='markdown']):has(.mm-mindmap) {
	overflow-y: none;
}

.obsidian-document:not([data-type='markdown']) .mm-mindmap {
	transform: scale(1);
	translate: -4000px -4000px;
	top: 70%;
	left: 50%;
	position: absolute;
	overflow: hidden;
	width: 100vw;
}

/*#endregion  */
`;

// src/assets/deferred.txt.js
var deferred_txt_default = `async function loadIncludes()
{
	// replace include tags with the contents of the file
	let includeTags = document.querySelectorAll("link[itemprop='include']");
	for (const includeTag of includeTags)
	{
		let includePath = includeTag.getAttribute("href");

		try
		{
			let includeText = "";
			
			if (includePath.startsWith("https:") || includePath.startsWith("http:") || window.location.protocol != "file:")
			{
				const request = await fetch(includePath);
				if (!request.ok) 
				{
					console.log("Could not include file: " + includePath);
					includeTag?.remove();
					continue;
				}
				
				includeText = await request.text();
			}
			else
			{
				const dataEl = document.getElementById(btoa(encodeURI(includePath)));
				if (dataEl)
				{
					const data = JSON.parse(decodeURI(atob(dataEl.getAttribute("value") ?? "")));
					includeText = data?.data ?? "";
				}
			}


			let docFrag = document.createRange().createContextualFragment(includeText);
			includeTag.before(docFrag);
			includeTag.remove();

			console.log("Included text: " + includeText);

			console.log("Included file: " + includePath);
		}
		catch (e)
		{
			includeTag?.remove();
			console.log("Could not include file: " + includePath, e);
			continue;
		}
	}
}

document.addEventListener("DOMContentLoaded", () => 
{
	loadIncludes();
});

let isFileProtocol = location.protocol == "file:";

function waitLoadScripts(scriptNames, callback)
{
	let scripts = scriptNames.map(name => document.getElementById(name + "-script"));

	function loadNext(index)
	{
		let script = scripts[index];
		let nextIndex = index + 1;
		if (!script)
		{
			if (index < scripts.length)
				loadNext(nextIndex);
			else
			{
				callback();
			}
			return;
		}

		if (!script || script.getAttribute('loaded') == "true") // if already loaded 
		{
			if (index < scripts.length)
				loadNext(nextIndex);
		}
		
		if (index < scripts.length) 
		{
			script.addEventListener("load", () => loadNext(nextIndex));
		}
	}

	loadNext(0);
}
`;

// src/assets/deferred.txt.css
var deferred_txt_default2 = `/* Define default values for variables */
body
{
    --line-width: 40em;
    --line-width-adaptive: 40em;
    --file-line-width: 40em;
    --sidebar-width: min(20em, 80vw);
    --collapse-arrow-size: 11px;
    --tree-vertical-spacing: 1.3em;
    --sidebar-margin: 12px;
}

:root
{
    background-color: #202124;
}

/*#region Sidebars */

.sidebar {
    height: 100%;
    font-size: 14px;
    z-index: 10;
    min-width: calc(var(--sidebar-width) + var(--divider-width-hover));
    max-width: calc(var(--sidebar-width) + var(--divider-width-hover));
    position: relative;
    overflow: hidden;
    overflow: clip;

    transition: min-width ease-in-out, max-width ease-in-out;
    transition-duration: .2s;
    contain: size;
}

#left-sidebar {
    left: 0;
}

#right-sidebar {
    right: 0;
}

.sidebar.is-collapsed {
    min-width: 0;
    max-width: 0;
}

.sidebar.floating {
    position: absolute;
}

.sidebar .leaf-content {
    height: 100%;
    min-width: calc(var(--sidebar-width) - var(--divider-width-hover));
    top: 0;
    padding: var(--sidebar-margin);
    padding-top: 4em;
    line-height: var(--line-height-tight);
    background-color: var(--background-secondary);
    transition: background-color,border-right,border-left,box-shadow;
    transition-duration: var(--color-fade-speed);
    transition-timing-function: ease-in-out;
    position: absolute;
    display: flex;
    flex-direction: column;
}

/* If the sidebar isn't collapsed the content should have the same width as it */
.sidebar:not(.is-collapsed) .leaf-content {
    min-width: calc(max(100%,var(--sidebar-width)) - 3px);
    max-width: calc(max(100%,var(--sidebar-width)) - 3px);
}

#left-sidebar-content
{
    left: 0;
    border-top-right-radius: var(--radius-l);
    border-bottom-right-radius: var(--radius-l);
}

#right-sidebar-content
{
    right: 0;
    border-top-left-radius: var(--radius-l);
    border-bottom-left-radius: var(--radius-l);
}

.sidebar #right-sidebar-content, .sidebar #left-sidebar-content
{
    contain: none !important;
    container-type: normal !important;
    animation: none !important;
}

/* Hide empty sidebars */
.sidebar:has(.leaf-content:empty):has(.topbar-content:empty)
{
    display: none;
}

.sidebar-topbar {
    height: calc(2.3em + 2 * var(--sidebar-margin));
    width: var(--sidebar-width);
    padding: var(--sidebar-margin);
    z-index: 1;

    position: fixed;
    display: flex;
    align-items: center;

    transition: width ease-in-out;
    transition-duration: inherit;
}

.sidebar.is-collapsed .sidebar-topbar {
    width: calc(2.3em + var(--sidebar-margin) * 2);
}

.sidebar .sidebar-topbar.is-collapsed
{
    width: 0;
}

#left-sidebar .sidebar-topbar {
    left: 0;
    flex-direction: row;
	border-top-right-radius: var(--radius-l);
}

#right-sidebar .sidebar-topbar {
    right: 0;
    flex-direction: row-reverse;
	border-top-left-radius: var(--radius-l);
}

#left-sidebar .topbar-content {
    margin-right: calc(2.3em + var(--sidebar-margin));
    flex-direction: row;
}

#right-sidebar .topbar-content {
    margin-left: calc(2.3em + var(--sidebar-margin));
    flex-direction: row-reverse;
}

.topbar-content {
    overflow: hidden visible;
    overflow: clip visible;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    transition: inherit;
}

.sidebar.is-collapsed .topbar-content {
    width: 0;
    transition: inherit;
}

.clickable-icon.sidebar-collapse-icon {
    background-color: transparent;
    color: var(--icon-color-focused);
    padding: 2px!important;
    margin: 0!important;
    height: 100%!important;
    width: 2.3em !important;
    margin-inline: 0.14em!important;
    position: absolute;
}

#left-sidebar .clickable-icon.sidebar-collapse-icon {
    transform: rotateY(180deg);
    right: var(--sidebar-margin);
}

#right-sidebar .clickable-icon.sidebar-collapse-icon {
    transform: rotateY(180deg);
    left: var(--sidebar-margin);
}

.clickable-icon.sidebar-collapse-icon svg.svg-icon {
    width: 100%;
    height: 100%;
}

.feature-title {
    margin-left: 1px;
    text-transform: uppercase;
    letter-spacing: .06em;
    margin-top: 0.75em;
    margin-bottom: 0.75em;
}

.feature-header
{
    display: flex;
    align-items: center;
    padding-top: 0;
    font-size: 1em;
    padding-left: 0;
}

body.floating-sidebars .sidebar
{
    position: absolute;
}

/*#endregion */

/*#region Content / Markdown Preview View */

body
{
    transition: background-color var(--color-fade-speed) ease-in-out;
}

#navbar:not(:empty)
{
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 0.5em 1em;
	width: 100%;
}

#main {
	display: flex;
	flex-direction: column;
	height: 100%;
	width: 100%;
	align-items: stretch;
	justify-content: center;
}

#main-horizontal {
    display: flex;
    flex-direction: row;
	flex-grow: 1;
    width: 100%;
    align-items: stretch;
    justify-content: center;
}

#center-content 
{
    flex-basis: 100%;
    max-width: 100%;
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    transition: opacity 0.2s ease-in-out;
    contain: inline-size;
}

.hide
{
    opacity: 0 !important;
    transition: opacity 0.2s ease-in-out;
    pointer-events: none;
}

#center-content>.obsidian-document 
{
    padding-left: 2em;
    padding-right: 1em;
    margin-bottom: 0;
    width: 100%;
    width: -webkit-fill-available;
    width: -moz-available;
    width: fill-available;
    transition: background-color var(--color-fade-speed) ease-in-out;
    border-top-right-radius: var(--window-radius, var(--radius-m));
    border-top-left-radius: var(--window-radius, var(--radius-m));
    overflow-x: hidden !important;
    overflow-y: auto !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    contain: inline-size;
}

body #center-content>.obsidian-document>.markdown-preview-sizer 
{
    padding-bottom: 80vh;
    width: 100%;
    max-width: var(--line-width);
    flex-basis: var(--line-width);
    transition: background-color var(--color-fade-speed) ease-in-out;
    contain: inline-size;
}

#center-content>.obsidian-document>div
{
    width: 100% !important;
    transition: background-color var(--color-fade-speed) ease-in-out;
    contain: inline-size;
}

/* If the markdown view is displaying a raw file or embed then increase it's size to make everything as large as possible */
#center-content > .obsidian-document:not([data-type='markdown']).embed {
    display: flex;
    padding: 1em;
    height: 100%;
    width: 100%;
    align-items: center;
    justify-content: center;
}

#center-content > .obsidian-document:not([data-type='markdown']).embed > *
{
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

:not(h1,h2,h3,h4,h5,h6,li):has(> :is(.math, table)) 
{
    overflow-x: auto !important;
}

/* For custom view exports */
#center-content > .obsidian-document:not([data-type='markdown'])
{
    overflow-x: auto;
    contain: content;
    padding: 0;
    margin: 0;
    height: 100%;
}

.obsidian-document[data-type="attachment"]
{
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    width: 100%;
}

.obsidian-document[data-type="attachment"] > *
{
    outline: none;
    border: none;
    box-shadow: none;
}

.obsidian-document[data-type="attachment"] :is(img)
{
    max-width: 90%;
    max-height: 90%;
    object-fit: contain;
}

.obsidian-document[data-type="attachment"] > :is(audio)
{
    width: 100%;
    max-width: min(90%, var(--line-width));
}

.obsidian-document[data-type="attachment"] > :is(embed, iframe, video)
{
    width: 100%;
    height: 100%;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

.canvas-wrapper > :is(.header, .footer)
{
    z-index: 100;
    position: absolute;
    display: flex;
    justify-content: center;
    flex-direction: column;
    width: 100%;
    align-items: center;
}

/*#endregion */

/*#region Loading */

.scroll-highlight 
{
    position: absolute;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 1000;
    background-color: hsla(var(--color-accent-hsl),.25);
    opacity: 0;
    padding: 1em;
    inset: 50%;
    translate: -50% -50%;
    border-radius: var(--radius-s);
}

/*#endregion */
`;

// src/assets/theme-load.txt.js
var theme_load_txt_default = 'let theme = localStorage.getItem("theme") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");\nif (theme == "dark")\n{\n	document.body.classList.add("theme-dark");\n	document.body.classList.remove("theme-light");\n}\nelse\n{\n	document.body.classList.add("theme-light");\n	document.body.classList.remove("theme-dark");\n}\n\nif (window.innerWidth < 480) document.body.classList.add("is-phone");\nelse if (window.innerWidth < 768) document.body.classList.add("is-tablet");\nelse if (window.innerWidth < 1024) document.body.classList.add("is-small-screen");\nelse document.body.classList.add("is-large-screen");\n';

// src/plugin/utils/path.ts
var import_fs = require("fs");
var import_obsidian = require("obsidian");
var import_os = require("os");
var import_promises = require("fs/promises");

// src/plugin/translations/zh-cn.ts
var language = {
  cancel: "\u53D6\u6D88",
  browse: "\u6D4F\u89C8",
  pathInputPlaceholder: "\u8F93\u5165\u6216\u6D4F\u89C8\u8DEF\u5F84...",
  pathValidations: {
    noEmpty: "\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A",
    mustExist: "\u8DEF\u5F84\u4E0D\u5B58\u5728",
    noTilde: "\u4E0D\u5141\u8BB8\u4F7F\u7528\u5E26\u6709\u6CE2\u6D6A\u53F7 (~) \u7684\u4E3B\u76EE\u5F55",
    noAbsolute: "\u8DEF\u5F84\u4E0D\u80FD\u662F\u7EDD\u5BF9\u8DEF\u5F84",
    noRelative: "\u8DEF\u5F84\u4E0D\u80FD\u662F\u76F8\u5BF9\u8DEF\u5F84",
    noFiles: "\u8DEF\u5F84\u4E0D\u80FD\u662F\u6587\u4EF6",
    noFolders: "\u8DEF\u5F84\u4E0D\u80FD\u662F\u6587\u4EF6\u5939",
    mustHaveExtension: "\u8DEF\u5F84\u5FC5\u987B\u5305\u542B\u6269\u5C55\u540D: {0}"
  },
  updateAvailable: "\u6709\u66F4\u65B0\u53EF\u7528",
  exportAsHTML: "\u5BFC\u51FA\u4E3AHTML",
  exportModal: {
    title: "\u5BFC\u51FA\u4E3AHTML",
    exportAsTitle: "\u5C06 {0} \u5BFC\u51FA\u4E3AHTML",
    moreOptions: "\u66F4\u591A\u9009\u9879\u8BF7\u67E5\u770B\u63D2\u4EF6\u8BBE\u7F6E\u9875\u9762\u3002",
    openAfterExport: "\u5BFC\u51FA\u540E\u6253\u5F00",
    exportButton: "\u5BFC\u51FA",
    filePicker: {
      title: "\u9009\u62E9\u5BFC\u51FA\u5E93\u4E2D\u7684\u6240\u6709\u6587\u4EF6",
      selectAll: "\u5168\u9009",
      save: "\u4FDD\u5B58"
    },
    currentSite: {
      noSite: "\u6B64\u8DEF\u5F84\u5F53\u524D\u4E0D\u5305\u542B\u5DF2\u5BFC\u51FA\u7684\u7F51\u7AD9\u3002",
      oldSite: "\u6B64\u8DEF\u5F84\u5305\u542B\u4F7F\u7528\u4E0D\u540C\u63D2\u4EF6\u7248\u672C\u521B\u5EFA\u7684\u5BFC\u51FA\u5185\u5BB9\u3002",
      pathContainsSite: "\u7AD9\u70B9",
      fileCount: "\u6587\u4EF6\u6570\u91CF",
      lastExported: "\u6700\u540E\u5BFC\u51FA\u65F6\u95F4"
    },
    exportMode: {
      title: "\u5BFC\u51FA\u6A21\u5F0F",
      online: "\u5982\u679C\u60A8\u7684\u6587\u4EF6\u5C06\u901A\u8FC7HTTP\u670D\u52A1\u5668\u5728\u7EBF\u8BBF\u95EE\uFF0C\u8BF7\u4F7F\u7528\u6B64\u9009\u9879\u3002",
      local: "\u8FD9\u5C06\u5BFC\u51FA\u4E00\u4E2A\u5305\u542B\u6240\u6709\u5185\u5BB9\u7684\u5355\u4E2A\uFF08\u8F83\u5927\uFF09HTML\u6587\u4EF6\u3002\u4EC5\u9002\u7528\u4E8E\u79BB\u7EBF\u5171\u4EAB\u3002",
      rawDocuments: "\u5BFC\u51FA\u666E\u901A\u7684HTML\u6587\u6863\uFF0C\u5E26\u6709\u7B80\u5355\u7684\u6837\u5F0F\u548C\u811A\u672C\uFF0C\u4F46\u65E0\u989D\u5916\u529F\u80FD\u3002"
    },
    purgeExport: {
      description: "\u6E05\u9664\u7AD9\u70B9\u7F13\u5B58\u4EE5\u91CD\u65B0\u5BFC\u51FA\u6240\u6709\u6587\u4EF6\u3002",
      clearCache: "\u6E05\u9664\u7F13\u5B58",
      confirmation: "\u60A8\u786E\u5B9A\u5417\uFF1F",
      clearWarning: "\u6B64\u64CD\u4F5C\u5C06\u5220\u9664\u7AD9\u70B9\u7684\u5143\u6570\u636E\uFF08\u4F46\u4E0D\u4F1A\u5220\u9664\u6240\u6709\u5BFC\u51FA\u7684HTML\u6587\u4EF6\uFF09\u3002\n\n\u8FD9\u5C06\u5F3A\u5236\u7AD9\u70B9\u91CD\u65B0\u5BFC\u51FA\u6240\u6709\u6587\u4EF6\u3002\n\n\u6B64\u5916\uFF0C\u5982\u679C\u60A8\u5728\u518D\u6B21\u5BFC\u51FA\u4E4B\u524D\u66F4\u6539\u4E86\u9009\u5B9A\u7684\u5BFC\u51FA\u6587\u4EF6\uFF0C\u67D0\u4E9B\u6587\u4EF6\u53EF\u80FD\u4F1A\u4FDD\u7559\u5728\u6587\u4EF6\u7CFB\u7EDF\u4E2D\u672A\u4F7F\u7528\u3002\n\n\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002"
    }
  },
  settings: {
    title: "HTML\u5BFC\u51FA\u8BBE\u7F6E",
    support: "\u652F\u6301\u8BE5\u63D2\u4EF6\u7684\u6301\u7EED\u5F00\u53D1\u3002",
    debug: "\u5C06\u8C03\u8BD5\u4FE1\u606F\u590D\u5236\u5230\u526A\u8D34\u677F",
    unavailableSetting: "\u26A0\uFE0F \u6B64\u529F\u80FD\u5728 {0} \u6A21\u5F0F\u4E0B\u4E0D\u53EF\u7528\u3002",
    pageFeatures: {
      title: "\u9875\u9762\u529F\u80FD",
      description: "\u63A7\u5236\u5BFC\u51FA\u9875\u9762\u7684\u5404\u79CD\u529F\u80FD\u3002"
    },
    baseFeatures: {
      info_selector: "\u7528\u4E8E\u5B9A\u4F4D\u5143\u7D20\u7684CSS\u9009\u62E9\u5668\u3002\u529F\u80FD\u5C06\u76F8\u5BF9\u4E8E\u8BE5\u5143\u7D20\u653E\u7F6E\u3002",
      info_type: "\u8BE5\u529F\u80FD\u5C06\u653E\u7F6E\u5728\u8BE5\u5143\u7D20\u4E4B\u524D\u3001\u4E4B\u540E\uFF0C\u8FD8\u662F\u5185\u90E8\uFF08\u5F00\u5934\u6216\u7ED3\u5C3E\uFF09\u3002",
      info_displayTitle: "\u529F\u80FD\u4E0A\u65B9\u663E\u793A\u7684\u63CF\u8FF0\u6027\u6807\u9898",
      info_featurePlacement: "\u5C06\u6B64\u529F\u80FD\u653E\u7F6E\u5728\u9875\u9762\u4E0A\u7684\u4F4D\u7F6E\uFF08\u76F8\u5BF9\u4E8E\u9009\u62E9\u5668\uFF09\u3002"
    },
    document: {
      title: "\u6587\u6863",
      description: "\u63A7\u5236\u6587\u6863\u672C\u8EAB\u7684\u8BBE\u7F6E",
      info_allowFoldingLists: "\u662F\u5426\u5141\u8BB8\u5217\u8868\u6298\u53E0",
      info_allowFoldingHeadings: "\u662F\u5426\u5141\u8BB8\u6807\u9898\u6298\u53E0",
      info_documentWidth: "\u6587\u6863\u7684\u5BBD\u5EA6"
    },
    sidebars: {
      title: "\u4FA7\u8FB9\u680F",
      description: "\u5305\u542B\u6587\u4EF6\u5BFC\u822A\u3001\u5927\u7EB2\u3001\u4E3B\u9898\u5207\u6362\u3001\u56FE\u5F62\u89C6\u56FE\u7B49\u6240\u6709\u5176\u4ED6\u529F\u80FD\u3002",
      info_allowResizing: "\u662F\u5426\u5141\u8BB8\u7528\u6237\u8C03\u6574\u4FA7\u8FB9\u680F\u7684\u5927\u5C0F",
      info_allowCollapsing: "\u662F\u5426\u5141\u8BB8\u7528\u6237\u6298\u53E0\u4FA7\u8FB9\u680F",
      info_rightDefaultWidth: "\u53F3\u4FA7\u8FB9\u680F\u7684\u9ED8\u8BA4\u5BBD\u5EA6",
      info_leftDefaultWidth: "\u5DE6\u4FA7\u8FB9\u680F\u7684\u9ED8\u8BA4\u5BBD\u5EA6"
    },
    fileNavigation: {
      title: "\u6587\u4EF6\u5BFC\u822A",
      description: "\u663E\u793A\u4E00\u4E2A\u6587\u4EF6\u6811\uFF0C\u7528\u4E8E\u6D4F\u89C8\u5BFC\u51FA\u7684\u5E93\u3002",
      info_showCustomIcons: "\u4E3A\u6811\u4E2D\u7684\u6BCF\u4E2A\u6587\u4EF6\u663E\u793A\u4E00\u4E2A\u81EA\u5B9A\u4E49\u56FE\u6807",
      info_showDefaultFolderIcons: "\u4E3A\u6811\u4E2D\u7684\u6BCF\u4E2A\u6587\u4EF6\u5939\u663E\u793A\u4E00\u4E2A\u9ED8\u8BA4\u56FE\u6807",
      info_showDefaultFileIcons: "\u4E3A\u6811\u4E2D\u7684\u6BCF\u4E2A\u6587\u4EF6\u663E\u793A\u4E00\u4E2A\u9ED8\u8BA4\u56FE\u6807",
      info_defaultFolderIcon: "\u7528\u4E8E\u6587\u4EF6\u5939\u7684\u56FE\u6807\u3002\u4F7F\u7528'lucide//'\u524D\u7F00\u4F7F\u7528Lucide\u56FE\u6807",
      info_defaultFileIcon: "\u7528\u4E8E\u6587\u4EF6\u7684\u56FE\u6807\u3002\u4F7F\u7528'lucide//'\u524D\u7F00\u4F7F\u7528Lucide\u56FE\u6807",
      info_defaultMediaIcon: "\u7528\u4E8E\u5A92\u4F53\u6587\u4EF6\u7684\u56FE\u6807\u3002\u4F7F\u7528'lucide//'\u524D\u7F00\u4F7F\u7528Lucide\u56FE\u6807",
      info_exposeStartingPath: "\u5728\u9875\u9762\u9996\u6B21\u52A0\u8F7D\u65F6\u662F\u5426\u663E\u793A\u6587\u4EF6\u6811\u4E2D\u7684\u5F53\u524D\u6587\u4EF6"
    },
    outline: {
      title: "\u5927\u7EB2",
      description: "\u663E\u793A\u5F53\u524D\u6587\u6863\u7684\u6807\u9898\u5217\u8868\u3002",
      info_startCollapsed: "\u5927\u7EB2\u662F\u5426\u5F00\u59CB\u6298\u53E0\uFF1F",
      info_minCollapseDepth: "\u5E94\u6298\u53E0\u6807\u9898\u7684\u6700\u5C0F\u6DF1\u5EA6"
    },
    graphView: {
      title: "\u56FE\u5F62\u89C6\u56FE",
      description: "\u663E\u793A\u60A8\u7684\u5E93\u7684\u53EF\u89C6\u5316\u4EA4\u4E92\u8868\u793A\u3002\uFF08\u6CE8\u610F\uFF1A\u6B64\u529F\u80FD\u4EC5\u9002\u7528\u4E8E\u6258\u7BA1\u5728Web\u670D\u52A1\u5668\u4E0A\u7684\u5BFC\u51FA\uFF09",
      info_showOrphanNodes: "\u663E\u793A\u672A\u8FDE\u63A5\u5230\u4EFB\u4F55\u5176\u4ED6\u8282\u70B9\u7684\u8282\u70B9\u3002",
      info_showAttachments: "\u5C06\u9644\u4EF6\uFF08\u5982\u56FE\u50CF\u548CPDF\uFF09\u663E\u793A\u4E3A\u56FE\u4E2D\u7684\u8282\u70B9\u3002",
      info_allowGlobalGraph: "\u5141\u8BB8\u7528\u6237\u67E5\u770B\u6240\u6709\u8282\u70B9\u7684\u5168\u5C40\u56FE\u3002",
      info_allowExpand: "\u5141\u8BB8\u7528\u6237\u5C06\u56FE\u5F62\u89C6\u56FE\u5F39\u51FA\u81F3\u5168\u5C4F\u663E\u793A\u3002",
      info_attractionForce: "\u94FE\u63A5\u8282\u70B9\u4E4B\u95F4\u7684\u5438\u5F15\u529B\u6709\u591A\u5927\uFF1F\u5438\u5F15\u529B\u8D8A\u5927\uFF0C\u56FE\u5F62\u5C06\u663E\u5F97\u8D8A\u96C6\u4E2D\u3002",
      info_linkLength: "\u8282\u70B9\u4E4B\u95F4\u7684\u94FE\u63A5\u5E94\u6709\u591A\u957F\uFF1F\u94FE\u63A5\u8D8A\u77ED\uFF0C\u8282\u70B9\u5C06\u805A\u96C6\u5F97\u66F4\u7D27\u5BC6\u3002",
      info_repulsionForce: "\u8282\u70B9\u4E4B\u95F4\u7684\u6392\u65A5\u529B\u6709\u591A\u5927\uFF1F\u6392\u65A5\u529B\u8D8A\u5927\uFF0C\u5206\u79BB\u7684\u8282\u70B9\u5C06\u5206\u6563\u5F97\u8D8A\u8FDC\u3002",
      info_centralForce: "\u8282\u70B9\u88AB\u5438\u5F15\u5230\u4E2D\u5FC3\u7684\u7A0B\u5EA6\u6709\u591A\u5927\uFF1F\u5438\u5F15\u529B\u8D8A\u5927\uFF0C\u56FE\u5F62\u770B\u8D77\u6765\u8D8A\u5BC6\u96C6\u548C\u5448\u5706\u5F62\u3002",
      info_edgePruning: "\u8D85\u8FC7\u6B64\u9608\u503C\u957F\u5EA6\u7684\u8FB9\u5C06\u4E0D\u4F1A\u663E\u793A\uFF0C\u4F46\u4ECD\u7136\u53C2\u4E0E\u56FE\u5F62\u8BA1\u7B97\u3002\u8FD9\u6709\u52A9\u4E8E\u5927\u578B\u590D\u6742\u56FE\u5F62\u663E\u5F97\u66F4\u52A0\u6709\u5E8F\u3002\u60AC\u505C\u5728\u8282\u70B9\u4E0A\u65F6\uFF0C\u4ECD\u4F1A\u663E\u793A\u8FD9\u4E9B\u94FE\u63A5\u3002",
      info_minNodeRadius: "\u6700\u5C0F\u8282\u70B9\u7684\u5927\u5C0F\u662F\u591A\u5C11\uFF1F\u8282\u70B9\u8D8A\u5C0F\uFF0C\u5438\u5F15\u5176\u4ED6\u8282\u70B9\u7684\u529B\u91CF\u8D8A\u5C0F\u3002",
      info_maxNodeRadius: "\u6700\u5927\u8282\u70B9\u7684\u5927\u5C0F\u662F\u591A\u5C11\uFF1F\u8282\u70B9\u5927\u5C0F\u53D6\u51B3\u4E8E\u5B83\u4EEC\u7684\u94FE\u63A5\u6570\u91CF\u3002\u8282\u70B9\u8D8A\u5927\uFF0C\u5438\u5F15\u5176\u4ED6\u8282\u70B9\u7684\u529B\u91CF\u8D8A\u5927\u3002\u8FD9\u6709\u52A9\u4E8E\u56F4\u7ED5\u6700\u91CD\u8981\u7684\u8282\u70B9\u5F62\u6210\u826F\u597D\u7684\u5206\u7EC4\u3002"
    },
    search: {
      title: "\u641C\u7D22\u680F",
      description: "\u5141\u8BB8\u60A8\u641C\u7D22\u5E93\uFF0C\u5217\u51FA\u5339\u914D\u7684\u6587\u4EF6\u548C\u6807\u9898\u3002\uFF08\u6CE8\u610F\uFF1A\u6B64\u529F\u80FD\u4EC5\u9002\u7528\u4E8E\u6258\u7BA1\u5728Web\u670D\u52A1\u5668\u4E0A\u7684\u5BFC\u51FA\uFF09",
      placeholder: "\u641C\u7D22..."
    },
    linkPreview: {
      title: "\u94FE\u63A5\u9884\u89C8",
      description: "\u5F53\u9F20\u6807\u60AC\u505C\u5728\u6307\u5411\u5176\u4ED6\u6587\u6863\u7684\u5185\u90E8\u94FE\u63A5\u4E0A\u65F6\u663E\u793A\u9884\u89C8\u3002"
    },
    themeToggle: {
      title: "\u4E3B\u9898\u5207\u6362",
      description: "\u5141\u8BB8\u52A8\u6001\u5207\u6362\u6697\u8272\u548C\u4EAE\u8272\u4E3B\u9898\u3002"
    },
    customHead: {
      title: "\u81EA\u5B9A\u4E49HTML / JS",
      description: "\u63D2\u5165\u4E00\u4E2A\u6307\u5B9A\u7684HTML\u6587\u4EF6\u5230\u9875\u9762\u4E0A\uFF0C\u53EF\u5305\u542B\u81EA\u5B9A\u4E49JS\u6216CSS\u3002",
      info_sourcePath: "\u5305\u542B\u7684\u672C\u5730HTML\u6587\u4EF6\u8DEF\u5F84\u3002",
      validationError: "\u5FC5\u987B\u662F\u4E00\u4E2A\u6307\u5411HTML\u6587\u4EF6\u7684\u8DEF\u5F84\u3002"
    },
    backlinks: {
      title: "\u53CD\u5411\u94FE\u63A5",
      description: "\u663E\u793A\u94FE\u63A5\u5230\u5F53\u524D\u6587\u6863\u7684\u6240\u6709\u6587\u6863\u3002"
    },
    tags: {
      title: "\u6807\u7B7E",
      description: "\u663E\u793A\u5F53\u524D\u6253\u5F00\u6587\u6863\u7684\u6807\u7B7E\u3002",
      info_showInlineTags: "\u5728\u9875\u9762\u9876\u90E8\u663E\u793A\u6587\u6863\u5185\u5B9A\u4E49\u7684\u6807\u7B7E\u3002",
      info_showFrontmatterTags: "\u5728\u9875\u9762\u9876\u90E8\u663E\u793A\u6587\u6863\u524D\u7F6E\u533A\u57DF\u5B9A\u4E49\u7684\u6807\u7B7E\u3002"
    },
    aliases: {
      title: "\u522B\u540D",
      description: "\u663E\u793A\u5F53\u524D\u6587\u6863\u7684\u522B\u540D\u3002"
    },
    properties: {
      title: "\u5C5E\u6027",
      description: "\u4EE5\u8868\u683C\u5F62\u5F0F\u663E\u793A\u5F53\u524D\u6587\u6863\u7684\u6240\u6709\u5C5E\u6027\u3002",
      info_hideProperties: "\u8981\u4ECE\u5C5E\u6027\u89C6\u56FE\u4E2D\u9690\u85CF\u7684\u5C5E\u6027\u5217\u8868"
    },
    rss: {
      title: "RSS",
      description: "\u4E3A\u5BFC\u51FA\u7684\u7AD9\u70B9\u751F\u6210RSS\u6E90",
      info_siteUrl: "\u6B64\u7AD9\u70B9\u5C06\u6258\u7BA1\u7684URL",
      info_siteUrlPlaceholder: "https://example.com/mysite",
      info_authorName: "\u7AD9\u70B9\u4F5C\u8005\u7684\u540D\u79F0"
    },
    styleOptionsSection: {
      title: "\u6837\u5F0F\u9009\u9879",
      description: "\u914D\u7F6E\u5BFC\u51FA\u4E2D\u5305\u542B\u7684\u6837\u5F0F"
    },
    makeOfflineCompatible: {
      title: "\u4F7F\u9875\u9762\u79BB\u7EBF\u517C\u5BB9",
      description: "\u4E0B\u8F7D\u6240\u6709\u5728\u7EBF\u8D44\u6E90\u3001\u56FE\u50CF\u3001\u811A\u672C\uFF0C\u4F7F\u9875\u9762\u53EF\u4EE5\u79BB\u7EBF\u67E5\u770B\uFF0C\u6216\u8005\u4F7F\u7F51\u7AD9\u4E0D\u4F9D\u8D56CDN\u3002"
    },
    includePluginCSS: {
      title: "\u5305\u542B\u63D2\u4EF6\u7684CSS",
      description: "\u5728\u5BFC\u51FA\u7684HTML\u4E2D\u5305\u542B\u4EE5\u4E0B\u63D2\u4EF6\u7684CSS\u3002\u5982\u679C\u63D2\u4EF6\u529F\u80FD\u672A\u6B63\u786E\u5448\u73B0\uFF0C\u8BF7\u5C1D\u8BD5\u5C06\u63D2\u4EF6\u6DFB\u52A0\u5230\u6B64\u5217\u8868\u4E2D\u3002\u907F\u514D\u65E0\u5FC5\u8981\u6DFB\u52A0\u63D2\u4EF6\uFF0C\u56E0\u4E3A\u66F4\u591A\u7684CSS\u4F1A\u589E\u52A0\u9875\u9762\u7684\u52A0\u8F7D\u65F6\u95F4\u3002"
    },
    includeStyleCssIds: {
      title: "\u5305\u542B\u7279\u5B9AID\u7684\u6837\u5F0F",
      description: "\u5728\u5BFC\u51FA\u7684HTML\u4E2D\u5305\u542B\u5E26\u6709\u4EE5\u4E0BID\u7684\u6837\u5F0F\u6807\u7B7E\u7684CSS\u3002"
    },
    generalSettingsSection: {
      title: "\u901A\u7528\u8BBE\u7F6E",
      description: "\u63A7\u5236\u7F51\u7AD9\u56FE\u6807\u548C\u7AD9\u70B9\u5143\u6570\u636E\u7B49\u7B80\u5355\u8BBE\u7F6E"
    },
    favicon: {
      title: "\u7F51\u7AD9\u56FE\u6807",
      description: "\u7AD9\u70B9\u7684\u7F51\u7AD9\u56FE\u6807\u7684\u672C\u5730\u8DEF\u5F84"
    },
    siteName: {
      title: "\u7AD9\u70B9\u540D\u79F0",
      description: "\u5E93/\u5BFC\u51FA\u7AD9\u70B9\u7684\u540D\u79F0"
    },
    iconEmojiStyle: {
      title: "\u56FE\u6807\u8868\u60C5\u7B26\u53F7\u6837\u5F0F",
      description: "\u7528\u4E8E\u81EA\u5B9A\u4E49\u56FE\u6807\u7684\u8868\u60C5\u7B26\u53F7\u6837\u5F0F"
    },
    themeName: {
      title: "\u4E3B\u9898",
      description: "\u5BFC\u51FA\u4F7F\u7528\u7684\u5DF2\u5B89\u88C5\u4E3B\u9898"
    },
    exportSettingsSection: {
      title: "\u5BFC\u51FA\u8BBE\u7F6E",
      description: "\u63A7\u5236\u66F4\u591A\u6280\u672F\u6027\u5BFC\u51FA\u8BBE\u7F6E\uFF0C\u5982\u63A7\u5236\u94FE\u63A5\u7684\u751F\u6210\u65B9\u5F0F"
    },
    relativeHeaderLinks: {
      title: "\u4F7F\u7528\u76F8\u5BF9\u6807\u9898\u94FE\u63A5",
      description: "\u4E3A\u6807\u9898\u4F7F\u7528\u76F8\u5BF9\u94FE\u63A5\u800C\u4E0D\u662F\u7EDD\u5BF9\u94FE\u63A5"
    },
    slugifyPaths: {
      title: "\u8DEF\u5F84\u522B\u540D\u5316",
      description: "\u4F7F\u6240\u6709\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\u7B26\u5408\u7F51\u7EDC\u98CE\u683C\uFF08\u5C0F\u5199\uFF0C\u65E0\u7A7A\u683C\uFF09"
    },
    addPageIcon: {
      title: "\u6DFB\u52A0\u9875\u9762\u56FE\u6807",
      description: "\u5728\u9875\u9762\u6807\u9898\u4E2D\u6DFB\u52A0\u6587\u4EF6\u7684\u56FE\u6807"
    },
    obsidianSettingsSection: {
      title: "Obsidian\u8BBE\u7F6E",
      description: "\u63A7\u5236\u63D2\u4EF6\u5728Obsidian\u4E2D\u7684\u8FD0\u884C\u65B9\u5F0F"
    },
    logLevel: {
      title: "\u65E5\u5FD7\u7EA7\u522B",
      description: "\u8BBE\u7F6E\u5728\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u7684\u65E5\u5FD7\u7EA7\u522B"
    },
    titleProperty: {
      title: "\u6807\u9898\u5C5E\u6027",
      description: "\u7528\u4F5C\u6587\u6863\u6807\u9898\u7684\u5C5E\u6027"
    }
  }
};

// src/plugin/translations/en.ts
var language2 = {
  cancel: "Cancel",
  browse: "Browse",
  pathInputPlaceholder: "Type or browse a path...",
  pathValidations: {
    noEmpty: "Path cannot be empty",
    mustExist: "Path does not exist",
    noTilde: "Home directory with tilde (~) is not allowed",
    noAbsolute: "Path cannot be absolute",
    noRelative: "Path cannot be relative",
    noFiles: "Path cannot be a file",
    noFolders: "Path cannot be a directory",
    mustHaveExtension: "Path must have ext: {0}"
  },
  updateAvailable: "Update Available",
  exportAsHTML: "Export as HTML",
  exportModal: {
    title: "Export to HTML",
    exportAsTitle: "Export {0} as HTML",
    moreOptions: "More options located on the plugin settings page.",
    openAfterExport: "Open after export",
    exportButton: "Export",
    filePicker: {
      title: "Select all files in exported vault",
      selectAll: "Select All",
      save: "Save"
    },
    currentSite: {
      noSite: "This path currently contains no exported website.",
      oldSite: "This path contains an export created with a different version of the plugin.",
      pathContainsSite: "Site",
      fileCount: "File count",
      lastExported: "Last exported"
    },
    exportMode: {
      title: "Export Mode",
      online: "Use this if your files will be accessed online (via an http server).",
      local: "This will export a single (large) html file containing the whole export. Only use this for offline sharing.",
      rawDocuments: "Export plain html documents with simple style and scripts but no additional features."
    },
    purgeExport: {
      description: "Clear the site cache to re-export all files.",
      clearCache: "Clear Cache",
      confirmation: "Are you sure?",
      clearWarning: "This will delete the site metadata (but not all the exported html).\n\nThis will force the site to re-export all files.\n\nAlso if you change which files are selected for export before exporting again some files may be left on your file system unused.\n\nThis action cannot be undone."
    }
  },
  settings: {
    title: "HTML Export Settings",
    support: "Support the continued development of this plugin.",
    debug: "Copy debug info to clipboard",
    unavailableSetting: "\u26A0\uFE0F This feature is not available in {0} mode.",
    pageFeatures: {
      title: "Page Features",
      description: "Control various features of the exported page."
    },
    baseFeatures: {
      info_selector: "CSS selector for an element. The feature will be placed relative to this element.",
      info_type: "Will this feature be placed before, after, or inside (at the beggining or end).",
      info_displayTitle: "Descriptive title to show above the feature",
      info_featurePlacement: "Where to place this feature on the page. (Relative to the selector)"
    },
    document: {
      title: "Document",
      description: "Control settings on the document itself",
      info_allowFoldingLists: "Whether or not to allow lists to be folded",
      info_allowFoldingHeadings: "Whether or not to allow headings to be folded",
      info_documentWidth: "The width of the document"
    },
    sidebars: {
      title: "Sidebars",
      description: "Holds all the other features like the file nav, outline, theme toggle, graph view, etc...",
      info_allowResizing: "Whether or not to allow the sidebars to be resized",
      info_allowCollapsing: "Whether or not to allow the sidebars to be collapsed",
      info_rightDefaultWidth: "The default width of the right sidebar",
      info_leftDefaultWidth: "The default width of the left sidebar"
    },
    fileNavigation: {
      title: "File Navigation",
      description: "Shows a file tree used to explore the exported vault.",
      info_showCustomIcons: "Show custom icons for files and folders",
      info_showDefaultFolderIcons: "Show a default icon of a folder for every folder in the tree",
      info_showDefaultFileIcons: "Show a default icon of a file for every file in the tree",
      info_defaultFolderIcon: "The icon to use for folders. Prefix with 'lucide//' to use a Lucide icon",
      info_defaultFileIcon: "The icon to use for files. Prefix with 'lucide//' to use a Lucide icon",
      info_defaultMediaIcon: "The icon to use for media files. Prefix with 'lucide//' to use a Lucide icon",
      info_exposeStartingPath: "Whether or not to show the current file in the file tree when the page is first loaded"
    },
    outline: {
      title: "Outline",
      description: "Shows a list of the open document's headers.",
      info_startCollapsed: "Should the outline start collapsed?",
      info_minCollapseDepth: "Only allow outline items to be collapsed if they are at least this many levels deep in the tree."
    },
    graphView: {
      title: "Graph View",
      description: "Shows a visual, interactive representation of your vault. (NOTE: this is only available for exports hosted on a web server)",
      info_showOrphanNodes: "Show nodes that are not connected to any other nodes.",
      info_showAttachments: "Show attachments like images and PDFs as nodes in the graph.",
      info_allowGlobalGraph: "Allow the user to view the global graph of all nodes.",
      info_allowExpand: "Allow the user to pop-out the graph view to take up the whole screen",
      info_attractionForce: "How much should linked nodes attract each other? This will make the graph appear more clustered.",
      info_linkLength: "How long should the links between nodes be? The shorter the links the more connected nodes will cluster together.",
      info_repulsionForce: "How much should nodes repel each other? This will make disconnected parts more spread out.",
      info_centralForce: "How much should nodes be attracted to the center? This will make the graph appear more dense and circular.",
      info_edgePruning: "Edges with a length above this threshold will not be rendered, however they will still contribute to the simulation. This can help large tangled graphs look more organised. Hovering over a node will still display these links.",
      info_minNodeRadius: "How small should the smallest nodes be? The smaller a node is the less it will attract other nodes.",
      info_maxNodeRadius: "How large should the largest nodes be? Nodes are sized by how many links they have. The larger a node is the more it will attract other nodes. This can be used to create a good grouping around the most important nodes."
    },
    search: {
      title: "Search Bar",
      description: "Allows you search the vault, listing matching files and headers. (NOTE: this is only available for exports hosted on a web server)",
      placeholder: "Search..."
    },
    linkPreview: {
      title: "Link Previews",
      description: "Show hover previews when you hover over internal links to other documents."
    },
    themeToggle: {
      title: "Theme Toggle",
      description: "Allows you to switch between dark and light theme dynamically."
    },
    customHead: {
      title: "Custom HTML / JS",
      description: "Insert a given .html file onto the page which can include custom JS or CSS",
      info_sourcePath: "The local path to the source .html file which will be included.",
      validationError: "Must be a path to a .html file"
    },
    backlinks: {
      title: "Backlinks",
      description: "Displays all the documents which link to the currently opened document."
    },
    tags: {
      title: "Tags",
      description: "Displays the tags for the currently opened document.",
      info_showInlineTags: "Show tags defined inside the document at the top of the page.",
      info_showFrontmatterTags: "Show tags defined in the frontmatter of the document at the top of the page."
    },
    aliases: {
      title: "Aliases",
      description: "Displays the aliases for the currently opened document."
    },
    properties: {
      title: "Properties",
      description: "Displays all the properties of the currently opened document as a table.",
      info_hideProperties: "A list of properties to hide from the properties view"
    },
    rss: {
      title: "RSS",
      description: "Generate an RSS feed for the exported site",
      info_siteUrl: "The url that this site will be hosted at",
      info_siteUrlPlaceholder: "https://example.com/mysite",
      info_authorName: "The name of the author of the site"
    },
    styleOptionsSection: {
      title: "Style Options",
      description: "Configure which styles are included with the export"
    },
    makeOfflineCompatible: {
      title: "Make Offline Compatible",
      description: "Download any online assets / images / scripts so the page can be viewed offline. Or so the website does not depend on a CDN."
    },
    includePluginCSS: {
      title: "Include CSS from Plugins",
      description: "Include the CSS from the following plugins in the exported HTML. If plugin features aren't rendering correctly, try adding the plugin to this list. Avoid adding plugins unless you specifically notice a problem, because more CSS will increase the loading time of your page."
    },
    includeStyleCssIds: {
      title: "Include Styles with IDs",
      description: "Include CSS from style tags with the following IDs in the exported HTML"
    },
    generalSettingsSection: {
      title: "General Settings",
      description: "Control simple settings like the favicon and site metadata"
    },
    favicon: {
      title: "Favicon image",
      description: "The local path to the favicon for the site"
    },
    siteName: {
      title: "Site Name",
      description: "The name of the vault / exported site"
    },
    iconEmojiStyle: {
      title: "Icon emoji style",
      description: "The style of emoji to use for custom icons"
    },
    themeName: {
      title: "Theme",
      description: "The installed theme to use for the export"
    },
    exportSettingsSection: {
      title: "Export Settings",
      description: "Control more technical export settings like controling how links are generated"
    },
    relativeHeaderLinks: {
      title: "Use Relative Header Links",
      description: "Use relative links for headers instead of absolute links"
    },
    slugifyPaths: {
      title: "Slugify Paths",
      description: "Make all paths and file names web style (lowercase, no spaces)"
    },
    addPageIcon: {
      title: "Add Page Icon",
      description: "Add the file's icon to the page header"
    },
    obsidianSettingsSection: {
      title: "Obsidian Settings",
      description: "Control how the plugin functions inside Obsidian"
    },
    logLevel: {
      title: "Log Level",
      description: "Set the level of logging to display in the console"
    },
    titleProperty: {
      title: "Title Property",
      description: "The property to use as the title of the document"
    }
  }
};

// src/plugin/translations/it.ts
var language3 = {
  cancel: "Annulla",
  browse: "Sfoglia",
  pathInputPlaceholder: "Digita o sfoglia un percorso...",
  pathValidations: {
    noEmpty: "Il percorso non pu\xF2 essere vuoto",
    mustExist: "Il percorso non esiste",
    noTilde: "La directory home con tilde (~) non \xE8 consentita",
    noAbsolute: "Il percorso non pu\xF2 essere assoluto",
    noRelative: "Il percorso non pu\xF2 essere relativo",
    noFiles: "Il percorso non pu\xF2 essere un file",
    noFolders: "Il percorso non pu\xF2 essere una directory",
    mustHaveExtension: "Il percorso deve avere estensione: {0}"
  },
  updateAvailable: "Aggiornamento disponibile",
  exportAsHTML: "Esporta come HTML",
  exportModal: {
    title: "Esporta in HTML",
    exportAsTitle: "Esporta {0} come HTML",
    moreOptions: "Altre opzioni nella pagina delle impostazioni del plugin.",
    openAfterExport: "Apri dopo l'esportazione",
    exportButton: "Esporta",
    filePicker: {
      title: "Seleziona tutti i file nel vault esportato",
      selectAll: "Seleziona tutto",
      save: "Salva"
    },
    currentSite: {
      noSite: "Questo percorso attualmente non contiene un sito esportato.",
      oldSite: "Questo percorso contiene un'esportazione creata con una versione diversa del plugin.",
      pathContainsSite: "Sito",
      fileCount: "Numero di file",
      lastExported: "Ultima esportazione"
    },
    exportMode: {
      title: "Modalit\xE0 di Esportazione",
      online: "Usa questa opzione se i tuoi file saranno accessibili online (tramite un server http).",
      local: "Esporta un singolo file HTML (grande) con l'intera esportazione. Usalo solo per la condivisione offline.",
      rawDocuments: "Esporta documenti HTML semplici con stile e script di base, senza funzioni aggiuntive."
    },
    purgeExport: {
      description: "Cancella la cache del sito per riesportare tutti i file.",
      clearCache: "Cancella cache",
      confirmation: "Sei sicuro?",
      clearWarning: "Questo eliminer\xE0 i metadati del sito (ma non tutti gli HTML esportati).\n\nCi\xF2 forzer\xE0 la riesportazione di tutti i file.\n\nInoltre, se cambi i file selezionati per l'esportazione, alcuni potrebbero rimanere inutilizzati sul sistema.\n\nQuesta azione non pu\xF2 essere annullata."
    }
  },
  settings: {
    title: "Impostazioni Esportazione HTML",
    support: "Supporta lo sviluppo continuo di questo plugin.",
    debug: "Copia info di debug negli appunti",
    unavailableSetting: "\u26A0\uFE0F Questa funzionalit\xE0 non \xE8 disponibile in modalit\xE0 {0}.",
    pageFeatures: {
      title: "Funzionalit\xE0 della pagina",
      description: "Controlla varie funzionalit\xE0 della pagina esportata."
    },
    baseFeatures: {
      info_selector: "Selettore CSS per un elemento. La funzionalit\xE0 verr\xE0 posizionata rispetto a questo elemento.",
      info_type: "Dove posizionare questa funzionalit\xE0: prima, dopo o dentro (all'inizio o alla fine).",
      info_displayTitle: "Titolo descrittivo da mostrare sopra la funzionalit\xE0",
      info_featurePlacement: "Dove posizionare questa funzionalit\xE0 nella pagina. (Rispetto al selettore)"
    },
    document: {
      title: "Documento",
      description: "Controlla le impostazioni del documento",
      info_allowFoldingLists: "Permettere o meno il piegamento delle liste",
      info_allowFoldingHeadings: "Permettere o meno il piegamento dei titoli",
      info_documentWidth: "Larghezza del documento"
    },
    sidebars: {
      title: "Barre laterali",
      description: "Contiene altre funzionalit\xE0 come navigazione file, struttura, cambio tema, vista grafo, ecc.",
      info_allowResizing: "Permettere o meno il ridimensionamento delle barre laterali",
      info_allowCollapsing: "Permettere o meno il collasso delle barre laterali",
      info_rightDefaultWidth: "Larghezza predefinita della barra laterale destra",
      info_leftDefaultWidth: "Larghezza predefinita della barra laterale sinistra"
    },
    fileNavigation: {
      title: "Navigazione File",
      description: "Mostra un albero di file per esplorare il vault esportato.",
      info_showCustomIcons: "Mostra un'icona personalizzata per ogni file nell'albero",
      info_showDefaultFolderIcons: "Mostra un'icona predefinita per ogni cartella nell'albero",
      info_showDefaultFileIcons: "Mostra un'icona predefinita per ogni file nell'albero",
      info_defaultFolderIcon: `Icona da usare per le cartelle. Usa il prefisso "lucide//" per usare un'icona Lucide`,
      info_defaultFileIcon: `Icona da usare per i file. Usa il prefisso "lucide//" per usare un'icona Lucide`,
      info_defaultMediaIcon: `Icona da usare per i file multimediali. Usa il prefisso "lucide//" per usare un'icona Lucide`,
      info_exposeStartingPath: "Mostra il file corrente nell'albero all'apertura della pagina"
    },
    outline: {
      title: "Struttura",
      description: "Mostra un elenco dei titoli del documento aperto.",
      info_startCollapsed: "La struttura deve partire collassata?",
      info_minCollapseDepth: "Profondit\xE0 minima a cui i titoli devono essere collassati"
    },
    graphView: {
      title: "Vista Grafo",
      description: "Mostra una rappresentazione visiva e interattiva del vault. (NOTA: disponibile solo per esportazioni su un server web)",
      info_showOrphanNodes: "Mostra nodi non collegati ad altri nodi.",
      info_showAttachments: "Mostra allegati come immagini e PDF come nodi nel grafo.",
      info_allowGlobalGraph: "Permetti la visualizzazione del grafo globale di tutti i nodi.",
      info_allowExpand: "Permetti di espandere la vista grafo a schermo intero",
      info_attractionForce: "Quanto dovrebbero attrarsi i nodi collegati? Questo render\xE0 il grafo pi\xF9 concentrato.",
      info_linkLength: "Quanto devono essere lunghi i collegamenti tra i nodi? Collegamenti pi\xF9 corti rendono i nodi pi\xF9 vicini.",
      info_repulsionForce: "Quanto dovrebbero respingersi i nodi? Questo render\xE0 le parti disconnesse pi\xF9 distanti.",
      info_centralForce: "Quanto dovrebbero attrarsi i nodi verso il centro? Questo render\xE0 il grafo pi\xF9 denso e circolare.",
      info_edgePruning: "I collegamenti oltre questa soglia non verranno visualizzati, ma contribuiranno comunque alla simulazione. Passando il mouse su un nodo verranno comunque mostrati.",
      info_minNodeRadius: "Quanto devono essere piccoli i nodi pi\xF9 piccoli? Nodi pi\xF9 piccoli attrarranno meno altri nodi.",
      info_maxNodeRadius: "Quanto devono essere grandi i nodi pi\xF9 grandi? I nodi sono dimensionati in base ai collegamenti. Nodi pi\xF9 grandi attrarranno pi\xF9 nodi, creando gruppi intorno a quelli pi\xF9 importanti."
    },
    search: {
      title: "Barra di Ricerca",
      description: "Permette di cercare nel vault, elencando file e titoli corrispondenti. (NOTA: disponibile solo per esportazioni su un server web)",
      placeholder: "Cerca..."
    },
    linkPreview: {
      title: "Anteprime dei Collegamenti",
      description: "Mostra anteprime al passaggio del mouse sui collegamenti interni ad altri documenti."
    },
    themeToggle: {
      title: "Cambio Tema",
      description: "Permette di passare dinamicamente tra tema scuro e chiaro."
    },
    customHead: {
      title: "HTML / JS Personalizzato",
      description: "Inserisci un file .html nella pagina, che pu\xF2 includere JS o CSS personalizzato",
      info_sourcePath: "Percorso locale del file .html da includere.",
      validationError: "Deve essere un percorso a un file .html"
    },
    backlinks: {
      title: "Collegamenti di ritorno",
      description: "Mostra tutti i documenti che si collegano al documento attualmente aperto."
    },
    tags: {
      title: "Etichette",
      description: "Mostra le etichette del documento attualmente aperto.",
      info_showInlineTags: "Mostra le etichette definite all'interno del documento in cima alla pagina.",
      info_showFrontmatterTags: "Mostra le etichette definite nell'intestazione del documento in cima alla pagina."
    },
    aliases: {
      title: "Alias",
      description: "Mostra gli alias del documento attualmente aperto."
    },
    properties: {
      title: "Propriet\xE0",
      description: "Mostra tutte le propriet\xE0 del documento attualmente aperto in una tabella.",
      info_hideProperties: "Un elenco di propriet\xE0 da nascondere nella vista delle propriet\xE0"
    },
    rss: {
      title: "RSS",
      description: "Genera un feed RSS per il sito esportato",
      info_siteUrl: "L'URL su cui sar\xE0 ospitato questo sito",
      info_siteUrlPlaceholder: "https://example.com/mysite",
      info_authorName: "Il nome dell'autore del sito"
    },
    styleOptionsSection: {
      title: "Opzioni di Stile",
      description: "Configura quali stili includere nell'esportazione"
    },
    makeOfflineCompatible: {
      title: "Rendi compatibile offline",
      description: "Scarica risorse, immagini o script online per visualizzare la pagina offline o per non dipendere da una CDN."
    },
    includePluginCSS: {
      title: "Includi CSS dai plugin",
      description: "Includi il CSS dei seguenti plugin nell'HTML esportato. Se le funzionalit\xE0 dei plugin non si visualizzano correttamente, prova ad aggiungere il plugin a questo elenco. Evita di aggiungere plugin se non noti problemi specifici, poich\xE9 pi\xF9 CSS aumenter\xE0 il tempo di caricamento della pagina."
    },
    includeStyleCssIds: {
      title: "Includi stili con ID",
      description: "Includi CSS dai tag di stile con i seguenti ID nell'HTML esportato."
    },
    generalSettingsSection: {
      title: "Impostazioni Generali",
      description: "Controlla impostazioni semplici come favicon e metadati del sito"
    },
    favicon: {
      title: "Immagine Favicon",
      description: "Il percorso locale della favicon per il sito"
    },
    siteName: {
      title: "Nome del Sito",
      description: "Il nome del vault / sito esportato"
    },
    iconEmojiStyle: {
      title: "Stile emoji per le icone",
      description: "Lo stile di emoji da utilizzare per le icone personalizzate"
    },
    themeName: {
      title: "Tema",
      description: "Il tema installato da utilizzare per l'esportazione"
    },
    exportSettingsSection: {
      title: "Impostazioni di Esportazione",
      description: "Controlla impostazioni tecniche pi\xF9 avanzate come la generazione dei link"
    },
    relativeHeaderLinks: {
      title: "Usa Link Relativi per i Titoli",
      description: "Usa link relativi per i titoli invece di link assoluti"
    },
    slugifyPaths: {
      title: "Percorsi Slugificati",
      description: "Rendi tutti i percorsi e i nomi dei file in stile web (minuscoli, senza spazi)"
    },
    addPageIcon: {
      title: "Aggiungi Icona Pagina",
      description: "Aggiungi l'icona del file all'intestazione della pagina"
    },
    obsidianSettingsSection: {
      title: "Impostazioni Obsidian",
      description: "Controlla come funziona il plugin all'interno di Obsidian"
    },
    logLevel: {
      title: "Livello di Log",
      description: "Imposta il livello di registrazione da visualizzare nella console"
    },
    titleProperty: {
      title: "Propriet\xE0 del Titolo",
      description: "La propriet\xE0 da utilizzare come titolo del documento"
    }
  }
};

// src/plugin/translations/uk.ts
var language4 = {
  cancel: "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
  browse: "\u041E\u0433\u043B\u044F\u0434",
  pathInputPlaceholder: "\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u0430\u0431\u043E \u043E\u0431\u0435\u0440\u0456\u0442\u044C \u0448\u043B\u044F\u0445...",
  pathValidations: {
    noEmpty: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C",
    mustExist: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u0456\u0441\u043D\u0443\u0454",
    noTilde: "\u0414\u043E\u043C\u0430\u0448\u043D\u0456\u0439 \u043A\u0430\u0442\u0430\u043B\u043E\u0433 \u0437 \u0442\u0438\u043B\u044C\u0434\u043E\u044E (~) \u043D\u0435 \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454\u0442\u044C\u0441\u044F",
    noAbsolute: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0438\u043C",
    noRelative: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u0438\u043C",
    noFiles: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u0444\u0430\u0439\u043B\u043E\u043C",
    noFolders: "\u0428\u043B\u044F\u0445 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u043C",
    mustHaveExtension: "\u0428\u043B\u044F\u0445 \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0430\u0442\u0438 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F: {0}"
  },
  updateAvailable: "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0435 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F",
  exportAsHTML: "\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u044F\u043A HTML",
  exportModal: {
    title: "\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u0432 HTML",
    exportAsTitle: "\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 {0} \u044F\u043A HTML",
    moreOptions: "\u0411\u0456\u043B\u044C\u0448\u0435 \u043E\u043F\u0446\u0456\u0439 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u0446\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u043F\u043B\u0430\u0433\u0456\u043D\u0430.",
    openAfterExport: "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043F\u0456\u0441\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443",
    exportButton: "\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438",
    filePicker: {
      title: "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0432\u0441\u0456 \u0444\u0430\u0439\u043B\u0438 \u0432 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u043C\u0443 \u0441\u0445\u043E\u0432\u0438\u0449\u0456",
      selectAll: "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0432\u0441\u0435",
      save: "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438"
    },
    currentSite: {
      noSite: "\u0426\u0435\u0439 \u0448\u043B\u044F\u0445 \u043D\u0430\u0440\u0430\u0437\u0456 \u043D\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u0433\u043E \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0443.",
      oldSite: "\u0426\u0435\u0439 \u0448\u043B\u044F\u0445 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0435\u043A\u0441\u043F\u043E\u0440\u0442, \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u0438\u0439 \u0437 \u0456\u043D\u0448\u043E\u044E \u0432\u0435\u0440\u0441\u0456\u0454\u044E \u043F\u043B\u0430\u0433\u0456\u043D\u0430.",
      pathContainsSite: "\u0421\u0430\u0439\u0442",
      fileCount: "\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0444\u0430\u0439\u043B\u0456\u0432",
      lastExported: "\u041E\u0441\u0442\u0430\u043D\u043D\u0456\u0439 \u0435\u043A\u0441\u043F\u043E\u0440\u0442"
    },
    exportMode: {
      title: "\u0420\u0435\u0436\u0438\u043C \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443",
      online: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0446\u0435\u0439 \u0440\u0435\u0436\u0438\u043C, \u044F\u043A\u0449\u043E \u0432\u0430\u0448\u0456 \u0444\u0430\u0439\u043B\u0438 \u0431\u0443\u0434\u0443\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u043E\u043D\u043B\u0430\u0439\u043D (\u0447\u0435\u0440\u0435\u0437 http-\u0441\u0435\u0440\u0432\u0435\u0440).",
      local: "\u0426\u0435\u0439 \u0440\u0435\u0436\u0438\u043C \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0454 \u043E\u0434\u0438\u043D (\u0432\u0435\u043B\u0438\u043A\u0438\u0439) HTML-\u0444\u0430\u0439\u043B, \u0449\u043E \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0432\u0435\u0441\u044C \u0435\u043A\u0441\u043F\u043E\u0440\u0442. \u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043B\u0438\u0448\u0435 \u0434\u043B\u044F \u043E\u0444\u043B\u0430\u0439\u043D-\u043F\u043E\u0448\u0438\u0440\u0435\u043D\u043D\u044F.",
      rawDocuments: "\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0441\u0442\u0456 HTML-\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0438 \u0437 \u0431\u0430\u0437\u043E\u0432\u0438\u043C\u0438 \u0441\u0442\u0438\u043B\u044F\u043C\u0438 \u0442\u0430 \u0441\u043A\u0440\u0438\u043F\u0442\u0430\u043C\u0438, \u0430\u043B\u0435 \u0431\u0435\u0437 \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0438\u0445 \u0444\u0443\u043D\u043A\u0446\u0456\u0439."
    },
    purgeExport: {
      description: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043A\u0435\u0448 \u0441\u0430\u0439\u0442\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0433\u043E \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443 \u0432\u0441\u0456\u0445 \u0444\u0430\u0439\u043B\u0456\u0432.",
      clearCache: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043A\u0435\u0448",
      confirmation: "\u0412\u0438 \u0432\u043F\u0435\u0432\u043D\u0435\u043D\u0456?",
      clearWarning: "\u0426\u0435 \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u044C \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0456 \u0441\u0430\u0439\u0442\u0443 (\u0430\u043B\u0435 \u043D\u0435 \u0432\u0435\u0441\u044C \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u0438\u0439 HTML).\n\n\u0426\u0435 \u0437\u043C\u0443\u0441\u0438\u0442\u044C \u0441\u0430\u0439\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0456 \u0444\u0430\u0439\u043B\u0438.\n\n\u0422\u0430\u043A\u043E\u0436, \u044F\u043A\u0449\u043E \u0432\u0438 \u0437\u043C\u0456\u043D\u0438\u0442\u0435 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443 \u0444\u0430\u0439\u043B\u0438 \u043F\u0435\u0440\u0435\u0434 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0438\u043C \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u043C, \u0434\u0435\u044F\u043A\u0456 \u0444\u0430\u0439\u043B\u0438 \u043C\u043E\u0436\u0443\u0442\u044C \u0437\u0430\u043B\u0438\u0448\u0438\u0442\u0438\u0441\u044F \u043D\u0435\u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u0438\u043C\u0438 \u0443 \u0432\u0430\u0448\u0456\u0439 \u0444\u0430\u0439\u043B\u043E\u0432\u0456\u0439 \u0441\u0438\u0441\u0442\u0435\u043C\u0456.\n\n\u0426\u044E \u0434\u0456\u044E \u043D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0441\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438."
    }
  },
  settings: {
    title: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443 HTML",
    support: "\u041F\u0456\u0434\u0442\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u043F\u043E\u0434\u0430\u043B\u044C\u0448\u0443 \u0440\u043E\u0437\u0440\u043E\u0431\u043A\u0443 \u0446\u044C\u043E\u0433\u043E \u043F\u043B\u0430\u0433\u0456\u043D\u0430.",
    debug: "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u043B\u0430\u0433\u043E\u0434\u0436\u0443\u0432\u0430\u043B\u044C\u043D\u0443 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044E \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443",
    unavailableSetting: "\u26A0\uFE0F \u0426\u044F \u0444\u0443\u043D\u043A\u0446\u0456\u044F \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0432 \u0440\u0435\u0436\u0438\u043C\u0456 {0}.",
    pageFeatures: {
      title: "\u0424\u0443\u043D\u043A\u0446\u0456\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438",
      description: "\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0440\u0456\u0437\u043D\u0438\u043C\u0438 \u0444\u0443\u043D\u043A\u0446\u0456\u044F\u043C\u0438 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438."
    },
    baseFeatures: {
      info_selector: "CSS-\u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440 \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430. \u0424\u0443\u043D\u043A\u0446\u0456\u044F \u0431\u0443\u0434\u0435 \u0440\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u0430 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u043E \u0446\u044C\u043E\u0433\u043E \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430.",
      info_type: "\u0426\u044F \u0444\u0443\u043D\u043A\u0446\u0456\u044F \u0431\u0443\u0434\u0435 \u0440\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0434, \u043F\u0456\u0441\u043B\u044F \u0447\u0438 \u0432\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0456 (\u043D\u0430 \u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0430\u0431\u043E \u0432 \u043A\u0456\u043D\u0446\u0456) \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430.",
      info_displayTitle: "\u041E\u043F\u0438\u0441\u043E\u0432\u0438\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u043D\u0430\u0434 \u0444\u0443\u043D\u043A\u0446\u0456\u0454\u044E",
      info_featurePlacement: "\u0414\u0435 \u0440\u043E\u0437\u043C\u0456\u0441\u0442\u0438\u0442\u0438 \u0446\u044E \u0444\u0443\u043D\u043A\u0446\u0456\u044E \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u0446\u0456 (\u0432\u0456\u0434\u043D\u043E\u0441\u043D\u043E \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440\u0430)."
    },
    document: {
      title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442",
      description: "\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u043C\u0438 \u0441\u0430\u043C\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430",
      info_allowFoldingLists: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0447\u0438 \u0437\u0430\u0431\u043E\u0440\u043E\u043D\u0438\u0442\u0438 \u0437\u0433\u043E\u0440\u0442\u0430\u043D\u043D\u044F \u0441\u043F\u0438\u0441\u043A\u0456\u0432",
      info_allowFoldingHeadings: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0447\u0438 \u0437\u0430\u0431\u043E\u0440\u043E\u043D\u0438\u0442\u0438 \u0437\u0433\u043E\u0440\u0442\u0430\u043D\u043D\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0456\u0432",
      info_documentWidth: "\u0428\u0438\u0440\u0438\u043D\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430"
    },
    sidebars: {
      title: "\u0411\u0456\u0447\u043D\u0456 \u043F\u0430\u043D\u0435\u043B\u0456",
      description: "\u041C\u0456\u0441\u0442\u0438\u0442\u044C \u0443\u0441\u0456 \u0456\u043D\u0448\u0456 \u0444\u0443\u043D\u043A\u0446\u0456\u0457, \u0442\u0430\u043A\u0456 \u044F\u043A \u043D\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044F \u043F\u043E \u0444\u0430\u0439\u043B\u0430\u0445, \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430, \u043F\u0435\u0440\u0435\u043C\u0438\u043A\u0430\u043D\u043D\u044F \u0442\u0435\u043C\u0438, \u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439 \u0432\u0438\u0433\u043B\u044F\u0434 \u0442\u043E\u0449\u043E.",
      info_allowResizing: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0447\u0438 \u0437\u0430\u0431\u043E\u0440\u043E\u043D\u0438\u0442\u0438 \u0437\u043C\u0456\u043D\u0443 \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u0431\u0456\u0447\u043D\u0438\u0445 \u043F\u0430\u043D\u0435\u043B\u0435\u0439",
      info_allowCollapsing: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0447\u0438 \u0437\u0430\u0431\u043E\u0440\u043E\u043D\u0438\u0442\u0438 \u0437\u0433\u043E\u0440\u0442\u0430\u043D\u043D\u044F \u0431\u0456\u0447\u043D\u0438\u0445 \u043F\u0430\u043D\u0435\u043B\u0435\u0439",
      info_rightDefaultWidth: "\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430 \u0448\u0438\u0440\u0438\u043D\u0430 \u043F\u0440\u0430\u0432\u043E\u0457 \u0431\u0456\u0447\u043D\u043E\u0457 \u043F\u0430\u043D\u0435\u043B\u0456",
      info_leftDefaultWidth: "\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430 \u0448\u0438\u0440\u0438\u043D\u0430 \u043B\u0456\u0432\u043E\u0457 \u0431\u0456\u0447\u043D\u043E\u0457 \u043F\u0430\u043D\u0435\u043B\u0456"
    },
    fileNavigation: {
      title: "\u041D\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044F \u043F\u043E \u0444\u0430\u0439\u043B\u0430\u0445",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0434\u0435\u0440\u0435\u0432\u043E \u0444\u0430\u0439\u043B\u0456\u0432 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u0433\u043E \u0441\u0445\u043E\u0432\u0438\u0449\u0430.",
      info_showCustomIcons: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0456 \u0456\u043A\u043E\u043D\u043A\u0438 \u0434\u043B\u044F \u0444\u0430\u0439\u043B\u0456\u0432 \u0432 \u0434\u0435\u0440\u0435\u0432\u0456",
      info_showDefaultFolderIcons: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0443 \u0456\u043A\u043E\u043D\u043A\u0443 \u0434\u043B\u044F \u043A\u043E\u0436\u043D\u043E\u0457 \u043F\u0430\u043F\u043A\u0438 \u0432 \u0434\u0435\u0440\u0435\u0432\u0456",
      info_showDefaultFileIcons: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0443 \u0456\u043A\u043E\u043D\u043A\u0443 \u0434\u043B\u044F \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0443 \u0432 \u0434\u0435\u0440\u0435\u0432\u0456",
      info_defaultFolderIcon: '\u0406\u043A\u043E\u043D\u043A\u0430 \u0434\u043B\u044F \u043F\u0430\u043F\u043E\u043A. \u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0444\u0456\u043A\u0441 "lucide//" \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u0456\u043A\u043E\u043D\u043A\u0438 Lucide',
      info_defaultFileIcon: '\u0406\u043A\u043E\u043D\u043A\u0430 \u0434\u043B\u044F \u0444\u0430\u0439\u043B\u0456\u0432. \u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0444\u0456\u043A\u0441 "lucide//" \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u0456\u043A\u043E\u043D\u043A\u0438 Lucide',
      info_defaultMediaIcon: '\u0406\u043A\u043E\u043D\u043A\u0430 \u0434\u043B\u044F \u043C\u0435\u0434\u0456\u0430-\u0444\u0430\u0439\u043B\u0456\u0432. \u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0444\u0456\u043A\u0441 "lucide//" \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u0456\u043A\u043E\u043D\u043A\u0438 Lucide',
      info_exposeStartingPath: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0444\u0430\u0439\u043B \u0443 \u0434\u0435\u0440\u0435\u0432\u0456 \u0444\u0430\u0439\u043B\u0456\u0432 \u043F\u0440\u0438 \u043F\u0435\u0440\u0448\u043E\u043C\u0443 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"
    },
    outline: {
      title: "\u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0441\u043F\u0438\u0441\u043E\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0456\u0432 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430.",
      info_startCollapsed: "\u0427\u0438 \u043F\u043E\u0432\u0438\u043D\u043D\u0430 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044C \u0437\u0433\u043E\u0440\u043D\u0443\u0442\u043E\u044E?",
      info_minCollapseDepth: "\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0430 \u0433\u043B\u0438\u0431\u0438\u043D\u0430, \u043D\u0430 \u044F\u043A\u0456\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0437\u0433\u043E\u0440\u043D\u0443\u0442\u0456."
    },
    graphView: {
      title: "\u0413\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439 \u0432\u0438\u0433\u043B\u044F\u0434",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0432\u0456\u0437\u0443\u0430\u043B\u044C\u043D\u0435, \u0456\u043D\u0442\u0435\u0440\u0430\u043A\u0442\u0438\u0432\u043D\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u0433\u043E \u0441\u0445\u043E\u0432\u0438\u0449\u0430. (\u041F\u0420\u0418\u041C\u0406\u0422\u041A\u0410: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043B\u0438\u0448\u0435 \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0456\u0432, \u0440\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u0438\u0445 \u043D\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0456)",
      info_showOrphanNodes: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043B\u0438, \u043D\u0435 \u043F\u043E\u0432'\u044F\u0437\u0430\u043D\u0456 \u0437 \u0456\u043D\u0448\u0438\u043C\u0438 \u0432\u0443\u0437\u043B\u0430\u043C\u0438.",
      info_showAttachments: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u043A\u043B\u0430\u0434\u0435\u043D\u043D\u044F, \u0442\u0430\u043A\u0456 \u044F\u043A \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0442\u0430 PDF, \u044F\u043A \u0432\u0443\u0437\u043B\u0438 \u0432 \u0433\u0440\u0430\u0444\u0456.",
      info_allowGlobalGraph: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u0432\u0456 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0430\u0442\u0438 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 \u0443\u0441\u0456\u0445 \u0432\u0443\u0437\u043B\u0456\u0432.",
      info_allowExpand: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u0432\u0456 \u0440\u043E\u0437\u0433\u043E\u0440\u0442\u0430\u0442\u0438 \u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439 \u0432\u0438\u0433\u043B\u044F\u0434 \u043D\u0430 \u0432\u0435\u0441\u044C \u0435\u043A\u0440\u0430\u043D",
      info_attractionForce: "\u041D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u043F\u043E\u0432'\u044F\u0437\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043E\u0434\u0438\u043D \u0434\u043E \u043E\u0434\u043D\u043E\u0433\u043E? \u0421\u0438\u043B\u044C\u043D\u0456\u0448\u0435 \u043F\u0440\u0438\u0442\u044F\u0433\u0430\u043D\u043D\u044F \u0437\u0440\u043E\u0431\u0438\u0442\u044C \u0433\u0440\u0430\u0444 \u0431\u0456\u043B\u044C\u0448 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u0438\u043C.",
      info_linkLength: "\u042F\u043A\u043E\u0457 \u0434\u043E\u0432\u0436\u0438\u043D\u0438 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u0431\u0443\u0442\u0438 \u0437\u0432'\u044F\u0437\u043A\u0438 \u043C\u0456\u0436 \u0432\u0443\u0437\u043B\u0430\u043C\u0438? \u041A\u043E\u0440\u043E\u0442\u0448\u0456 \u0437\u0432'\u044F\u0437\u043A\u0438 \u0437\u0431\u043B\u0438\u0437\u044F\u0442\u044C \u043F\u043E\u0432'\u044F\u0437\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438.",
      info_repulsionForce: "\u041D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0432\u0443\u0437\u043B\u0438 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043E\u0434\u0438\u043D \u0432\u0456\u0434 \u043E\u0434\u043D\u043E\u0433\u043E? \u0421\u0438\u043B\u044C\u043D\u0456\u0448\u0435 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F \u0440\u043E\u0437\u0441\u0456\u0454 \u043D\u0435\u0437\u0432'\u044F\u0437\u0430\u043D\u0456 \u0447\u0430\u0441\u0442\u0438\u043D\u0438.",
      info_centralForce: "\u041D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0432\u0443\u0437\u043B\u0438 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u0434\u043E \u0446\u0435\u043D\u0442\u0440\u0443? \u0421\u0438\u043B\u044C\u043D\u0456\u0448\u0435 \u043F\u0440\u0438\u0442\u044F\u0433\u0430\u043D\u043D\u044F \u0437\u0440\u043E\u0431\u0438\u0442\u044C \u0433\u0440\u0430\u0444 \u0449\u0456\u043B\u044C\u043D\u0456\u0448\u0438\u043C \u0456 \u043A\u0440\u0443\u0433\u043B\u0456\u0448\u0438\u043C.",
      info_edgePruning: "\u0417\u0432'\u044F\u0437\u043A\u0438, \u0434\u043E\u0432\u0436\u0438\u043D\u0430 \u044F\u043A\u0438\u0445 \u043F\u0435\u0440\u0435\u0432\u0438\u0449\u0443\u0454 \u0446\u0435\u0439 \u043F\u043E\u0440\u0456\u0433, \u043D\u0435 \u0431\u0443\u0434\u0443\u0442\u044C \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438\u0441\u044F, \u0430\u043B\u0435 \u0432\u0441\u0435 \u043E\u0434\u043D\u043E \u0432\u043F\u043B\u0438\u0432\u0430\u0442\u0438\u043C\u0443\u0442\u044C \u043D\u0430 \u0441\u0438\u043C\u0443\u043B\u044F\u0446\u0456\u044E. \u0426\u0435 \u0434\u043E\u043F\u043E\u043C\u043E\u0436\u0435 \u0432\u0435\u043B\u0438\u043A\u0438\u043C \u0437\u0430\u043F\u043B\u0443\u0442\u0430\u043D\u0438\u043C \u0433\u0440\u0430\u0444\u0430\u043C \u0432\u0438\u0433\u043B\u044F\u0434\u0430\u0442\u0438 \u043E\u0440\u0433\u0430\u043D\u0456\u0437\u043E\u0432\u0430\u043D\u0456\u0448\u0435. \u041F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u043D\u0456 \u043D\u0430 \u0432\u0443\u0437\u043E\u043B \u0446\u0456 \u0437\u0432'\u044F\u0437\u043A\u0438 \u0432\u0441\u0435 \u043E\u0434\u043D\u043E \u0431\u0443\u0434\u0443\u0442\u044C \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438\u0441\u044F.",
      info_minNodeRadius: "\u042F\u043A\u043E\u0433\u043E \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u0431\u0443\u0442\u0438 \u043D\u0430\u0439\u043C\u0435\u043D\u0448\u0456 \u0432\u0443\u0437\u043B\u0438? \u041C\u0435\u043D\u0448\u0456 \u0432\u0443\u0437\u043B\u0438 \u043C\u0435\u043D\u0448\u0435 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0432\u0430\u0442\u0438\u043C\u0443\u0442\u044C \u0456\u043D\u0448\u0456 \u0432\u0443\u0437\u043B\u0438.",
      info_maxNodeRadius: "\u042F\u043A\u043E\u0433\u043E \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u043F\u043E\u0432\u0438\u043D\u043D\u0456 \u0431\u0443\u0442\u0438 \u043D\u0430\u0439\u0431\u0456\u043B\u044C\u0448\u0456 \u0432\u0443\u0437\u043B\u0438? \u0420\u043E\u0437\u043C\u0456\u0440 \u0432\u0443\u0437\u043B\u0456\u0432 \u0437\u0430\u043B\u0435\u0436\u0438\u0442\u044C \u0432\u0456\u0434 \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456 \u0457\u0445\u043D\u0456\u0445 \u0437\u0432'\u044F\u0437\u043A\u0456\u0432. \u0411\u0456\u043B\u044C\u0448\u0456 \u0432\u0443\u0437\u043B\u0438 \u0441\u0438\u043B\u044C\u043D\u0456\u0448\u0435 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0432\u0430\u0442\u0438\u043C\u0443\u0442\u044C \u0456\u043D\u0448\u0456 \u0432\u0443\u0437\u043B\u0438. \u0426\u0435 \u0434\u043E\u043F\u043E\u043C\u043E\u0436\u0435 \u0441\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0445\u043E\u0440\u043E\u0448\u0435 \u0433\u0440\u0443\u043F\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0430\u0432\u043A\u043E\u043B\u043E \u043D\u0430\u0439\u0432\u0430\u0436\u043B\u0438\u0432\u0456\u0448\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432."
    },
    search: {
      title: "\u041F\u0430\u043D\u0435\u043B\u044C \u043F\u043E\u0448\u0443\u043A\u0443",
      description: "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0448\u0443\u043A\u0430\u0442\u0438 \u0443 \u0441\u0445\u043E\u0432\u0438\u0449\u0456, \u043F\u043E\u043A\u0430\u0437\u0443\u044E\u0447\u0438 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u0456 \u0444\u0430\u0439\u043B\u0438 \u0442\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438. (\u041F\u0420\u0418\u041C\u0406\u0422\u041A\u0410: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043B\u0438\u0448\u0435 \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0456\u0432, \u0440\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u0438\u0445 \u043D\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0456)",
      placeholder: "\u041F\u043E\u0448\u0443\u043A..."
    },
    linkPreview: {
      title: "\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u043D\u0456 \u043D\u0430 \u0432\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0434\u043E \u0456\u043D\u0448\u0438\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0456\u0432."
    },
    themeToggle: {
      title: "\u041F\u0435\u0440\u0435\u043C\u0438\u043A\u0430\u0447 \u0442\u0435\u043C\u0438",
      description: "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E \u043F\u0435\u0440\u0435\u043C\u0438\u043A\u0430\u0442\u0438\u0441\u044F \u043C\u0456\u0436 \u0442\u0435\u043C\u043D\u043E\u044E \u0442\u0430 \u0441\u0432\u0456\u0442\u043B\u043E\u044E \u0442\u0435\u043C\u0430\u043C\u0438."
    },
    customHead: {
      title: "\u0412\u043B\u0430\u0441\u043D\u0438\u0439 HTML / JS",
      description: "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0432\u043A\u0430\u0437\u0430\u043D\u0438\u0439 HTML-\u0444\u0430\u0439\u043B \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443, \u044F\u043A\u0438\u0439 \u043C\u043E\u0436\u0435 \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0438\u0439 JS \u0430\u0431\u043E CSS",
      info_sourcePath: "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u0448\u043B\u044F\u0445 \u0434\u043E HTML-\u0444\u0430\u0439\u043B\u0443, \u044F\u043A\u0438\u0439 \u0431\u0443\u0434\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E.",
      validationError: "\u041C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0448\u043B\u044F\u0445 \u0434\u043E HTML-\u0444\u0430\u0439\u043B\u0443"
    },
    backlinks: {
      title: "\u0417\u0432\u043E\u0440\u043E\u0442\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0432\u0441\u0456 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0438, \u044F\u043A\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u044E\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u0439 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442."
    },
    tags: {
      title: "\u0422\u0435\u0433\u0438",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0442\u0435\u0433\u0438 \u0434\u043B\u044F \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430.",
      info_showInlineTags: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0433\u0438, \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u0456 \u0432\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0456 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430, \u0432\u0433\u043E\u0440\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438.",
      info_showFrontmatterTags: "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0433\u0438, \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u0456 \u0443 frontmatter \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430, \u0432\u0433\u043E\u0440\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438."
    },
    aliases: {
      title: "\u041F\u0441\u0435\u0432\u0434\u043E\u043D\u0456\u043C\u0438",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0456\u043C\u0438 \u0434\u043B\u044F \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430."
    },
    properties: {
      title: "\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456",
      description: "\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u0432\u0441\u0456 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0443 \u0432\u0438\u0433\u043B\u044F\u0434\u0456 \u0442\u0430\u0431\u043B\u0438\u0446\u0456.",
      info_hideProperties: "\u0421\u043F\u0438\u0441\u043E\u043A \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0435\u0439, \u044F\u043A\u0456 \u0441\u043B\u0456\u0434 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u0442\u0438 \u0437 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0435\u0439"
    },
    rss: {
      title: "RSS",
      description: "\u0413\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u0442\u0438 RSS-\u0441\u0442\u0440\u0456\u0447\u043A\u0443 \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u0433\u043E \u0441\u0430\u0439\u0442\u0443",
      info_siteUrl: "URL, \u043D\u0430 \u044F\u043A\u043E\u043C\u0443 \u0431\u0443\u0434\u0435 \u0440\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u043E \u0446\u0435\u0439 \u0441\u0430\u0439\u0442",
      info_siteUrlPlaceholder: "https://example.com/mysite",
      info_authorName: "\u0406\u043C'\u044F \u0430\u0432\u0442\u043E\u0440\u0430 \u0441\u0430\u0439\u0442\u0443"
    },
    styleOptionsSection: {
      title: "\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 \u0441\u0442\u0438\u043B\u044E",
      description: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438, \u044F\u043A\u0456 \u0441\u0442\u0438\u043B\u0456 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0456 \u0432 \u0435\u043A\u0441\u043F\u043E\u0440\u0442"
    },
    makeOfflineCompatible: {
      title: "\u0417\u0440\u043E\u0431\u0438\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u043C \u043E\u0444\u043B\u0430\u0439\u043D",
      description: "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0431\u0443\u0434\u044C-\u044F\u043A\u0456 \u043E\u043D\u043B\u0430\u0439\u043D-\u0440\u0435\u0441\u0443\u0440\u0441\u0438 / \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F / \u0441\u043A\u0440\u0438\u043F\u0442\u0438, \u0449\u043E\u0431 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043C\u043E\u0436\u043D\u0430 \u0431\u0443\u043B\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0430\u0442\u0438 \u043E\u0444\u043B\u0430\u0439\u043D. \u0410\u0431\u043E \u0449\u043E\u0431 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043D\u0435 \u0437\u0430\u043B\u0435\u0436\u0430\u0432 \u0432\u0456\u0434 CDN."
    },
    includePluginCSS: {
      title: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0438 CSS \u0437 \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432",
      description: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0438 CSS \u0437 \u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0438\u0445 \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432 \u0432 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u0438\u0439 HTML. \u042F\u043A\u0449\u043E \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432 \u043D\u0435 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u044C\u0441\u044F \u043A\u043E\u0440\u0435\u043A\u0442\u043D\u043E, \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0434\u043E\u0434\u0430\u0442\u0438 \u043F\u043B\u0430\u0433\u0456\u043D \u0434\u043E \u0446\u044C\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0443. \u0423\u043D\u0438\u043A\u0430\u0439\u0442\u0435 \u0434\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432, \u044F\u043A\u0449\u043E \u0432\u0438 \u043D\u0435 \u043F\u043E\u043C\u0456\u0442\u0438\u043B\u0438 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0457 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0438, \u043E\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0431\u0456\u043B\u044C\u0448\u0435 CSS \u0437\u0431\u0456\u043B\u044C\u0448\u0438\u0442\u044C \u0447\u0430\u0441 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u0457 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438."
    },
    includeStyleCssIds: {
      title: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0441\u0442\u0438\u043B\u0456 \u0437 ID",
      description: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0438 CSS \u0437 \u0442\u0435\u0433\u0456\u0432 \u0441\u0442\u0438\u043B\u044E \u0437 \u0442\u0430\u043A\u0438\u043C\u0438 ID \u0432 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u0438\u0439 HTML"
    },
    generalSettingsSection: {
      title: "\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F",
      description: "\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u0440\u043E\u0441\u0442\u0438\u043C\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u043C\u0438, \u0442\u0430\u043A\u0438\u043C\u0438 \u044F\u043A favicon \u0442\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0456 \u0441\u0430\u0439\u0442\u0443"
    },
    favicon: {
      title: "\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F Favicon",
      description: "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u0448\u043B\u044F\u0445 \u0434\u043E favicon \u0434\u043B\u044F \u0441\u0430\u0439\u0442\u0443"
    },
    siteName: {
      title: "\u041D\u0430\u0437\u0432\u0430 \u0441\u0430\u0439\u0442\u0443",
      description: "\u041D\u0430\u0437\u0432\u0430 \u0441\u0445\u043E\u0432\u0438\u0449\u0430 / \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E\u0433\u043E \u0441\u0430\u0439\u0442\u0443"
    },
    iconEmojiStyle: {
      title: "\u0421\u0442\u0438\u043B\u044C \u0456\u043A\u043E\u043D\u043E\u043A-\u0435\u043C\u043E\u0434\u0437\u0456",
      description: "\u0421\u0442\u0438\u043B\u044C \u0435\u043C\u043E\u0434\u0437\u0456 \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u0443 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0438\u0445 \u0456\u043A\u043E\u043D\u043A\u0430\u0445"
    },
    themeName: {
      title: "\u0422\u0435\u043C\u0430",
      description: "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u0442\u0435\u043C\u0430 \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u043F\u0440\u0438 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0456"
    },
    exportSettingsSection: {
      title: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443",
      description: "\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0431\u0456\u043B\u044C\u0448 \u0442\u0435\u0445\u043D\u0456\u0447\u043D\u0438\u043C\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u043C\u0438 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443, \u0442\u0430\u043A\u0438\u043C\u0438 \u044F\u043A \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0456\u044F \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C"
    },
    relativeHeaderLinks: {
      title: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0456\u0432",
      description: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u0456 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0456\u0432 \u0437\u0430\u043C\u0456\u0441\u0442\u044C \u0430\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0438\u0445"
    },
    slugifyPaths: {
      title: "Slugify \u0448\u043B\u044F\u0445\u0438",
      description: "\u0417\u0440\u043E\u0431\u0438\u0442\u0438 \u0432\u0441\u0456 \u0448\u043B\u044F\u0445\u0438 \u0442\u0430 \u0456\u043C\u0435\u043D\u0430 \u0444\u0430\u0439\u043B\u0456\u0432 \u0443 \u0432\u0435\u0431-\u0441\u0442\u0438\u043B\u0456 (\u043D\u0438\u0436\u043D\u0456\u0439 \u0440\u0435\u0433\u0456\u0441\u0442\u0440, \u0431\u0435\u0437 \u043F\u0440\u043E\u0431\u0456\u043B\u0456\u0432)"
    },
    addPageIcon: {
      title: "\u0414\u043E\u0434\u0430\u0442\u0438 \u0456\u043A\u043E\u043D\u043A\u0443 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438",
      description: "\u0414\u043E\u0434\u0430\u0442\u0438 \u0456\u043A\u043E\u043D\u043A\u0443 \u0444\u0430\u0439\u043B\u0443 \u0434\u043E \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438"
    },
    obsidianSettingsSection: {
      title: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F Obsidian",
      description: "\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0443\u043D\u043A\u0446\u0456\u043E\u043D\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u043F\u043B\u0430\u0433\u0456\u043D\u0430 \u0432\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0456 Obsidian"
    },
    logLevel: {
      title: "\u0420\u0456\u0432\u0435\u043D\u044C \u0436\u0443\u0440\u043D\u0430\u043B\u044E\u0432\u0430\u043D\u043D\u044F",
      description: "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0440\u0456\u0432\u0435\u043D\u044C \u0436\u0443\u0440\u043D\u0430\u043B\u044E\u0432\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0456"
    },
    titleProperty: {
      title: "\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",
      description: "\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044C \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u044F\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430"
    }
  }
};

// src/plugin/translations/pt.ts
var language5 = {
  cancel: "Cancelar",
  browse: "Procurar",
  pathInputPlaceholder: "Digite ou procure um caminho...",
  pathValidations: {
    noEmpty: "O caminho n\xE3o pode estar vazio",
    mustExist: "O caminho n\xE3o existe",
    noTilde: "Diret\xF3rio inicial com til (~) n\xE3o \xE9 permitido",
    noAbsolute: "O caminho n\xE3o pode ser absoluto",
    noRelative: "O caminho n\xE3o pode ser relativo",
    noFiles: "O caminho n\xE3o pode ser um arquivo",
    noFolders: "O caminho n\xE3o pode ser um diret\xF3rio",
    mustHaveExtension: "O caminho deve ter a extens\xE3o: {0}"
  },
  updateAvailable: "Atualiza\xE7\xE3o dispon\xEDvel",
  exportAsHTML: "Exportar como HTML",
  exportModal: {
    title: "Exportar para HTML",
    exportAsTitle: "Exportar {0} como HTML",
    moreOptions: "Mais op\xE7\xF5es dispon\xEDveis na p\xE1gina de configura\xE7\xF5es do plugin.",
    openAfterExport: "Abrir ap\xF3s exportar",
    exportButton: "Exportar",
    filePicker: {
      title: "Selecionar todos os arquivos no cofre exportado",
      selectAll: "Selecionar tudo",
      save: "Salvar"
    },
    currentSite: {
      noSite: "Este caminho n\xE3o cont\xE9m um site exportado atualmente.",
      oldSite: "Este caminho cont\xE9m uma exporta\xE7\xE3o criada com uma vers\xE3o diferente do plugin.",
      pathContainsSite: "Site",
      fileCount: "Quantidade de arquivos",
      lastExported: "\xDAltima exporta\xE7\xE3o"
    },
    exportMode: {
      title: "Modo de Exporta\xE7\xE3o",
      online: "Use este modo se seus arquivos forem acessados online (via servidor http).",
      local: "Este modo exporta um \xFAnico arquivo HTML (grande) contendo toda a exporta\xE7\xE3o. Use apenas para compartilhamento offline.",
      rawDocuments: "Exportar documentos HTML simples com estilo e scripts b\xE1sicos, sem recursos adicionais."
    },
    purgeExport: {
      description: "Limpe o cache do site para reexportar todos os arquivos ou exclua o site com todos os seus arquivos.",
      clearCache: "Limpar Cache",
      confirmation: "Tem certeza?",
      clearWarning: "Isso excluir\xE1 os metadados do site (mas n\xE3o todo o HTML exportado).\n\nFor\xE7ar\xE1 a reexporta\xE7\xE3o de todos os arquivos.\n\nAl\xE9m disso se voc\xEA alterar os arquivos selecionados antes da pr\xF3xima exporta\xE7\xE3o, alguns arquivos podem permanecer inutilizados no seu sistema.\n\nEsta a\xE7\xE3o n\xE3o pode ser desfeita."
    }
  },
  settings: {
    title: "Configura\xE7\xF5es de Exporta\xE7\xE3o HTML",
    support: "Apoie o desenvolvimento cont\xEDnuo deste plugin.",
    debug: "Copiar informa\xE7\xF5es de debug para a \xE1rea de transfer\xEAncia",
    unavailableSetting: "\u26A0\uFE0F Este recurso n\xE3o est\xE1 dispon\xEDvel no modo {0}.",
    pageFeatures: {
      title: "Recursos da P\xE1gina",
      description: "Controle diversos recursos da p\xE1gina exportada."
    },
    baseFeatures: {
      info_selector: "Seletor CSS de um elemento. O recurso ser\xE1 posicionado em rela\xE7\xE3o a esse elemento.",
      info_type: "Este recurso ser\xE1 colocado antes, depois ou dentro (no in\xEDcio ou final).",
      info_displayTitle: "T\xEDtulo descritivo a ser exibido acima do recurso",
      info_featurePlacement: "Onde posicionar esse recurso na p\xE1gina. (Relativo ao seletor)"
    },
    document: {
      title: "Documento",
      description: "Controle configura\xE7\xF5es do pr\xF3prio documento",
      info_allowFoldingLists: "Permitir que listas sejam recolhidas",
      info_allowFoldingHeadings: "Permitir que cabe\xE7alhos sejam recolhidos",
      info_documentWidth: "A largura do documento"
    },
    sidebars: {
      title: "Barras Laterais",
      description: "Cont\xE9m recursos como navega\xE7\xE3o de arquivos, sum\xE1rio, altern\xE2ncia de tema, visualiza\xE7\xE3o em gr\xE1fico etc.",
      info_allowResizing: "Permitir redimensionamento das barras laterais",
      info_allowCollapsing: "Permitir recolher as barras laterais",
      info_rightDefaultWidth: "Largura padr\xE3o da barra lateral direita",
      info_leftDefaultWidth: "Largura padr\xE3o da barra lateral esquerda"
    },
    fileNavigation: {
      title: "Navega\xE7\xE3o de Arquivos",
      description: "Exibe uma \xE1rvore de arquivos para explorar o cofre exportado.",
      info_showCustomIcons: "Exibir \xEDcones personalizados para arquivos e pastas",
      info_showDefaultFolderIcons: "Mostrar \xEDcone padr\xE3o para cada pasta na \xE1rvore",
      info_showDefaultFileIcons: "Mostrar \xEDcone padr\xE3o para cada arquivo na \xE1rvore",
      info_defaultFolderIcon: "\xCDcone usado para pastas. Prefixe com 'lucide//' para usar um \xEDcone do Lucide",
      info_defaultFileIcon: "\xCDcone usado para arquivos. Prefixe com 'lucide//' para usar um \xEDcone do Lucide",
      info_defaultMediaIcon: "\xCDcone usado para arquivos de m\xEDdia. Prefixe com 'lucide//' para usar um \xEDcone do Lucide",
      info_exposeStartingPath: "Mostrar o arquivo atual na \xE1rvore ao carregar a p\xE1gina"
    },
    outline: {
      title: "Sum\xE1rio",
      description: "Exibe uma lista de cabe\xE7alhos do documento aberto.",
      info_startCollapsed: "O sum\xE1rio deve come\xE7ar recolhido?",
      info_minCollapseDepth: "Permitir recolhimento apenas se o item tiver ao menos esse n\xFAmero de n\xEDveis na \xE1rvore."
    },
    graphView: {
      title: "Visualiza\xE7\xE3o em Gr\xE1fico",
      description: "Mostra uma representa\xE7\xE3o interativa do seu cofre. (NOTA: dispon\xEDvel apenas em exporta\xE7\xF5es hospedadas num servidor web)",
      info_showOrphanNodes: "Exibir n\xF3s sem conex\xE3o com outros",
      info_showAttachments: "Mostrar anexos como imagens e PDFs como n\xF3s no gr\xE1fico.",
      info_allowGlobalGraph: "Permitir ao utilizador a visualiza\xE7\xE3o do gr\xE1fico global para todos os n\xF3s",
      info_allowExpand: "Permitir expandir a visualiza\xE7\xE3o para tela inteira",
      info_attractionForce: "Com qual for\xE7a os n\xF3s s\xE3o atra\xEDdos uns pelos outros? Isso far\xE1 com que o gr\xE1fico seja mais compacto.",
      info_linkLength: "Qu\xE3o longos os links entres os n\xF3s devem ser? Quanto mais curtos os links, mais conectados os n\xF3s parecer\xE3o.",
      info_repulsionForce: "Com qual for\xE7a os n\xF3s s\xE3o repelidos uns dos outros? Isso far\xE1 com que partes desconectadas do gr\xE1fico estejam mais espa\xE7adas.",
      info_centralForce: "Com qual intensidade os n\xF3s s\xE3o atra\xEDdos para o centro do gr\xE1fico? Isso far\xE1 com que o gr\xE1fico seja mais denso e circular.",
      info_edgePruning: "Arestas com copmrimeto menor que esse limite n\xE3o ser\xE3o renderizadas, no entanto, ainda contribuir\xE3o para a simula\xE7\xE3o. Isso pode ser \xFAtil para que gr\xE1ficos enrolados sejam apresentados de forma mais organizada. Passando o mouse sobre um n\xF3 mostrar\xE1 todas as arestas conectadas a ele.",
      info_minNodeRadius: "Qu\xE3o pequenos os menores n\xF3s devem ser? Quando menor um n\xF3, menos atrair\xE1 outros n\xF3s.",
      info_maxNodeRadius: "Qu\xE3o grandes os maiores n\xF3s devem ser? N\xF3s s\xE3o escalados proporcionalmente ao n\xFAmero de conex\xF5es que t\xEAm. Quanto maior um n\xF3, mais atrair\xE1 outros n\xF3s. Isso pode ser \xFAtil para agrupar e destacar n\xF3s importantes."
    },
    search: {
      title: "Barra de Pesquisa",
      description: "Permite pesquisar no cofre, listando arquivos e cabe\xE7alhos correspondentes. (NOTA: dispon\xEDvel apenas em exporta\xE7\xF5es hospedadas na web)",
      placeholder: "Pesquisar..."
    },
    linkPreview: {
      title: "Pr\xE9-visualiza\xE7\xF5es de Links",
      description: "Mostrar pr\xE9-visualiza\xE7\xF5es ao passar o mouse sobre links internos para outros documentos."
    },
    themeToggle: {
      title: "Alternar Tema",
      description: "Permite alternar entre tema claro e escuro dinamicamente."
    },
    customHead: {
      title: "HTML / JS Personalizado",
      description: "Insere um arquivo .html que pode conter JS ou CSS personalizados",
      info_sourcePath: "Caminho local do arquivo .html que ser\xE1 inclu\xEDdo.",
      validationError: "Deve ser o caminho de um arquivo .html"
    },
    backlinks: {
      title: "Links de Retorno",
      description: "Mostra os documentos que fazem refer\xEAncia ao documento atual."
    },
    tags: {
      title: "Tags",
      description: "Exibe as tags do documento aberto.",
      info_showInlineTags: "Mostrar tags definidas dentro do conte\xFAdo no topo da p\xE1gina.",
      info_showFrontmatterTags: "Mostrar tags definidas no frontmatter no topo da p\xE1gina."
    },
    aliases: {
      title: "Apelidos",
      description: "Exibe os apelidos do documento atual."
    },
    properties: {
      title: "Propriedades",
      description: "Exibe todas as propriedades do documento em uma tabela.",
      info_hideProperties: "Lista de propriedades a ocultar na visualiza\xE7\xE3o"
    },
    rss: {
      title: "RSS",
      description: "Gera um feed RSS para o site exportado",
      info_siteUrl: "URL onde o site ser\xE1 hospedado",
      info_siteUrlPlaceholder: "https://exemplo.com/meusite",
      info_authorName: "Nome do autor do site"
    },
    styleOptionsSection: {
      title: "Op\xE7\xF5es de Estilo",
      description: "Configure quais estilos ser\xE3o inclu\xEDdos na exporta\xE7\xE3o"
    },
    makeOfflineCompatible: {
      title: "Tornar Compat\xEDvel com Modo Offline",
      description: "Baixar recursos / imagens / scripts online para que a p\xE1gina funcione offline. Ou evitar depend\xEAncia de CDNs."
    },
    includePluginCSS: {
      title: "Incluir CSS de Plugins",
      description: "Inclui CSS de plugins na exporta\xE7\xE3o do HTML. Se recursos do plugin n\xE3o renderizarem corretamente, adicione o plugin nessa lista. Evite adicionar plugins sem necessidade, pois isso aumenta o tempo de carregamento da sua p\xE1gina, quanto mais CSS for inclu\xEDdo."
    },
    includeStyleCssIds: {
      title: "Incluir Estilos com IDs",
      description: "Inclui CSS de tags de estilo com os IDs especificados"
    },
    generalSettingsSection: {
      title: "Configura\xE7\xF5es Gerais",
      description: "Controle configura\xE7\xF5es simples como favicon e metadados do site"
    },
    favicon: {
      title: "Imagem do Favicon",
      description: "Caminho local da imagem favicon do site"
    },
    siteName: {
      title: "Nome do Site",
      description: "Nome do cofre / site exportado"
    },
    iconEmojiStyle: {
      title: "Estilo de Emoji para \xCDcones",
      description: "Estilo de emoji usado para \xEDcones personalizados"
    },
    themeName: {
      title: "Tema",
      description: "Tema instalado a ser usado na exporta\xE7\xE3o"
    },
    exportSettingsSection: {
      title: "Configura\xE7\xF5es de Exporta\xE7\xE3o",
      description: "Configura\xE7\xF5es t\xE9cnicas como controle de gera\xE7\xE3o de links"
    },
    relativeHeaderLinks: {
      title: "Usar Links Relativos para Cabe\xE7alhos",
      description: "Utiliza links relativos em vez de absolutos para cabe\xE7alhos"
    },
    slugifyPaths: {
      title: "Slugificar Caminhos",
      description: "Transformar caminhos e nomes de arquivos para formato web (min\xFAsculo, sem espa\xE7os)"
    },
    addPageIcon: {
      title: "Adicionar \xCDcone \xE0 P\xE1gina",
      description: "Adiciona o \xEDcone do arquivo ao cabe\xE7alho da p\xE1gina"
    },
    obsidianSettingsSection: {
      title: "Configura\xE7\xF5es do Obsidian",
      description: "Controla o funcionamento do plugin dentro do Obsidian"
    },
    logLevel: {
      title: "N\xEDvel de Log",
      description: "Define o n\xEDvel de detalhamento nos logs do console"
    },
    titleProperty: {
      title: "Propriedade de T\xEDtulo",
      description: "Propriedade a ser usada como t\xEDtulo do documento"
    }
  }
};

// src/plugin/translations/language.ts
function getUserLanguage() {
  let locale = window.moment.locale();
  if (!locale) {
    locale = "en";
  }
  return locale;
}
function getLanguage() {
  const settingLanguages = getUserLanguage();
  const language6 = translations[settingLanguages];
  if (!language6) {
    console.log(`Language ${settingLanguages} not found, defaulting to English`);
    return translations["en"];
  }
  return language6;
}
var translations = {
  "en": language2,
  "zh-cn": language,
  "it": language3,
  "uk": language4,
  "pt": language5
};
var i18n = getLanguage();

// src/plugin/utils/path.ts
var pathTools = require_upath();
var _Path = class {
  constructor(path, workingDirectory = _Path.vaultPath.path) {
    this._root = "";
    this._dir = "";
    this._parent = "";
    this._base = "";
    this._ext = "";
    this._hash = "";
    this._name = "";
    this._fullPath = "";
    this._isDirectory = false;
    this._isFile = false;
    this._exists = void 0;
    this._sourceString = "";
    this._useBackslashes = false;
    this._workingDirectory = _Path.parsePath(workingDirectory).fullPath;
    this.reparse(path);
    if (this.isAbsolute)
      this._workingDirectory = "";
  }
  static log(title, message, type) {
    this.logQueue.push({ title, message, type });
  }
  static dequeueLog() {
    const queue = this.logQueue;
    this.logQueue = [];
    return queue;
  }
  reparse(path) {
    var _a3, _b3, _c2;
    let parsed = _Path.parsePath(path);
    if (path == "")
      parsed = { root: "", dir: "", parent: "", base: "", ext: "", name: "", fullPath: "" };
    for (const key in parsed) {
      if (this._useBackslashes) {
        parsed[key] = parsed[key].replaceAll("/", "\\");
      } else {
        parsed[key] = parsed[key].replaceAll("\\", "/");
      }
    }
    this._root = parsed.root;
    this._dir = parsed.dir;
    this._parent = parsed.parent;
    this._base = parsed.base;
    this._ext = (_a3 = parsed.ext.split("#")[0]) != null ? _a3 : parsed.ext;
    this._hash = (_b3 = parsed.ext.split("#")[1]) != null ? _b3 : "";
    this._name = parsed.name;
    this._fullPath = parsed.fullPath;
    this._isDirectory = this._ext == "";
    this._isFile = this._ext != "";
    this._exists = void 0;
    this._sourceString = path;
    if (this._base.lastIndexOf("#") > this._base.lastIndexOf(".")) {
      this._base = (_c2 = this._base.split("#")[0]) != null ? _c2 : this._base;
    }
    this._exists;
    return this;
  }
  joinString(...paths) {
    return this.copy.reparse(_Path.joinStringPaths(this.path, ...paths));
  }
  join(...paths) {
    return new _Path(_Path.joinStringPaths(this.path, ...paths.map((p) => p.path)), this._workingDirectory);
  }
  absolute(workingDirectory = this._workingDirectory) {
    if (workingDirectory instanceof _Path && !workingDirectory.isAbsolute)
      throw new Error("workingDirectory must be an absolute path: " + workingDirectory.path);
    if (!this.isAbsolute) {
      this._fullPath = _Path.joinStringPaths(workingDirectory.toString(), this.path);
      this._workingDirectory = "";
      this.reparse(this.path);
    }
    return this;
  }
  absoluted(workingDirectory = this._workingDirectory) {
    if (this.isAbsolute)
      return this.copy;
    return this.copy.absolute(workingDirectory);
  }
  folderize() {
    if (!this.isDirectory) {
      this.reparse(this.path + "/");
    }
    return this;
  }
  folderized() {
    return this.copy.folderize();
  }
  normalize() {
    const fullPath = pathTools.normalizeSafe(this.absoluted().path);
    let newWorkingDir = "";
    let newFullPath = "";
    let reachedEndOfWorkingDir = false;
    for (let i = 0; i < fullPath.length; i++) {
      const fullChar = fullPath.charAt(i);
      const workingChar = this.workingDirectory.charAt(i);
      if (fullChar == workingChar && !reachedEndOfWorkingDir) {
        newWorkingDir += fullChar;
        continue;
      }
      reachedEndOfWorkingDir = true;
      newFullPath += fullChar;
    }
    this.reparse(newFullPath);
    this._workingDirectory = newWorkingDir;
    return this;
  }
  normalized() {
    return this.copy.normalize();
  }
  slugify(makeWebStyle = true) {
    if (!makeWebStyle)
      return this;
    this._fullPath = _Path.slugify(this.path);
    this.reparse(this.path);
    return this;
  }
  slugified(makeWebStyle = true) {
    return this.copy.slugify(makeWebStyle);
  }
  backslashify() {
    this._useBackslashes = true;
    const path = this.path.replaceAll("/", "\\");
    this.reparse(path);
    return this;
  }
  backslashified() {
    return this.copy.backslashify();
  }
  makePlatformSafe() {
    if ((0, import_os.platform)() == "win32")
      return this.backslashify();
    return this;
  }
  setWorkingDirectory(workingDirectory) {
    this._workingDirectory = workingDirectory;
    return this;
  }
  setExtension(extension) {
    if (!extension.contains("."))
      extension = "." + extension;
    this._ext = extension;
    this._base = this._name + this._ext;
    this._fullPath = _Path.joinStringPaths(this._dir, this._base);
    this.reparse(this._fullPath);
    return this;
  }
  setFileName(name) {
    this._name = name;
    this._base = this._name + this._ext;
    this._fullPath = _Path.joinStringPaths(this._dir, this._base);
    this.reparse(this._fullPath);
    return this;
  }
  replaceExtension(searchExt, replaceExt) {
    if (!searchExt.contains("."))
      searchExt = "." + searchExt;
    if (!replaceExt.contains("."))
      replaceExt = "." + replaceExt;
    this._ext = this._ext.replace(searchExt, replaceExt);
    this._base = this._name + this._ext;
    this._fullPath = _Path.joinStringPaths(this._dir, this._base);
    this.reparse(this._fullPath);
    return this;
  }
  toString() {
    return this.path;
  }
  split() {
    return this.path.split(/[\/\\]/);
  }
  get root() {
    return this._root;
  }
  get directory() {
    const newPath = this.copy;
    newPath.reparse(this._dir);
    newPath.setWorkingDirectory(this._workingDirectory);
    return newPath;
  }
  set directory(dir) {
    this._dir = dir.path;
    if (!this.isDirectory)
      this._fullPath = _Path.joinStringPaths(this._dir, this._base);
    else
      this._fullPath = this._dir;
    this.reparse(this._fullPath);
  }
  get parent() {
    if (this._parent == "")
      return;
    const newPath = this.copy;
    newPath.reparse(this._parent);
    return newPath;
  }
  set parent(parent) {
    var _a3;
    this._parent = (_a3 = parent == null ? void 0 : parent.path) != null ? _a3 : "";
    this._fullPath = _Path.joinStringPaths(this._parent, this._base);
    this.reparse(this._fullPath);
  }
  get fullName() {
    return this._base;
  }
  set fullName(name) {
    this._base = name;
    this._fullPath = _Path.joinStringPaths(this._parent, this._base);
    this.reparse(this._fullPath);
  }
  get extension() {
    return this._ext;
  }
  set extension(ext) {
    this.setExtension(ext);
  }
  get extensionName() {
    return this._ext.replace(".", "");
  }
  get hash() {
    return this._hash;
  }
  get basename() {
    return this._name;
  }
  get depth() {
    let depth = 0;
    const splits = this.path.split("/");
    for (let i = 0; i < splits.length - 1; i++) {
      if (splits[i] == "..") {
        depth--;
      } else if (splits[i] != ".") {
        depth++;
      }
    }
    if (this.isAbsolute)
      depth--;
    return depth;
  }
  get maxDepth() {
    let initialDirection = 0;
    let maxDepth = 0;
    let depth = 0;
    const splits = this.path.split("/");
    for (let i = 0; i < splits.length - 1; i++) {
      if (splits[i] == "..") {
        depth--;
        if (initialDirection == 0)
          initialDirection = -1;
      } else if (splits[i] != ".") {
        depth++;
        if (initialDirection == 0)
          initialDirection = 1;
      }
      if (initialDirection == -1 && depth < maxDepth)
        maxDepth = depth;
      if (initialDirection == 1 && depth > maxDepth)
        maxDepth = depth;
    }
    if (this.isAbsolute)
      maxDepth--;
    return maxDepth;
  }
  get sourceString() {
    return this._sourceString;
  }
  get path() {
    return this._fullPath;
  }
  get pathname() {
    if (this.isDirectory)
      return this.path;
    return this.directory.joinString(this.fullName).path;
  }
  get isDirectory() {
    return this._isDirectory;
  }
  get isDirectoryFS() {
    if (this.isDirectory)
      return true;
    try {
      const stat = (0, import_fs.statSync)(this.absoluted().pathname);
      return stat.isDirectory();
    } catch (error) {
      _Path.log("Error checking if path is directory: " + this.pathname, error, "error");
      return false;
    }
  }
  get isEmpty() {
    return this.path == "";
  }
  get isFile() {
    return this._isFile;
  }
  get isFileFS() {
    if (!this.isFile)
      return false;
    try {
      const stat = (0, import_fs.statSync)(this.absoluted().pathname);
      return stat.isFile();
    } catch (error) {
      _Path.log("Error checking if path is file: " + this.pathname, error, "error");
      return false;
    }
  }
  get workingDirectory() {
    return this._workingDirectory;
  }
  get exists() {
    if (this._exists == void 0) {
      try {
        const absPath = this.absoluted().pathname;
        this._exists = _Path.pathExists(absPath);
      } catch (error) {
        this._exists = false;
        _Path.log("Error checking if path exists: " + this.pathname, error, "error");
      }
    }
    return this._exists;
  }
  get stat() {
    if (!this.exists)
      return;
    try {
      const stat = (0, import_fs.statSync)(this.absoluted().pathname);
      return stat;
    } catch (error) {
      _Path.log("Error getting stat: " + this.pathname, error, "error");
      return;
    }
  }
  get isAbsolute() {
    let asString = this.path;
    if (asString.startsWith("http:") || asString.startsWith("https:"))
      return true;
    if (asString.startsWith("file://"))
      return true;
    if ((0, import_os.platform)() == "win32") {
      asString = asString.replaceAll("/", "\\");
      if (asString.startsWith("\\\\"))
        return true;
      if (asString.match(/^[A-Za-z]:\\/))
        return true;
      if (asString.startsWith("\\") && !asString.contains(":"))
        return true;
      else
        return false;
    } else {
      if (asString.startsWith("/"))
        return true;
      else
        return false;
    }
  }
  get isRelative() {
    return !this.isAbsolute;
  }
  get copy() {
    const newPath = new _Path(this.path, this._workingDirectory);
    newPath._useBackslashes = this._useBackslashes;
    newPath.reparse(this.path);
    return newPath;
  }
  validate(options) {
    var _a3, _b3;
    let error = "";
    let valid = true;
    const isEmpty = this.sourceString.trim() == "";
    options.requireExtentions = (_b3 = (_a3 = options.requireExtentions) == null ? void 0 : _a3.map((e) => e.replace(".", ""))) != null ? _b3 : [];
    const dottedExtention = options.requireExtentions.map((e) => "." + e);
    const lang = i18n.pathValidations;
    if (!options.allowEmpty && isEmpty) {
      error += lang.noEmpty;
      valid = false;
    } else if (options.allowEmpty && isEmpty) {
      return { valid: true, isEmpty, error: "" };
    }
    if (options.requireExists && !this.exists) {
      error += lang.mustExist;
      valid = false;
    } else if (!options.allowTildeHomeDirectory && this.path.startsWith("~")) {
      error += lang.noTilde;
      valid = false;
    } else if (!options.allowAbsolute && this.isAbsolute) {
      error += lang.noAbsolute;
      valid = false;
    } else if (!options.allowRelative && this.isRelative) {
      error += lang.noRelative;
      valid = false;
    } else if (!options.allowFiles && this.isFileFS) {
      error += lang.noFiles;
      valid = false;
    } else if (!options.allowDirectories && this.isDirectoryFS) {
      error += lang.noFolders;
      valid = false;
    } else if (options.requireExtentions.length > 0 && !options.requireExtentions.includes(this.extensionName) && !isEmpty) {
      error += lang.mustHaveExtension.format(dottedExtention.join(", "));
      valid = false;
    }
    return { valid, isEmpty, error };
  }
  async createDirectory() {
    if (!this.exists) {
      const path = this.absoluted().directory.path;
      try {
        await import_fs.promises.mkdir(path, { recursive: true });
      } catch (error) {
        _Path.log("Error creating directory: " + path, error, "error");
        return false;
      }
    }
    return true;
  }
  async readAsString(encoding = "utf-8") {
    if (!this.exists || this.isDirectory)
      return;
    try {
      const data = await import_fs.promises.readFile(this.absoluted().pathname, { encoding });
      return data;
    } catch (error) {
      _Path.log("Error reading file: " + this.pathname, error, "error");
      return;
    }
  }
  async readAsBuffer() {
    if (!this.exists || this.isDirectory) {
      console.error("Error reading file buffer: " + this.pathname, this.isDirectory ? "Path is directory" : "Path does not exist");
      return;
    }
    try {
      const data = await import_fs.promises.readFile(this.absoluted().pathname);
      return data;
    } catch (error) {
      _Path.log("Error reading file buffer: " + this.pathname, error, "error");
      return;
    }
  }
  async write(data, encoding = "utf-8") {
    if (this.isDirectory)
      return false;
    try {
      await import_fs.promises.writeFile(this.absoluted().pathname, data, { encoding });
      return true;
    } catch (error) {
      const dirExists = await this.createDirectory();
      if (!dirExists)
        return false;
      try {
        await import_fs.promises.writeFile(this.absoluted().pathname, data, { encoding });
        return true;
      } catch (error2) {
        _Path.log("Error writing file: " + this.pathname, error2, "error");
        return false;
      }
    }
  }
  async delete(recursive = false) {
    if (!this.exists)
      return false;
    try {
      await import_fs.promises.rm(this.absoluted().pathname, { recursive });
      return true;
    } catch (error) {
      _Path.log("Error deleting file: " + this.pathname, error, "error");
      return false;
    }
  }
  static parsePath(path) {
    var _a3;
    const args = (_a3 = path.split("?")[1]) != null ? _a3 : "";
    path = path.split("?")[0];
    if (process.platform === "win32") {
      if (path.startsWith("~")) {
        path = path.replace("~", (0, import_os.homedir)());
      }
    }
    try {
      path = decodeURI(path);
    } catch (trash) {
      try {
        path = decodeURI(path.replaceAll("%", ""));
      } catch (e) {
        this.log("Could not decode path:" + path, e, "info");
      }
    }
    const parsed = pathTools.parse(path);
    if (parsed.ext.contains(" ")) {
      parsed.ext = "";
    }
    if (parsed.name.endsWith(" ")) {
      parsed.name += parsed.ext;
      parsed.ext = "";
    }
    let parent = parsed.dir;
    let fullPath = "";
    if (path.endsWith("/") || path.endsWith("\\") || parsed.ext == "") {
      if (path.endsWith("/") || path.endsWith("\\"))
        path = path.substring(0, path.length - 1);
      parsed.dir = pathTools.normalizeSafe(path);
      const items = parsed.dir.split("/");
      parsed.name = items[items.length - 1];
      parsed.base = parsed.name;
      parsed.ext = "";
      fullPath = parsed.dir;
      parent = parsed.dir.substring(0, parsed.dir.length - parsed.name.length);
    } else {
      fullPath = pathTools.join(parent, parsed.base);
    }
    if (args && args.trim() != "")
      fullPath += "?" + args;
    if (fullPath.startsWith("http:"))
      parsed.root = "http://";
    else if (fullPath.startsWith("https:"))
      parsed.root = "https://";
    const protocolRegex = /(https?)[:][\\/](?![\\/])/g;
    parsed.dir = parsed.dir.replace(protocolRegex, "$1://");
    parent = parent.replace(protocolRegex, "$1://");
    fullPath = fullPath.replace(protocolRegex, "$1://");
    return { root: parsed.root, dir: parsed.dir, parent, base: parsed.base, ext: parsed.ext, name: parsed.name, fullPath };
  }
  static pathExists(path) {
    return (0, import_fs.existsSync)(path);
  }
  static joinStringPaths(...paths) {
    let joined = pathTools.join(...paths);
    if (joined.startsWith("http")) {
      joined = joined.replaceAll(":/", "://");
    }
    try {
      return decodeURI(joined);
    } catch (e) {
      this.log("Could not decode joined paths: " + joined, e, "info");
      return joined;
    }
  }
  static joinPath(...paths) {
    return new _Path(_Path.joinStringPaths(...paths.map((p) => p.path)), paths[0]._workingDirectory);
  }
  static joinStrings(...paths) {
    return new _Path(_Path.joinStringPaths(...paths));
  }
  static getRelativePath(from, to, useAbsolute = false) {
    const fromUse = useAbsolute ? from.absoluted() : from;
    const toUse = useAbsolute ? to.absoluted() : to;
    const relative = pathTools.relative(fromUse.directory.path, toUse.path);
    const workingDir = from.absoluted().directory.path;
    return new _Path(relative, workingDir);
  }
  static getRelativePathFromVault(path, useAbsolute = false) {
    return _Path.getRelativePath(_Path.vaultPath, path, useAbsolute);
  }
  static get vaultPath() {
    var _a3;
    if (this.vaultPathCache != void 0)
      return this.vaultPathCache;
    const adapter = app.vault.adapter;
    if (adapter instanceof import_obsidian.FileSystemAdapter) {
      const basePath = (_a3 = adapter.getBasePath()) != null ? _a3 : "";
      this.vaultPathCache = new _Path(basePath, "");
      return this.vaultPathCache;
    }
    throw new Error("Vault path could not be determined");
  }
  static get vaultConfigDir() {
    if (this.vaultConfigDirCache == void 0) {
      this.vaultConfigDirCache = new _Path(app.vault.configDir, "");
    }
    return this.vaultConfigDirCache;
  }
  static get emptyPath() {
    return new _Path("", "");
  }
  static get rootPath() {
    return new _Path("/", "");
  }
  static slugify(path) {
    return path.replaceAll(" ", "-").replaceAll(/-{2,}/g, "-").toLowerCase();
  }
  static async removeEmptyDirectories(directory) {
    const path = new _Path(directory);
    if (!path.isDirectory || !path.exists || path.isFile)
      return;
    try {
      const stats = await import_fs.promises.stat(directory);
      if (!(stats == null ? void 0 : stats.isDirectory()))
        return;
      let fileNames = await (0, import_promises.readdir)(directory);
      if (fileNames.length > 0) {
        const recursiveRemovalPromises = fileNames.map((fileName) => {
          const newPath = path.joinString(fileName).path;
          return this.removeEmptyDirectories(newPath);
        });
        await Promise.all(recursiveRemovalPromises);
        fileNames = await (0, import_promises.readdir)(directory);
      }
      if (fileNames.length === 0) {
        await (0, import_promises.rmdir)(directory);
      }
    } catch (error) {
      _Path.log("Problem removing directory", error, "warn");
    }
  }
};
var Path = _Path;
Path.logQueue = [];
Path.vaultPathCache = void 0;
Path.vaultConfigDirCache = void 0;

// src/plugin/utils/downloadable.ts
var Attachment = class {
  constructor(data, target, source, options) {
    this.showInTree = false;
    this.treeOrder = 0;
    if (target.extensionName == "html" && !Object.getPrototypeOf(this).constructor.name.contains("Webpage"))
      target.setFileName(target.basename + "-content");
    if (target.isDirectory)
      throw new Error("target must be a file: " + target.path);
    if (target.isAbsolute)
      throw new Error("(absolute) Target must be a relative path with the working directory set to the root: " + target.path);
    this.exportOptions = options;
    this.source = source != null ? source : null;
    this.data = data;
    this.targetPath = target;
  }
  get filename() {
    return this.targetPath.fullName;
  }
  get basename() {
    return this.targetPath.basename;
  }
  get extension() {
    return this.targetPath.extension;
  }
  get extensionName() {
    return this.targetPath.extensionName;
  }
  get sourcePath() {
    return this._sourcePath;
  }
  set sourcePath(source) {
    this._sourcePath = source;
    this._sourcePathRootRelative = this.removeRootFromPath(new Path(source != null ? source : ""), false).path;
  }
  get sourcePathRootRelative() {
    return this._sourcePathRootRelative;
  }
  set source(source) {
    var _a3, _b3, _c2;
    this._source = source;
    this.sourceStat = (_c2 = source == null ? void 0 : source.stat) != null ? _c2 : { ctime: Date.now(), mtime: Date.now(), size: (_b3 = (_a3 = this.data) == null ? void 0 : _a3.length) != null ? _b3 : 0 };
    this.sourcePath = source == null ? void 0 : source.path;
  }
  get source() {
    return this._source;
  }
  get targetPath() {
    return this._targetPath;
  }
  set targetPath(target) {
    target.slugify(this.exportOptions.slugifyPaths);
    target = this.removeRootFromPath(target);
    this._targetPath = target;
  }
  get data() {
    return this._data;
  }
  set data(data) {
    var _a3, _b3;
    this._data = data;
    if (!this.source)
      this.sourceStat = { ctime: Date.now(), mtime: Date.now(), size: (_b3 = (_a3 = this.data) == null ? void 0 : _a3.length) != null ? _b3 : 0 };
  }
  removeRootFromPath(path, allowSlugify = true) {
    var _a3;
    const root2 = new Path((_a3 = this.exportOptions.exportRoot) != null ? _a3 : "").slugify(allowSlugify && this.exportOptions.slugifyPaths).path + "/";
    if (path.path.startsWith(root2)) {
      path.reparse(path.path.substring(root2.length));
    }
    return path;
  }
  async download() {
    if (this.targetPath.workingDirectory == Path.vaultPath.path) {
      throw new Error("(working dir) Target should be a relative path with the working directory set to the root: " + this.targetPath.absoluted().path);
    }
    const data = this.data instanceof Buffer ? this.data : Buffer.from(this.data.toString());
    await this.targetPath.write(data);
  }
};

// src/plugin/asset-loaders/base-asset.ts
var import_mime = __toESM(require_mime());

// src/plugin/features/include.ts
var IncludeGenerator = class {
  static generate(url, isDocument) {
    return `<link itemprop="include${isDocument ? "-document" : ""}" href="${url}">`;
  }
};

// src/plugin/settings/settings.ts
var import_obsidian7 = require("obsidian");

// src/assets/third-party-styles-blacklist.txt
var third_party_styles_blacklist_default = "advanced-pdf-export\ncustom-classes\nfile-tree-alternative\nhomepage\nOA-file-hider\nobsidian-asciimath\nobsidian-discordrpc\nobsidian-dynamic-background\nobsidian-dynamic-toc\nobsidian-excel-to-markdown-table\nobsidian-full-calendar\nobsidian-graphviz\nobsidian-latex\nobsidian-latex-suite\nobsidian-minimal-settings\nobsidian-plantuml\nobsidian-prozen\nobsidian-statusbar-pomo\nobsidian-style-settings\nobsidian-underline\nsettings-search\nsurfing\ntable-editor-obsidian\ntext-snippets-obsidian\nwebpage-html-export\nlapel\nobsidian-regex-replace\ntemplater-obsidian\nediting-toolbar\nobsidian-admonition\nobsidian-banners\nobsidian-charts\nobsidian-excalidraw-plugin\nobsidian42-brat\nobsidian-icon-folder\nvscode-editor\n";

// src/plugin/render-api/api-options.ts
var MarkdownRendererOptions = class {
  constructor() {
    this.container = void 0;
    this.createDocumentContainer = true;
    this.keepModHeaderFooter = false;
    this.addPageIcon = true;
    this.unifyTitleFormat = true;
    this.createPusherElement = true;
    this.makeHeadersTrees = true;
    this.postProcess = true;
    this.displayProgress = true;
    this.inlineHTML = false;
    this.exportPath = "";
    this.filesToExport = [];
    this.useFallbackRenderer = false;
  }
};

// src/plugin/render-api/render-api.ts
var import_obsidian5 = require("obsidian");

// src/plugin/utils/tab-manager.ts
var TabManager;
((TabManager2) => {
  function getLeaf(navType, splitDirection = "vertical") {
    const leaf = navType === "split" ? app.workspace.getLeaf(navType, splitDirection) : app.workspace.getLeaf(navType);
    return leaf;
  }
  async function openFileInNewTab(file, navType, splitDirection = "vertical") {
    const leaf = getLeaf(navType, splitDirection);
    try {
      await leaf.openFile(file, void 0).catch((reason) => {
        ExportLog.error(reason);
      });
    } catch (error) {
      ExportLog.error(error);
    }
    return leaf;
  }
  TabManager2.openFileInNewTab = openFileInNewTab;
  function openNewTab(navType, splitDirection = "vertical", makeActive = false) {
    let leaf = getLeaf(navType, splitDirection);
    if (makeActive)
      app.workspace.setActiveLeaf(leaf);
    return leaf;
  }
  TabManager2.openNewTab = openNewTab;
})(TabManager || (TabManager = {}));

// src/plugin/features/simple-list-generator.ts
var import_obsidian2 = require("obsidian");
var SimpleFileListGenerator = class {
  constructor(items, options) {
    this.items = items;
    this.options = options;
  }
  async generate(container) {
    container = container != null ? container : document.body;
    const listWrapperEl = container.createDiv("file-list-wrapper");
    const titleEl = listWrapperEl.createDiv("file-list-title");
    if (this.options.title)
      titleEl.setText(this.options.title);
    const listContainerEl = listWrapperEl.createDiv("file-list");
    let i = 0;
    for (const item of this.items) {
      const itemEl = listContainerEl.createDiv("file-list-item");
      if (this.options.icons) {
        const icon = this.options.icons instanceof Array ? this.options.icons[i] : this.options.icons;
        const iconEl = (0, import_obsidian2.getIcon)(icon);
        if (iconEl) {
          iconEl.addClass("file-list-item-icon");
          itemEl.appendChild(iconEl);
        }
      }
      const itemTitleEl = itemEl.createDiv("file-list-item-title");
      if (this.options.renderAsMarkdown) {
        MarkdownRendererAPI.renderMarkdownSimpleEl(item, itemTitleEl);
      } else {
        itemTitleEl.setText(item);
      }
      i++;
    }
    return listWrapperEl;
  }
};

// src/plugin/render-api/dataview-renderer.ts
var import_obsidian_dataview = __toESM(require_lib());
var _a, _b, _c;
var _DataviewRenderer = class {
  constructor(view, file, query, keyword) {
    this.rendered = false;
    if (!_DataviewRenderer.isDataviewEnabled()) {
      throw new Error("Dataview plugin is not enabled or not installed.");
    }
    this.view = view;
    this.file = file;
    this.query = query;
    this.keyword = keyword;
    _DataviewRenderer.api = (0, import_obsidian_dataview.getAPI)();
  }
  static isDataviewEnabled() {
    var _a3, _b3, _c2;
    return (_c2 = (_b3 = (_a3 = app.plugins) == null ? void 0 : _a3.enabledPlugins) == null ? void 0 : _b3.has("dataview")) != null ? _c2 : false;
  }
  async generate(container) {
    this.container = container != null ? container : document.body;
    if (this.keyword == "dataview")
      await _DataviewRenderer.api.execute(this.query, container, this.view, this.file.path);
    else
      await _DataviewRenderer.api.executeJs(this.query, container, this.view, this.file.path);
    function delay(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }
    await delay(100);
    this.rendered = true;
    return this.container;
  }
  static getDataViewsFromHTML(sectionContainer) {
    const dataviewEls = Array.from(sectionContainer.querySelectorAll(`pre:has(:is(.language-dataview, .block-language-dataview, .language-${_DataviewRenderer.jsKeyword}, .block-language-${_DataviewRenderer.jsKeyword}))`));
    const results = dataviewEls.map((el) => {
      var _a3;
      const code = (_a3 = el.querySelector("code")) != null ? _a3 : el;
      const query = code.innerText;
      const keyword = code.className.contains(_DataviewRenderer.jsKeyword) ? _DataviewRenderer.jsKeyword : "dataview";
      return { query, preEl: el, keyword };
    });
    return results;
  }
};
var DataviewRenderer = _DataviewRenderer;
DataviewRenderer.api = (0, import_obsidian_dataview.getAPI)();
DataviewRenderer.jsKeyword = (_c = (_b = (_a = _DataviewRenderer.api) == null ? void 0 : _a.settings) == null ? void 0 : _b.dataviewJsKeyword) != null ? _c : "dataviewjs";

// src/plugin/utils/utils.ts
var import_obsidian3 = require("obsidian");
var Utils;
((Utils2) => {
  async function delay(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }
  Utils2.delay = delay;
  function padStringBeggining(str, length, char) {
    return char.repeat(length - str.length) + str;
  }
  Utils2.padStringBeggining = padStringBeggining;
  function includesAny(str, substrings) {
    for (const substring of substrings) {
      if (str.includes(substring))
        return true;
    }
    return false;
  }
  Utils2.includesAny = includesAny;
  async function urlAvailable(url) {
    const controller = new AbortController();
    const id = setTimeout(() => controller.abort(), 4e3);
    const response = await fetch(url, { signal: controller.signal, mode: "no-cors" });
    clearTimeout(id);
    return response;
  }
  Utils2.urlAvailable = urlAvailable;
  function sampleCSSColorHex(variable, testParentEl) {
    const testEl = document.createElement("div");
    testEl.style.setProperty("display", "none");
    testEl.style.setProperty("color", "var(" + variable + ")");
    testParentEl.appendChild(testEl);
    const col = getComputedStyle(testEl).color;
    const opacity = getComputedStyle(testEl).opacity;
    testEl.remove();
    function toColorObject(str) {
      const match = str.match(/rgb?\((\d+),\s*(\d+),\s*(\d+)\)/);
      return match ? {
        red: parseInt(match[1]),
        green: parseInt(match[2]),
        blue: parseInt(match[3]),
        alpha: 1
      } : null;
    }
    let color = toColorObject(col), alpha = parseFloat(opacity);
    return isNaN(alpha) && (alpha = 1), color ? {
      a: alpha * color.alpha,
      hex: this.padStringBeggining(color.red.toString(16), 2, "0") + this.padStringBeggining(color.green.toString(16), 2, "0") + this.padStringBeggining(color.blue.toString(16), 2, "0")
    } : {
      a: alpha,
      hex: "ffffff"
    };
  }
  Utils2.sampleCSSColorHex = sampleCSSColorHex;
  ;
  async function changeViewMode(view, modeName) {
    const mode = view.modes[modeName];
    mode && await view.setMode(mode);
  }
  Utils2.changeViewMode = changeViewMode;
  ;
  async function downloadAttachments(files) {
    ExportLog.addToProgressCap(files.length);
    ExportLog.progress(0, "Saving files to disk", "...", "var(--color-green)");
    let complete = 0;
    await Promise.all(files.map(async (file, i) => {
      try {
        complete++;
        ExportLog.progress(1, "Saving files to disk", "Saved: " + file.filename, "var(--color-green)");
        await file.download();
      } catch (e) {
        ExportLog.error(e, "Could not save file: " + file.filename);
      }
    }));
  }
  Utils2.downloadAttachments = downloadAttachments;
  async function waitUntil(condition, timeout = 1e3, interval = 100) {
    if (condition())
      return true;
    return new Promise((resolve, reject) => {
      let timer = 0;
      const intervalId = setInterval(() => {
        if (condition()) {
          clearInterval(intervalId);
          resolve(true);
        } else {
          timer += interval;
          if (timer >= timeout) {
            clearInterval(intervalId);
            resolve(false);
          }
        }
      }, interval);
    });
  }
  Utils2.waitUntil = waitUntil;
  function getActiveTextView() {
    const view = app.workspace.getActiveViewOfType(import_obsidian3.TextFileView);
    if (!view) {
      return null;
    }
    return view;
  }
  Utils2.getActiveTextView = getActiveTextView;
  function trimEnd(inputString, trimString) {
    if (inputString.endsWith(trimString)) {
      return inputString.substring(0, inputString.length - trimString.length);
    }
    return inputString;
  }
  Utils2.trimEnd = trimEnd;
  function trimStart(inputString, trimString) {
    if (inputString.startsWith(trimString)) {
      return inputString.substring(trimString.length);
    }
    return inputString;
  }
  Utils2.trimStart = trimStart;
  async function openPath(path) {
    if (process.platform === "win32")
      path = path.backslashified();
    await window.electron.remote.shell.openPath(path.path);
  }
  Utils2.openPath = openPath;
  function levenshteinDistance(string1, string2) {
    if (!string1.length)
      return string2.length;
    if (!string2.length)
      return string1.length;
    const arr = [];
    for (let i = 0; i <= string2.length; i++) {
      arr[i] = [i];
      for (let j = 1; j <= string1.length; j++) {
        arr[i][j] = i === 0 ? j : Math.min(arr[i - 1][j] + 1, arr[i][j - 1] + 1, arr[i - 1][j - 1] + (string1[j - 1] === string2[i - 1] ? 0 : 1));
      }
    }
    return arr[string2.length][string1.length];
  }
  Utils2.levenshteinDistance = levenshteinDistance;
  ;
})(Utils || (Utils = {}));

// src/plugin/utils/icon-handler.ts
var import_obsidian4 = require("obsidian");

// src/shared/features/feature-options-base.ts
var RelationType = /* @__PURE__ */ ((RelationType2) => {
  RelationType2["Before"] = "before";
  RelationType2["After"] = "after";
  RelationType2["Start"] = "start";
  RelationType2["End"] = "end";
  return RelationType2;
})(RelationType || {});
var FeatureRelation = class {
  constructor(selector = "#right-sidebar-content", type = "start" /* Start */) {
    this.selector = "#right-sidebar-content";
    this.type = "start" /* Start */;
    this.info_selector = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.baseFeatures.info_selector
    });
    this.info_type = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.baseFeatures.info_type,
      dropdownTypes: RelationType
    });
    this.selector = selector;
    this.type = type;
  }
};
var FeatureSettingInfo = class {
  constructor(options) {
    this.show = true;
    this.name = "";
    this.description = "";
    this.placeholder = "";
    this.fileInputOptions = void 0;
    this.dropdownOptions = void 0;
    var _a3, _b3, _c2, _d, _e, _f;
    if (options) {
      this.show = (_a3 = options.show) != null ? _a3 : this.show;
      this.name = (_b3 = options.name) != null ? _b3 : this.name;
      this.description = (_c2 = options.description) != null ? _c2 : this.description;
      this.placeholder = (_d = options.placeholder) != null ? _d : this.placeholder;
      this.fileInputOptions = (_e = options.fileInputOptions) != null ? _e : this.fileInputOptions;
      this.dropdownOptions = (_f = options.dropdownTypes) != null ? _f : this.dropdownOptions;
    }
  }
};
var FeatureOptions = class {
  constructor() {
    this.featureId = "feature";
    this.enabled = true;
    this.unavailable = false;
    this.alwaysEnabled = false;
    this.hideSettingsButton = false;
  }
  setAvailable(value) {
    this.unavailable = !value;
    this.enabled = value;
  }
};
var InsertedFeatureOptions = class extends FeatureOptions {
  constructor(featureId, featurePlacement) {
    super();
    this.featurePlacement = new FeatureRelation();
    this.info_featurePlacement = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.baseFeatures.info_featurePlacement
    });
    this.featureId = featureId != null ? featureId : "inserted-feature";
    this.featurePlacement = featurePlacement != null ? featurePlacement : new FeatureRelation();
  }
  insertFeature(container, feature) {
    if (!container)
      return false;
    let relation = container.querySelector(this.featurePlacement.selector);
    if (relation) {
      switch (this.featurePlacement.type) {
        case "before" /* Before */:
          relation.before(feature);
          return true;
        case "after" /* After */:
          relation.after(feature);
          return true;
        case "start" /* Start */:
          relation.prepend(feature);
          return true;
        case "end" /* End */:
          relation.append(feature);
          return true;
        default:
          return false;
      }
    }
    return false;
  }
};
var InsertedFeatureOptionsWithTitle = class extends InsertedFeatureOptions {
  constructor() {
    super(...arguments);
    this.displayTitle = "Feature";
    this.info_displayTitle = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.baseFeatures.info_displayTitle
    });
  }
};
var FetchedFeatureOptions = class extends InsertedFeatureOptions {
  constructor() {
    super(...arguments);
    this.info_includePath = new FeatureSettingInfo({
      show: false
    });
  }
};

// src/shared/features/aliases.ts
var AliasesOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.featureId = "aliases";
    this.displayTitle = "Aliases";
    this.featurePlacement = new FeatureRelation(".header .data-bar", "start" /* Start */);
  }
};

// src/shared/features/backlinks.ts
var BacklinksOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.featureId = "backlinks";
    this.displayTitle = i18n.settings.backlinks.title;
    this.featurePlacement = new FeatureRelation(".footer", "start" /* Start */);
  }
};

// src/shared/shared.ts
var Shared = class {
};
Shared.libFolderName = "site-lib";
Shared.mediaFolderName = "media";
Shared.scriptsFolderName = "scripts";
Shared.cssFolderName = "styles";
Shared.fontFolderName = "fonts";
Shared.htmlFolderName = "html";
Shared.metadataFileName = "metadata.json";
Shared.searchIndexFileName = "search-index.json";

// src/shared/features/custom-head.ts
var CustomHeadOptions = class extends FetchedFeatureOptions {
  constructor() {
    super();
    this.sourcePath = "";
    this.info_sourcePath = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.customHead.info_sourcePath,
      fileInputOptions: {
        makeRelativeToVault: true,
        validation: (path) => {
          let isEmpty = (path || "").length === 0;
          let valid = path.endsWith(".html") || isEmpty;
          return { valid, isEmpty, error: !valid ? i18n.settings.customHead.validationError : "" };
        },
        browseButton: true
      }
    });
    this.featureId = "custom-head";
    this.featurePlacement = new FeatureRelation("head", "end" /* End */);
    this.includePath = `${Shared.libFolderName}/${Shared.htmlFolderName}/custom-head.html`;
  }
};

// src/shared/features/document.ts
var DocumentOptions = class extends FeatureOptions {
  constructor() {
    super();
    this.allowFoldingLists = true;
    this.allowFoldingHeadings = true;
    this.documentWidth = "40em";
    this.info_allowFoldingLists = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.document.info_allowFoldingLists
    });
    this.info_allowFoldingHeadings = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.document.info_allowFoldingHeadings
    });
    this.info_documentWidth = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.document.info_documentWidth
    });
    this.featureId = "obsidian-document";
    this.alwaysEnabled = true;
  }
};

// src/shared/features/file-navigation.ts
var FileNavigationOptions = class extends FetchedFeatureOptions {
  constructor() {
    super();
    this.showCustomIcons = false;
    this.showDefaultFolderIcons = false;
    this.showDefaultFileIcons = false;
    this.defaultFolderIcon = "lucide//folder";
    this.defaultFileIcon = "lucide//file";
    this.defaultMediaIcon = "lucide//file-image";
    this.exposeStartingPath = true;
    this.info_showCustomIcons = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_showCustomIcons
    });
    this.info_showDefaultFolderIcons = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_showDefaultFolderIcons
    });
    this.info_showDefaultFileIcons = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_showDefaultFileIcons
    });
    this.info_defaultFolderIcon = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_defaultFolderIcon
    });
    this.info_defaultFileIcon = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_defaultFileIcon
    });
    this.info_defaultMediaIcon = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_defaultMediaIcon
    });
    this.info_exposeStartingPath = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.fileNavigation.info_exposeStartingPath
    });
    this.featureId = "file-navigation";
    this.featurePlacement = new FeatureRelation("#left-sidebar-content", "end" /* End */);
    this.includePath = `${Shared.libFolderName}/${Shared.htmlFolderName}/file-tree.html`;
  }
};

// src/shared/features/graph-view.ts
var GraphViewOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.showOrphanNodes = true;
    this.showAttachments = false;
    this.allowGlobalGraph = true;
    this.allowExpand = true;
    this.attractionForce = 1;
    this.linkLength = 15;
    this.repulsionForce = 80;
    this.centralForce = 2;
    this.edgePruning = 100;
    this.minNodeRadius = 3;
    this.maxNodeRadius = 7;
    this.info_showOrphanNodes = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_showOrphanNodes
    });
    this.info_showAttachments = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_showAttachments
    });
    this.info_allowGlobalGraph = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_allowGlobalGraph
    });
    this.info_allowExpand = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_allowExpand
    });
    this.info_attractionForce = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_attractionForce
    });
    this.info_linkLength = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_linkLength
    });
    this.info_repulsionForce = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_repulsionForce
    });
    this.info_centralForce = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_centralForce
    });
    this.info_edgePruning = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_edgePruning
    });
    this.info_minNodeRadius = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_minNodeRadius
    });
    this.info_maxNodeRadius = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.graphView.info_maxNodeRadius
    });
    this.featureId = "graph-view";
    this.displayTitle = i18n.settings.graphView.title;
    this.featurePlacement = new FeatureRelation("#right-sidebar-content", "start" /* Start */);
  }
};

// src/shared/features/link-preview.ts
var LinkPreviewOptions = class extends FeatureOptions {
  constructor() {
    super();
    this.featureId = "link-preview";
    this.hideSettingsButton = true;
  }
};

// src/shared/features/outline.ts
var OutlineOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.startCollapsed = false;
    this.minCollapseDepth = 0;
    this.info_startCollapsed = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.outline.info_startCollapsed
    });
    this.info_minCollapseDepth = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.outline.info_minCollapseDepth,
      dropdownTypes: {
        "1": 1,
        "2": 2,
        "No Collapse": 100
      }
    });
    this.featureId = "outline";
    this.displayTitle = i18n.settings.outline.title;
    this.featurePlacement = new FeatureRelation("#right-sidebar-content", "end" /* End */);
  }
};

// src/shared/features/properties.ts
var PropertiesOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.info_hideProperties = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.properties.info_hideProperties
    });
    this.featureId = "properties";
    this.displayTitle = i18n.settings.properties.title;
    this.featurePlacement = new FeatureRelation(".header", "start" /* Start */);
  }
};

// src/shared/features/rss.ts
var RssOptions = class extends FeatureOptions {
  constructor() {
    super();
    this.siteUrl = "";
    this.authorName = "";
    this.info_siteUrl = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.rss.info_siteUrl,
      placeholder: i18n.settings.rss.info_siteUrlPlaceholder
    });
    this.info_authorName = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.rss.info_authorName
    });
    this.featureId = "rss";
  }
};

// src/shared/features/search.ts
var SearchOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.featureId = "search";
    this.displayTitle = i18n.settings.search.placeholder;
    this.featurePlacement = new FeatureRelation("#left-sidebar .topbar-content", "start" /* Start */);
  }
};

// src/shared/features/sidebar.ts
var SidebarOptions = class extends FeatureOptions {
  constructor() {
    super();
    this.allowResizing = true;
    this.allowCollapsing = true;
    this.rightDefaultWidth = "20em";
    this.leftDefaultWidth = "20em";
    this.info_allowResizing = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.sidebars.info_allowResizing
    });
    this.info_allowCollapsing = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.sidebars.info_allowCollapsing
    });
    this.info_rightDefaultWidth = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.sidebars.info_rightDefaultWidth
    });
    this.info_leftDefaultWidth = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.sidebars.info_leftDefaultWidth
    });
    this.featureId = "sidebar";
  }
};

// src/shared/features/tags.ts
var TagsOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.showInlineTags = true;
    this.showFrontmatterTags = true;
    this.info_showInlineTags = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.tags.info_showInlineTags
    });
    this.info_showFrontmatterTags = new FeatureSettingInfo({
      show: true,
      description: i18n.settings.tags.info_showFrontmatterTags
    });
    this.featureId = "tags";
    this.displayTitle = "";
    this.featurePlacement = new FeatureRelation(".header .data-bar", "end" /* End */);
  }
};

// src/shared/features/theme-toggle.ts
var ThemeToggleOptions = class extends InsertedFeatureOptionsWithTitle {
  constructor() {
    super();
    this.featureId = "theme-toggle";
    this.displayTitle = "";
    this.featurePlacement = new FeatureRelation("#right-sidebar .topbar-content", "start" /* Start */);
  }
};

// src/shared/website-data.ts
var EmojiStyle = /* @__PURE__ */ ((EmojiStyle2) => {
  EmojiStyle2["Native"] = "Native";
  EmojiStyle2["Twemoji"] = "Twemoji";
  EmojiStyle2["OpenMoji"] = "OpenMoji";
  EmojiStyle2["OpenMojiOutline"] = "OpenMojiOutline";
  EmojiStyle2["FluentUI"] = "FluentUI";
  return EmojiStyle2;
})(EmojiStyle || {});

// src/plugin/utils/icon-handler.ts
var IconHandler;
((IconHandler2) => {
  function getLucideIcon(iconName) {
    const iconEl = (0, import_obsidian4.getIcon)(iconName);
    if (iconEl) {
      const svg = iconEl.outerHTML;
      iconEl.remove();
      return svg;
    } else {
      return void 0;
    }
  }
  IconHandler2.getLucideIcon = getLucideIcon;
  function getEmojiIcon(iconCode) {
    const iconCodeInt = parseInt(iconCode, 16);
    if (!isNaN(iconCodeInt)) {
      return String.fromCodePoint(iconCodeInt);
    } else {
      return void 0;
    }
  }
  IconHandler2.getEmojiIcon = getEmojiIcon;
  async function getIcon4(iconName) {
    var _a3, _b3, _c2;
    if (iconName.startsWith("emoji//")) {
      const iconCode = iconName.replace(/^emoji\/\//, "");
      iconName = (_a3 = getEmojiIcon(iconCode)) != null ? _a3 : "\uFFFD";
    } else if (iconName.startsWith("lucide//")) {
      const lucideIconName = iconName.replace(/^lucide\/\//, "");
      iconName = (_b3 = getLucideIcon(lucideIconName)) != null ? _b3 : "\uFFFD";
    }
    if (/^\p{Emoji}/gu.test(iconName)) {
      const codepoint = [...iconName].map((e) => e.codePointAt(0).toString(16)).join(`-`);
      switch (Settings.exportOptions.iconEmojiStyle) {
        case "Twemoji" /* Twemoji */:
          return `<img src="https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${codepoint}.svg" class="emoji" />`;
        case "OpenMoji" /* OpenMoji */:
          return `<img src="https://openmoji.org/data/color/svg/${codepoint.toUpperCase()}.svg" class="emoji" />`;
        case "OpenMojiOutline" /* OpenMojiOutline */:
          const req = await (0, import_obsidian4.requestUrl)(`https://openmoji.org/data/black/svg/${codepoint.toUpperCase()}.svg`);
          if (req.status == 200)
            return req.text.replaceAll(/#00+/g, "currentColor").replaceAll(`stroke-width="2"`, `stroke-width="5"`);
          return iconName;
        case "FluentUI" /* FluentUI */:
          return `<img src="https://emoji.fluent-cdn.com/1.0.0/100x100/${codepoint}.png" class="emoji" />`;
        default:
          return iconName;
      }
    }
    return (_c2 = getLucideIcon(iconName.toLowerCase())) != null ? _c2 : iconName;
  }
  IconHandler2.getIcon = getIcon4;
})(IconHandler || (IconHandler = {}));

// src/plugin/render-api/render-api.ts
var MarkdownRendererAPI;
((MarkdownRendererAPI2) => {
  MarkdownRendererAPI2.viewableMediaExtensions = ["png", "jpg", "jpeg", "svg", "gif", "bmp", "ico", "mp4", "mov", "avi", "webm", "mpeg", "mp3", "wav", "ogg", "aac", "pdf", "html", "htm", "json", "txt", "yaml"];
  MarkdownRendererAPI2.convertableExtensions = ["md", "canvas", "base", "drawing", "excalidraw", ...MarkdownRendererAPI2.viewableMediaExtensions];
  function extentionToTag(extention) {
    if (["png", "jpg", "jpeg", "svg", "gif", "bmp", "ico"].includes(extention))
      return "img";
    else if (["mp4", "mov", "avi", "webm", "mpeg"].includes(extention))
      return "video";
    else if (["mp3", "wav", "ogg", "aac"].includes(extention))
      return "audio";
    else if (["pdf"].includes(extention))
      return "embed";
    else
      return "iframe";
  }
  MarkdownRendererAPI2.extentionToTag = extentionToTag;
  async function renderMarkdownToString(markdown, options) {
    options = Object.assign(new MarkdownRendererOptions(), options);
    const html = await _MarkdownRendererInternal.renderMarkdown(markdown, options);
    if (!html)
      return;
    if (options.postProcess)
      await _MarkdownRendererInternal.postProcessHTML(html, options);
    const text = html.innerHTML;
    if (!options.container)
      html.remove();
    return text;
  }
  MarkdownRendererAPI2.renderMarkdownToString = renderMarkdownToString;
  async function renderMarkdownToElement(markdown, options) {
    options = Object.assign(new MarkdownRendererOptions(), options);
    const html = await _MarkdownRendererInternal.renderMarkdown(markdown, options);
    if (!html)
      return;
    if (options.postProcess)
      await _MarkdownRendererInternal.postProcessHTML(html, options);
    return html;
  }
  MarkdownRendererAPI2.renderMarkdownToElement = renderMarkdownToElement;
  async function renderFile(file, options) {
    options = Object.assign(new MarkdownRendererOptions(), options);
    const result = await _MarkdownRendererInternal.renderFile(file, options);
    if (!result)
      return;
    if (options.postProcess)
      await _MarkdownRendererInternal.postProcessHTML(result.contentEl, options);
    return result;
  }
  MarkdownRendererAPI2.renderFile = renderFile;
  async function renderFileToString(file, options) {
    options = Object.assign(new MarkdownRendererOptions(), options);
    const result = await this.renderFile(file, options);
    if (!result)
      return;
    const text = result.contentEl.innerHTML;
    if (!options.container)
      result.contentEl.remove();
    return text;
  }
  MarkdownRendererAPI2.renderFileToString = renderFileToString;
  async function renderFilePathToString(filePath, options) {
    const file = app.vault.getAbstractFileByPath(filePath);
    if (!file || !(file instanceof import_obsidian5.TFile))
      return;
    return await this.renderFileToString(file, options);
  }
  MarkdownRendererAPI2.renderFilePathToString = renderFilePathToString;
  async function renderMarkdownSimple(markdown) {
    const container = document.body.createDiv();
    await _MarkdownRendererInternal.renderSimpleMarkdown(markdown, container);
    const text = container.innerHTML;
    container.remove();
    return text;
  }
  MarkdownRendererAPI2.renderMarkdownSimple = renderMarkdownSimple;
  async function renderMarkdownSimpleEl(markdown, container) {
    await _MarkdownRendererInternal.renderSimpleMarkdown(markdown, container);
  }
  MarkdownRendererAPI2.renderMarkdownSimpleEl = renderMarkdownSimpleEl;
  function isConvertable(extention) {
    if (extention.startsWith("."))
      extention = extention.substring(1);
    return this.convertableExtensions.contains(extention);
  }
  MarkdownRendererAPI2.isConvertable = isConvertable;
  function checkCancelled() {
    return _MarkdownRendererInternal.checkCancelled();
  }
  MarkdownRendererAPI2.checkCancelled = checkCancelled;
  async function beginBatch(options) {
    options = Object.assign(new MarkdownRendererOptions(), options);
    await _MarkdownRendererInternal.beginBatch(options);
  }
  MarkdownRendererAPI2.beginBatch = beginBatch;
  function endBatch() {
    _MarkdownRendererInternal.endBatch();
    ExportLog.resetProgress();
  }
  MarkdownRendererAPI2.endBatch = endBatch;
})(MarkdownRendererAPI || (MarkdownRendererAPI = {}));
var _MarkdownRendererInternal;
((_MarkdownRendererInternal2) => {
  _MarkdownRendererInternal2.overlayProgress = true;
  _MarkdownRendererInternal2.errorInBatch = false;
  _MarkdownRendererInternal2.cancelled = false;
  _MarkdownRendererInternal2.batchStarted = false;
  let logContainer;
  let loadingContainer;
  let fileListContainer;
  _MarkdownRendererInternal2.batchDocument = document.implementation.createHTMLDocument();
  let markdownView;
  const infoColor = "var(--text-normal)";
  const warningColor = "var(--color-yellow)";
  const errorColor = "var(--color-red)";
  const infoBoxColor = "rgba(0,0,0,0.15)";
  const warningBoxColor = "rgba(var(--color-yellow-rgb), 0.15)";
  const errorBoxColor = "rgba(var(--color-red-rgb), 0.15)";
  _MarkdownRendererInternal2.arrowHTML = "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon right-triangle'><path d='M3 8L12 17L21 8'></path></svg>";
  function checkCancelled() {
    if (_MarkdownRendererInternal2.cancelled || !_MarkdownRendererInternal2.renderLeaf) {
      ExportLog.log("cancelled");
      _MarkdownRendererInternal2.endBatch();
      return true;
    }
    return false;
  }
  _MarkdownRendererInternal2.checkCancelled = checkCancelled;
  async function delay(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }
  async function waitUntil(condition, timeout = 1e3, interval = 100) {
    if (condition())
      return true;
    return new Promise((resolve, reject) => {
      let timer = 0;
      const intervalId = setInterval(() => {
        if (condition()) {
          clearInterval(intervalId);
          resolve(true);
        } else {
          timer += interval;
          if (timer >= timeout) {
            clearInterval(intervalId);
            resolve(false);
          }
        }
      }, interval);
    });
  }
  function failRender(file, message) {
    var _a3;
    if (checkCancelled())
      return void 0;
    ExportLog.error(message, `Rendering ${(_a3 = file == null ? void 0 : file.path) != null ? _a3 : " custom markdown "} failed: `);
    return;
  }
  async function renderFile(file, options) {
    if (MarkdownRendererAPI.viewableMediaExtensions.contains(file.extension)) {
      return { contentEl: await createMediaPage(file, options), viewType: "attachment" };
    }
    const loneFile = !_MarkdownRendererInternal2.batchStarted;
    if (loneFile) {
      ExportLog.log("Exporting single file, starting batch");
      await _MarkdownRendererInternal2.beginBatch(options);
    }
    const success = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf != void 0 || checkCancelled(), 2e3, 1);
    if (!success || !_MarkdownRendererInternal2.renderLeaf)
      return failRender(file, "Failed to get leaf for rendering!");
    let html;
    try {
      await _MarkdownRendererInternal2.renderLeaf.openFile(file, { active: false });
    } catch (e) {
      return failRender(file, e);
    }
    const view = _MarkdownRendererInternal2.renderLeaf.view;
    const viewType = view.getViewType();
    switch (viewType) {
      case "markdown":
        const preview = view.previewMode;
        html = await renderMarkdownView(preview, options);
        break;
      case "kanban":
        html = await renderGeneric(view, options);
        break;
      case "excalidraw":
        html = await renderExcalidraw(view, options);
        break;
      case "canvas":
        html = await renderCanvas(view, options);
        break;
      default:
        html = await renderGeneric(view, options);
        break;
    }
    if (checkCancelled())
      return void 0;
    if (!html)
      return failRender(file, "Failed to render file!");
    if (loneFile)
      _MarkdownRendererInternal2.endBatch();
    return { contentEl: html, viewType };
  }
  _MarkdownRendererInternal2.renderFile = renderFile;
  async function renderMarkdown(markdown, options) {
    const loneFile = !_MarkdownRendererInternal2.batchStarted;
    if (loneFile) {
      ExportLog.log("Exporting single file, starting batch");
      await _MarkdownRendererInternal2.beginBatch(options);
    }
    const success = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf != void 0 || checkCancelled(), 2e3, 1);
    if (!success || !_MarkdownRendererInternal2.renderLeaf)
      return failRender(void 0, "Failed to get leaf for rendering!");
    const view = markdownView != null ? markdownView : new import_obsidian5.MarkdownView(_MarkdownRendererInternal2.renderLeaf);
    _MarkdownRendererInternal2.renderLeaf.view = view;
    try {
      view.setViewData(markdown, false);
    } catch (e) {
      return failRender(void 0, e);
    }
    let html;
    const preview = view.previewMode;
    html = await renderMarkdownView(preview, options);
    if (checkCancelled())
      return void 0;
    if (!html)
      return failRender(void 0, "Failed to render file!");
    if (loneFile)
      _MarkdownRendererInternal2.endBatch();
    return html;
  }
  _MarkdownRendererInternal2.renderMarkdown = renderMarkdown;
  async function renderMarkdownViewFallback(preview, options) {
    var _a3, _b3, _c2, _d, _e, _f, _g;
    preview.load();
    const renderer = preview.renderer;
    try {
      await renderer.unfoldAllHeadings();
      await renderer.unfoldAllLists();
      await renderer.parseSync();
    } catch (e) {
      ExportLog.error(e, "Failed to unfold or parse renderer!");
    }
    if (!window.mermaid) {
      await (0, import_obsidian5.loadMermaid)();
    }
    const sections = renderer.sections;
    const newMarkdownEl = document.body.createDiv({ attr: { class: "obsidian-document " + ((_c2 = (_b3 = (_a3 = preview.renderer) == null ? void 0 : _a3.previewEl) == null ? void 0 : _b3.className) != null ? _c2 : "") } });
    const newSizerEl = newMarkdownEl.createDiv({ attr: { class: "markdown-preview-sizer" } });
    if (!newMarkdownEl || !newSizerEl)
      return failRender(preview.file, "Please specify a container element, or enable keepViewContainer!");
    preview.containerEl = newSizerEl;
    const promises = [];
    const foldedCallouts = [];
    for (const section of sections) {
      section.shown = true;
      section.rendered = false;
      section.resetCompute();
      section.setCollapsed(false);
      section.el.empty();
      newSizerEl.appendChild(section.el);
      await section.render();
      let success = await waitUntil(() => section.el && section.rendered || checkCancelled(), 2e3, 1);
      if (!success)
        return failRender(preview.file, "Failed to render section!");
      await renderer.measureSection(section);
      success = await waitUntil(() => section.computed || checkCancelled(), 2e3, 1);
      if (!success)
        return failRender(preview.file, "Failed to compute section!");
      if (DataviewRenderer.isDataviewEnabled()) {
        const dataviewInfo = DataviewRenderer.getDataViewsFromHTML(section.el)[0];
        if (dataviewInfo) {
          const dataviewContainer = document.body.createDiv();
          dataviewContainer.classList.add(`block-language-${dataviewInfo.keyword}`);
          dataviewInfo.preEl.replaceWith(dataviewContainer);
          await new DataviewRenderer(preview, preview.file, dataviewInfo == null ? void 0 : dataviewInfo.query, dataviewInfo.keyword).generate(dataviewContainer);
        }
      }
      await preview.postProcess(section, promises, renderer.frontmatter);
      const folded = Array.from(section.el.querySelectorAll(".callout-content[style*='display: none']"));
      for (const callout of folded) {
        callout.style.display = "";
      }
      foldedCallouts.push(...folded);
      await waitUntil(() => !section.el.querySelector(".markdown-preview-pusher") || section.el.querySelector(".markdown-preview-pusher + *") != null || checkCancelled(), 500, 1);
      if (checkCancelled())
        return void 0;
      if (section.el.querySelector(".markdown-preview-pusher") && !section.el.querySelector(".markdown-preview-pusher + *")) {
        ExportLog.warning("Transclusions were not rendered correctly in file " + preview.file.name + "!");
      }
      await waitUntil(() => !section.el.querySelector("[class^='block-language-']:empty") || checkCancelled(), 500, 1);
      if (checkCancelled())
        return void 0;
      const canvases = Array.from(section.el.querySelectorAll("canvas:not(.pdf-embed canvas)"));
      for (const canvas of canvases) {
        const data = canvas.toDataURL();
        if (data.length < 100) {
          ExportLog.log(canvas.outerHTML, "Failed to render canvas based plugin element in file " + preview.file.name + ":");
          canvas.remove();
          continue;
        }
        const image = document.body.createEl("img");
        image.src = data;
        image.style.width = canvas.style.width || "100%";
        image.style.maxWidth = "100%";
        canvas.replaceWith(image);
      }
      ;
      const invalidPluginBlocks = Array.from(section.el.querySelectorAll("[class^='block-language-']:empty"));
      for (const block of invalidPluginBlocks) {
        ExportLog.warning(`Plugin element ${block.className || ((_d = block.parentElement) == null ? void 0 : _d.className) || "unknown"} from ${preview.file.name} not rendered correctly!`);
      }
    }
    await Promise.all(promises);
    for (const callout of foldedCallouts) {
      callout.style.display = "none";
    }
    newSizerEl.empty();
    if (options.createPusherElement) {
      newSizerEl.createDiv({ attr: { class: "markdown-pusher", style: "width: 1px; height: 0.1px; margin-bottom: 0px;" } });
    }
    for (const section of sections) {
      newSizerEl.appendChild(section.el.cloneNode(true));
    }
    const banner = preview.containerEl.querySelector(".obsidian-banner-wrapper");
    if (banner) {
      newSizerEl.before(banner);
    }
    if (options.createDocumentContainer === false) {
      newMarkdownEl.outerHTML = newSizerEl.innerHTML;
    }
    (_e = options.container) == null ? void 0 : _e.appendChild(newMarkdownEl);
    if (options.unifyTitleFormat) {
      var title = await _MarkdownRendererInternal2.getTitleForFile(preview.file);
      var icon = await _MarkdownRendererInternal2.getIconForFile(preview.file);
      let iconSVG = (_f = await MarkdownRendererAPI.renderMarkdownSimple(icon.icon)) != null ? _f : icon.icon;
      _MarkdownRendererInternal2.addTitle((_g = options.container) != null ? _g : newMarkdownEl, title.title, title.isDefault, iconSVG, icon.isDefault, preview.file, options);
    }
    return newMarkdownEl;
  }
  async function renderMarkdownView(preview, options) {
    var _a3, _b3, _c2, _d, _e, _f, _g, _h;
    if (preview.show)
      preview.show();
    if (!preview.rerender || options.useFallbackRenderer) {
      console.log(`Rendering ${preview.file.name} using fallback method`);
      return renderMarkdownViewFallback(preview, options);
    }
    const renderer = preview.renderer;
    try {
      await renderer.unfoldAllHeadings();
      await renderer.unfoldAllLists();
      await renderer.parseSync();
    } catch (e) {
      ExportLog.error(e, "Failed to unfold or parse renderer!");
    }
    if (!window.mermaid) {
      await (0, import_obsidian5.loadMermaid)();
    }
    const sections = renderer.sections;
    const newMarkdownEl = _MarkdownRendererInternal2.batchDocument.body.createDiv({
      attr: {
        class: "obsidian-document " + ((_c2 = (_b3 = (_a3 = preview.renderer) == null ? void 0 : _a3.previewEl) == null ? void 0 : _b3.className) != null ? _c2 : "")
      }
    });
    const newSizerEl = newMarkdownEl.createDiv({
      attr: { class: "markdown-preview-sizer markdown-preview-section" }
    });
    if (!newMarkdownEl || !newSizerEl)
      return failRender(preview.file, "Please specify a container element, or enable keepViewContainer!");
    const previewEl = renderer.previewEl;
    const sizerEl = (_d = previewEl.querySelector(".markdown-preview-sizer")) != null ? _d : previewEl;
    previewEl.style.minHeight = sizerEl.style.minHeight;
    await Utils.delay(16);
    let rendered = false;
    preview.renderer.onRendered(() => {
      console.log("Rendered");
      rendered = true;
    });
    preview.rerender(true);
    await Utils.delay(5);
    previewEl.style.minHeight = sizerEl.style.minHeight;
    await Utils.delay(5);
    let renderSuccess = await waitUntil(() => rendered || checkCancelled(), 2e3, 16);
    if (checkCancelled())
      return void 0;
    if (!renderSuccess)
      return failRender(preview.file, "Failed to render preview!");
    const foldedCallouts = [];
    for (const section of sections) {
      const folded = Array.from(section.el.querySelectorAll(".callout-content[style*='display: none']"));
      for (const callout of folded) {
        callout.style.display = "";
      }
      foldedCallouts.push(...folded);
    }
    await Utils.delay(5);
    ExportLog.log("Waiting for all sections to be counted...");
    var sectionsSuccess = await waitUntil(() => {
      console.log(sizerEl.children.length, sections.length);
      return sizerEl.children.length >= sections.length || checkCancelled();
    }, 4e3, 5);
    if (checkCancelled())
      return void 0;
    if (!sectionsSuccess) {
      console.log(sizerEl.children.length, sections.length, sizerEl.children, sections);
      ExportLog.warning("Failed to render all sections in file " + preview.file.name + ", using fallback!");
      return renderMarkdownViewFallback(preview, options);
    }
    await Utils.delay(50);
    if (DataviewRenderer.isDataviewEnabled()) {
      const dataviewInfos = DataviewRenderer.getDataViewsFromHTML(preview.containerEl);
      for (const dataviewInfo of dataviewInfos) {
        await new DataviewRenderer(preview, preview.file, dataviewInfo == null ? void 0 : dataviewInfo.query, dataviewInfo.keyword).generate(dataviewInfo.preEl);
      }
    }
    ExportLog.log("Waiting for transclusions to render...");
    await waitUntil(() => !preview.containerEl.querySelector(".markdown-preview-pusher") || preview.containerEl.querySelector(".markdown-preview-pusher + *") != null || checkCancelled(), 2e3, 5);
    if (checkCancelled())
      return void 0;
    if (preview.containerEl.querySelector(".markdown-preview-pusher") && !preview.containerEl.querySelector(".markdown-preview-pusher + *")) {
      ExportLog.warning("Transclusions were not rendered correctly in file " + preview.file.name + "!");
    }
    ExportLog.log("Waiting for generic plugins to render...");
    await waitUntil(() => !preview.containerEl.querySelector("[class^='block-language-']:empty") || checkCancelled(), 2e3, 16);
    if (checkCancelled())
      return void 0;
    const invalidPluginBlocks = Array.from(preview.containerEl.querySelectorAll("[class^='block-language-']:empty"));
    for (const block of invalidPluginBlocks) {
      ExportLog.warning(`Plugin element ${block.className || ((_e = block.parentElement) == null ? void 0 : _e.className) || "unknown"} from ${preview.file.name} not rendered correctly!`);
    }
    const canvases = Array.from(preview.containerEl.querySelectorAll("canvas:not(.pdf-embed canvas)"));
    for (const canvas of canvases) {
      ExportLog.log("Waiting for canvas-based plugin to render...");
      let canvasSuccess = await waitUntil(() => canvas.toDataURL().length > 100 || checkCancelled(), 1e3, 16);
      if (!canvasSuccess)
        continue;
      const data = canvas.toDataURL();
      const image = _MarkdownRendererInternal2.batchDocument.body.createEl("img");
      image.src = data;
      image.style.width = canvas.style.width || "100%";
      image.style.maxWidth = "100%";
      canvas.replaceWith(image);
    }
    for (const callout of foldedCallouts) {
      callout.style.display = "none";
    }
    newSizerEl.empty();
    if (options.createPusherElement) {
      newSizerEl.createDiv({
        attr: {
          class: "markdown-pusher",
          style: "width: 1px; height: 0.1px; margin-bottom: 0px;"
        }
      });
    }
    newSizerEl.innerHTML = sizerEl.innerHTML;
    const banner = preview.containerEl.querySelector(".obsidian-banner-wrapper");
    if (banner) {
      newSizerEl.before(banner);
    }
    if (options.createDocumentContainer === false) {
      newMarkdownEl.outerHTML = newSizerEl.innerHTML;
    }
    (_f = options.container) == null ? void 0 : _f.appendChild(newMarkdownEl);
    if (options.unifyTitleFormat) {
      let title = await _MarkdownRendererInternal2.getTitleForFile(preview.file);
      let icon = await _MarkdownRendererInternal2.getIconForFile(preview.file);
      let iconSVG = (_g = await MarkdownRendererAPI.renderMarkdownSimple(icon.icon)) != null ? _g : icon.icon;
      _MarkdownRendererInternal2.addTitle((_h = options.container) != null ? _h : newMarkdownEl, title.title, title.isDefault, iconSVG, icon.isDefault, preview.file, options);
    }
    return newMarkdownEl;
  }
  _MarkdownRendererInternal2.renderMarkdownView = renderMarkdownView;
  async function renderSimpleMarkdown(markdown, container) {
    const renderComp = new import_obsidian5.Component();
    renderComp.load();
    await import_obsidian5.MarkdownRenderer.render(app, markdown, container, "/", renderComp);
    renderComp.unload();
    const renderedEl = container.children[container.children.length - 1];
    if (renderedEl && renderedEl.tagName == "P") {
      renderedEl.outerHTML = renderedEl.innerHTML;
    }
    container.querySelectorAll("a.tag").forEach((element) => {
      element.remove();
    });
    container.querySelectorAll("ol").forEach((listEl) => {
      var _a3;
      if (listEl.parentElement) {
        const start = (_a3 = listEl.getAttribute("start")) != null ? _a3 : "1";
        listEl.parentElement.createSpan().outerHTML = `${start}. ${listEl.innerText}`;
        listEl.remove();
      }
    });
    container.querySelectorAll("ul").forEach((listEl) => {
      if (listEl.parentElement) {
        listEl.parentElement.createSpan().innerHTML = "- " + listEl.innerHTML;
        listEl.remove();
      }
    });
    container.querySelectorAll("li").forEach((listEl) => {
      if (listEl.parentElement) {
        listEl.parentElement.createSpan().innerHTML = listEl.innerHTML;
        listEl.remove();
      }
    });
  }
  _MarkdownRendererInternal2.renderSimpleMarkdown = renderSimpleMarkdown;
  async function renderGeneric(view, options) {
    var _a3;
    await delay(2e3);
    if (checkCancelled())
      return void 0;
    const contentEl = view.contentEl.cloneNode(true);
    (_a3 = options.container) == null ? void 0 : _a3.appendChild(contentEl);
    return contentEl;
  }
  async function renderExcalidraw(view, options) {
    var _a3;
    await delay(500);
    const scene = view.excalidrawData.scene;
    const svg = await view.svg(scene, "", false);
    const isLight = !svg.getAttribute("filter");
    if (!isLight)
      svg.removeAttribute("filter");
    svg.classList.add(isLight ? "light" : "dark");
    let contentEl = _MarkdownRendererInternal2.batchDocument.body.createDiv();
    contentEl.classList.add("obsidian-document");
    const sizerEl = contentEl.createDiv();
    sizerEl.classList.add("excalidraw-plugin");
    sizerEl.appendChild(svg);
    if (checkCancelled())
      return void 0;
    if (options.createDocumentContainer === false) {
      contentEl = svg;
    }
    (_a3 = options.container) == null ? void 0 : _a3.appendChild(contentEl);
    return contentEl;
  }
  async function getIconForFile(file) {
    var _a3, _b3, _c2, _d, _e, _f, _g;
    if (!file)
      return { icon: "", isDefault: true };
    let iconOutput = "";
    let iconProperty = "";
    let useDefaultIcon = false;
    let useFile = file;
    if (useFile instanceof import_obsidian5.TFolder) {
      let childFile = app.vault.getFileByPath(file.path + "/" + file.name + ".md");
      if (childFile)
        useFile = childFile;
      if (!childFile && Settings.exportOptions.fileNavigationOptions.showDefaultFolderIcons) {
        iconProperty = Settings.exportOptions.fileNavigationOptions.defaultFolderIcon;
        useDefaultIcon = true;
      }
    }
    if (useFile instanceof import_obsidian5.TFile) {
      const fileCache = app.metadataCache.getFileCache(useFile);
      const frontmatter = fileCache == null ? void 0 : fileCache.frontmatter;
      iconProperty = (_b3 = (_a3 = frontmatter == null ? void 0 : frontmatter.icon) != null ? _a3 : frontmatter == null ? void 0 : frontmatter.sticker) != null ? _b3 : frontmatter == null ? void 0 : frontmatter.banner_icon;
      if (!iconProperty && Settings.exportOptions.fileNavigationOptions.showDefaultFileIcons) {
        useDefaultIcon = true;
        const isMedia = AssetLoader.extentionToType(useFile.extension) == "media" /* Media */;
        iconProperty = isMedia ? Settings.exportOptions.fileNavigationOptions.defaultMediaIcon : Settings.exportOptions.fileNavigationOptions.defaultFileIcon;
        if (useFile.extension == "canvas")
          iconProperty = "lucide//layout-dashboard";
      }
    }
    iconOutput = await IconHandler.getIcon(iconProperty != null ? iconProperty : "");
    const isUnchangedNotEmojiNotHTML = iconProperty == iconOutput && iconOutput.length < 40 && !/\p{Emoji}/u.test(iconOutput) && !iconOutput.includes("<") && !iconOutput.includes(">");
    let parsedAsIconize = false;
    if ((useDefaultIcon || !iconProperty || isUnchangedNotEmojiNotHTML) && ((_d = (_c2 = app == null ? void 0 : app.plugins) == null ? void 0 : _c2.enabledPlugins) == null ? void 0 : _d.has("obsidian-icon-folder"))) {
      const fileToIconName = app.plugins.plugins["obsidian-icon-folder"].data;
      const noteIconsEnabled = (_e = fileToIconName.settings.iconsInNotesEnabled) != null ? _e : false;
      if (noteIconsEnabled) {
        const iconIdentifier = (_f = fileToIconName.settings.iconIdentifier) != null ? _f : ":";
        let iconProperty2 = fileToIconName[file.path];
        if (iconProperty2 && typeof iconProperty2 != "string") {
          iconProperty2 = (_g = iconProperty2.iconName) != null ? _g : "";
        }
        if (iconProperty2 && typeof iconProperty2 == "string" && iconProperty2.trim() != "") {
          if (file instanceof import_obsidian5.TFile)
            app.fileManager.processFrontMatter(file, (frontmatter) => {
              frontmatter.icon = iconProperty2;
            });
          let emojiMatch = iconProperty2.trim().match(/\p{Emoji}/u);
          let isEmoji = emojiMatch && emojiMatch.length == 1 && emojiMatch.index == 0;
          if (isEmoji)
            iconOutput = iconProperty2;
          else
            iconOutput = iconIdentifier + iconProperty2 + iconIdentifier;
          parsedAsIconize = true;
        }
      }
    }
    if (!parsedAsIconize && isUnchangedNotEmojiNotHTML)
      iconOutput = "";
    return { icon: iconOutput, isDefault: useDefaultIcon };
  }
  _MarkdownRendererInternal2.getIconForFile = getIconForFile;
  async function getTitleForFile(file) {
    var _a3, _b3, _c2;
    if (!file)
      return { title: "NULL ERROR", isDefault: true };
    let title = file.name;
    let isDefaultTitle = true;
    if (file instanceof import_obsidian5.TFile) {
      const fileCache = app.metadataCache.getFileCache(file);
      const frontmatter = fileCache == null ? void 0 : fileCache.frontmatter;
      const titleFromFrontmatter = (_a3 = frontmatter == null ? void 0 : frontmatter[Settings.titleProperty]) != null ? _a3 : frontmatter == null ? void 0 : frontmatter["banner_header"];
      title = (_c2 = (_b3 = titleFromFrontmatter != null ? titleFromFrontmatter : file.basename) == null ? void 0 : _b3.toString()) != null ? _c2 : "";
      if (title.endsWith(".excalidraw")) {
        title = title.substring(0, title.length - 11);
      }
      if (title != file.basename) {
        isDefaultTitle = false;
      }
    }
    if (file instanceof import_obsidian5.TFolder) {
      title = file.name;
      isDefaultTitle = true;
    }
    return { title, isDefault: isDefaultTitle };
  }
  _MarkdownRendererInternal2.getTitleForFile = getTitleForFile;
  async function addTitle(documentRoot, title, isDefaultTitle, icon, isDefaultIcon, source, exportOptions) {
    var _a3, _b3;
    const inlineTitle = documentRoot.querySelector(".inline-title");
    inlineTitle == null ? void 0 : inlineTitle.remove();
    const makeTitle = documentRoot.querySelector(".mk-inline-context");
    makeTitle == null ? void 0 : makeTitle.remove();
    const modHeader = documentRoot.querySelector(".mod-header");
    modHeader == null ? void 0 : modHeader.remove();
    const sizerElement = documentRoot.querySelector(".markdown-preview-sizer");
    const header = sizerElement == null ? void 0 : sizerElement.createDiv({ cls: "header" });
    header == null ? void 0 : header.createDiv({ cls: "data-bar" });
    const footer = sizerElement == null ? void 0 : sizerElement.createDiv({ cls: "footer" });
    footer == null ? void 0 : footer.createDiv({ cls: "data-bar" });
    if (header)
      sizerElement == null ? void 0 : sizerElement.prepend(header);
    (_a3 = documentRoot.querySelector(".banner-header")) == null ? void 0 : _a3.remove();
    const titleEl = documentRoot.createEl("h1");
    titleEl.classList.add("page-title", "heading");
    if (document.body.classList.contains("show-inline-title"))
      titleEl.classList.add("inline-title");
    titleEl.id = title;
    if (exportOptions.addPageIcon) {
      let pageIcon = void 0;
      if (icon != "" && !isDefaultIcon) {
        pageIcon = documentRoot.createEl("div");
        pageIcon.id = "webpage-icon";
        pageIcon.innerHTML = icon;
      }
      await _MarkdownRendererInternal2.renderSimpleMarkdown(title, titleEl);
      titleEl.innerHTML = titleEl.innerHTML.replace(/\n/g, "");
      if (pageIcon) {
        titleEl.prepend(pageIcon);
      }
    }
    (_b3 = header != null ? header : sizerElement) == null ? void 0 : _b3.prepend(titleEl);
  }
  _MarkdownRendererInternal2.addTitle = addTitle;
  async function renderCanvas(view, options) {
    var _a3, _b3, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
    if (checkCancelled())
      return void 0;
    let allExportedPaths = Settings.getAllFilesFromPaths(options.filesToExport);
    const canvas = view.canvas;
    const nodes = canvas.nodes;
    const edges = canvas.edges;
    canvas.zoomToFit();
    await delay(500);
    for (const node of nodes) {
      let n = node[1];
      (_a3 = n.placeholderEl) == null ? void 0 : _a3.detach();
      (_b3 = n.containerEl) == null ? void 0 : _b3.appendChild(n.contentEl);
      n.render();
    }
    for (const edge of edges) {
      await edge[1].render();
    }
    let contentEl = view.contentEl;
    const canvasEl = contentEl.querySelector(".canvas");
    if (!canvasEl) {
      console.log(contentEl.innerHTML);
      return failRender(view.file, "Failed to render canvas! Canvas element not found!");
    }
    const edgeContainer = canvasEl.createEl("svg", { cls: "canvas-edges" });
    const edgeHeadContainer = canvasEl.createEl("svg", { cls: "canvas-edges" });
    for (const pair of nodes) {
      const node = pair[1];
      const nodeEl = node.nodeEl;
      const nodeFile = (_c2 = node.file) != null ? _c2 : void 0;
      const embedEl = nodeEl.querySelector(".markdown-embed-content.node-insert-event");
      const childPreview = (_d = node == null ? void 0 : node.child) == null ? void 0 : _d.previewMode;
      const optionsCopy = Object.assign({}, options);
      optionsCopy.container = embedEl;
      optionsCopy.unifyTitleFormat = (_e = nodeFile && nodeFile != view.file) != null ? _e : false;
      if (nodeFile && embedEl && childPreview) {
        embedEl.innerHTML = "";
        if ((options.inlineHTML || !allExportedPaths.contains(nodeFile.path)) && childPreview) {
          console.log("Inlining child preview", nodeFile.path);
          if (childPreview.owner) {
            childPreview.owner.file = (_g = (_f = childPreview.file) != null ? _f : childPreview.owner.file) != null ? _g : view.file;
          }
          childPreview.owner.file = (_i = (_h = childPreview.file) != null ? _h : childPreview.owner.file) != null ? _i : view.file;
        }
        await renderMarkdownView(childPreview, optionsCopy);
      }
      if (node.url) {
        const iframe = (_j = node.contentEl) == null ? void 0 : _j.createEl("iframe");
        if (iframe) {
          iframe.src = node.url;
          iframe.classList.add("canvas-link");
          iframe.setAttribute("style", "border:none; width:100%; height:100%;");
          iframe.setAttribute("title", "Canvas card with embedded webpage: " + node.url);
        }
      }
      await delay(100);
    }
    for (const edge of edges) {
      const edgeEl = edge[1].lineGroupEl;
      const headEl = edge[1].lineEndGroupEl;
      edgeContainer.appendChild(edgeEl);
      edgeHeadContainer.appendChild(headEl);
      if (edge[1].label) {
        const labelEl = edge[1].labelElement.wrapperEl;
        canvasEl.appendChild(labelEl);
      }
    }
    if (checkCancelled())
      return void 0;
    for (const pair of nodes) {
      const node = pair[1];
      const nodeEl = node.nodeEl;
      canvasEl.appendChild(nodeEl);
    }
    let newContentEl;
    if (options.createDocumentContainer === false) {
      newContentEl = canvasEl.cloneNode(true);
    } else {
      newContentEl = contentEl.cloneNode(true);
    }
    (_l = (_k = newContentEl == null ? void 0 : newContentEl.querySelector(".mod-zoomed-out")) == null ? void 0 : _k.classList) == null ? void 0 : _l.remove("mod-zoomed-out");
    (_m = options.container) == null ? void 0 : _m.appendChild(newContentEl);
    return newContentEl;
  }
  _MarkdownRendererInternal2.renderCanvas = renderCanvas;
  async function createMediaPage(file, options) {
    var _a3;
    const contentEl = _MarkdownRendererInternal2.batchDocument.body.createDiv({ attr: { class: "obsidian-document" } });
    const embedType = MarkdownRendererAPI.extentionToTag(file.extension);
    let media = contentEl.createEl(embedType);
    if (media instanceof HTMLVideoElement || media instanceof HTMLAudioElement)
      media.controls = true;
    let path = file.path;
    if (file.extension == "html") {
      let pathObj = new Path(path);
      pathObj.setFileName(pathObj.basename + "-content");
    }
    media.src = file.path;
    (_a3 = options.container) == null ? void 0 : _a3.appendChild(contentEl);
    contentEl.appendChild(media);
    return contentEl;
  }
  _MarkdownRendererInternal2.createMediaPage = createMediaPage;
  async function postProcessHTML(html, options) {
    var _a3;
    if (!html.classList.contains("obsidian-document")) {
      const viewContainer = html.classList.contains("view-content") || html.classList.contains("markdown-preview-view") ? html : html.querySelector(".view-content, .markdown-preview-view");
      if (!viewContainer) {
        ExportLog.error("Failed to find view container in rendered HTML!");
        return;
      }
      viewContainer.classList.add("obsidian-document");
    }
    if (!options.keepModHeaderFooter) {
      html.querySelectorAll(".mod-header, .mod-footer").forEach((e) => e.remove());
    }
    html.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((element) => {
      element.classList.add("heading");
    });
    html.querySelectorAll("p:has(> .inline-embed.markdown-embed)").forEach((element) => {
      const elParent = element.parentElement;
      const span = _MarkdownRendererInternal2.batchDocument.body.createEl("span");
      span.style.display = "block";
      span.style.marginBlockStart = "var(--p-spacing)";
      span.style.marginBlockEnd = "var(--p-spacing)";
      span.innerHTML = element.innerHTML;
      element.remove();
      let embed = span.querySelector(".inline-embed.markdown-embed");
      embed.innerHTML = elParent.innerHTML;
      elParent.innerHTML = "";
      elParent.appendChild(span);
    });
    html.querySelectorAll("input[type=text]").forEach((element) => {
      element.setAttribute("value", element.value);
      element.value = "";
    });
    html.querySelectorAll("textarea").forEach((element) => {
      element.textContent = element.value;
    });
    html.querySelectorAll("a.tag").forEach((element) => {
      var _a4, _b3;
      const split = element.href.split("#");
      const tag = (_a4 = split[1]) != null ? _a4 : element.href.substring(1);
      element.setAttribute("data-href", (_b3 = element.getAttribute("href")) != null ? _b3 : "");
      element.setAttribute("href", `?query=tag:${tag}`);
    });
    html.querySelectorAll("img, video, .media-embed:has( > :is(img, video))").forEach((element) => {
      const width = element.getAttribute("width");
      if (width) {
        element.removeAttribute("width");
        element.style.width = width.trim() != "" ? width + "px" : "";
        element.style.maxWidth = "100%";
      }
    });
    html.querySelectorAll("span.internal-embed.pdf-embed").forEach((pdf) => {
      var _a4, _b3;
      const embed = _MarkdownRendererInternal2.batchDocument.body.createEl("embed");
      embed.setAttribute("src", (_a4 = pdf.getAttribute("src")) != null ? _a4 : "");
      embed.style.width = pdf.style.width || "100%";
      embed.style.maxWidth = "100%";
      embed.style.height = pdf.style.height || "800px";
      const container = (_b3 = pdf.parentElement) == null ? void 0 : _b3.parentElement;
      container == null ? void 0 : container.querySelectorAll("*").forEach((el) => el.remove());
      if (container)
        container.appendChild(embed);
    });
    html.querySelectorAll("div[class^='mk-']").forEach((element) => {
      element.remove();
    });
    const frontmatter = html.querySelector(".frontmatter");
    if (frontmatter) {
      const frontmatterParent = frontmatter.parentElement;
      const sizer = html.querySelector(".markdown-preview-sizer");
      if (sizer) {
        sizer.before(frontmatter);
      }
      frontmatterParent == null ? void 0 : frontmatterParent.remove();
    }
    html.querySelectorAll("iframe").forEach((element) => {
      element.setAttribute("loading", "lazy");
    });
    const collapsableListItems = Array.from(html.querySelectorAll("li:has(ul), li:has(ol)"));
    for (const item of collapsableListItems) {
      let collapseIcon = item.querySelector(".collapse-icon");
      if (!collapseIcon) {
        collapseIcon = item.createDiv({ cls: "list-collapse-indicator collapse-indicator collapse-icon" });
        collapseIcon.innerHTML = this.arrowHTML;
        item.prepend(collapseIcon);
      }
    }
    const tocEls = Array.from(html.querySelectorAll(".block-language-toc.dynamic-toc li > a"));
    for (const element of tocEls) {
      const renderEl = _MarkdownRendererInternal2.batchDocument.body.createDiv();
      renderSimpleMarkdown((_a3 = element.textContent) != null ? _a3 : "", renderEl);
      element.textContent = renderEl.textContent;
      renderEl.remove();
    }
  }
  _MarkdownRendererInternal2.postProcessHTML = postProcessHTML;
  async function beginBatch(options) {
    if (_MarkdownRendererInternal2.batchStarted)
      return;
    _MarkdownRendererInternal2.errorInBatch = false;
    _MarkdownRendererInternal2.cancelled = false;
    _MarkdownRendererInternal2.batchStarted = true;
    loadingContainer = void 0;
    logContainer = void 0;
    logShowing = false;
    _MarkdownRendererInternal2.batchDocument.open();
    if (!_MarkdownRendererInternal2.batchDocument.body) {
      _MarkdownRendererInternal2.batchDocument.write("<body></body>");
    }
    _MarkdownRendererInternal2.renderLeaf = TabManager.openNewTab("tab", "horizontal", true);
    markdownView = new import_obsidian5.MarkdownView(_MarkdownRendererInternal2.renderLeaf);
    const parentFound = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf && _MarkdownRendererInternal2.renderLeaf.parent || checkCancelled(), 2e3, 1);
    if (!parentFound) {
      try {
        _MarkdownRendererInternal2.renderLeaf.detach();
      } catch (e) {
        ExportLog.error(e, "Failed to detach render leaf: ");
      }
      if (!checkCancelled()) {
        new import_obsidian5.Notice("Error: Failed to create leaf for rendering!");
        throw new Error("Failed to create leaf for rendering!");
      }
      return;
    }
    const obsidianWindow = _MarkdownRendererInternal2.renderLeaf.view.containerEl.win;
    _MarkdownRendererInternal2.electronWindow = obsidianWindow.electronWindow;
    _MarkdownRendererInternal2.electronWindow.webContents.setBackgroundThrottling(false);
    document.body.classList.add("html-export-running");
    if (_MarkdownRendererInternal2.overlayProgress)
      createLoadingContainer();
  }
  _MarkdownRendererInternal2.beginBatch = beginBatch;
  function cancelExport() {
    if (!_MarkdownRendererInternal2.batchStarted || _MarkdownRendererInternal2.cancelled)
      return;
    _MarkdownRendererInternal2.cancelled = true;
    endBatch();
  }
  _MarkdownRendererInternal2.cancelExport = cancelExport;
  function endBatch() {
    var _a3, _b3;
    if (!_MarkdownRendererInternal2.batchStarted)
      return;
    document.body.classList.remove("html-export-running");
    (_a3 = _MarkdownRendererInternal2.electronWindow) == null ? void 0 : _a3.webContents.setBackgroundThrottling(true);
    if (_MarkdownRendererInternal2.renderLeaf) {
      if (!_MarkdownRendererInternal2.errorInBatch) {
        ExportLog.log("Closing render window");
        _MarkdownRendererInternal2.renderLeaf.detach();
      } else {
        ExportLog.warning("Error in batch, leaving render window open");
        _reportProgress(1, "Completed with errors", "Please see the log for more details.", errorColor);
        const closebutton = loadingContainer == null ? void 0 : loadingContainer.querySelector(".html-progress-cancel");
        const localRenderLeaf = _MarkdownRendererInternal2.renderLeaf;
        closebutton.onclick = () => localRenderLeaf == null ? void 0 : localRenderLeaf.detach();
        closebutton.textContent = "Close";
      }
    }
    (_b3 = _MarkdownRendererInternal2.electronWindow) == null ? void 0 : _b3.setProgressBar(-1);
    _MarkdownRendererInternal2.electronWindow = void 0;
    _MarkdownRendererInternal2.renderLeaf = void 0;
    loadingContainer = void 0;
    fileListContainer = void 0;
    _MarkdownRendererInternal2.batchStarted = false;
  }
  _MarkdownRendererInternal2.endBatch = endBatch;
  function generateLogEl(title, message, textColor, backgroundColor) {
    const logEl = _MarkdownRendererInternal2.batchDocument.body.createEl("div");
    logEl.className = "html-progress-log-item";
    logEl.style.display = "flex";
    logEl.style.flexDirection = "column";
    logEl.style.marginBottom = "2px";
    logEl.style.fontSize = "12px";
    logEl.innerHTML = `
		<div class="html-progress-log-title" style="font-weight: bold; margin-left: 1em;"></div>
		<div class="html-progress-log-message" style="margin-left: 2em; font-size: 0.8em;white-space: pre-wrap;"></div>
		`;
    logEl.querySelector(".html-progress-log-title").textContent = title;
    logEl.querySelector(".html-progress-log-message").textContent = message.toString();
    logEl.style.color = textColor;
    logEl.style.backgroundColor = backgroundColor;
    logEl.style.borderLeft = `5px solid ${textColor}`;
    logEl.style.borderBottom = "1px solid var(--divider-color)";
    logEl.style.borderTop = "1px solid var(--divider-color)";
    return logEl;
  }
  function createLoadingContainer() {
    if (!loadingContainer) {
      loadingContainer = _MarkdownRendererInternal2.batchDocument.body.createDiv();
      loadingContainer.outerHTML = `
			<div class="html-progress-wrapper">
				<div class="html-progress-content">
					<div class="html-progress-inner">
						<h1>Generating HTML</h1>
						<progress class="html-progress-bar" value="0" min="0" max="1"></progress>
						<span class="html-progress-sub"></span>
						<button class="html-progress-cancel">Cancel</button>
					</div>
					<div class="html-progress-log">
						<h1>Export Log</h1>
					</div>
				</div>
			</div>
			`;
      loadingContainer = _MarkdownRendererInternal2.batchDocument.querySelector(".html-progress-wrapper");
      let cancelButton = loadingContainer.querySelector(".html-progress-cancel");
      cancelButton.onclick = () => cancelExport();
      _MarkdownRendererInternal2.renderLeaf.containerEl.before(loadingContainer);
    }
  }
  let logShowing = false;
  function appendLogEl(logEl) {
    var _a3;
    logContainer = (_a3 = loadingContainer == null ? void 0 : loadingContainer.querySelector(".html-progress-log")) != null ? _a3 : void 0;
    if (!logContainer || !_MarkdownRendererInternal2.renderLeaf) {
      console.error("Failed to append log element, log container or render leaf is undefined!");
      return;
    }
    if (!logShowing) {
      _MarkdownRendererInternal2.renderLeaf.view.containerEl.win.resizeTo(1e3, 500);
      logContainer.style.display = "flex";
      logShowing = true;
    }
    logContainer.appendChild(logEl);
    logEl.scrollIntoView({ behavior: "instant", block: "end", inline: "end" });
  }
  async function _reportProgress(fraction, message, subMessage, progressColor) {
    var _a3, _b3, _c2;
    if (!_MarkdownRendererInternal2.batchStarted)
      return;
    if (!((_b3 = (_a3 = _MarkdownRendererInternal2.renderLeaf) == null ? void 0 : _a3.parent) == null ? void 0 : _b3.parent))
      return;
    const loadingContainer2 = _MarkdownRendererInternal2.renderLeaf.parent.parent.containerEl.querySelector(`.html-progress-wrapper`);
    if (!loadingContainer2)
      return;
    const progressBar = loadingContainer2.querySelector("progress");
    if (progressBar) {
      progressBar.value = fraction;
      progressBar.style.backgroundColor = "transparent";
      progressBar.style.color = progressColor;
    }
    const messageElement = loadingContainer2.querySelector("h1");
    if (messageElement) {
      messageElement.innerText = message;
    }
    const subMessageElement = loadingContainer2.querySelector("span.html-progress-sub");
    if (subMessageElement) {
      subMessageElement.innerText = subMessage;
    }
    (_c2 = _MarkdownRendererInternal2.electronWindow) == null ? void 0 : _c2.setProgressBar(fraction);
  }
  _MarkdownRendererInternal2._reportProgress = _reportProgress;
  async function _setFileList(items, options) {
    const contaienr = loadingContainer == null ? void 0 : loadingContainer.querySelector(".html-progress-content");
    if (!contaienr)
      return;
    const fileList = new SimpleFileListGenerator(items, options);
    const fileListEl = await fileList.generate(contaienr);
    contaienr.prepend(fileListEl);
    if (fileListContainer)
      fileListContainer.remove();
    fileListContainer = fileListEl;
  }
  _MarkdownRendererInternal2._setFileList = _setFileList;
  async function _reportError(messageTitle, message, fatal) {
    if (!_MarkdownRendererInternal2.batchStarted)
      return;
    _MarkdownRendererInternal2.errorInBatch = true;
    const found = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf && _MarkdownRendererInternal2.renderLeaf.parent && _MarkdownRendererInternal2.renderLeaf.parent.parent, 100, 10);
    if (!found)
      return;
    appendLogEl(generateLogEl(messageTitle, message, errorColor, errorBoxColor));
    if (fatal) {
      _MarkdownRendererInternal2.renderLeaf = void 0;
      loadingContainer = void 0;
      logContainer = void 0;
    }
  }
  _MarkdownRendererInternal2._reportError = _reportError;
  async function _reportWarning(messageTitle, message) {
    if (!_MarkdownRendererInternal2.batchStarted)
      return;
    const found = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf && _MarkdownRendererInternal2.renderLeaf.parent && _MarkdownRendererInternal2.renderLeaf.parent.parent, 100, 10);
    if (!found)
      return;
    appendLogEl(generateLogEl(messageTitle, message, warningColor, warningBoxColor));
  }
  _MarkdownRendererInternal2._reportWarning = _reportWarning;
  async function _reportInfo(messageTitle, message) {
    if (!_MarkdownRendererInternal2.batchStarted)
      return;
    const found = await waitUntil(() => _MarkdownRendererInternal2.renderLeaf && _MarkdownRendererInternal2.renderLeaf.parent && _MarkdownRendererInternal2.renderLeaf.parent.parent, 100, 10);
    if (!found)
      return;
    appendLogEl(generateLogEl(messageTitle, message, infoColor, infoBoxColor));
  }
  _MarkdownRendererInternal2._reportInfo = _reportInfo;
})(_MarkdownRendererInternal || (_MarkdownRendererInternal = {}));
var ExportLog;
((ExportLog2) => {
  ExportLog2.fullLog = "";
  let totalProgress = 1;
  let currentProgress = 0;
  function logToString(message, title) {
    const messageString = typeof message === "string" ? message : JSON.stringify(message).replaceAll("\n", "\n		");
    const titleString = title != "" ? title + "	" : "";
    const log2 = `${titleString}${messageString}
`;
    return log2;
  }
  function humanReadableJSON(object) {
    object = SettingsPage.deepCopy(object);
    object = SettingsPage.deepRemoveStartingWith(object, "info_");
    object = SettingsPage.deepRemoveStartingWith(object, "filesToExport");
    object = SettingsPage.deepRemoveStartingWith(object, "alwaysEnabled");
    object = SettingsPage.deepRemoveStartingWith(object, "featureId");
    const string = JSON.stringify(object, null, 2);
    return string;
  }
  function log(message, messageTitle = "") {
    pullPathLogs();
    messageTitle = `[INFO] ${messageTitle}`;
    ExportLog2.fullLog += logToString(message, messageTitle);
    if (messageTitle != "")
      console.log(messageTitle + " ", message);
    else
      console.log(message);
    if (SettingsPage.loaded && !(Settings.logLevel == "all"))
      return;
    _MarkdownRendererInternal._reportInfo(messageTitle, message);
  }
  ExportLog2.log = log;
  function warning(message, messageTitle = "") {
    pullPathLogs();
    messageTitle = `[WARNING] ${messageTitle}`;
    ExportLog2.fullLog += logToString(message, messageTitle);
    if (messageTitle != "")
      console.warn(messageTitle + " ", message);
    else
      console.warn(message);
    if (SettingsPage.loaded && !["warning", "all"].contains(Settings.logLevel))
      return;
    _MarkdownRendererInternal._reportWarning(messageTitle, message);
  }
  ExportLog2.warning = warning;
  function error(message, messageTitle = "", fatal = false) {
    pullPathLogs();
    messageTitle = (fatal ? "[FATAL ERROR] " : "[ERROR] ") + messageTitle;
    ExportLog2.fullLog += logToString(message, messageTitle);
    if (fatal && messageTitle == "Error")
      messageTitle = "Fatal Error";
    if (messageTitle != "")
      console.error(messageTitle + " ", message);
    else
      console.error(message);
    if (SettingsPage.loaded && !fatal && !["error", "warning", "all"].contains(Settings.logLevel))
      return;
    _MarkdownRendererInternal._reportError(messageTitle, message, fatal);
  }
  ExportLog2.error = error;
  function addToProgressCap(progress2) {
    totalProgress += progress2;
  }
  ExportLog2.addToProgressCap = addToProgressCap;
  function resetProgress() {
    totalProgress = 1;
    currentProgress = 0;
  }
  ExportLog2.resetProgress = resetProgress;
  function progress(progressBy, message, subMessage, progressColor = "var(--interactive-accent)") {
    currentProgress += progressBy;
    setProgress(currentProgress / totalProgress, message, subMessage, progressColor);
  }
  ExportLog2.progress = progress;
  function setProgress(fraction, message, subMessage, progressColor = "var(--interactive-accent)") {
    ExportLog2.fullLog += logToString({ fraction, message, subMessage }, "Progress");
    pullPathLogs();
    _MarkdownRendererInternal._reportProgress(fraction, message, subMessage, progressColor);
  }
  ExportLog2.setProgress = setProgress;
  function setFileList(items, options) {
    _MarkdownRendererInternal._setFileList(items, options);
  }
  ExportLog2.setFileList = setFileList;
  function pullPathLogs() {
    const logs = Path.dequeueLog();
    for (const thisLog of logs) {
      switch (thisLog.type) {
        case "info":
          log(thisLog.message, thisLog.title);
          break;
        case "warn":
          warning(thisLog.message, thisLog.title);
          break;
        case "error":
          error(thisLog.message, thisLog.title, false);
          break;
        case "fatal":
          error(thisLog.message, thisLog.title, true);
          break;
      }
    }
  }
  function getDebugInfo() {
    let debugInfo = "";
    debugInfo += `Log:
${ExportLog2.fullLog}

`;
    debugInfo += `Settings:
${humanReadableJSON({ ...Settings })}

`;
    const loadedPlugins = Object.values(app.plugins.plugins).filter((plugin2) => plugin2._loaded == true).map((plugin2) => plugin2.manifest.name).join("\n	");
    debugInfo += `Enabled Plugins:
	${loadedPlugins}`;
    return debugInfo;
  }
  ExportLog2.getDebugInfo = getDebugInfo;
  function testThrowError(chance) {
    if (Math.random() < chance) {
      throw new Error("Test error");
    }
  }
  ExportLog2.testThrowError = testThrowError;
  function isCancelled() {
    return _MarkdownRendererInternal.checkCancelled();
  }
  ExportLog2.isCancelled = isCancelled;
})(ExportLog || (ExportLog = {}));

// src/plugin/settings/settings-components.ts
var import_obsidian6 = require("obsidian");

// src/plugin/utils/file-dialogs.ts
var dialog = require("electron").remote.dialog;
var FileDialogs;
((FileDialogs2) => {
  async function showSaveDialog(defaultPath, defaultFileName, showAllFilesOption = true) {
    defaultPath.makePlatformSafe();
    const absoluteDefaultPath = defaultPath.directory.absoluted().joinString(defaultFileName);
    const filters = [{
      name: this.trimStart(absoluteDefaultPath.extension, ".").toUpperCase() + " Files",
      extensions: [this.trimStart(absoluteDefaultPath.extension, ".")]
    }];
    if (showAllFilesOption) {
      filters.push({
        name: "All Files",
        extensions: ["*"]
      });
    }
    const picker = await dialog.showSaveDialog({
      defaultPath: absoluteDefaultPath.path,
      filters,
      properties: ["showOverwriteConfirmation"]
    });
    if (picker.canceled || !picker.filePath)
      return;
    const pickedPath = new Path(picker.filePath).makePlatformSafe();
    Settings.exportOptions.exportPath = pickedPath.path;
    SettingsPage.saveSettings();
    return pickedPath;
  }
  FileDialogs2.showSaveDialog = showSaveDialog;
  async function showSelectFolderDialog(defaultPath) {
    if (!defaultPath.exists)
      defaultPath = Path.vaultPath;
    defaultPath.makePlatformSafe();
    const picker = await dialog.showOpenDialog({
      defaultPath: defaultPath.directory.path,
      properties: ["openDirectory"]
    });
    if (picker.canceled)
      return;
    const path = new Path(picker.filePaths[0]).makePlatformSafe();
    Settings.exportOptions.exportPath = path.directory.path;
    SettingsPage.saveSettings();
    return path;
  }
  FileDialogs2.showSelectFolderDialog = showSelectFolderDialog;
  async function showSelectFileDialog(defaultPath) {
    if (!defaultPath.exists)
      defaultPath = Path.vaultPath;
    defaultPath.makePlatformSafe();
    const picker = await dialog.showOpenDialog({
      defaultPath: defaultPath.directory.path,
      properties: ["openFile"]
    });
    if (picker.canceled)
      return;
    const path = new Path(picker.filePaths[0]).makePlatformSafe();
    return path;
  }
  FileDialogs2.showSelectFileDialog = showSelectFileDialog;
  function idealDefaultPath() {
    let lastPath = new Path(Settings.exportOptions.exportPath);
    if (lastPath.path != "" && lastPath.exists) {
      lastPath = lastPath.directory;
    } else {
      lastPath = Path.vaultPath;
    }
    lastPath.makePlatformSafe();
    return lastPath;
  }
  FileDialogs2.idealDefaultPath = idealDefaultPath;
})(FileDialogs || (FileDialogs = {}));

// src/plugin/settings/settings-components.ts
function createDivider(container) {
  const hr = container.createEl("hr");
  hr.style.marginTop = "20px";
  hr.style.marginBottom = "20px";
  hr.style.borderColor = "var(--interactive-accent)";
  hr.style.opacity = "0.5";
}
function createToggle(container, name, get, set, desc = "") {
  const setting = new import_obsidian6.Setting(container);
  setting.setName(name);
  if (desc != "")
    setting.setDesc(desc);
  setting.addToggle((toggle) => toggle.setValue(get()).onChange(async (value) => {
    set(value);
    await SettingsPage.saveSettings();
  }));
  return setting;
}
function createText(container, name, get, set, desc = "", validation) {
  const setting = new import_obsidian6.Setting(container);
  const errorText = createError(container);
  const value = get();
  if (value != "")
    errorText.setText(validation ? validation(value) : "");
  setting.setName(name);
  if (desc != "")
    setting.setDesc(desc);
  setting.addText((text) => text.setValue(value).onChange(async (value2) => {
    const error = validation ? validation(value2) : "";
    if (error == "") {
      set(value2);
      await SettingsPage.saveSettings();
    }
    errorText.setText(error);
  }));
  return setting;
}
function createDropdown(container, name, get, set, options, desc = "") {
  const newOptions = {};
  for (const key in options) {
    newOptions[options[key]] = key;
  }
  const setting = new import_obsidian6.Setting(container);
  setting.setName(name);
  if (desc != "")
    setting.setDesc(desc);
  setting.addDropdown((dropdown) => dropdown.addOptions(newOptions).setValue(get()).onChange(async (value) => {
    set(value);
    await SettingsPage.saveSettings();
  }));
  return setting;
}
function createError(container) {
  const error = container.createDiv({ cls: "setting-item-description" });
  error.style.color = "var(--color-red)";
  error.style.marginBottom = "0.75rem";
  return error;
}
function createFileInput(container, get, set, options) {
  var _a3, _b3, _c2, _d, _e, _f, _g, _h;
  const getSafe = () => {
    var _a4;
    return new Path((_a4 = get()) != null ? _a4 : "").makePlatformSafe();
  };
  const setSafe = (value) => set(new Path(value).makePlatformSafe().path);
  const name = (_a3 = options == null ? void 0 : options.name) != null ? _a3 : "";
  const description = (_b3 = options == null ? void 0 : options.description) != null ? _b3 : "";
  const placeholder = (_c2 = options == null ? void 0 : options.placeholder) != null ? _c2 : "Path to file...";
  const defaultPath = (_d = options == null ? void 0 : options.defaultPath) != null ? _d : Path.vaultPath;
  const makeRelativeToVault = (_e = options == null ? void 0 : options.makeRelativeToVault) != null ? _e : false;
  const pickFolder = (_f = options == null ? void 0 : options.pickFolder) != null ? _f : false;
  const validation = (_g = options == null ? void 0 : options.validation) != null ? _g : (path) => ({ valid: true, isEmpty: false, error: "" });
  const browseButton = (_h = options == null ? void 0 : options.browseButton) != null ? _h : true;
  const onChanged = options == null ? void 0 : options.onChanged;
  const errorMessage = createError(container);
  if (!getSafe().isEmpty) {
    errorMessage.setText(validation(getSafe()).error);
  }
  let textInput = void 0;
  const fileInput = new import_obsidian6.Setting(container);
  if (name != "")
    fileInput.setName(name);
  if (description != "")
    fileInput.setDesc(description);
  if (name == "" && description == "")
    fileInput.infoEl.style.display = "none";
  let textEl;
  fileInput.addText((text) => {
    textEl = text;
    textInput = text;
    text.inputEl.style.width = "100%";
    text.setPlaceholder(placeholder).setValue(getSafe().path).onChange(async (value) => {
      const path = new Path(value).makePlatformSafe();
      const valid = validation(path);
      errorMessage.setText(valid.error);
      if (valid.valid) {
        errorMessage.setText("");
        setSafe(value.replaceAll('"', ""));
        await SettingsPage.saveSettings();
      }
      if (onChanged)
        onChanged(path);
    });
  });
  let browseButtonEl = void 0;
  if (browseButton) {
    fileInput.addButton((button) => {
      browseButtonEl = button.buttonEl;
      button.setButtonText(i18n.browse).onClick(async () => {
        let path = pickFolder ? await FileDialogs.showSelectFolderDialog(defaultPath) : await FileDialogs.showSelectFileDialog(defaultPath);
        if (!path)
          return;
        if (makeRelativeToVault)
          path = Path.getRelativePathFromVault(path, true);
        path.makePlatformSafe();
        const valid = validation(path);
        errorMessage.setText(valid.error);
        if (valid.valid) {
          setSafe(path.path);
          await SettingsPage.saveSettings();
          textInput == null ? void 0 : textInput.setValue(path.path);
        }
        if (onChanged)
          onChanged(path);
      });
    });
  }
  container.appendChild(errorMessage);
  return { fileInput, textInput: textEl, browseButton: browseButtonEl };
}
function createSection(container, name, desc) {
  return createSectionGetSettings(container, name, desc).section;
}
function createSectionGetSettings(container, name, desc) {
  const section = container.createEl("details");
  section.classList.add("settings-section");
  const summary = section.createEl("summary");
  summary.prepend((0, import_obsidian6.getIcon)("chevron-right"));
  const setting = new import_obsidian6.Setting(summary).setName(name).setDesc(desc).setHeading();
  return { section, sectionSetting: setting };
}
function generateSettingsFromObject(obj, container) {
  var _a3, _b3, _c2, _d;
  for (const key in obj) {
    const value = obj[key];
    const type = typeof value;
    const settinginfo = obj["info_" + key];
    if (!settinginfo) {
      continue;
    }
    if (settinginfo.show === false)
      continue;
    let description = settinginfo.description || "";
    let name = settinginfo.name;
    if (!name || name == "") {
      name = key;
      name = name.replace(/([A-Z][a-z0-9])/gm, " $1").toLowerCase();
      name = name.charAt(0).toUpperCase() + name.substring(1);
    }
    if (settinginfo.dropdownOptions) {
      createDropdown(container, name, () => value, (v) => obj[key] = v, settinginfo.dropdownOptions, description);
      continue;
    }
    if (settinginfo.fileInputOptions) {
      createFileInput(container, () => value, (v) => obj[key] = v, {
        name,
        description,
        placeholder: settinginfo.placeholder,
        defaultPath: new Path((_a3 = settinginfo.fileInputOptions.defaultPath) != null ? _a3 : Path.vaultPath.path),
        makeRelativeToVault: (_b3 = settinginfo.fileInputOptions) == null ? void 0 : _b3.makeRelativeToVault,
        pickFolder: (_c2 = settinginfo.fileInputOptions) == null ? void 0 : _c2.pickFolder,
        validation: (path) => {
          var _a4, _b4, _c3;
          return ((_a4 = settinginfo.fileInputOptions) == null ? void 0 : _a4.validation) ? (_c3 = (_b4 = settinginfo.fileInputOptions) == null ? void 0 : _b4.validation(path.path)) != null ? _c3 : { valid: true, isEmpty: false, error: "" } : { valid: true, isEmpty: false, error: "" };
        },
        browseButton: (_d = settinginfo.fileInputOptions) == null ? void 0 : _d.browseButton,
        onChanged: (path) => {
          var _a4, _b4;
          if ((_a4 = settinginfo.fileInputOptions) == null ? void 0 : _a4.onChanged)
            (_b4 = settinginfo.fileInputOptions) == null ? void 0 : _b4.onChanged(path.path);
        }
      });
      continue;
    }
    if (Array.isArray(value)) {
      const { section, sectionSetting } = createSectionGetSettings(container, name, description + " (Array with length: " + value.length + ")");
      for (let i = 0; i < value.length; i++) {
        const type2 = typeof value[i];
        name = "Element " + (i + 1);
        description = "";
        switch (type2) {
          case "boolean":
            createToggle(section, name, () => value[i], (v) => obj[key][i] = v, description);
            break;
          case "string":
            createText(section, name, () => value[i], (v) => obj[key][i] = v, description);
            break;
          case "number":
            createText(section, name, () => value[i].toString(), (v) => obj[key][i] = parseFloat(v), description);
            break;
          case "object":
            generateSettingsFromObject(value[i], createSection(section, name, description));
            break;
        }
      }
      sectionSetting.addExtraButton((button) => button.setIcon("plus").setTooltip("Add element").onClick(() => {
        setTimeout(() => section.setAttribute("open", "open"), 0);
        const prevItem = obj[key].length > 0 ? obj[key][obj[key].length - 1] : {};
        const copy = SettingsPage.deepCopy(prevItem);
        obj[key].push(copy);
        name = "Element " + obj[key].length;
        description = "";
        generateSettingsFromObject(copy, createSection(section, name, description));
        SettingsPage.saveSettings();
        const descArr = sectionSetting.descEl.innerText.split("(");
        descArr[descArr.length - 1] = "Array with length: " + obj[key].length + ")";
        sectionSetting.descEl.innerText = descArr.join("(");
      }));
      sectionSetting.addExtraButton((button) => button.setIcon("minus").setTooltip("Remove element").onClick(() => {
        setTimeout(() => section.setAttribute("open", "open"), 0);
        if (obj[key].length <= 1)
          return;
        obj[key].pop();
        section.children[section.children.length - 1].remove();
        SettingsPage.saveSettings();
        const descArr = sectionSetting.descEl.innerText.split("(");
        descArr[descArr.length - 1] = "Array with length: " + obj[key].length + ")";
        sectionSetting.descEl.innerText = descArr.join("(");
      }));
      continue;
    }
    switch (type) {
      case "boolean":
        createToggle(container, name, () => value, (v) => obj[key] = v, description);
        break;
      case "string":
        createText(container, name, () => value, (v) => obj[key] = v, description);
        break;
      case "number":
        createText(container, name, () => value.toString(), (v) => obj[key] = parseFloat(v), description);
        break;
      case "object":
        generateSettingsFromObject(value, createSection(container, name, description));
        break;
    }
  }
}
function createFeatureSetting(container, name, feature, desc, addSettings) {
  let setting = new import_obsidian6.Setting(container).setName(name).setDesc(desc);
  setting.setDisabled(feature.unavailable);
  setting.setTooltip(feature.unavailable ? i18n.settings.unavailableSetting.format(Settings.exportPreset) : "", { delay: 0 });
  if (!feature.alwaysEnabled) {
    setting.addToggle((toggle) => {
      toggle.setTooltip(feature.unavailable ? i18n.settings.unavailableSetting.format(Settings.exportPreset) : "", { delay: 0 });
      toggle.setDisabled(feature.unavailable);
      toggle.setValue(feature.enabled);
      toggle.onChange((value) => {
        feature.enabled = value;
        SettingsPage.saveSettings();
      });
    });
  }
  setting.addExtraButton((button) => {
    button.setIcon("settings");
    if (feature.hideSettingsButton) {
      button.extraSettingsEl.style.opacity = "0";
      button.extraSettingsEl.style.pointerEvents = "none";
      button.extraSettingsEl.style.cursor = "default";
    } else {
      button.setTooltip(feature.unavailable ? i18n.settings.unavailableSetting.format(Settings.exportPreset) : "", { delay: 0 });
      button.setDisabled(feature.unavailable);
      button.onClick(() => {
        let modal = new import_obsidian6.Modal(app);
        let contentEl = modal.contentEl;
        modal.open();
        modal.setTitle(name);
        generateSettingsFromObject(feature, contentEl);
        if (addSettings)
          addSettings(contentEl);
      });
    }
  });
}

// src/plugin/website/pipeline-options.ts
var _a2, _b2;
var ExportPipelineOptions = class extends MarkdownRendererOptions {
  constructor() {
    super(...arguments);
    this.addBodyClasses = true;
    this.addMathjaxStyles = true;
    this.addHeadTag = true;
    this.backlinkOptions = new BacklinksOptions();
    this.tagOptions = new TagsOptions();
    this.aliasOptions = new AliasesOptions();
    this.propertiesOptions = new PropertiesOptions();
    this.fileNavigationOptions = new FileNavigationOptions();
    this.searchOptions = new SearchOptions();
    this.outlineOptions = new OutlineOptions();
    this.themeToggleOptions = new ThemeToggleOptions();
    this.graphViewOptions = new GraphViewOptions();
    this.sidebarOptions = new SidebarOptions();
    this.customHeadOptions = new CustomHeadOptions();
    this.documentOptions = new DocumentOptions();
    this.rssOptions = new RssOptions();
    this.linkPreviewOptions = new LinkPreviewOptions();
    this.relativeHeaderLinks = false;
    this.includeJS = true;
    this.includeCSS = true;
    this.inlineMedia = false;
    this.inlineCSS = false;
    this.inlineJS = false;
    this.inlineFonts = false;
    this.inlineOther = false;
    this.combineAsSingleFile = false;
    this.offlineResources = false;
    this.themeName = "";
    this.slugifyPaths = true;
    this.flattenExportPaths = false;
    this.fixLinks = true;
    this.faviconPath = "";
    this.siteName = (_b2 = (_a2 = app == null ? void 0 : app.vault) == null ? void 0 : _a2.getName()) != null ? _b2 : "";
    this.iconEmojiStyle = "Native" /* Native */;
    this.exportRoot = "";
    this.includePluginCss = [];
    this.includeStyleCssIds = [];
    this.autoDisposeWebpages = true;
  }
  reconstructFeatureOptions() {
    for (const [propertyName, propertyValue] of Object.entries(this)) {
      if (propertyValue && typeof propertyValue === "object" && "featureId" in propertyValue && propertyValue.constructor !== Object) {
        const ConstructorClass = propertyValue.constructor;
        const freshInstance = new ConstructorClass();
        this[propertyName] = Object.assign(freshInstance, propertyValue);
      }
    }
  }
};

// src/plugin/features/flow-list.ts
var FlowList = class {
  constructor() {
    this.checkedList = [];
  }
  async generate(container) {
    this.containerEl = container != null ? container : document.body;
    this.flowListEl = this.containerEl.createDiv({ cls: "flow-list" });
    return this.flowListEl;
  }
  addItem(name, key, value, onChange) {
    const item = this.flowListEl.createDiv({ cls: "flow-item" });
    const checkbox = item.createEl("input", { type: "checkbox" });
    checkbox.checked = value;
    if (checkbox.checked)
      this.checkedList.push(key);
    item.addEventListener("click", (evt) => {
      if (!checkbox.checked) {
        checkbox.checked = true;
        if (!this.checkedList.includes(key))
          this.checkedList.push(key);
      } else {
        checkbox.checked = false;
        if (this.checkedList.includes(key))
          this.checkedList.remove(key);
      }
      onChange(checkbox.checked);
    });
    checkbox.onclick = (evt) => {
      checkbox.checked = !checkbox.checked;
    };
    const label = item.createDiv({ cls: "flow-label" });
    label.setText(name);
    return item;
  }
};

// src/assets/plugin-style-ids.json
var plugin_style_ids_default = {
  version: 1,
  ids: [
    "ADMONITIONS_CUSTOM_STYLE_SHEET",
    "css-settings-manager"
  ],
  ignoreIds: [
    "minimal-theme",
    "MJX-CHTML-styles"
  ]
};

// src/plugin/settings/settings.ts
var import_postcss_safe_parser = __toESM(require_safe_parse());
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
  LogLevel2["All"] = "all";
  LogLevel2["Warning"] = "warning";
  LogLevel2["Error"] = "error";
  LogLevel2["Fatal"] = "fatal";
  LogLevel2["None"] = "none";
  return LogLevel2;
})(LogLevel || {});
var _Settings = class {
  static async onlinePreset() {
    _Settings.exportOptions.inlineCSS = false;
    _Settings.exportOptions.inlineFonts = false;
    _Settings.exportOptions.inlineHTML = false;
    _Settings.exportOptions.inlineJS = false;
    _Settings.exportOptions.inlineMedia = false;
    _Settings.exportOptions.inlineOther = false;
    _Settings.exportOptions.slugifyPaths = true;
    _Settings.exportOptions.graphViewOptions.setAvailable(true);
    _Settings.exportOptions.fileNavigationOptions.setAvailable(true);
    _Settings.exportOptions.searchOptions.setAvailable(true);
    _Settings.exportOptions.rssOptions.setAvailable(true);
    _Settings.exportOptions.combineAsSingleFile = false;
    await SettingsPage.saveSettings();
  }
  static async localPreset() {
    _Settings.exportOptions.inlineCSS = true;
    _Settings.exportOptions.inlineFonts = true;
    _Settings.exportOptions.inlineHTML = false;
    _Settings.exportOptions.inlineJS = true;
    _Settings.exportOptions.inlineMedia = true;
    _Settings.exportOptions.inlineOther = true;
    _Settings.exportOptions.slugifyPaths = true;
    _Settings.exportOptions.graphViewOptions.setAvailable(true);
    _Settings.exportOptions.fileNavigationOptions.setAvailable(true);
    _Settings.exportOptions.searchOptions.setAvailable(false);
    _Settings.exportOptions.rssOptions.setAvailable(false);
    _Settings.exportOptions.combineAsSingleFile = true;
    await SettingsPage.saveSettings();
  }
  static async rawDocumentsPreset() {
    _Settings.exportOptions.inlineCSS = true;
    _Settings.exportOptions.inlineFonts = true;
    _Settings.exportOptions.inlineHTML = true;
    _Settings.exportOptions.inlineJS = true;
    _Settings.exportOptions.inlineMedia = true;
    _Settings.exportOptions.inlineOther = true;
    _Settings.exportOptions.slugifyPaths = false;
    _Settings.exportOptions.graphViewOptions.setAvailable(false);
    _Settings.exportOptions.fileNavigationOptions.setAvailable(false);
    _Settings.exportOptions.searchOptions.setAvailable(false);
    _Settings.exportOptions.rssOptions.setAvailable(false);
    _Settings.exportOptions.combineAsSingleFile = false;
    await SettingsPage.saveSettings();
  }
  static getAllFilesFromPaths(paths) {
    const files = [];
    const allFilePaths = app.vault.getFiles().map((f) => f.path);
    if (!paths || paths.length == 0)
      return allFilePaths;
    for (const path of paths) {
      const file = app.vault.getAbstractFileByPath(path);
      if (file instanceof import_obsidian7.TFile)
        files.push(file.path);
      else if (file instanceof import_obsidian7.TFolder) {
        const newFiles = allFilePaths.filter((f) => {
          var _a3;
          return f.startsWith((_a3 = file == null ? void 0 : file.path) != null ? _a3 : "*");
        });
        files.push(...newFiles);
      }
    }
    ;
    return files;
  }
  static getFilesToExport() {
    return this.getAllFilesFromPaths(_Settings.exportOptions.filesToExport).map((p) => app.vault.getFileByPath(p)).filter((f) => f);
  }
};
var Settings = _Settings;
Settings.settingsVersion = "0.0.0";
Settings.exportOptions = new ExportPipelineOptions();
Settings.logLevel = "warning" /* Warning */;
Settings.titleProperty = "title";
Settings.rssDateProperty = "date";
Settings.onlyExportModified = true;
Settings.deleteOldFiles = true;
Settings.exportPreset = "online" /* Online */;
Settings.openAfterExport = true;
Settings.filePickerBlacklist = ["(^|\\/)node_modules\\/", "(^|\\/)dist\\/", "(^|\\/)dist-ssr\\/", "(^|\\/)\\.vscode\\/"];
Settings.filePickerWhitelist = ["\\.\\w+$"];
var _SettingsPage = class extends import_obsidian7.PluginSettingTab {
  constructor(plugin2) {
    super(app, plugin2);
    this.blacklistedPluginIDs = [];
    _SettingsPage.plugin = plugin2;
  }
  display() {
    const { containerEl: container } = this;
    const lang = i18n.settings;
    container.empty();
    container.classList.add("webpage-html-settings");
    const header = container.createEl("h2", { text: lang.title });
    header.style.display = "block";
    header.style.marginBottom = "15px";
    const supportContainer = container.createDiv();
    supportContainer.style.marginBottom = "15px";
    const supportLink = container.createEl("a");
    const buttonColor = "3ebba4";
    const buttonTextColor = "ffffff";
    supportLink.href = `https://www.buymeacoffee.com/nathangeorge`;
    supportLink.style.height = "40px";
    supportLink.innerHTML = `<img style="height:40px;" src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=nathangeorge&button_colour=${buttonColor}&font_colour=${buttonTextColor}&font_family=Poppins&outline_colour=${buttonTextColor}&coffee_colour=FFDD00">`;
    const supportHeader = container.createDiv({ text: lang.support, cls: "setting-item-description" });
    supportHeader.style.display = "block";
    supportContainer.style.display = "grid";
    supportContainer.style.gridTemplateColumns = "0.5fr 0.5fr";
    supportContainer.style.gridTemplateRows = "40px 20px";
    supportContainer.appendChild(supportLink);
    const debugInfoButton = container.createEl("button");
    const bugIcon = (0, import_obsidian7.getIcon)("bug");
    if (bugIcon)
      debugInfoButton.appendChild(bugIcon);
    debugInfoButton.style.height = "100%";
    debugInfoButton.style.aspectRatio = "1/1";
    debugInfoButton.style.justifySelf = "end";
    const debugHeader = container.createDiv({ text: lang.debug, cls: "setting-item-description" });
    debugHeader.style.display = "block";
    debugHeader.style.justifySelf = "end";
    debugInfoButton.addEventListener("click", () => {
      navigator.clipboard.writeText(ExportLog.getDebugInfo());
      new import_obsidian7.Notice("Debug info copied to clipboard!");
    });
    supportContainer.appendChild(debugInfoButton);
    supportContainer.appendChild(supportHeader);
    supportContainer.appendChild(debugHeader);
    createDivider(container);
    let section = createSection(container, lang.pageFeatures.title, lang.pageFeatures.description);
    createFeatureSetting(section, lang.document.title, Settings.exportOptions.documentOptions, lang.document.description, (container2) => {
      createToggle(container2, lang.addPageIcon.title, () => Settings.exportOptions.addPageIcon, (value) => Settings.exportOptions.addPageIcon = value, lang.addPageIcon.description);
    });
    createFeatureSetting(section, lang.sidebars.title, Settings.exportOptions.sidebarOptions, lang.sidebars.description);
    createFeatureSetting(section, lang.fileNavigation.title, Settings.exportOptions.fileNavigationOptions, lang.fileNavigation.description);
    createFeatureSetting(section, lang.outline.title, Settings.exportOptions.outlineOptions, lang.outline.description);
    createFeatureSetting(section, lang.graphView.title, Settings.exportOptions.graphViewOptions, lang.graphView.description);
    createFeatureSetting(section, lang.search.title, Settings.exportOptions.searchOptions, lang.search.description);
    createFeatureSetting(section, lang.linkPreview.title, Settings.exportOptions.linkPreviewOptions, lang.linkPreview.description);
    createFeatureSetting(section, lang.themeToggle.title, Settings.exportOptions.themeToggleOptions, lang.themeToggle.description);
    createFeatureSetting(section, lang.customHead.title, Settings.exportOptions.customHeadOptions, lang.customHead.description);
    createFeatureSetting(section, lang.backlinks.title, Settings.exportOptions.backlinkOptions, lang.backlinks.description);
    createFeatureSetting(section, lang.tags.title, Settings.exportOptions.tagOptions, lang.tags.description);
    createFeatureSetting(section, lang.aliases.title, Settings.exportOptions.aliasOptions, lang.aliases.description);
    createFeatureSetting(section, lang.rss.title, Settings.exportOptions.rssOptions, lang.rss.description);
    createDivider(container);
    section = createSection(container, lang.generalSettingsSection.title, lang.generalSettingsSection.description);
    createFileInput(section, () => Settings.exportOptions.faviconPath, (value) => Settings.exportOptions.faviconPath = value, {
      name: lang.favicon.title,
      description: lang.favicon.description,
      placeholder: i18n.pathInputPlaceholder,
      makeRelativeToVault: true,
      pickFolder: false,
      validation: (path) => path.validate({
        allowEmpty: true,
        allowAbsolute: true,
        allowRelative: true,
        allowFiles: true,
        requireExists: true,
        requireExtentions: ["png", "ico", "jpg", "jpeg", "svg"]
      }),
      browseButton: true
    });
    createText(section, lang.siteName.title, () => Settings.exportOptions.siteName, (value) => Settings.exportOptions.siteName = value, lang.siteName.description);
    createDivider(container);
    section = createSection(container, lang.styleOptionsSection.title, lang.styleOptionsSection.description);
    createDropdown(section, lang.iconEmojiStyle.title, () => Settings.exportOptions.iconEmojiStyle, (value) => Settings.exportOptions.iconEmojiStyle = value, EmojiStyle, lang.iconEmojiStyle.description);
    createDropdown(section, lang.themeName.title, () => {
      var _a3, _b3;
      return Settings.exportOptions.themeName || ((_b3 = (_a3 = app.vault) == null ? void 0 : _a3.config) == null ? void 0 : _b3.cssTheme) || "Default";
    }, (value) => Settings.exportOptions.themeName = value, this.getInstalledThemesRecord(), lang.themeName.description);
    new import_obsidian7.Setting(section).setName(lang.includeStyleCssIds.title).setDesc(lang.includeStyleCssIds.description);
    const styleIdsList = new FlowList();
    styleIdsList.generate(section);
    this.getStyleTagIds().forEach(async (plugin2) => {
      if (plugin_style_ids_default.ids.contains(plugin2) || plugin_style_ids_default.ignoreIds.contains(plugin2))
        return;
      const isChecked = Settings.exportOptions.includeStyleCssIds.contains(plugin2);
      styleIdsList.addItem(plugin2, plugin2, isChecked, (value) => {
        Settings.exportOptions.includeStyleCssIds = styleIdsList.checkedList;
        _SettingsPage.saveSettings();
      });
    });
    new import_obsidian7.Setting(section).setName(lang.includePluginCSS.title).setDesc(lang.includePluginCSS.description);
    const pluginsList = new FlowList();
    styleIdsList.generate(section);
    this.getPluginIDs().forEach(async (plugin2) => {
      const pluginManifest = app.plugins.manifests[plugin2];
      if (!pluginManifest)
        return;
      if ((await this.getBlacklistedPluginIDs()).contains(pluginManifest.id)) {
        return;
      }
      const pluginDir = pluginManifest.dir;
      if (!pluginDir)
        return;
      const pluginPath = new Path(pluginDir);
      const hasCSS = pluginPath.joinString("styles.css").exists;
      if (!hasCSS)
        return;
      const isChecked = Settings.exportOptions.includePluginCss.contains(plugin2);
      styleIdsList.addItem(pluginManifest.name, plugin2, isChecked, (value) => {
        Settings.exportOptions.includePluginCss = styleIdsList.checkedList;
        _SettingsPage.saveSettings();
      });
    });
    createDivider(container);
    section = createSection(container, lang.exportSettingsSection.title, lang.exportSettingsSection.description);
    createToggle(section, lang.relativeHeaderLinks.title, () => Settings.exportOptions.relativeHeaderLinks, (value) => Settings.exportOptions.relativeHeaderLinks = value, lang.relativeHeaderLinks.description);
    createToggle(section, lang.slugifyPaths.title, () => Settings.exportOptions.slugifyPaths, (value) => Settings.exportOptions.slugifyPaths = value, lang.slugifyPaths.description);
    createToggle(section, lang.makeOfflineCompatible.title, () => Settings.exportOptions.offlineResources, (value) => Settings.exportOptions.offlineResources = value, lang.makeOfflineCompatible.description);
    createDivider(container);
    section = createSection(container, lang.obsidianSettingsSection.title, lang.obsidianSettingsSection.description);
    createDropdown(section, lang.logLevel.title, () => Settings.logLevel, (value) => Settings.logLevel = value, LogLevel, lang.logLevel.description);
    createText(section, lang.titleProperty.title, () => Settings.titleProperty, (value) => Settings.titleProperty = value, lang.titleProperty.description);
  }
  async getBlacklistedPluginIDs() {
    if (this.blacklistedPluginIDs.length > 0)
      return this.blacklistedPluginIDs;
    this.blacklistedPluginIDs = third_party_styles_blacklist_default.replaceAll("\r", "").split("\n");
    return this.blacklistedPluginIDs;
  }
  getPluginIDs() {
    const pluginsArray = Array.from(app.plugins.enabledPlugins.values());
    for (let i = 0; i < pluginsArray.length; i++) {
      if (app.plugins.manifests[pluginsArray[i]] == void 0) {
        pluginsArray.splice(i, 1);
        i--;
      }
    }
    return pluginsArray;
  }
  static nameStylesheet(stylesheet) {
    const words = [];
    const commentWords = [];
    const commonWords = /* @__PURE__ */ new Set([
      "svelte",
      "wrapper",
      "container",
      "item",
      "button",
      "input",
      "text",
      "style",
      "color",
      "background",
      "margin",
      "padding",
      "width",
      "height",
      "display",
      "position",
      "font",
      "cm",
      "pcr",
      "app",
      "workspace"
    ]);
    const root2 = (0, import_postcss_safe_parser.default)(stylesheet);
    root2.nodes.forEach((node) => {
      if (node.type === "comment") {
        const commentText = node.text.toLowerCase();
        const extractedWords = commentText.match(/\b\w+\b/g) || [];
        commentWords.push(...extractedWords);
      } else {
        return false;
      }
    });
    root2.walkRules((rule2) => {
      const selectors = rule2.selector.match(/[.#][\w-]+/g) || [];
      selectors.forEach((selector) => {
        const parts = selector.slice(1).split("-");
        words.push(...parts);
      });
    });
    const wordCounts = words.filter((word) => word.length > 1 && !commonWords.has(word.toLowerCase())).reduce((acc, word) => {
      acc[word.toLowerCase()] = (acc[word.toLowerCase()] || 0) + 1;
      return acc;
    }, {});
    commentWords.forEach((word) => {
      if (wordCounts.hasOwnProperty(word)) {
        wordCounts[word] += 1;
      }
    });
    const sortedWords = Object.entries(wordCounts).sort((a, b) => b[1] - a[1]);
    if (sortedWords.length === 0) {
      return "generic-stylesheet";
    }
    if (sortedWords.length > 1 && sortedWords[0][1] === sortedWords[1][1]) {
      return `${sortedWords[0][0]}-${sortedWords[1][0]}-stylesheet`;
    } else {
      return `${sortedWords[0][0]}-stylesheet`;
    }
  }
  static nameStyles() {
    var _a3, _b3, _c2, _d;
    const stylesheets = document.styleSheets;
    for (let i = 1; i < stylesheets.length; i++) {
      const styleID = (_a3 = stylesheets[i].ownerNode) == null ? void 0 : _a3.id;
      if (!styleID || styleID == "") {
        const attributes = (_b3 = stylesheets[i].ownerNode) == null ? void 0 : _b3.attributes;
        if (attributes) {
          const priorityPrefixes = ["source-plugin", "type", "name", "source"];
          let foundPriorityAttr = false;
          for (const prefix of priorityPrefixes) {
            const attr = Array.from(attributes).find((a) => a.name === `data-${prefix}`);
            if (attr) {
              stylesheets[i].ownerNode.id = `${prefix}-${attr.value}-stylesheet`;
              foundPriorityAttr = true;
              break;
            }
          }
          if (!foundPriorityAttr) {
            const dataAttrs = Array.from(attributes).filter((attr) => attr.name.startsWith("data-")).map((attr) => ({
              name: attr.name.substring(5),
              value: attr.value
            }));
            if (dataAttrs.length > 0) {
              const id = dataAttrs.map((attr) => `${attr.name}${attr.value ? `-${attr.value}` : ""}`).join("-");
              stylesheets[i].ownerNode.id = `${id}-stylesheet`;
              continue;
            }
          } else {
            continue;
          }
        }
        let hasUniqueAttr = false;
        if (attributes) {
          for (const attr of attributes) {
            if (!["type", "id"].contains(attr.name) && !attr.name.startsWith("data-")) {
              const elements = document.querySelectorAll(`[${attr.name}]`);
              if (elements.length == 1) {
                stylesheets[i].ownerNode.id = `${attr.name}-stylesheet`;
                hasUniqueAttr = true;
                break;
              }
            }
          }
        }
        if (hasUniqueAttr)
          continue;
        if (!((_d = (_c2 = stylesheets[i].ownerNode) == null ? void 0 : _c2.textContent) == null ? void 0 : _d.contains("svelte-")))
          continue;
        stylesheets[i].ownerNode.id = this.nameStylesheet(stylesheets[i].ownerNode.textContent);
      }
    }
  }
  getStyleTagIds() {
    _SettingsPage.nameStyles();
    let ids = [];
    document.querySelectorAll("style").forEach((style) => {
      if (style.id)
        ids.push(style.id);
    });
    return ids;
  }
  getInstalledThemesRecord() {
    const themes = Object.values(app.customCss.themes);
    const themeRecord = {
      "Current": "obsidian-current-theme",
      "Default": "Default"
    };
    for (const theme of themes) {
      themeRecord[theme.name] = theme.name;
    }
    return themeRecord;
  }
  static deepAssign(truth, source) {
    if (!source)
      return;
    let objects = Object.values(truth);
    let keys = Object.keys(truth);
    for (let i = 0; i < objects.length; i++) {
      let key = keys[i];
      let type = typeof objects[i];
      if (type == "object" && source[key] != void 0) {
        if (Array.isArray(objects[i])) {
          truth[key] = source[key];
        } else {
          _SettingsPage.deepAssign(objects[i], source[key]);
        }
      } else if (source[key] != void 0) {
        truth[key] = source[key];
      }
    }
    return truth;
  }
  static deepCopy(truth) {
    return JSON.parse(JSON.stringify(truth));
  }
  static deepRemoveStartingWith(truth, prefix) {
    const keys = Object.keys(truth);
    for (let i = 0; i < keys.length; i++) {
      if (keys[i].startsWith(prefix)) {
        delete truth[keys[i]];
      }
      let type = typeof truth[keys[i]];
      if (type == "object") {
        _SettingsPage.deepRemoveStartingWith(truth[keys[i]], prefix);
      }
    }
    return truth;
  }
  static async loadSettings() {
    const loadedSettings = await _SettingsPage.plugin.loadData();
    _SettingsPage.deepAssign(Settings, loadedSettings);
    Settings.exportOptions.reconstructFeatureOptions();
    _SettingsPage.saveSettings();
    _SettingsPage.loaded = true;
  }
  static async saveSettings() {
    let copy = _SettingsPage.deepCopy({ ...Settings });
    copy = _SettingsPage.deepRemoveStartingWith(copy, "info_");
    await _SettingsPage.plugin.saveData(copy);
  }
  static renameFile(file, oldPath) {
    const oldPathParsed = new Path(oldPath).path;
    let fileList = Settings.exportOptions.filesToExport;
    const index = fileList.indexOf(oldPathParsed);
    if (index >= 0) {
      fileList[index] = file.path;
    }
    _SettingsPage.saveSettings();
  }
};
var SettingsPage = _SettingsPage;
SettingsPage.loaded = false;

// src/plugin/asset-loaders/base-asset.ts
var { minify: runMinify } = require_htmlminifier();
var _AssetLoader = class extends Attachment {
  constructor(filename, data, source, type, inlinePolicy, minify, mutability, loadMethod = "async" /* Async */, loadPriority = 100, cdnPath = void 0, options = void 0) {
    if (source && options == void 0)
      throw new Error("WebAsset options cannot be empty if source is not empty");
    options = Object.assign(Settings.exportOptions, options != null ? options : {});
    const targetPath = _AssetLoader.typeToDir(type).joinString(filename).slugify(options.slugifyPaths);
    super(data, targetPath, source, options);
    this.loadMethod = "" /* Default */;
    this.loadPriority = 100;
    this.onlineURL = void 0;
    this.childAssets = [];
    this.type = type;
    this.inlinePolicy = inlinePolicy;
    this.mutability = mutability;
    this.minify = minify;
    this.loadMethod = loadMethod;
    this.loadPriority = loadPriority;
    this.onlineURL = cdnPath;
    switch (mutability) {
      case "static" /* Static */:
        AssetHandler.staticAssets.push(this);
        break;
      case "dynamic" /* Dynamic */:
        AssetHandler.dynamicAssets.push(this);
        break;
      case "temporary" /* Temporary */:
        AssetHandler.temporaryAssets.push(this);
        break;
    }
    if (mutability != "child" /* Child */)
      AssetHandler.allAssets.push(this);
  }
  async load() {
    if (this.type == "style" /* Style */ && typeof this.data == "string") {
      this.childAssets = [];
      this.data = await AssetHandler.getStyleChildAssets(this, false);
      for (const key in _AssetLoader.replacements) {
        const reg = new RegExp(key, "g");
        this.data = this.data.replace(reg, _AssetLoader.replacements[key]);
      }
    }
    if (this.minify) {
      await this.minifyAsset();
    }
  }
  async download() {
    if (this.isInlineFormat(this.exportOptions))
      return;
    await super.download();
  }
  static typeToDir(type) {
    switch (type) {
      case "style" /* Style */:
        return AssetHandler.cssPath;
      case "script" /* Script */:
        return AssetHandler.jsPath;
      case "media" /* Media */:
        return AssetHandler.mediaPath;
      case "html" /* HTML */:
        return AssetHandler.htmlPath;
      case "font" /* Font */:
        return AssetHandler.fontPath;
      case "other" /* Other */:
        return AssetHandler.libraryPath;
    }
  }
  static extentionToType(extention) {
    const mediaTypes = ["png", "jpg", "jpeg", "gif", "svg", "webp", "ico", "mp4", "webm", "ogg", "mp3", "wav", "flac", "aac", "m4a", "opus"];
    const scriptTypes = ["js", "ts"];
    const styleTypes = ["css", "scss", "sass", "less"];
    const htmlTypes = ["html", "htm"];
    const fontTypes = ["ttf", "woff", "woff2", "eot", "otf"];
    extention = extention.toLowerCase().replace(".", "");
    if (mediaTypes.includes(extention))
      return "media" /* Media */;
    if (scriptTypes.includes(extention))
      return "script" /* Script */;
    if (styleTypes.includes(extention))
      return "style" /* Style */;
    if (htmlTypes.includes(extention))
      return "html" /* HTML */;
    if (fontTypes.includes(extention))
      return "font" /* Font */;
    return "other" /* Other */;
  }
  async minifyAsset() {
    if (this.type == "html" /* HTML */ || typeof this.data != "string")
      return;
    const isJS = this.type == "script" /* Script */;
    const isCSS = this.type == "style" /* Style */;
    let tempContent = this.data;
    try {
      if (isJS)
        tempContent = `<script>${tempContent}<\/script>`;
      if (isCSS)
        tempContent = `<style>${tempContent}</style>`;
      tempContent = await runMinify(tempContent, { minifyCSS: isCSS, minifyJS: isJS, removeComments: true, collapseWhitespace: true });
      tempContent = tempContent.replace("<script>", "").replace("<\/script>", "").replace("<style>", "").replace("</style>", "");
      this.data = tempContent;
    } catch (e) {
      console.error("Unable to minify " + (isJS ? "JS" : "CSS") + " file.");
      this.data = this.data.replace(/[\n\r]+/g, "");
    }
  }
  getAssetPath(relativeFrom = void 0) {
    if (this.isInlineFormat(this.exportOptions))
      return new Path("");
    if (relativeFrom == void 0)
      relativeFrom = Path.rootPath;
    const toRoot = Path.getRelativePath(relativeFrom, Path.rootPath);
    const newPath = toRoot.join(this.targetPath);
    newPath.slugify(this.exportOptions.slugifyPaths);
    return newPath;
  }
  isInlineFormat(options) {
    const isInlineFormat = this.inlinePolicy == "inline" /* Inline */ || this.inlinePolicy == "inlinehead" /* InlineHead */ || (this.inlinePolicy == "auto" /* Auto */ || this.inlinePolicy == "autohead" /* AutoHead */) && (options.inlineCSS && this.type == "style" /* Style */ || options.inlineJS && this.type == "script" /* Script */ || options.inlineMedia && this.type == "media" /* Media */ || options.inlineHTML && this.type == "html" /* HTML */ || options.inlineFonts && this.type == "font" /* Font */);
    return isInlineFormat;
  }
  isRefFormat(options) {
    const isRefFormat = this.inlinePolicy == "download" /* Download */ || this.inlinePolicy == "downloadhead" /* DownloadHead */ || (this.inlinePolicy == "auto" /* Auto */ || this.inlinePolicy == "autohead" /* AutoHead */) && !(options.inlineCSS && this.type == "style" /* Style */ || options.inlineJS && this.type == "script" /* Script */ || options.inlineMedia && this.type == "media" /* Media */ || options.inlineHTML && this.type == "html" /* HTML */ || options.inlineFonts && this.type == "font" /* Font */);
    return isRefFormat;
  }
  getHTML(options) {
    if (this.isInlineFormat(options)) {
      switch (this.type) {
        case "style" /* Style */:
          return `<style>${this.data}</style>`;
        case "script" /* Script */:
          return `<script ${this.loadMethod}>${this.data}<\/script>`;
        case "media" /* Media */:
          return `<${this.getHTMLTagName()} src="${this.getContentBase64()}"/>`;
        case "html" /* HTML */:
          return this.data;
        case "font" /* Font */:
          return `<style>@font-face{font-family:'${this.basename}';src:url(${this.getContentBase64()}) format('woff2');}</style>`;
        default:
          return "";
      }
    }
    if (this.isRefFormat(options)) {
      let path = this.getAssetPath(void 0).path;
      if (options.offlineResources === false && this.onlineURL)
        path = this.onlineURL;
      let include = "";
      let attr = "";
      switch (this.type) {
        case "style" /* Style */:
          include = `<link rel="stylesheet" href="${path}">`;
          if (this.loadMethod == "async" /* Async */) {
            include = `<link rel="preload" href="${path}" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="${path}"></noscript>`;
          }
          return include;
        case "script" /* Script */:
          include = `<script ${this.loadMethod} id="${this.basename + "-script"}" src="${path}" onload='this.onload=null;this.setAttribute("loaded", "true")'><\/script>`;
          return include;
        case "media" /* Media */:
          attr = this.loadMethod == "defer" /* Defer */ ? "loading='eager'" : "loading='lazy'";
          if (this.loadMethod == "" /* Default */)
            attr = "";
          include = `<${this.getHTMLTagName()} src="${path}" ${attr} />`;
          return include;
        case "font" /* Font */:
          include = `<style>@font-face{font-family:'${this.basename}';src:url('${path}') format('woff2');}</style>`;
          return include;
        case "html" /* HTML */:
          return IncludeGenerator.generate(path, false);
        default:
          return "";
      }
    }
    console.log("Unable to inline or reference " + this.filename);
    return "";
  }
  static mimeToExtention(mime3) {
    const FileMimeType = { "audio/x-mpeg": "mpega", "application/postscript": "ps", "audio/x-aiff": "aiff", "application/x-aim": "aim", "image/x-jg": "art", "video/x-ms-asf": "asx", "audio/basic": "ulw", "video/x-msvideo": "avi", "video/x-rad-screenplay": "avx", "application/x-bcpio": "bcpio", "application/octet-stream": "exe", "image/bmp": "dib", "text/html": "html", "application/x-cdf": "cdf", "application/pkix-cert": "cer", "application/java": "class", "application/x-cpio": "cpio", "application/x-csh": "csh", "text/css": "css", "application/msword": "doc", "application/xml-dtd": "dtd", "video/x-dv": "dv", "application/x-dvi": "dvi", "application/vnd.ms-fontobject": "eot", "text/x-setext": "etx", "image/gif": "gif", "application/x-gtar": "gtar", "application/x-gzip": "gz", "application/x-hdf": "hdf", "application/mac-binhex40": "hqx", "text/x-component": "htc", "image/ief": "ief", "text/vnd.sun.j2me.app-descriptor": "jad", "application/java-archive": "jar", "text/x-java-source": "java", "application/x-java-jnlp-file": "jnlp", "image/jpeg": "jpg", "application/javascript": "js", "text/plain": "txt", "application/json": "json", "audio/midi": "midi", "application/x-latex": "latex", "audio/x-mpegurl": "m3u", "image/x-macpaint": "pnt", "text/troff": "tr", "application/mathml+xml": "mathml", "application/x-mif": "mif", "video/quicktime": "qt", "video/x-sgi-movie": "movie", "audio/mpeg": "mpa", "video/mp4": "mp4", "video/mpeg": "mpg", "video/mpeg2": "mpv2", "application/x-wais-source": "src", "application/x-netcdf": "nc", "application/oda": "oda", "application/vnd.oasis.opendocument.database": "odb", "application/vnd.oasis.opendocument.chart": "odc", "application/vnd.oasis.opendocument.formula": "odf", "application/vnd.oasis.opendocument.graphics": "odg", "application/vnd.oasis.opendocument.image": "odi", "application/vnd.oasis.opendocument.text-master": "odm", "application/vnd.oasis.opendocument.presentation": "odp", "application/vnd.oasis.opendocument.spreadsheet": "ods", "application/vnd.oasis.opendocument.text": "odt", "application/vnd.oasis.opendocument.graphics-template": "otg", "application/vnd.oasis.opendocument.text-web": "oth", "application/vnd.oasis.opendocument.presentation-template": "otp", "application/vnd.oasis.opendocument.spreadsheet-template": "ots", "application/vnd.oasis.opendocument.text-template": "ott", "application/ogg": "ogx", "video/ogg": "ogv", "audio/ogg": "spx", "application/x-font-opentype": "otf", "audio/flac": "flac", "application/annodex": "anx", "audio/annodex": "axa", "video/annodex": "axv", "application/xspf+xml": "xspf", "image/x-portable-bitmap": "pbm", "image/pict": "pict", "application/pdf": "pdf", "image/x-portable-graymap": "pgm", "audio/x-scpls": "pls", "image/png": "png", "image/x-portable-anymap": "pnm", "image/x-portable-pixmap": "ppm", "application/vnd.ms-powerpoint": "pps", "image/vnd.adobe.photoshop": "psd", "image/x-quicktime": "qtif", "image/x-cmu-raster": "ras", "application/rdf+xml": "rdf", "image/x-rgb": "rgb", "application/vnd.rn-realmedia": "rm", "application/rtf": "rtf", "text/richtext": "rtx", "application/font-sfnt": "sfnt", "application/x-sh": "sh", "application/x-shar": "shar", "application/x-stuffit": "sit", "application/x-sv4cpio": "sv4cpio", "application/x-sv4crc": "sv4crc", "image/svg+xml": "svg", "application/x-shockwave-flash": "swf", "application/x-tar": "tar", "application/x-tcl": "tcl", "application/x-tex": "tex", "application/x-texinfo": "texinfo", "image/tiff": "tiff", "text/tab-separated-values": "tsv", "application/x-font-ttf": "ttf", "application/x-ustar": "ustar", "application/voicexml+xml": "vxml", "image/x-xbitmap": "xbm", "application/xhtml+xml": "xhtml", "application/vnd.ms-excel": "xls", "application/xml": "xsl", "image/x-xpixmap": "xpm", "application/xslt+xml": "xslt", "application/vnd.mozilla.xul+xml": "xul", "image/x-xwindowdump": "xwd", "application/vnd.visio": "vsd", "audio/x-wav": "wav", "image/vnd.wap.wbmp": "wbmp", "text/vnd.wap.wml": "wml", "application/vnd.wap.wmlc": "wmlc", "text/vnd.wap.wmlsc": "wmls", "application/vnd.wap.wmlscriptc": "wmlscriptc", "video/x-ms-wmv": "wmv", "application/font-woff": "woff", "application/font-woff2": "woff2", "model/vrml": "wrl", "application/wspolicy+xml": "wspolicy", "application/x-compress": "z", "application/zip": "zip" };
    return FileMimeType[mime3] || mime3.split("/")[1] || "txt";
  }
  static extentionToMime(extention) {
    if (extention.startsWith("."))
      extention = extention.slice(1);
    const FileMimeType = { "mpega": "audio/x-mpeg", "ps": "application/postscript", "aiff": "audio/x-aiff", "aim": "application/x-aim", "art": "image/x-jg", "asx": "video/x-ms-asf", "ulw": "audio/basic", "avi": "video/x-msvideo", "avx": "video/x-rad-screenplay", "bcpio": "application/x-bcpio", "exe": "application/octet-stream", "dib": "image/bmp", "html": "text/html", "cdf": "application/x-cdf", "cer": "application/pkix-cert", "class": "application/java", "cpio": "application/x-cpio", "csh": "application/x-csh", "css": "text/css", "doc": "application/msword", "dtd": "application/xml-dtd", "dv": "video/x-dv", "dvi": "application/x-dvi", "eot": "application/vnd.ms-fontobject", "etx": "text/x-setext", "gif": "image/gif", "gtar": "application/x-gtar", "gz": "application/x-gzip", "hdf": "application/x-hdf", "hqx": "application/mac-binhex40", "htc": "text/x-component", "ief": "image/ief", "jad": "text/vnd.sun.j2me.app-descriptor", "jar": "application/java-archive", "java": "text/x-java-source", "jnlp": "application/x-java-jnlp-file", "jpg": "image/jpeg", "js": "application/javascript", "txt": "text/plain", "json": "application/json", "midi": "audio/midi", "latex": "application/x-latex", "m3u": "audio/x-mpegurl", "pnt": "image/x-macpaint", "tr": "text/troff", "mathml": "application/mathml+xml", "mif": "application/x-mif", "qt": "video/quicktime", "movie": "video/x-sgi-movie", "mpa": "audio/mpeg", "mp4": "video/mp4", "mpg": "video/mpeg", "mpv2": "video/mpeg2", "src": "application/x-wais-source", "nc": "application/x-netcdf", "oda": "application/oda", "odb": "application/vnd.oasis.opendocument.database", "odc": "application/vnd.oasis.opendocument.chart", "odf": "application/vnd.oasis.opendocument.formula", "odg": "application/vnd.oasis.opendocument.graphics", "odi": "application/vnd.oasis.opendocument.image", "odm": "application/vnd.oasis.opendocument.text-master", "odp": "application/vnd.oasis.opendocument.presentation", "ods": "application/vnd.oasis.opendocument.spreadsheet", "odt": "application/vnd.oasis.opendocument.text", "otg": "application/vnd.oasis.opendocument.graphics-template", "oth": "application/vnd.oasis.opendocument.text-web", "otp": "application/vnd.oasis.opendocument.presentation-template", "ots": "application/vnd.oasis.opendocument.spreadsheet-template", "ott": "application/vnd.oasis.opendocument.text-template", "ogx": "application/ogg", "ogv": "video/ogg", "spx": "audio/ogg", "otf": "application/x-font-opentype", "flac": "audio/flac", "anx": "application/annodex", "axa": "audio/annodex", "axv": "video/annodex", "xspf": "application/xspf+xml", "pbm": "image/x-portable-bitmap", "pict": "image/pict", "pdf": "application/pdf", "pgm": "image/x-portable-graymap", "pls": "audio/x-scpls", "png": "image/png", "pnm": "image/x-portable-anymap", "ppm": "image/x-portable-pixmap", "pps": "application/vnd.ms-powerpoint", "psd": "image/vnd.adobe.photoshop", "qtif": "image/x-quicktime", "ras": "image/x-cmu-raster", "rdf": "application/rdf+xml", "rgb": "image/x-rgb", "rm": "application/vnd.rn-realmedia", "rtf": "application/rtf", "rtx": "text/richtext", "sfnt": "application/font-sfnt", "sh": "application/x-sh", "shar": "application/x-shar", "sit": "application/x-stuffit", "sv4cpio": "application/x-sv4cpio", "sv4crc": "application/x-sv4crc", "svg": "image/svg+xml", "swf": "application/x-shockwave-flash", "tar": "application/x-tar", "tcl": "application/x-tcl", "tex": "application/x-tex", "texinfo": "application/x-texinfo", "tiff": "image/tiff", "tsv": "text/tab-separated-values", "ttf": "application/x-font-ttf", "ustar": "application/x-ustar", "vxml": "application/voicexml+xml", "xbm": "image/x-xbitmap", "xhtml": "application/xhtml+xml", "xls": "application/vnd.ms-excel", "xsl": "application/xml", "xpm": "image/x-xpixmap", "xslt": "application/xslt+xml", "xul": "application/vnd.mozilla.xul+xml", "xwd": "image/x-xwindowdump", "vsd": "application/vnd.visio", "wav": "audio/x-wav", "wbmp": "image/vnd.wap.wbmp", "wml": "text/vnd.wap.wml", "wmlc": "application/vnd.wap.wmlc", "wmls": "text/vnd.wap.wmlsc", "wmlscriptc": "application/vnd.wap.wmlscriptc", "wmv": "video/x-ms-wmv", "woff": "application/font-woff", "woff2": "application/font-woff2", "wrl": "model/vrml", "wspolicy": "application/wspolicy+xml", "z": "application/x-compress", "zip": "application/zip" };
    return FileMimeType[extention] || "application/octet-stream";
  }
  getContentBase64() {
    const extension = this.extensionName;
    const mimeType = import_mime.default.getType(extension) || "text/plain";
    const base64 = this.data.toString("base64");
    return `data:${mimeType};base64,${base64}`;
  }
  getHTMLTagName() {
    switch (this.type) {
      case "style" /* Style */:
        return "link";
      case "script" /* Script */:
        return "script";
      case "font" /* Font */:
        return "style";
      case "html" /* HTML */:
        return "include";
    }
    const extension = this.extensionName;
    const extToTag = { "png": "img", "jpg": "img", "jpeg": "img", "tiff": "img", "bmp": "img", "avif": "img", "apng": "img", "gif": "img", "svg": "img", "webp": "img", "ico": "img", "mp4": "video", "webm": "video", "ogg": "video", "3gp": "video", "mov": "video", "mpeg": "video", "mp3": "audio", "wav": "audio", "flac": "audio", "aac": "audio", "m4a": "audio", "opus": "audio", "pdf": "embed" };
    return extToTag[extension] || "img";
  }
};
var AssetLoader = _AssetLoader;
AssetLoader.replacements = {
  "\\[href": "[data-href",
  "\\.search-input-": "#search-",
  "\\.workspace-leaf-content\\[data-type.+?(markdown|pdf|canvas|kanban|excalidraw).*?\\]": "",
  "\\.nav-files-container": "#file-explorer",
  "\\.workspace-leaf-content": ".leaf-content",
  "\\.leaf>.leaf-content": ".leaf .leaf-content",
  "\\.markdown-reading-view": "#center-content",
  "\\.markdown-preview-sizer|\\.markdown-preview-section": ".markdown-preview-sizer",
  "\\.horizontal-main-container|\\.workspace": "#main-horizontal"
};

// src/assets/obsidian-styles.txt.css
var obsidian_styles_txt_default = ".obsidian-document .heading-collapse-indicator \n{\n    margin-left: calc( 0px - var(--collapse-arrow-size) - 10px) !important;\n    padding: 0px 0px !important;\n}\n\n.node-insert-event \n{\n    animation-duration: unset !important;\n    animation-name: none !important;\n}\n\nhr\n{\n    border: none;\n	border-top: var(--hr-thickness) solid;\n    border-color: var(--hr-color);\n}\n\nh1:hover .collapse-indicator, h2:hover .collapse-indicator, h3:hover .collapse-indicator, h4:hover .collapse-indicator, h5:hover .collapse-indicator, h6:hover .collapse-indicator, .collapse-indicator:hover, .is-collapsed .collapse-indicator, .cm-fold-indicator.is-collapsed .collapse-indicator, .cm-gutterElement:hover .collapse-indicator, .cm-gutterElement .is-collapsed .collapse-indicator, .cm-line:hover .cm-fold-indicator .collapse-indicator, .fold-gutter.is-collapsed, .fold-gutter:hover, .metadata-properties-heading:hover .collapse-indicator {\n    opacity: 1;\n	transition: opacity 0.15s ease-in-out;\n}\n\n.collapse-indicator, .fold-gutter\n{\n	opacity: 0;\n	transition: opacity 0.15s ease-in-out;\n}\n\n@media print \n{\n    html body > :not(.print) \n    {\n        display: unset !important;\n    }\n\n    .collapse-indicator\n    {\n        display: none !important;\n    }\n\n    .is-collapsed > element > .collapse-indicator\n    {\n        display: unset !important;\n    }\n}\n\n/*#region Misc Hiding */\n\n.mod-header .metadata-container\n{\n	display: none !important;\n}\n\n.canvas-empty-embed-action-list\n{\n	display: none !important;\n}\n\n/*#endregion */\n\n/*#region Transclusions */\n\n.markdown-embed .heading-collapse-indicator {\n    translate: -1em 0;\n}\n\n.markdown-embed.internal-embed.inline-embed .markdown-embed-content,\n.markdown-embed.internal-embed.inline-embed .markdown-embed-content .obsidian-document\n{\n	overflow: visible !important;\n}\n\n.markdown-embed-link\n{\n	display: none !important;\n}\n\n/*#endregion  */\n\n/*#region Canvas */\n\n.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed>.markdown-embed-content>.obsidian-document\n{\n	user-select: text !important;\n}\n\n.canvas-card-menu {\n	display: none;\n	cursor: default !important;\n\n}\n\n.canvas-controls {\n	display: none;\n	cursor: default !important;\n\n}\n\n.canvas-background\n{\n	pointer-events: visible !important;\n	cursor: grab !important;\n}\n\n.canvas-background:active\n{\n	cursor: grabbing !important;\n}\n\n.canvas-node-connection-point \n{\n	display: none;\n	cursor: default !important;\n\n}\n\n.canvas-node-content\n{\n	backface-visibility: visible !important;\n}\n\n.canvas-menu-container {\n	display: none;\n}\n\n.canvas-node-content-blocker\n{\n	cursor: pointer !important;\n}\n\n.canvas-wrapper\n{\n	position: relative;\n	cursor: default !important;\n}\n\n.canvas-node-resizer\n{\n	cursor: default !important;\n}\n\n.canvas-node-container\n{\n	cursor: default !important;\n}\n\n.canvas-node .obsidian-document.is-readable-line-width .markdown-preview-sizer {\n    max-width: 100%;\n    margin-left: unset;\n    margin-right: unset;\n}\n\n/*#endregion */\n\n/*#region Code Copy */\n\n/* Make code block copy button fade in and out */\n.markdown-rendered pre:not(:hover) > button.copy-code-button\n{\n	display: unset;\n	opacity: 0;\n}\n\n.markdown-rendered pre:hover > button.copy-code-button\n{\n	opacity: 1;\n}\n\n.markdown-rendered pre button.copy-code-button\n{\n	transition: opacity 0.2s ease-in-out, width 0.3s ease-in-out, background-color 0.2s ease-in-out;\n	text-overflow: clip;\n}\n\n.markdown-rendered pre > button.copy-code-button:hover\n{\n	background-color: var(--interactive-normal);\n}\n\n.markdown-rendered pre > button.copy-code-button:active\n{\n	background-color: var(--interactive-hover);\n	box-shadow: var(--input-shadow);\n	transition: none;\n}\n\n/*#endregion */\n\n/*#region Lists */\n\n#main-horizontal .is-collapsed .list-collapse-indicator svg.svg-icon, \n#main-horizontal .is-collapsed .collapse-indicator svg.svg-icon\n{\n	color: var(--collapse-icon-color-collapsed);\n}\n\n/*#endregion */\n";

// src/plugin/asset-loaders/obsidian-styles.ts
var _ObsidianStyles = class extends AssetLoader {
  constructor() {
    super("obsidian.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "" /* Default */, 10);
  }
  async load() {
    var _a3;
    this.data = "";
    let appSheet = document.styleSheets[1];
    const stylesheets = Array.from(document.styleSheets);
    for (const element of stylesheets) {
      if (element.href && ((_a3 = element.href) == null ? void 0 : _a3.includes("app.css"))) {
        appSheet = element;
        break;
      }
    }
    this.data = await AssetHandler.filterStyleRules(appSheet, _ObsidianStyles.obsidianStyleAlwaysFilter, _ObsidianStyles.obsidianStylesFilter, _ObsidianStyles.stylesKeep);
    this.data += obsidian_styles_txt_default;
    await super.load();
  }
};
var ObsidianStyles = _ObsidianStyles;
ObsidianStyles.obsidianStyleAlwaysFilter = [
  "cm-",
  "cm6",
  "workspace-",
  ":root",
  "CodeMirror",
  "xfa",
  "modal",
  "@-webkit",
  "leaf",
  "plugins",
  "-split",
  "empty-state",
  "search-result-",
  "mobile",
  "tablet",
  "phone",
  "linux",
  "macos",
  "mod-windows",
  "is-frameless"
];
ObsidianStyles.obsidianStylesFilter = [
  "ghost",
  "pdf",
  "annotation",
  "data-main-rotation",
  "spread",
  "load",
  "setting",
  "filter",
  "decorator",
  "node-insert",
  "app-container",
  "dictionary",
  "status",
  "windows",
  "titlebar",
  "source",
  "#main-horizontal",
  "menu",
  "message",
  "suggestion",
  "prompt",
  "tab",
  "HyperMD",
  "workspace",
  "publish",
  "backlink",
  "sync",
  "vault",
  "textLayer",
  "header",
  "rename",
  "edit",
  "progress",
  "native",
  "aria",
  "tooltip",
  "drop",
  "sidebar",
  "is-hidden-frameless",
  "obsidian-app",
  "show-view-header",
  "is-maximized",
  "is-translucent",
  "community",
  "Layer"
];
ObsidianStyles.stylesKeep = ["tree", "scrollbar", "input[type", "table", "markdown-rendered", "css-settings-manager", "inline-embed", "background", "token", "-plugin-"];

// src/plugin/asset-loaders/other-plugin-styles.ts
var OtherPluginStyles = class extends AssetLoader {
  constructor() {
    super("other-plugins.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "async" /* Async */, 9);
    this.lastEnabledPluginStyles = [];
  }
  static async getStyleForPlugin(pluginName) {
    var _a3;
    const path = AssetHandler.vaultPluginsPath.joinString(pluginName.replace("\n", ""), "styles.css");
    if (!path.exists)
      return "";
    return (_a3 = await path.readAsString()) != null ? _a3 : "";
  }
  async load() {
    if (this.lastEnabledPluginStyles == Settings.exportOptions.includePluginCss)
      return;
    this.data = "";
    for (let i = 0; i < Settings.exportOptions.includePluginCss.length; i++) {
      if (!Settings.exportOptions.includePluginCss[i] || Settings.exportOptions.includePluginCss[i] && !/\S/.test(Settings.exportOptions.includePluginCss[i]))
        continue;
      let pluginName = Settings.exportOptions.includePluginCss[i];
      const style = await OtherPluginStyles.getStyleForPlugin(pluginName);
      if (style) {
        this.data += await AssetHandler.filterStyleRules(style, ObsidianStyles.obsidianStyleAlwaysFilter, ObsidianStyles.obsidianStylesFilter, ObsidianStyles.stylesKeep);
        console.log("Loaded plugin style: " + Settings.exportOptions.includePluginCss[i] + " size: " + style.length);
      }
    }
    this.lastEnabledPluginStyles = Settings.exportOptions.includePluginCss;
    await super.load();
  }
};

// src/plugin/asset-loaders/theme-styles.ts
var _ThemeStyles = class extends AssetLoader {
  constructor() {
    super("theme.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "" /* Default */, 8);
    this.lastThemeName = "";
  }
  static async getThemeContent(themeName) {
    var _a3;
    if (themeName == "Default")
      return "/* Using default theme. */";
    const themePath = new Path(app.customCss.themes[themeName].dir).joinString("theme.css").absolute();
    console.log("Loading theme from path: " + themePath.path);
    if (!themePath.exists) {
      ExportLog.warning("Cannot find theme at path: \n\n" + themePath.path);
      return "";
    }
    const themeContent = (_a3 = await themePath.readAsString()) != null ? _a3 : "";
    return themeContent;
  }
  async load() {
    var _a3, _b3;
    let themeName = this.exportOptions.themeName;
    if (!themeName || themeName == "" || themeName == "obsidian-current-theme")
      themeName = (_b3 = (_a3 = app == null ? void 0 : app.vault) == null ? void 0 : _a3.config) == null ? void 0 : _b3.cssTheme;
    if (!themeName || themeName == "")
      themeName = "Default";
    if (themeName == this.lastThemeName && this.data != "") {
      console.log("Theme styles already loaded.", themeName);
      return;
    }
    const themeCSS = await _ThemeStyles.getThemeContent(themeName);
    this.data = await AssetHandler.filterStyleRules(themeCSS, _ThemeStyles.obsidianStylesFilter, [], _ThemeStyles.stylesKeep);
    this.lastThemeName = themeName;
    console.log("Theme styles loaded " + themeName);
    await super.load();
  }
};
var ThemeStyles = _ThemeStyles;
ThemeStyles.obsidianStylesFilter = ["cm-", "cm6", "CodeMirror", "pdf"];
ThemeStyles.stylesKeep = ["@media", "tree", "scrollbar", "input[type", "table", "markdown-rendered", "inline-embed"];

// src/plugin/asset-loaders/snippet-styles.ts
var SnippetStyles = class extends AssetLoader {
  constructor() {
    super("snippets.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "async" /* Async */, 20);
  }
  static getEnabledSnippets() {
    var _a3, _b3;
    return (_b3 = (_a3 = app.vault.config) == null ? void 0 : _a3.enabledCssSnippets) != null ? _b3 : [];
  }
  static async getStyleSnippetsContent() {
    var _a3;
    const snippetContents = [];
    const enabledSnippets = this.getEnabledSnippets();
    for (let i = 0; i < enabledSnippets.length; i++) {
      const path = new Path(`.obsidian/snippets/${enabledSnippets[i]}.css`).absoluted();
      if (path.exists)
        snippetContents.push((_a3 = await path.readAsString()) != null ? _a3 : "\n");
    }
    return snippetContents;
  }
  async load() {
    const snippetsList = await SnippetStyles.getStyleSnippetsContent();
    let snippets = "\n";
    for (let i = 0; i < snippetsList.length; i++) {
      snippets += snippetsList[i] + "\n";
    }
    snippets = snippets.replaceAll(/^publish /gm, "html body[class].publish ");
    this.data = snippets;
    await super.load();
  }
};

// src/plugin/asset-loaders/mathjax-styles.ts
var MathjaxStyles = class extends AssetLoader {
  constructor() {
    super("mathjax.css", "", null, "style" /* Style */, "inline" /* Inline */, true, "dynamic" /* Dynamic */);
    this.mathjaxStylesheet = void 0;
    this.lastMathjaxChanged = -1;
  }
  async load() {
    var _a3;
    if (this.mathjaxStylesheet == void 0)
      this.mathjaxStylesheet = Array.from(document.styleSheets).find((sheet) => sheet.ownerNode.id == "MJX-CHTML-styles");
    if (this.mathjaxStylesheet == void 0) {
      return;
    }
    const changed = (_a3 = this.mathjaxStylesheet) == null ? void 0 : _a3.ownerNode.getAttribute("data-change");
    if (changed != this.lastMathjaxChanged) {
      this.data = "";
      for (let i = 0; i < this.mathjaxStylesheet.cssRules.length; i++) {
        this.data += this.mathjaxStylesheet.cssRules[i].cssText + "\n";
      }
    } else {
      return;
    }
    this.lastMathjaxChanged = changed;
    await super.load();
  }
};

// src/plugin/asset-loaders/custom-head-content.ts
var CustomHeadContent = class extends AssetLoader {
  constructor() {
    super("custom-head-content.html", "", null, "html" /* HTML */, "auto" /* Auto */, false, "dynamic" /* Dynamic */, "" /* Default */, 1e11);
  }
  async load() {
    var _a3;
    const customHeadPath = new Path(this.exportOptions.customHeadOptions.sourcePath);
    if (customHeadPath.isEmpty) {
      this.data = "";
      return;
    }
    const validation = customHeadPath.validate({
      allowEmpty: false,
      allowFiles: true,
      allowAbsolute: true,
      allowRelative: true,
      requireExists: true
    });
    if (!validation.valid) {
      this.data = "";
      ExportLog.error(validation.error + customHeadPath.path);
      return;
    }
    this.source = app.vault.getFileByPath(customHeadPath.path);
    if (!this.source) {
      const stat = customHeadPath.stat;
      if (stat) {
        this.sourceStat = { ctime: stat.ctimeMs, mtime: stat.mtimeMs, size: stat.size };
      }
    }
    this.data = (_a3 = await customHeadPath.readAsString()) != null ? _a3 : "";
    await super.load();
  }
};

// src/plugin/asset-loaders/global-variable-styles.ts
var GlobalVariableStyles = class extends AssetLoader {
  constructor() {
    super("global-variable-styles.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "async" /* Async */, 6);
  }
  async load() {
    var _a3;
    const bodyStyle = ((_a3 = document.body.getAttribute("style")) != null ? _a3 : "").replaceAll('"', "'").replaceAll("; ", " !important;\n	");
    let lineWidth = this.exportOptions.documentOptions.documentWidth || "40em";
    let sidebarWidthRight = this.exportOptions.sidebarOptions.rightDefaultWidth;
    let sidebarWidthLeft = this.exportOptions.sidebarOptions.leftDefaultWidth;
    if (!isNaN(Number(lineWidth)))
      lineWidth += "px";
    if (!isNaN(Number(sidebarWidthRight)))
      sidebarWidthRight += "px";
    if (!isNaN(Number(sidebarWidthLeft)))
      sidebarWidthLeft += "px";
    const lineWidthCss = `min(${lineWidth}, calc(100vw - 2em))`;
    this.data = `
        :root body
        {
			--line-width: ${lineWidthCss};
			--line-width-adaptive: ${lineWidthCss};
			--file-line-width: ${lineWidthCss};
			--sidebar-width-right: min(${sidebarWidthRight}, 80vw);
			--sidebar-width-left: min(${sidebarWidthLeft}, 80vw);
        }

		body
        {
            ${bodyStyle}
        }
        `;
    await super.load();
  }
};

// src/assets/icon.png
var icon_default = __toBinary("iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAgVBMVEVHcEyff/+adPiZdPiZdPiZdfiXd/eZdPiUdPSYdPeZc/ebc/mYdPiYdPiZc/iZc/eZdPefb/+adPmXc/eXdPeZdfeZdfibc/eadPeZdfiYdPWYc/afb/eZc/eYdfeadPeZcviZdfWZdPeadPmYc/aXc/eXb/ecdfibdfmZdfiXd/creNEqAAAAK3RSTlMAEH+//88g3zDvgF/vcJ+PrxAwQGCPn0BgUHCQIM/PkFBQoK+wgCBQj29AobxPoQAAA1RJREFUeAG1mQeT4yAMheVFgeCUc2zHyfZe////26qZyyGLzZvD37S7Lbx9SEKCEER14phnnqbCB/5iVtE0zCP/UNMkLJiF5SQWTvgvq4nX5zUV5w9PKlA1rAQ2norhZywcxKCdVQXTP6Ejop63k60f6JOBeVWqvFIG+uRLti1TXgpPRDv+JPhi6a8MDPyFK7++GPD8w7ZkeQnux4CwKlheQvdPZi3bYuUluGTrQlUg/VMDFBLFYuvLcj0fclJyfd4fGhBOCWfgcYI2wLz0BJMzsFHfxAPdIgakuCF2PM5guUPDcMbj+HEDeK6eZ3LU8RhgFJwdYs+jXBDEJbZDuACPcpUxd1EiS6/pk2geUQA3PMqtkcC4QG2H4IxNcYA7HmNJn9ybZwiAsYqz8wttnZvRZR4kv4wE+H+FtV1m+MC9CayocwJXeEvDBJaE4iMgAJay8/RJBwhghbCTofYRCDKURgNLk3VagFgBtxwvvVGF4crol2jLGf5W5o19VGhWgIEvWr1Jld1MgT1aHc46Puq7n0kHjlxbdXCvdBrhFvp//6KNmqPDf1oImUF6qYKAW9hlJ+lOFTjcdZyaafu0WgMbiMUsXp8+FJMFarbZQtcCKa06nd4jg3HWBvSC0V338yf64ak7awyVGWRA8uLePXak6O4Y36QAWfaPAdykHj3lvXaRvU6FXKu9eD57Wbsvmpd9S0IXOKVBDIjjar9OFgqDFxPN8ZvkrE7oeQwnEo+cUEMXP5cZ2cXF45EHxoBPvKFVNzr7Gcxn5p3zX/qkAw2oeeeMTVbpoBnAex/v832SF8n80ZIBG9Rm/A9XXP3+qBAzAi3bSFCdirBVBcCtQHAHm7THLn52pelA1/ljQjIBj4E8SEnb8MCVAxBgJxYeiXCFW/tinoxQMZAAKXRGoWkL5x5/ytcTb8ZCRQKkEHQK40NdTuHBKsKEFlYQ9r8VMvzx4zz/wmIR6Gj6/COXwUCIQjLaMYMxABS8/BfaIUBhOHaHrgljpT8PytMRyGP6gVaeJWGIQswaUOWIKzyKAaDMEB4DiQEgBBCVTDNAFeC8MiMxxnnr+7peN+4ygoc1TjW/qV0EL+A4874J+EGHipy5qEe7wnTXlyy4iqbB903k6DrK8gEsMFeCpiVuYwAAAABJRU5ErkJggg==");

// src/plugin/asset-loaders/favicon.ts
var Favicon = class extends AssetLoader {
  constructor() {
    super("favicon.png", "", null, "media" /* Media */, "autohead" /* AutoHead */, false, "dynamic" /* Dynamic */);
  }
  async load() {
    if (this.exportOptions.faviconPath == "")
      this.data = Buffer.from(icon_default);
    const iconPath = new Path(this.exportOptions.faviconPath);
    if (iconPath.isEmpty)
      return;
    const icon = await iconPath.readAsBuffer();
    if (icon) {
      this.data = icon;
      this.targetPath.fullName = "favicon" + iconPath.extension;
      this.source = app.vault.getFileByPath(iconPath.path);
      if (!this.source) {
        const stat = iconPath.stat;
        if (stat) {
          this.sourceStat = { ctime: stat.ctimeMs, mtime: stat.mtimeMs, size: stat.size };
        }
      }
    }
    await super.load();
  }
  getHTML() {
    if (this.exportOptions.inlineMedia) {
      return `<link rel="icon" href="data:image/png;base64,${this.data.toString("base64")}">`;
    } else {
      return `<link rel="icon" href="${this.getAssetPath()}">`;
    }
  }
};

// src/plugin/asset-loaders/local-fetch-buffer.ts
var import_obsidian8 = require("obsidian");

// node_modules/file-type/browser.js
var import_readable_web_to_node_stream = __toESM(require_lib4(), 1);

// node_modules/file-type/core.js
var import_node_buffer3 = require("node:buffer");

// node_modules/token-types/lib/index.js
var ieee754 = __toESM(require_ieee754(), 1);
var import_node_buffer = require("node:buffer");
function dv(array) {
  return new DataView(array.buffer, array.byteOffset);
}
var UINT8 = {
  len: 1,
  get(array, offset) {
    return dv(array).getUint8(offset);
  },
  put(array, offset, value) {
    dv(array).setUint8(offset, value);
    return offset + 1;
  }
};
var UINT16_LE = {
  len: 2,
  get(array, offset) {
    return dv(array).getUint16(offset, true);
  },
  put(array, offset, value) {
    dv(array).setUint16(offset, value, true);
    return offset + 2;
  }
};
var UINT16_BE = {
  len: 2,
  get(array, offset) {
    return dv(array).getUint16(offset);
  },
  put(array, offset, value) {
    dv(array).setUint16(offset, value);
    return offset + 2;
  }
};
var UINT32_LE = {
  len: 4,
  get(array, offset) {
    return dv(array).getUint32(offset, true);
  },
  put(array, offset, value) {
    dv(array).setUint32(offset, value, true);
    return offset + 4;
  }
};
var UINT32_BE = {
  len: 4,
  get(array, offset) {
    return dv(array).getUint32(offset);
  },
  put(array, offset, value) {
    dv(array).setUint32(offset, value);
    return offset + 4;
  }
};
var INT32_BE = {
  len: 4,
  get(array, offset) {
    return dv(array).getInt32(offset);
  },
  put(array, offset, value) {
    dv(array).setInt32(offset, value);
    return offset + 4;
  }
};
var UINT64_LE = {
  len: 8,
  get(array, offset) {
    return dv(array).getBigUint64(offset, true);
  },
  put(array, offset, value) {
    dv(array).setBigUint64(offset, value, true);
    return offset + 8;
  }
};
var StringType = class {
  constructor(len, encoding) {
    this.len = len;
    this.encoding = encoding;
  }
  get(uint8Array, offset) {
    return import_node_buffer.Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);
  }
};
var AnsiStringType = class {
  constructor(len) {
    this.len = len;
  }
  static decode(buffer, offset, until) {
    let str = "";
    for (let i = offset; i < until; ++i) {
      str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));
    }
    return str;
  }
  static inRange(a, min, max) {
    return min <= a && a <= max;
  }
  static codePointToString(cp) {
    if (cp <= 65535) {
      return String.fromCharCode(cp);
    } else {
      cp -= 65536;
      return String.fromCharCode((cp >> 10) + 55296, (cp & 1023) + 56320);
    }
  }
  static singleByteDecoder(bite) {
    if (AnsiStringType.inRange(bite, 0, 127)) {
      return bite;
    }
    const codePoint = AnsiStringType.windows1252[bite - 128];
    if (codePoint === null) {
      throw Error("invaliding encoding");
    }
    return codePoint;
  }
  get(buffer, offset = 0) {
    return AnsiStringType.decode(buffer, offset, offset + this.len);
  }
};
AnsiStringType.windows1252 = [
  8364,
  129,
  8218,
  402,
  8222,
  8230,
  8224,
  8225,
  710,
  8240,
  352,
  8249,
  338,
  141,
  381,
  143,
  144,
  8216,
  8217,
  8220,
  8221,
  8226,
  8211,
  8212,
  732,
  8482,
  353,
  8250,
  339,
  157,
  382,
  376,
  160,
  161,
  162,
  163,
  164,
  165,
  166,
  167,
  168,
  169,
  170,
  171,
  172,
  173,
  174,
  175,
  176,
  177,
  178,
  179,
  180,
  181,
  182,
  183,
  184,
  185,
  186,
  187,
  188,
  189,
  190,
  191,
  192,
  193,
  194,
  195,
  196,
  197,
  198,
  199,
  200,
  201,
  202,
  203,
  204,
  205,
  206,
  207,
  208,
  209,
  210,
  211,
  212,
  213,
  214,
  215,
  216,
  217,
  218,
  219,
  220,
  221,
  222,
  223,
  224,
  225,
  226,
  227,
  228,
  229,
  230,
  231,
  232,
  233,
  234,
  235,
  236,
  237,
  238,
  239,
  240,
  241,
  242,
  243,
  244,
  245,
  246,
  247,
  248,
  249,
  250,
  251,
  252,
  253,
  254,
  255
];

// node_modules/peek-readable/lib/EndOfFileStream.js
var defaultMessages = "End-Of-Stream";
var EndOfStreamError = class extends Error {
  constructor() {
    super(defaultMessages);
  }
};

// node_modules/peek-readable/lib/Deferred.js
var Deferred = class {
  constructor() {
    this.resolve = () => null;
    this.reject = () => null;
    this.promise = new Promise((resolve, reject) => {
      this.reject = reject;
      this.resolve = resolve;
    });
  }
};

// node_modules/peek-readable/lib/StreamReader.js
var maxStreamReadSize = 1 * 1024 * 1024;
var StreamReader = class {
  constructor(s) {
    this.s = s;
    this.deferred = null;
    this.endOfStream = false;
    this.peekQueue = [];
    if (!s.read || !s.once) {
      throw new Error("Expected an instance of stream.Readable");
    }
    this.s.once("end", () => this.reject(new EndOfStreamError()));
    this.s.once("error", (err) => this.reject(err));
    this.s.once("close", () => this.reject(new Error("Stream closed")));
  }
  async peek(uint8Array, offset, length) {
    const bytesRead = await this.read(uint8Array, offset, length);
    this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead));
    return bytesRead;
  }
  async read(buffer, offset, length) {
    if (length === 0) {
      return 0;
    }
    if (this.peekQueue.length === 0 && this.endOfStream) {
      throw new EndOfStreamError();
    }
    let remaining = length;
    let bytesRead = 0;
    while (this.peekQueue.length > 0 && remaining > 0) {
      const peekData = this.peekQueue.pop();
      if (!peekData)
        throw new Error("peekData should be defined");
      const lenCopy = Math.min(peekData.length, remaining);
      buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);
      bytesRead += lenCopy;
      remaining -= lenCopy;
      if (lenCopy < peekData.length) {
        this.peekQueue.push(peekData.subarray(lenCopy));
      }
    }
    while (remaining > 0 && !this.endOfStream) {
      const reqLen = Math.min(remaining, maxStreamReadSize);
      const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);
      bytesRead += chunkLen;
      if (chunkLen < reqLen)
        break;
      remaining -= chunkLen;
    }
    return bytesRead;
  }
  async readFromStream(buffer, offset, length) {
    const readBuffer = this.s.read(length);
    if (readBuffer) {
      buffer.set(readBuffer, offset);
      return readBuffer.length;
    } else {
      const request = {
        buffer,
        offset,
        length,
        deferred: new Deferred()
      };
      this.deferred = request.deferred;
      this.s.once("readable", () => {
        this.readDeferred(request);
      });
      return request.deferred.promise;
    }
  }
  readDeferred(request) {
    const readBuffer = this.s.read(request.length);
    if (readBuffer) {
      request.buffer.set(readBuffer, request.offset);
      request.deferred.resolve(readBuffer.length);
      this.deferred = null;
    } else {
      this.s.once("readable", () => {
        this.readDeferred(request);
      });
    }
  }
  reject(err) {
    this.endOfStream = true;
    if (this.deferred) {
      this.deferred.reject(err);
      this.deferred = null;
    }
  }
};

// node_modules/strtok3/lib/AbstractTokenizer.js
var import_node_buffer2 = require("node:buffer");
var AbstractTokenizer = class {
  constructor(fileInfo) {
    this.position = 0;
    this.numBuffer = new Uint8Array(8);
    this.fileInfo = fileInfo ? fileInfo : {};
  }
  async readToken(token, position = this.position) {
    const uint8Array = import_node_buffer2.Buffer.alloc(token.len);
    const len = await this.readBuffer(uint8Array, { position });
    if (len < token.len)
      throw new EndOfStreamError();
    return token.get(uint8Array, 0);
  }
  async peekToken(token, position = this.position) {
    const uint8Array = import_node_buffer2.Buffer.alloc(token.len);
    const len = await this.peekBuffer(uint8Array, { position });
    if (len < token.len)
      throw new EndOfStreamError();
    return token.get(uint8Array, 0);
  }
  async readNumber(token) {
    const len = await this.readBuffer(this.numBuffer, { length: token.len });
    if (len < token.len)
      throw new EndOfStreamError();
    return token.get(this.numBuffer, 0);
  }
  async peekNumber(token) {
    const len = await this.peekBuffer(this.numBuffer, { length: token.len });
    if (len < token.len)
      throw new EndOfStreamError();
    return token.get(this.numBuffer, 0);
  }
  async ignore(length) {
    if (this.fileInfo.size !== void 0) {
      const bytesLeft = this.fileInfo.size - this.position;
      if (length > bytesLeft) {
        this.position += bytesLeft;
        return bytesLeft;
      }
    }
    this.position += length;
    return length;
  }
  async close() {
  }
  normalizeOptions(uint8Array, options) {
    if (options && options.position !== void 0 && options.position < this.position) {
      throw new Error("`options.position` must be equal or greater than `tokenizer.position`");
    }
    if (options) {
      return {
        mayBeLess: options.mayBeLess === true,
        offset: options.offset ? options.offset : 0,
        length: options.length ? options.length : uint8Array.length - (options.offset ? options.offset : 0),
        position: options.position ? options.position : this.position
      };
    }
    return {
      mayBeLess: false,
      offset: 0,
      length: uint8Array.length,
      position: this.position
    };
  }
};

// node_modules/strtok3/lib/ReadStreamTokenizer.js
var maxBufferSize = 256e3;
var ReadStreamTokenizer = class extends AbstractTokenizer {
  constructor(stream, fileInfo) {
    super(fileInfo);
    this.streamReader = new StreamReader(stream);
  }
  async getFileInfo() {
    return this.fileInfo;
  }
  async readBuffer(uint8Array, options) {
    const normOptions = this.normalizeOptions(uint8Array, options);
    const skipBytes = normOptions.position - this.position;
    if (skipBytes > 0) {
      await this.ignore(skipBytes);
      return this.readBuffer(uint8Array, options);
    } else if (skipBytes < 0) {
      throw new Error("`options.position` must be equal or greater than `tokenizer.position`");
    }
    if (normOptions.length === 0) {
      return 0;
    }
    const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);
    this.position += bytesRead;
    if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {
      throw new EndOfStreamError();
    }
    return bytesRead;
  }
  async peekBuffer(uint8Array, options) {
    const normOptions = this.normalizeOptions(uint8Array, options);
    let bytesRead = 0;
    if (normOptions.position) {
      const skipBytes = normOptions.position - this.position;
      if (skipBytes > 0) {
        const skipBuffer = new Uint8Array(normOptions.length + skipBytes);
        bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });
        uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);
        return bytesRead - skipBytes;
      } else if (skipBytes < 0) {
        throw new Error("Cannot peek from a negative offset in a stream");
      }
    }
    if (normOptions.length > 0) {
      try {
        bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);
      } catch (err) {
        if (options && options.mayBeLess && err instanceof EndOfStreamError) {
          return 0;
        }
        throw err;
      }
      if (!normOptions.mayBeLess && bytesRead < normOptions.length) {
        throw new EndOfStreamError();
      }
    }
    return bytesRead;
  }
  async ignore(length) {
    const bufSize = Math.min(maxBufferSize, length);
    const buf = new Uint8Array(bufSize);
    let totBytesRead = 0;
    while (totBytesRead < length) {
      const remaining = length - totBytesRead;
      const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });
      if (bytesRead < 0) {
        return bytesRead;
      }
      totBytesRead += bytesRead;
    }
    return totBytesRead;
  }
};

// node_modules/strtok3/lib/BufferTokenizer.js
var BufferTokenizer = class extends AbstractTokenizer {
  constructor(uint8Array, fileInfo) {
    super(fileInfo);
    this.uint8Array = uint8Array;
    this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;
  }
  async readBuffer(uint8Array, options) {
    if (options && options.position) {
      if (options.position < this.position) {
        throw new Error("`options.position` must be equal or greater than `tokenizer.position`");
      }
      this.position = options.position;
    }
    const bytesRead = await this.peekBuffer(uint8Array, options);
    this.position += bytesRead;
    return bytesRead;
  }
  async peekBuffer(uint8Array, options) {
    const normOptions = this.normalizeOptions(uint8Array, options);
    const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);
    if (!normOptions.mayBeLess && bytes2read < normOptions.length) {
      throw new EndOfStreamError();
    } else {
      uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);
      return bytes2read;
    }
  }
  async close() {
  }
};

// node_modules/strtok3/lib/core.js
function fromStream(stream, fileInfo) {
  fileInfo = fileInfo ? fileInfo : {};
  return new ReadStreamTokenizer(stream, fileInfo);
}
function fromBuffer(uint8Array, fileInfo) {
  return new BufferTokenizer(uint8Array, fileInfo);
}

// node_modules/file-type/util.js
function stringToBytes(string) {
  return [...string].map((character) => character.charCodeAt(0));
}
function tarHeaderChecksumMatches(buffer, offset = 0) {
  const readSum = Number.parseInt(buffer.toString("utf8", 148, 154).replace(/\0.*$/, "").trim(), 8);
  if (Number.isNaN(readSum)) {
    return false;
  }
  let sum = 8 * 32;
  for (let index = offset; index < offset + 148; index++) {
    sum += buffer[index];
  }
  for (let index = offset + 156; index < offset + 512; index++) {
    sum += buffer[index];
  }
  return readSum === sum;
}
var uint32SyncSafeToken = {
  get: (buffer, offset) => buffer[offset + 3] & 127 | buffer[offset + 2] << 7 | buffer[offset + 1] << 14 | buffer[offset] << 21,
  len: 4
};

// node_modules/file-type/supported.js
var extensions = [
  "jpg",
  "png",
  "apng",
  "gif",
  "webp",
  "flif",
  "xcf",
  "cr2",
  "cr3",
  "orf",
  "arw",
  "dng",
  "nef",
  "rw2",
  "raf",
  "tif",
  "bmp",
  "icns",
  "jxr",
  "psd",
  "indd",
  "zip",
  "tar",
  "rar",
  "gz",
  "bz2",
  "7z",
  "dmg",
  "mp4",
  "mid",
  "mkv",
  "webm",
  "mov",
  "avi",
  "mpg",
  "mp2",
  "mp3",
  "m4a",
  "oga",
  "ogg",
  "ogv",
  "opus",
  "flac",
  "wav",
  "spx",
  "amr",
  "pdf",
  "epub",
  "elf",
  "macho",
  "exe",
  "swf",
  "rtf",
  "wasm",
  "woff",
  "woff2",
  "eot",
  "ttf",
  "otf",
  "ico",
  "flv",
  "ps",
  "xz",
  "sqlite",
  "nes",
  "crx",
  "xpi",
  "cab",
  "deb",
  "ar",
  "rpm",
  "Z",
  "lz",
  "cfb",
  "mxf",
  "mts",
  "blend",
  "bpg",
  "docx",
  "pptx",
  "xlsx",
  "3gp",
  "3g2",
  "j2c",
  "jp2",
  "jpm",
  "jpx",
  "mj2",
  "aif",
  "qcp",
  "odt",
  "ods",
  "odp",
  "xml",
  "mobi",
  "heic",
  "cur",
  "ktx",
  "ape",
  "wv",
  "dcm",
  "ics",
  "glb",
  "pcap",
  "dsf",
  "lnk",
  "alias",
  "voc",
  "ac3",
  "m4v",
  "m4p",
  "m4b",
  "f4v",
  "f4p",
  "f4b",
  "f4a",
  "mie",
  "asf",
  "ogm",
  "ogx",
  "mpc",
  "arrow",
  "shp",
  "aac",
  "mp1",
  "it",
  "s3m",
  "xm",
  "ai",
  "skp",
  "avif",
  "eps",
  "lzh",
  "pgp",
  "asar",
  "stl",
  "chm",
  "3mf",
  "zst",
  "jxl",
  "vcf",
  "jls",
  "pst",
  "dwg",
  "parquet",
  "class",
  "arj",
  "cpio",
  "ace",
  "avro",
  "icc",
  "fbx"
];
var mimeTypes = [
  "image/jpeg",
  "image/png",
  "image/gif",
  "image/webp",
  "image/flif",
  "image/x-xcf",
  "image/x-canon-cr2",
  "image/x-canon-cr3",
  "image/tiff",
  "image/bmp",
  "image/vnd.ms-photo",
  "image/vnd.adobe.photoshop",
  "application/x-indesign",
  "application/epub+zip",
  "application/x-xpinstall",
  "application/vnd.oasis.opendocument.text",
  "application/vnd.oasis.opendocument.spreadsheet",
  "application/vnd.oasis.opendocument.presentation",
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  "application/zip",
  "application/x-tar",
  "application/x-rar-compressed",
  "application/gzip",
  "application/x-bzip2",
  "application/x-7z-compressed",
  "application/x-apple-diskimage",
  "application/x-apache-arrow",
  "video/mp4",
  "audio/midi",
  "video/x-matroska",
  "video/webm",
  "video/quicktime",
  "video/vnd.avi",
  "audio/wav",
  "audio/qcelp",
  "audio/x-ms-asf",
  "video/x-ms-asf",
  "application/vnd.ms-asf",
  "video/mpeg",
  "video/3gpp",
  "audio/mpeg",
  "audio/mp4",
  "audio/opus",
  "video/ogg",
  "audio/ogg",
  "application/ogg",
  "audio/x-flac",
  "audio/ape",
  "audio/wavpack",
  "audio/amr",
  "application/pdf",
  "application/x-elf",
  "application/x-mach-binary",
  "application/x-msdownload",
  "application/x-shockwave-flash",
  "application/rtf",
  "application/wasm",
  "font/woff",
  "font/woff2",
  "application/vnd.ms-fontobject",
  "font/ttf",
  "font/otf",
  "image/x-icon",
  "video/x-flv",
  "application/postscript",
  "application/eps",
  "application/x-xz",
  "application/x-sqlite3",
  "application/x-nintendo-nes-rom",
  "application/x-google-chrome-extension",
  "application/vnd.ms-cab-compressed",
  "application/x-deb",
  "application/x-unix-archive",
  "application/x-rpm",
  "application/x-compress",
  "application/x-lzip",
  "application/x-cfb",
  "application/x-mie",
  "application/mxf",
  "video/mp2t",
  "application/x-blender",
  "image/bpg",
  "image/j2c",
  "image/jp2",
  "image/jpx",
  "image/jpm",
  "image/mj2",
  "audio/aiff",
  "application/xml",
  "application/x-mobipocket-ebook",
  "image/heif",
  "image/heif-sequence",
  "image/heic",
  "image/heic-sequence",
  "image/icns",
  "image/ktx",
  "application/dicom",
  "audio/x-musepack",
  "text/calendar",
  "text/vcard",
  "model/gltf-binary",
  "application/vnd.tcpdump.pcap",
  "audio/x-dsf",
  "application/x.ms.shortcut",
  "application/x.apple.alias",
  "audio/x-voc",
  "audio/vnd.dolby.dd-raw",
  "audio/x-m4a",
  "image/apng",
  "image/x-olympus-orf",
  "image/x-sony-arw",
  "image/x-adobe-dng",
  "image/x-nikon-nef",
  "image/x-panasonic-rw2",
  "image/x-fujifilm-raf",
  "video/x-m4v",
  "video/3gpp2",
  "application/x-esri-shape",
  "audio/aac",
  "audio/x-it",
  "audio/x-s3m",
  "audio/x-xm",
  "video/MP1S",
  "video/MP2P",
  "application/vnd.sketchup.skp",
  "image/avif",
  "application/x-lzh-compressed",
  "application/pgp-encrypted",
  "application/x-asar",
  "model/stl",
  "application/vnd.ms-htmlhelp",
  "model/3mf",
  "image/jxl",
  "application/zstd",
  "image/jls",
  "application/vnd.ms-outlook",
  "image/vnd.dwg",
  "application/x-parquet",
  "application/java-vm",
  "application/x-arj",
  "application/x-cpio",
  "application/x-ace-compressed",
  "application/avro",
  "application/vnd.iccprofile",
  "application/x.autodesk.fbx"
];

// node_modules/file-type/core.js
var minimumBytes = 4100;
async function fileTypeFromBuffer(input) {
  return new FileTypeParser().fromBuffer(input);
}
function _check(buffer, headers, options) {
  options = {
    offset: 0,
    ...options
  };
  for (const [index, header] of headers.entries()) {
    if (options.mask) {
      if (header !== (options.mask[index] & buffer[index + options.offset])) {
        return false;
      }
    } else if (header !== buffer[index + options.offset]) {
      return false;
    }
  }
  return true;
}
var FileTypeParser = class {
  constructor(options) {
    this.detectors = options == null ? void 0 : options.customDetectors;
    this.fromTokenizer = this.fromTokenizer.bind(this);
    this.fromBuffer = this.fromBuffer.bind(this);
    this.parse = this.parse.bind(this);
  }
  async fromTokenizer(tokenizer) {
    const initialPosition = tokenizer.position;
    for (const detector of this.detectors || []) {
      const fileType = await detector(tokenizer);
      if (fileType) {
        return fileType;
      }
      if (initialPosition !== tokenizer.position) {
        return void 0;
      }
    }
    return this.parse(tokenizer);
  }
  async fromBuffer(input) {
    if (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) {
      throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`Buffer\` or \`ArrayBuffer\`, got \`${typeof input}\``);
    }
    const buffer = input instanceof Uint8Array ? input : new Uint8Array(input);
    if (!((buffer == null ? void 0 : buffer.length) > 1)) {
      return;
    }
    return this.fromTokenizer(fromBuffer(buffer));
  }
  async fromBlob(blob) {
    const buffer = await blob.arrayBuffer();
    return this.fromBuffer(new Uint8Array(buffer));
  }
  async fromStream(stream) {
    const tokenizer = await fromStream(stream);
    try {
      return await this.fromTokenizer(tokenizer);
    } finally {
      await tokenizer.close();
    }
  }
  async toDetectionStream(readableStream, options = {}) {
    const { default: stream } = await import("node:stream");
    const { sampleSize = minimumBytes } = options;
    return new Promise((resolve, reject) => {
      readableStream.on("error", reject);
      readableStream.once("readable", () => {
        (async () => {
          var _a3, _b3;
          try {
            const pass = new stream.PassThrough();
            const outputStream = stream.pipeline ? stream.pipeline(readableStream, pass, () => {
            }) : readableStream.pipe(pass);
            const chunk = (_b3 = (_a3 = readableStream.read(sampleSize)) != null ? _a3 : readableStream.read()) != null ? _b3 : import_node_buffer3.Buffer.alloc(0);
            try {
              pass.fileType = await this.fromBuffer(chunk);
            } catch (error) {
              if (error instanceof EndOfStreamError) {
                pass.fileType = void 0;
              } else {
                reject(error);
              }
            }
            resolve(outputStream);
          } catch (error) {
            reject(error);
          }
        })();
      });
    });
  }
  check(header, options) {
    return _check(this.buffer, header, options);
  }
  checkString(header, options) {
    return this.check(stringToBytes(header), options);
  }
  async parse(tokenizer) {
    this.buffer = import_node_buffer3.Buffer.alloc(minimumBytes);
    if (tokenizer.fileInfo.size === void 0) {
      tokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;
    }
    this.tokenizer = tokenizer;
    await tokenizer.peekBuffer(this.buffer, { length: 12, mayBeLess: true });
    if (this.check([66, 77])) {
      return {
        ext: "bmp",
        mime: "image/bmp"
      };
    }
    if (this.check([11, 119])) {
      return {
        ext: "ac3",
        mime: "audio/vnd.dolby.dd-raw"
      };
    }
    if (this.check([120, 1])) {
      return {
        ext: "dmg",
        mime: "application/x-apple-diskimage"
      };
    }
    if (this.check([77, 90])) {
      return {
        ext: "exe",
        mime: "application/x-msdownload"
      };
    }
    if (this.check([37, 33])) {
      await tokenizer.peekBuffer(this.buffer, { length: 24, mayBeLess: true });
      if (this.checkString("PS-Adobe-", { offset: 2 }) && this.checkString(" EPSF-", { offset: 14 })) {
        return {
          ext: "eps",
          mime: "application/eps"
        };
      }
      return {
        ext: "ps",
        mime: "application/postscript"
      };
    }
    if (this.check([31, 160]) || this.check([31, 157])) {
      return {
        ext: "Z",
        mime: "application/x-compress"
      };
    }
    if (this.check([199, 113])) {
      return {
        ext: "cpio",
        mime: "application/x-cpio"
      };
    }
    if (this.check([96, 234])) {
      return {
        ext: "arj",
        mime: "application/x-arj"
      };
    }
    if (this.check([239, 187, 191])) {
      this.tokenizer.ignore(3);
      return this.parse(tokenizer);
    }
    if (this.check([71, 73, 70])) {
      return {
        ext: "gif",
        mime: "image/gif"
      };
    }
    if (this.check([73, 73, 188])) {
      return {
        ext: "jxr",
        mime: "image/vnd.ms-photo"
      };
    }
    if (this.check([31, 139, 8])) {
      return {
        ext: "gz",
        mime: "application/gzip"
      };
    }
    if (this.check([66, 90, 104])) {
      return {
        ext: "bz2",
        mime: "application/x-bzip2"
      };
    }
    if (this.checkString("ID3")) {
      await tokenizer.ignore(6);
      const id3HeaderLength = await tokenizer.readToken(uint32SyncSafeToken);
      if (tokenizer.position + id3HeaderLength > tokenizer.fileInfo.size) {
        return {
          ext: "mp3",
          mime: "audio/mpeg"
        };
      }
      await tokenizer.ignore(id3HeaderLength);
      return this.fromTokenizer(tokenizer);
    }
    if (this.checkString("MP+")) {
      return {
        ext: "mpc",
        mime: "audio/x-musepack"
      };
    }
    if ((this.buffer[0] === 67 || this.buffer[0] === 70) && this.check([87, 83], { offset: 1 })) {
      return {
        ext: "swf",
        mime: "application/x-shockwave-flash"
      };
    }
    if (this.check([255, 216, 255])) {
      if (this.check([247], { offset: 3 })) {
        return {
          ext: "jls",
          mime: "image/jls"
        };
      }
      return {
        ext: "jpg",
        mime: "image/jpeg"
      };
    }
    if (this.check([79, 98, 106, 1])) {
      return {
        ext: "avro",
        mime: "application/avro"
      };
    }
    if (this.checkString("FLIF")) {
      return {
        ext: "flif",
        mime: "image/flif"
      };
    }
    if (this.checkString("8BPS")) {
      return {
        ext: "psd",
        mime: "image/vnd.adobe.photoshop"
      };
    }
    if (this.checkString("WEBP", { offset: 8 })) {
      return {
        ext: "webp",
        mime: "image/webp"
      };
    }
    if (this.checkString("MPCK")) {
      return {
        ext: "mpc",
        mime: "audio/x-musepack"
      };
    }
    if (this.checkString("FORM")) {
      return {
        ext: "aif",
        mime: "audio/aiff"
      };
    }
    if (this.checkString("icns", { offset: 0 })) {
      return {
        ext: "icns",
        mime: "image/icns"
      };
    }
    if (this.check([80, 75, 3, 4])) {
      try {
        while (tokenizer.position + 30 < tokenizer.fileInfo.size) {
          await tokenizer.readBuffer(this.buffer, { length: 30 });
          const zipHeader = {
            compressedSize: this.buffer.readUInt32LE(18),
            uncompressedSize: this.buffer.readUInt32LE(22),
            filenameLength: this.buffer.readUInt16LE(26),
            extraFieldLength: this.buffer.readUInt16LE(28)
          };
          zipHeader.filename = await tokenizer.readToken(new StringType(zipHeader.filenameLength, "utf-8"));
          await tokenizer.ignore(zipHeader.extraFieldLength);
          if (zipHeader.filename === "META-INF/mozilla.rsa") {
            return {
              ext: "xpi",
              mime: "application/x-xpinstall"
            };
          }
          if (zipHeader.filename.endsWith(".rels") || zipHeader.filename.endsWith(".xml")) {
            const type = zipHeader.filename.split("/")[0];
            switch (type) {
              case "_rels":
                break;
              case "word":
                return {
                  ext: "docx",
                  mime: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
                };
              case "ppt":
                return {
                  ext: "pptx",
                  mime: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
                };
              case "xl":
                return {
                  ext: "xlsx",
                  mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                };
              default:
                break;
            }
          }
          if (zipHeader.filename.startsWith("xl/")) {
            return {
              ext: "xlsx",
              mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            };
          }
          if (zipHeader.filename.startsWith("3D/") && zipHeader.filename.endsWith(".model")) {
            return {
              ext: "3mf",
              mime: "model/3mf"
            };
          }
          if (zipHeader.filename === "mimetype" && zipHeader.compressedSize === zipHeader.uncompressedSize) {
            let mimeType = await tokenizer.readToken(new StringType(zipHeader.compressedSize, "utf-8"));
            mimeType = mimeType.trim();
            switch (mimeType) {
              case "application/epub+zip":
                return {
                  ext: "epub",
                  mime: "application/epub+zip"
                };
              case "application/vnd.oasis.opendocument.text":
                return {
                  ext: "odt",
                  mime: "application/vnd.oasis.opendocument.text"
                };
              case "application/vnd.oasis.opendocument.spreadsheet":
                return {
                  ext: "ods",
                  mime: "application/vnd.oasis.opendocument.spreadsheet"
                };
              case "application/vnd.oasis.opendocument.presentation":
                return {
                  ext: "odp",
                  mime: "application/vnd.oasis.opendocument.presentation"
                };
              default:
            }
          }
          if (zipHeader.compressedSize === 0) {
            let nextHeaderIndex = -1;
            while (nextHeaderIndex < 0 && tokenizer.position < tokenizer.fileInfo.size) {
              await tokenizer.peekBuffer(this.buffer, { mayBeLess: true });
              nextHeaderIndex = this.buffer.indexOf("504B0304", 0, "hex");
              await tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : this.buffer.length);
            }
          } else {
            await tokenizer.ignore(zipHeader.compressedSize);
          }
        }
      } catch (error) {
        if (!(error instanceof EndOfStreamError)) {
          throw error;
        }
      }
      return {
        ext: "zip",
        mime: "application/zip"
      };
    }
    if (this.checkString("OggS")) {
      await tokenizer.ignore(28);
      const type = import_node_buffer3.Buffer.alloc(8);
      await tokenizer.readBuffer(type);
      if (_check(type, [79, 112, 117, 115, 72, 101, 97, 100])) {
        return {
          ext: "opus",
          mime: "audio/opus"
        };
      }
      if (_check(type, [128, 116, 104, 101, 111, 114, 97])) {
        return {
          ext: "ogv",
          mime: "video/ogg"
        };
      }
      if (_check(type, [1, 118, 105, 100, 101, 111, 0])) {
        return {
          ext: "ogm",
          mime: "video/ogg"
        };
      }
      if (_check(type, [127, 70, 76, 65, 67])) {
        return {
          ext: "oga",
          mime: "audio/ogg"
        };
      }
      if (_check(type, [83, 112, 101, 101, 120, 32, 32])) {
        return {
          ext: "spx",
          mime: "audio/ogg"
        };
      }
      if (_check(type, [1, 118, 111, 114, 98, 105, 115])) {
        return {
          ext: "ogg",
          mime: "audio/ogg"
        };
      }
      return {
        ext: "ogx",
        mime: "application/ogg"
      };
    }
    if (this.check([80, 75]) && (this.buffer[2] === 3 || this.buffer[2] === 5 || this.buffer[2] === 7) && (this.buffer[3] === 4 || this.buffer[3] === 6 || this.buffer[3] === 8)) {
      return {
        ext: "zip",
        mime: "application/zip"
      };
    }
    if (this.checkString("ftyp", { offset: 4 }) && (this.buffer[8] & 96) !== 0) {
      const brandMajor = this.buffer.toString("binary", 8, 12).replace("\0", " ").trim();
      switch (brandMajor) {
        case "avif":
        case "avis":
          return { ext: "avif", mime: "image/avif" };
        case "mif1":
          return { ext: "heic", mime: "image/heif" };
        case "msf1":
          return { ext: "heic", mime: "image/heif-sequence" };
        case "heic":
        case "heix":
          return { ext: "heic", mime: "image/heic" };
        case "hevc":
        case "hevx":
          return { ext: "heic", mime: "image/heic-sequence" };
        case "qt":
          return { ext: "mov", mime: "video/quicktime" };
        case "M4V":
        case "M4VH":
        case "M4VP":
          return { ext: "m4v", mime: "video/x-m4v" };
        case "M4P":
          return { ext: "m4p", mime: "video/mp4" };
        case "M4B":
          return { ext: "m4b", mime: "audio/mp4" };
        case "M4A":
          return { ext: "m4a", mime: "audio/x-m4a" };
        case "F4V":
          return { ext: "f4v", mime: "video/mp4" };
        case "F4P":
          return { ext: "f4p", mime: "video/mp4" };
        case "F4A":
          return { ext: "f4a", mime: "audio/mp4" };
        case "F4B":
          return { ext: "f4b", mime: "audio/mp4" };
        case "crx":
          return { ext: "cr3", mime: "image/x-canon-cr3" };
        default:
          if (brandMajor.startsWith("3g")) {
            if (brandMajor.startsWith("3g2")) {
              return { ext: "3g2", mime: "video/3gpp2" };
            }
            return { ext: "3gp", mime: "video/3gpp" };
          }
          return { ext: "mp4", mime: "video/mp4" };
      }
    }
    if (this.checkString("MThd")) {
      return {
        ext: "mid",
        mime: "audio/midi"
      };
    }
    if (this.checkString("wOFF") && (this.check([0, 1, 0, 0], { offset: 4 }) || this.checkString("OTTO", { offset: 4 }))) {
      return {
        ext: "woff",
        mime: "font/woff"
      };
    }
    if (this.checkString("wOF2") && (this.check([0, 1, 0, 0], { offset: 4 }) || this.checkString("OTTO", { offset: 4 }))) {
      return {
        ext: "woff2",
        mime: "font/woff2"
      };
    }
    if (this.check([212, 195, 178, 161]) || this.check([161, 178, 195, 212])) {
      return {
        ext: "pcap",
        mime: "application/vnd.tcpdump.pcap"
      };
    }
    if (this.checkString("DSD ")) {
      return {
        ext: "dsf",
        mime: "audio/x-dsf"
      };
    }
    if (this.checkString("LZIP")) {
      return {
        ext: "lz",
        mime: "application/x-lzip"
      };
    }
    if (this.checkString("fLaC")) {
      return {
        ext: "flac",
        mime: "audio/x-flac"
      };
    }
    if (this.check([66, 80, 71, 251])) {
      return {
        ext: "bpg",
        mime: "image/bpg"
      };
    }
    if (this.checkString("wvpk")) {
      return {
        ext: "wv",
        mime: "audio/wavpack"
      };
    }
    if (this.checkString("%PDF")) {
      try {
        await tokenizer.ignore(1350);
        const maxBufferSize2 = 10 * 1024 * 1024;
        const buffer = import_node_buffer3.Buffer.alloc(Math.min(maxBufferSize2, tokenizer.fileInfo.size));
        await tokenizer.readBuffer(buffer, { mayBeLess: true });
        if (buffer.includes(import_node_buffer3.Buffer.from("AIPrivateData"))) {
          return {
            ext: "ai",
            mime: "application/postscript"
          };
        }
      } catch (error) {
        if (!(error instanceof EndOfStreamError)) {
          throw error;
        }
      }
      return {
        ext: "pdf",
        mime: "application/pdf"
      };
    }
    if (this.check([0, 97, 115, 109])) {
      return {
        ext: "wasm",
        mime: "application/wasm"
      };
    }
    if (this.check([73, 73])) {
      const fileType = await this.readTiffHeader(false);
      if (fileType) {
        return fileType;
      }
    }
    if (this.check([77, 77])) {
      const fileType = await this.readTiffHeader(true);
      if (fileType) {
        return fileType;
      }
    }
    if (this.checkString("MAC ")) {
      return {
        ext: "ape",
        mime: "audio/ape"
      };
    }
    if (this.check([26, 69, 223, 163])) {
      async function readField() {
        const msb = await tokenizer.peekNumber(UINT8);
        let mask = 128;
        let ic = 0;
        while ((msb & mask) === 0 && mask !== 0) {
          ++ic;
          mask >>= 1;
        }
        const id = import_node_buffer3.Buffer.alloc(ic + 1);
        await tokenizer.readBuffer(id);
        return id;
      }
      async function readElement() {
        const id = await readField();
        const lengthField = await readField();
        lengthField[0] ^= 128 >> lengthField.length - 1;
        const nrLength = Math.min(6, lengthField.length);
        return {
          id: id.readUIntBE(0, id.length),
          len: lengthField.readUIntBE(lengthField.length - nrLength, nrLength)
        };
      }
      async function readChildren(children) {
        while (children > 0) {
          const element = await readElement();
          if (element.id === 17026) {
            const rawValue = await tokenizer.readToken(new StringType(element.len, "utf-8"));
            return rawValue.replaceAll(/\00.*$/g, "");
          }
          await tokenizer.ignore(element.len);
          --children;
        }
      }
      const re = await readElement();
      const docType = await readChildren(re.len);
      switch (docType) {
        case "webm":
          return {
            ext: "webm",
            mime: "video/webm"
          };
        case "matroska":
          return {
            ext: "mkv",
            mime: "video/x-matroska"
          };
        default:
          return;
      }
    }
    if (this.check([82, 73, 70, 70])) {
      if (this.check([65, 86, 73], { offset: 8 })) {
        return {
          ext: "avi",
          mime: "video/vnd.avi"
        };
      }
      if (this.check([87, 65, 86, 69], { offset: 8 })) {
        return {
          ext: "wav",
          mime: "audio/wav"
        };
      }
      if (this.check([81, 76, 67, 77], { offset: 8 })) {
        return {
          ext: "qcp",
          mime: "audio/qcelp"
        };
      }
    }
    if (this.checkString("SQLi")) {
      return {
        ext: "sqlite",
        mime: "application/x-sqlite3"
      };
    }
    if (this.check([78, 69, 83, 26])) {
      return {
        ext: "nes",
        mime: "application/x-nintendo-nes-rom"
      };
    }
    if (this.checkString("Cr24")) {
      return {
        ext: "crx",
        mime: "application/x-google-chrome-extension"
      };
    }
    if (this.checkString("MSCF") || this.checkString("ISc(")) {
      return {
        ext: "cab",
        mime: "application/vnd.ms-cab-compressed"
      };
    }
    if (this.check([237, 171, 238, 219])) {
      return {
        ext: "rpm",
        mime: "application/x-rpm"
      };
    }
    if (this.check([197, 208, 211, 198])) {
      return {
        ext: "eps",
        mime: "application/eps"
      };
    }
    if (this.check([40, 181, 47, 253])) {
      return {
        ext: "zst",
        mime: "application/zstd"
      };
    }
    if (this.check([127, 69, 76, 70])) {
      return {
        ext: "elf",
        mime: "application/x-elf"
      };
    }
    if (this.check([33, 66, 68, 78])) {
      return {
        ext: "pst",
        mime: "application/vnd.ms-outlook"
      };
    }
    if (this.checkString("PAR1")) {
      return {
        ext: "parquet",
        mime: "application/x-parquet"
      };
    }
    if (this.check([207, 250, 237, 254])) {
      return {
        ext: "macho",
        mime: "application/x-mach-binary"
      };
    }
    if (this.check([79, 84, 84, 79, 0])) {
      return {
        ext: "otf",
        mime: "font/otf"
      };
    }
    if (this.checkString("#!AMR")) {
      return {
        ext: "amr",
        mime: "audio/amr"
      };
    }
    if (this.checkString("{\\rtf")) {
      return {
        ext: "rtf",
        mime: "application/rtf"
      };
    }
    if (this.check([70, 76, 86, 1])) {
      return {
        ext: "flv",
        mime: "video/x-flv"
      };
    }
    if (this.checkString("IMPM")) {
      return {
        ext: "it",
        mime: "audio/x-it"
      };
    }
    if (this.checkString("-lh0-", { offset: 2 }) || this.checkString("-lh1-", { offset: 2 }) || this.checkString("-lh2-", { offset: 2 }) || this.checkString("-lh3-", { offset: 2 }) || this.checkString("-lh4-", { offset: 2 }) || this.checkString("-lh5-", { offset: 2 }) || this.checkString("-lh6-", { offset: 2 }) || this.checkString("-lh7-", { offset: 2 }) || this.checkString("-lzs-", { offset: 2 }) || this.checkString("-lz4-", { offset: 2 }) || this.checkString("-lz5-", { offset: 2 }) || this.checkString("-lhd-", { offset: 2 })) {
      return {
        ext: "lzh",
        mime: "application/x-lzh-compressed"
      };
    }
    if (this.check([0, 0, 1, 186])) {
      if (this.check([33], { offset: 4, mask: [241] })) {
        return {
          ext: "mpg",
          mime: "video/MP1S"
        };
      }
      if (this.check([68], { offset: 4, mask: [196] })) {
        return {
          ext: "mpg",
          mime: "video/MP2P"
        };
      }
    }
    if (this.checkString("ITSF")) {
      return {
        ext: "chm",
        mime: "application/vnd.ms-htmlhelp"
      };
    }
    if (this.check([202, 254, 186, 190])) {
      return {
        ext: "class",
        mime: "application/java-vm"
      };
    }
    if (this.check([253, 55, 122, 88, 90, 0])) {
      return {
        ext: "xz",
        mime: "application/x-xz"
      };
    }
    if (this.checkString("<?xml ")) {
      return {
        ext: "xml",
        mime: "application/xml"
      };
    }
    if (this.check([55, 122, 188, 175, 39, 28])) {
      return {
        ext: "7z",
        mime: "application/x-7z-compressed"
      };
    }
    if (this.check([82, 97, 114, 33, 26, 7]) && (this.buffer[6] === 0 || this.buffer[6] === 1)) {
      return {
        ext: "rar",
        mime: "application/x-rar-compressed"
      };
    }
    if (this.checkString("solid ")) {
      return {
        ext: "stl",
        mime: "model/stl"
      };
    }
    if (this.checkString("AC")) {
      const version = this.buffer.toString("binary", 2, 6);
      if (version.match("^d*") && version >= 1e3 && version <= 1050) {
        return {
          ext: "dwg",
          mime: "image/vnd.dwg"
        };
      }
    }
    if (this.checkString("070707")) {
      return {
        ext: "cpio",
        mime: "application/x-cpio"
      };
    }
    if (this.checkString("BLENDER")) {
      return {
        ext: "blend",
        mime: "application/x-blender"
      };
    }
    if (this.checkString("!<arch>")) {
      await tokenizer.ignore(8);
      const string = await tokenizer.readToken(new StringType(13, "ascii"));
      if (string === "debian-binary") {
        return {
          ext: "deb",
          mime: "application/x-deb"
        };
      }
      return {
        ext: "ar",
        mime: "application/x-unix-archive"
      };
    }
    if (this.checkString("**ACE", { offset: 7 })) {
      await tokenizer.peekBuffer(this.buffer, { length: 14, mayBeLess: true });
      if (this.checkString("**", { offset: 12 })) {
        return {
          ext: "ace",
          mime: "application/x-ace-compressed"
        };
      }
    }
    if (this.check([137, 80, 78, 71, 13, 10, 26, 10])) {
      await tokenizer.ignore(8);
      async function readChunkHeader() {
        return {
          length: await tokenizer.readToken(INT32_BE),
          type: await tokenizer.readToken(new StringType(4, "binary"))
        };
      }
      do {
        const chunk = await readChunkHeader();
        if (chunk.length < 0) {
          return;
        }
        switch (chunk.type) {
          case "IDAT":
            return {
              ext: "png",
              mime: "image/png"
            };
          case "acTL":
            return {
              ext: "apng",
              mime: "image/apng"
            };
          default:
            await tokenizer.ignore(chunk.length + 4);
        }
      } while (tokenizer.position + 8 < tokenizer.fileInfo.size);
      return {
        ext: "png",
        mime: "image/png"
      };
    }
    if (this.check([65, 82, 82, 79, 87, 49, 0, 0])) {
      return {
        ext: "arrow",
        mime: "application/x-apache-arrow"
      };
    }
    if (this.check([103, 108, 84, 70, 2, 0, 0, 0])) {
      return {
        ext: "glb",
        mime: "model/gltf-binary"
      };
    }
    if (this.check([102, 114, 101, 101], { offset: 4 }) || this.check([109, 100, 97, 116], { offset: 4 }) || this.check([109, 111, 111, 118], { offset: 4 }) || this.check([119, 105, 100, 101], { offset: 4 })) {
      return {
        ext: "mov",
        mime: "video/quicktime"
      };
    }
    if (this.check([73, 73, 82, 79, 8, 0, 0, 0, 24])) {
      return {
        ext: "orf",
        mime: "image/x-olympus-orf"
      };
    }
    if (this.checkString("gimp xcf ")) {
      return {
        ext: "xcf",
        mime: "image/x-xcf"
      };
    }
    if (this.check([73, 73, 85, 0, 24, 0, 0, 0, 136, 231, 116, 216])) {
      return {
        ext: "rw2",
        mime: "image/x-panasonic-rw2"
      };
    }
    if (this.check([48, 38, 178, 117, 142, 102, 207, 17, 166, 217])) {
      async function readHeader() {
        const guid = import_node_buffer3.Buffer.alloc(16);
        await tokenizer.readBuffer(guid);
        return {
          id: guid,
          size: Number(await tokenizer.readToken(UINT64_LE))
        };
      }
      await tokenizer.ignore(30);
      while (tokenizer.position + 24 < tokenizer.fileInfo.size) {
        const header = await readHeader();
        let payload = header.size - 24;
        if (_check(header.id, [145, 7, 220, 183, 183, 169, 207, 17, 142, 230, 0, 192, 12, 32, 83, 101])) {
          const typeId = import_node_buffer3.Buffer.alloc(16);
          payload -= await tokenizer.readBuffer(typeId);
          if (_check(typeId, [64, 158, 105, 248, 77, 91, 207, 17, 168, 253, 0, 128, 95, 92, 68, 43])) {
            return {
              ext: "asf",
              mime: "audio/x-ms-asf"
            };
          }
          if (_check(typeId, [192, 239, 25, 188, 77, 91, 207, 17, 168, 253, 0, 128, 95, 92, 68, 43])) {
            return {
              ext: "asf",
              mime: "video/x-ms-asf"
            };
          }
          break;
        }
        await tokenizer.ignore(payload);
      }
      return {
        ext: "asf",
        mime: "application/vnd.ms-asf"
      };
    }
    if (this.check([171, 75, 84, 88, 32, 49, 49, 187, 13, 10, 26, 10])) {
      return {
        ext: "ktx",
        mime: "image/ktx"
      };
    }
    if ((this.check([126, 16, 4]) || this.check([126, 24, 4])) && this.check([48, 77, 73, 69], { offset: 4 })) {
      return {
        ext: "mie",
        mime: "application/x-mie"
      };
    }
    if (this.check([39, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], { offset: 2 })) {
      return {
        ext: "shp",
        mime: "application/x-esri-shape"
      };
    }
    if (this.check([255, 79, 255, 81])) {
      return {
        ext: "j2c",
        mime: "image/j2c"
      };
    }
    if (this.check([0, 0, 0, 12, 106, 80, 32, 32, 13, 10, 135, 10])) {
      await tokenizer.ignore(20);
      const type = await tokenizer.readToken(new StringType(4, "ascii"));
      switch (type) {
        case "jp2 ":
          return {
            ext: "jp2",
            mime: "image/jp2"
          };
        case "jpx ":
          return {
            ext: "jpx",
            mime: "image/jpx"
          };
        case "jpm ":
          return {
            ext: "jpm",
            mime: "image/jpm"
          };
        case "mjp2":
          return {
            ext: "mj2",
            mime: "image/mj2"
          };
        default:
          return;
      }
    }
    if (this.check([255, 10]) || this.check([0, 0, 0, 12, 74, 88, 76, 32, 13, 10, 135, 10])) {
      return {
        ext: "jxl",
        mime: "image/jxl"
      };
    }
    if (this.check([254, 255])) {
      if (this.check([0, 60, 0, 63, 0, 120, 0, 109, 0, 108], { offset: 2 })) {
        return {
          ext: "xml",
          mime: "application/xml"
        };
      }
      return void 0;
    }
    if (this.check([0, 0, 1, 186]) || this.check([0, 0, 1, 179])) {
      return {
        ext: "mpg",
        mime: "video/mpeg"
      };
    }
    if (this.check([0, 1, 0, 0, 0])) {
      return {
        ext: "ttf",
        mime: "font/ttf"
      };
    }
    if (this.check([0, 0, 1, 0])) {
      return {
        ext: "ico",
        mime: "image/x-icon"
      };
    }
    if (this.check([0, 0, 2, 0])) {
      return {
        ext: "cur",
        mime: "image/x-icon"
      };
    }
    if (this.check([208, 207, 17, 224, 161, 177, 26, 225])) {
      return {
        ext: "cfb",
        mime: "application/x-cfb"
      };
    }
    await tokenizer.peekBuffer(this.buffer, { length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true });
    if (this.check([97, 99, 115, 112], { offset: 36 })) {
      return {
        ext: "icc",
        mime: "application/vnd.iccprofile"
      };
    }
    if (this.checkString("BEGIN:")) {
      if (this.checkString("VCARD", { offset: 6 })) {
        return {
          ext: "vcf",
          mime: "text/vcard"
        };
      }
      if (this.checkString("VCALENDAR", { offset: 6 })) {
        return {
          ext: "ics",
          mime: "text/calendar"
        };
      }
    }
    if (this.checkString("FUJIFILMCCD-RAW")) {
      return {
        ext: "raf",
        mime: "image/x-fujifilm-raf"
      };
    }
    if (this.checkString("Extended Module:")) {
      return {
        ext: "xm",
        mime: "audio/x-xm"
      };
    }
    if (this.checkString("Creative Voice File")) {
      return {
        ext: "voc",
        mime: "audio/x-voc"
      };
    }
    if (this.check([4, 0, 0, 0]) && this.buffer.length >= 16) {
      const jsonSize = this.buffer.readUInt32LE(12);
      if (jsonSize > 12 && this.buffer.length >= jsonSize + 16) {
        try {
          const header = this.buffer.slice(16, jsonSize + 16).toString();
          const json = JSON.parse(header);
          if (json.files) {
            return {
              ext: "asar",
              mime: "application/x-asar"
            };
          }
        } catch (e) {
        }
      }
    }
    if (this.check([6, 14, 43, 52, 2, 5, 1, 1, 13, 1, 2, 1, 1, 2])) {
      return {
        ext: "mxf",
        mime: "application/mxf"
      };
    }
    if (this.checkString("SCRM", { offset: 44 })) {
      return {
        ext: "s3m",
        mime: "audio/x-s3m"
      };
    }
    if (this.check([71]) && this.check([71], { offset: 188 })) {
      return {
        ext: "mts",
        mime: "video/mp2t"
      };
    }
    if (this.check([71], { offset: 4 }) && this.check([71], { offset: 196 })) {
      return {
        ext: "mts",
        mime: "video/mp2t"
      };
    }
    if (this.check([66, 79, 79, 75, 77, 79, 66, 73], { offset: 60 })) {
      return {
        ext: "mobi",
        mime: "application/x-mobipocket-ebook"
      };
    }
    if (this.check([68, 73, 67, 77], { offset: 128 })) {
      return {
        ext: "dcm",
        mime: "application/dicom"
      };
    }
    if (this.check([76, 0, 0, 0, 1, 20, 2, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70])) {
      return {
        ext: "lnk",
        mime: "application/x.ms.shortcut"
      };
    }
    if (this.check([98, 111, 111, 107, 0, 0, 0, 0, 109, 97, 114, 107, 0, 0, 0, 0])) {
      return {
        ext: "alias",
        mime: "application/x.apple.alias"
      };
    }
    if (this.checkString("Kaydara FBX Binary  \0")) {
      return {
        ext: "fbx",
        mime: "application/x.autodesk.fbx"
      };
    }
    if (this.check([76, 80], { offset: 34 }) && (this.check([0, 0, 1], { offset: 8 }) || this.check([1, 0, 2], { offset: 8 }) || this.check([2, 0, 2], { offset: 8 }))) {
      return {
        ext: "eot",
        mime: "application/vnd.ms-fontobject"
      };
    }
    if (this.check([6, 6, 237, 245, 216, 29, 70, 229, 189, 49, 239, 231, 254, 116, 183, 29])) {
      return {
        ext: "indd",
        mime: "application/x-indesign"
      };
    }
    await tokenizer.peekBuffer(this.buffer, { length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true });
    if (tarHeaderChecksumMatches(this.buffer)) {
      return {
        ext: "tar",
        mime: "application/x-tar"
      };
    }
    if (this.check([255, 254])) {
      if (this.check([60, 0, 63, 0, 120, 0, 109, 0, 108, 0], { offset: 2 })) {
        return {
          ext: "xml",
          mime: "application/xml"
        };
      }
      if (this.check([255, 14, 83, 0, 107, 0, 101, 0, 116, 0, 99, 0, 104, 0, 85, 0, 112, 0, 32, 0, 77, 0, 111, 0, 100, 0, 101, 0, 108, 0], { offset: 2 })) {
        return {
          ext: "skp",
          mime: "application/vnd.sketchup.skp"
        };
      }
      return void 0;
    }
    if (this.checkString("-----BEGIN PGP MESSAGE-----")) {
      return {
        ext: "pgp",
        mime: "application/pgp-encrypted"
      };
    }
    if (this.buffer.length >= 2 && this.check([255, 224], { offset: 0, mask: [255, 224] })) {
      if (this.check([16], { offset: 1, mask: [22] })) {
        if (this.check([8], { offset: 1, mask: [8] })) {
          return {
            ext: "aac",
            mime: "audio/aac"
          };
        }
        return {
          ext: "aac",
          mime: "audio/aac"
        };
      }
      if (this.check([2], { offset: 1, mask: [6] })) {
        return {
          ext: "mp3",
          mime: "audio/mpeg"
        };
      }
      if (this.check([4], { offset: 1, mask: [6] })) {
        return {
          ext: "mp2",
          mime: "audio/mpeg"
        };
      }
      if (this.check([6], { offset: 1, mask: [6] })) {
        return {
          ext: "mp1",
          mime: "audio/mpeg"
        };
      }
    }
  }
  async readTiffTag(bigEndian) {
    const tagId = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE);
    this.tokenizer.ignore(10);
    switch (tagId) {
      case 50341:
        return {
          ext: "arw",
          mime: "image/x-sony-arw"
        };
      case 50706:
        return {
          ext: "dng",
          mime: "image/x-adobe-dng"
        };
      default:
    }
  }
  async readTiffIFD(bigEndian) {
    const numberOfTags = await this.tokenizer.readToken(bigEndian ? UINT16_BE : UINT16_LE);
    for (let n = 0; n < numberOfTags; ++n) {
      const fileType = await this.readTiffTag(bigEndian);
      if (fileType) {
        return fileType;
      }
    }
  }
  async readTiffHeader(bigEndian) {
    const version = (bigEndian ? UINT16_BE : UINT16_LE).get(this.buffer, 2);
    const ifdOffset = (bigEndian ? UINT32_BE : UINT32_LE).get(this.buffer, 4);
    if (version === 42) {
      if (ifdOffset >= 6) {
        if (this.checkString("CR", { offset: 8 })) {
          return {
            ext: "cr2",
            mime: "image/x-canon-cr2"
          };
        }
        if (ifdOffset >= 8 && (this.check([28, 0, 254, 0], { offset: 8 }) || this.check([31, 0, 11, 0], { offset: 8 }))) {
          return {
            ext: "nef",
            mime: "image/x-nikon-nef"
          };
        }
      }
      await this.tokenizer.ignore(ifdOffset);
      const fileType = await this.readTiffIFD(bigEndian);
      return fileType != null ? fileType : {
        ext: "tif",
        mime: "image/tiff"
      };
    }
    if (version === 43) {
      return {
        ext: "tif",
        mime: "image/tiff"
      };
    }
  }
};
var supportedExtensions = new Set(extensions);
var supportedMimeTypes = new Set(mimeTypes);

// src/plugin/asset-loaders/local-fetch-buffer.ts
var FetchBuffer = class extends AssetLoader {
  constructor(filename, url, type, inlinePolicy, minify, mutability, loadPriority) {
    super(filename, "", null, type, inlinePolicy, minify, mutability, "" /* Default */, loadPriority);
    this.url = url;
    const stringURL = this.url instanceof Path ? this.url.path : this.url;
    if (stringURL.startsWith("http"))
      this.onlineURL = stringURL;
  }
  async load() {
    if (this.url instanceof Path) {
      if (this.url.isRelative) {
        this.url.setWorkingDirectory("").absolute();
      }
      this.url = this.url.path;
    }
    if (this.exportOptions.offlineResources === false && this.url.startsWith("http"))
      return;
    if (this.url.startsWith("http") && (this.url.split(".").length <= 2 || this.url.split("/").length <= 2)) {
      this.onlineURL = void 0;
      return;
    }
    let res;
    try {
      if (this.url.startsWith("http")) {
        const testResp = await Utils.urlAvailable(this.url);
        if (testResp.type == "opaque")
          res = await (0, import_obsidian8.requestUrl)(this.url);
        else {
          ExportLog.log(`Url ${this.url} is not available`);
          return;
        }
      } else {
        res = await fetch(this.url);
      }
    } catch (e) {
      ExportLog.log(e, `Failed to fetch ${this.url}`);
      return;
    }
    if (res.status != 200) {
      ExportLog.log(`Failed to fetch ${this.url} with status ${res.status}`);
      return;
    }
    let data;
    if (res instanceof Response) {
      data = await res.arrayBuffer();
    } else {
      data = res.arrayBuffer;
    }
    this.data = Buffer.from(data);
    if (this.targetPath.extension == "") {
      const type = await fileTypeFromBuffer(this.data);
      if (type) {
        this.targetPath.setExtension(type.ext);
        this.type = AssetLoader.extentionToType(type.ext);
        this.targetPath.directory = AssetLoader.typeToDir(this.type);
      }
    }
    await super.load();
  }
};

// src/plugin/asset-loaders/supported-plugin-styles.ts
var SupportedPluginStyles = class extends AssetLoader {
  constructor() {
    super("supported-plugins.css", "", null, "style" /* Style */, "autohead" /* AutoHead */, true, "dynamic" /* Dynamic */, "async" /* Async */, 5);
  }
  async load() {
    var _a3;
    SettingsPage.nameStyles();
    const stylesheets = document.styleSheets;
    this.data = "";
    for (let i = 1; i < stylesheets.length; i++) {
      const styleID = (_a3 = stylesheets[i].ownerNode) == null ? void 0 : _a3.id;
      if (plugin_style_ids_default.ids.contains(styleID) || Settings.exportOptions.includeStyleCssIds.contains(styleID)) {
        ExportLog.log("Including stylesheet: " + styleID);
        const style = stylesheets[i].cssRules;
        for (const item in style) {
          if (style[item].cssText != void 0) {
            this.data += "\n" + style[item].cssText;
          }
        }
      }
      this.data += "\n\n /* ---- */\n\n";
    }
    this.data += await OtherPluginStyles.getStyleForPlugin("obsidian-icon-folder");
    await super.load();
  }
  getStylesheetContent(stylesheet) {
    let content = "";
    const style = stylesheet.cssRules;
    for (const item in style) {
      if (style[item].cssText != void 0) {
        content += "\n" + style[item].cssText;
      }
    }
    return content;
  }
  isSvelteStylesheet(stylesheet) {
    if (stylesheet.ownerNode == void 0)
      return false;
    const styleID = stylesheet.ownerNode.id;
    if (styleID.contains("svelte"))
      return true;
    const sheetContent = this.getStylesheetContent(stylesheet);
    const first1000 = sheetContent.substring(0, 1e3);
    if (first1000.contains(".svelte-")) {
      return true;
    }
    return false;
  }
};

// src/frontend/dist/index.txt.js
var index_txt_default = '/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of this plugin\n*/\n\n"use strict";\n(() => {\n  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {\n    get: (a, b) => (typeof require !== "undefined" ? require : a)[b]\n  }) : x)(function(x) {\n    if (typeof require !== "undefined")\n      return require.apply(this, arguments);\n    throw new Error(\'Dynamic require of "\' + x + \'" is not supported\');\n  });\n  var __accessCheck = (obj, member, msg) => {\n    if (!member.has(obj))\n      throw TypeError("Cannot " + msg);\n  };\n  var __privateGet = (obj, member, getter) => {\n    __accessCheck(obj, member, "read from private field");\n    return getter ? getter.call(obj) : member.get(obj);\n  };\n  var __privateAdd = (obj, member, value) => {\n    if (member.has(obj))\n      throw TypeError("Cannot add the same private member more than once");\n    member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n  };\n  var __privateSet = (obj, member, value, setter) => {\n    __accessCheck(obj, member, "write to private field");\n    setter ? setter.call(obj, value) : member.set(obj, value);\n    return value;\n  };\n  var __privateMethod = (obj, member, method) => {\n    __accessCheck(obj, member, "access private method");\n    return method;\n  };\n\n  // src/frontend/main/utils.ts\n  async function delay(ms) {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n  async function waitUntil(predicate, interval = 100) {\n    while (!predicate())\n      await delay(interval);\n  }\n  function getTextNodes(element) {\n    const textNodes = [];\n    const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null);\n    let node;\n    while (node = walker.nextNode()) {\n      textNodes.push(node);\n    }\n    return textNodes;\n  }\n  function getLengthInPixels(cssString, contextElement) {\n    const tempElement = document.createElement("div");\n    tempElement.style.position = "absolute";\n    tempElement.style.visibility = "hidden";\n    tempElement.style.width = cssString;\n    contextElement.appendChild(tempElement);\n    const lengthInPixels = tempElement.offsetWidth;\n    contextElement.removeChild(tempElement);\n    return lengthInPixels;\n  }\n  var Bounds = class {\n    get width() {\n      return this.right - this.left;\n    }\n    set width(value) {\n      this.right = this.left + value;\n    }\n    get height() {\n      return this.bottom - this.top;\n    }\n    set height(value) {\n      this.bottom = this.top + value;\n    }\n    get center() {\n      return new Vector2(this.left + this.width / 2, this.top + this.height / 2);\n    }\n    get min() {\n      return new Vector2(this.left, this.top);\n    }\n    set min(value) {\n      this.left = value.x;\n      this.top = value.y;\n    }\n    set position(value) {\n      this.min = value;\n    }\n    get max() {\n      return new Vector2(this.right, this.bottom);\n    }\n    set max(value) {\n      this.right = value.x;\n      this.bottom = value.y;\n    }\n    get size() {\n      return new Vector2(this.width, this.height);\n    }\n    set size(value) {\n      this.width = value.x;\n      this.height = value.y;\n    }\n    constructor(left, top, width, height) {\n      this.left = left;\n      this.top = top;\n      this.right = left + width;\n      this.bottom = top + height;\n    }\n    containsPoint(point) {\n      return point.x >= this.left && point.x <= this.right && point.y >= this.top && point.y <= this.bottom;\n    }\n    containsBounds(bounds) {\n      return bounds.left >= this.left && bounds.right <= this.right && bounds.top >= this.top && bounds.bottom <= this.bottom;\n    }\n    encapsulate(bounds) {\n      this.left = Math.min(this.left, bounds.left);\n      this.top = Math.min(this.top, bounds.top);\n      this.right = Math.max(this.right, bounds.right);\n      this.bottom = Math.max(this.bottom, bounds.bottom);\n      return this;\n    }\n    encapsulatePoint(point) {\n      if (point.isUndefined)\n        return;\n      this.left = Math.min(this.left, point.x);\n      this.top = Math.min(this.top, point.y);\n      this.right = Math.max(this.right, point.x);\n      this.bottom = Math.max(this.bottom, point.y);\n      return this;\n    }\n    expand(by) {\n      this.left -= by;\n      this.right += by;\n      this.top -= by;\n      this.bottom += by;\n      return this;\n    }\n    translate(by) {\n      this.left += by.x;\n      this.right += by.x;\n      this.top += by.y;\n      this.bottom += by.y;\n      return this;\n    }\n    scale(by) {\n      let width = this.width;\n      let height = this.height;\n      this.left += width * (1 - by) / 2;\n      this.right -= width * (1 - by) / 2;\n      this.top += height * (1 - by) / 2;\n      this.bottom -= height * (1 - by) / 2;\n      return this;\n    }\n    overlaps(bounds) {\n      return this.left < bounds.right && this.right > bounds.left && this.top < bounds.bottom && this.bottom > bounds.top;\n    }\n    static fromElement(el) {\n      const rect = el.getBoundingClientRect();\n      return new Bounds(rect.x, rect.y, rect.width, rect.height);\n    }\n    static get screenBounds() {\n      return new Bounds(0, 0, window.innerWidth, window.innerHeight);\n    }\n  };\n  var _Vector2 = class {\n    constructor(x, y) {\n      this.x = x;\n      this.y = y;\n    }\n    add(point) {\n      return new _Vector2(this.x + point.x, this.y + point.y);\n    }\n    sub(point) {\n      return new _Vector2(this.x - point.x, this.y - point.y);\n    }\n    scale(scalar) {\n      return new _Vector2(this.x * scalar, this.y * scalar);\n    }\n    divide(scalar) {\n      return new _Vector2(this.x / scalar, this.y / scalar);\n    }\n    get isUndefined() {\n      return isNaN(this.x) || isNaN(this.y);\n    }\n    get magnitude() {\n      return Math.sqrt(this.sqrMagnitude);\n    }\n    get sqrMagnitude() {\n      return this.x * this.x + this.y * this.y;\n    }\n    get normalized() {\n      const mag = this.magnitude;\n      return new _Vector2(this.x / mag, this.y / mag);\n    }\n    get inverse() {\n      return new _Vector2(-this.x, -this.y);\n    }\n    static distance(a, b) {\n      return a.sub(b).magnitude;\n    }\n    static dot(a, b) {\n      return a.x * b.x + a.y * b.y;\n    }\n  };\n  var Vector2 = _Vector2;\n  Vector2.Undefined = new _Vector2(NaN, NaN);\n  var Ticker = class {\n    constructor(targetFPS) {\n      this.callbacks = [];\n      this.targetFPS = targetFPS;\n      this.measuredFPS = targetFPS;\n      this._lastTime = performance.now();\n      this._deltaTime = 1 / targetFPS;\n      this._time = this._lastTime;\n    }\n    get deltaTime() {\n      return this._deltaTime / 1e3;\n    }\n    get time() {\n      return this._time;\n    }\n    async start() {\n      while (true) {\n        this._time = performance.now();\n        requestAnimationFrame(() => {\n          for (let callback of this.callbacks) {\n            callback(this.deltaTime);\n          }\n        });\n        const dt = this._time - this._lastTime;\n        let deltaDiff = dt - 1e3 / this.targetFPS;\n        this._lastTime = this._time + Math.max(deltaDiff, 0);\n        await delay(Math.max(0, deltaDiff));\n        this._deltaTime = Math.min(dt + Math.max(deltaDiff, 0), 1e3 / this.targetFPS * 3);\n        this.measuredFPS = 1 / this.deltaTime * 0.1 + this.measuredFPS * 0.9;\n      }\n    }\n    add(callback) {\n      this.callbacks.push(callback);\n    }\n  };\n  function slideUp(target, duration = 500) {\n    if (target.style.display === "none")\n      return;\n    target.style.transitionProperty = "height, margin, padding";\n    target.style.transitionTimingFunction = "ease-in-out";\n    target.style.transitionDuration = duration + "ms";\n    target.style.boxSizing = "border-box";\n    target.style.height = target.offsetHeight + "px";\n    target.offsetHeight;\n    target.style.overflow = "hidden";\n    target.style.height = "0";\n    target.style.paddingTop = "0";\n    target.style.paddingBottom = "0";\n    target.style.marginTop = "0";\n    target.style.marginBottom = "0";\n    window.setTimeout(async () => {\n      target.style.display = "none";\n      target.style.removeProperty("height");\n      target.style.removeProperty("padding-top");\n      target.style.removeProperty("padding-bottom");\n      target.style.removeProperty("margin-top");\n      target.style.removeProperty("margin-bottom");\n      target.style.removeProperty("overflow");\n      target.style.removeProperty("transition-duration");\n      target.style.removeProperty("transition-property");\n    }, duration);\n  }\n  function slideDown(target, duration = 500) {\n    if (window.getComputedStyle(target).display !== "none")\n      return;\n    target.style.removeProperty("display");\n    let display = window.getComputedStyle(target).display;\n    if (display === "none")\n      display = "block";\n    target.style.display = display;\n    const height = target.offsetHeight;\n    target.style.overflow = "hidden";\n    target.style.height = "0";\n    target.style.paddingTop = "0";\n    target.style.paddingBottom = "0";\n    target.style.marginTop = "0";\n    target.style.marginBottom = "0";\n    target.offsetHeight;\n    target.style.boxSizing = "border-box";\n    target.style.transitionProperty = "height, margin, padding";\n    target.style.transitionTimingFunction = "ease-in-out";\n    target.style.transitionDuration = duration + "ms";\n    target.style.height = height + "px";\n    target.style.removeProperty("padding-top");\n    target.style.removeProperty("padding-bottom");\n    target.style.removeProperty("margin-top");\n    target.style.removeProperty("margin-bottom");\n    window.setTimeout(async () => {\n      target.style.removeProperty("height");\n      target.style.removeProperty("overflow");\n      target.style.removeProperty("transition-duration");\n      target.style.removeProperty("transition-property");\n    }, duration);\n  }\n  function getTouchPosition(event) {\n    const touches = Array.from(event.touches);\n    const x = touches.reduce((acc, cur) => acc + cur.clientX, 0) / touches.length;\n    const y = touches.reduce((acc, cur) => acc + cur.clientY, 0) / touches.length;\n    return new Vector2(x, y);\n  }\n  function getPointerPosition(event) {\n    return new Vector2(event.clientX, event.clientY);\n  }\n  function getTouchPositionVector(touch) {\n    return { x: touch.clientX, y: touch.clientY };\n  }\n  function inOutQuadBlend(start, end, t) {\n    t /= 2;\n    let t2 = 2 * t * (1 - t) + 0.5;\n    t2 -= 0.5;\n    t2 *= 2;\n    return start + (end - start) * t2;\n  }\n  function inOutQuadBlendv(start, end, t) {\n    return new Vector2(inOutQuadBlend(start.x, end.x, t), inOutQuadBlend(start.y, end.y, t));\n  }\n  function clamp(value, min, max) {\n    return Math.max(min, Math.min(value, max));\n  }\n  function mapRange(value, low1, high1, low2, high2) {\n    return low2 + (high2 - low2) * (value - low1) / (high1 - low1);\n  }\n  function mapRangeClamped(value, low1, high1, low2, high2) {\n    return clamp(mapRange(value, low1, high1, low2, high2), low2, high2);\n  }\n\n  // src/frontend/main/canvas.ts\n  var CanvasNode = class {\n    constructor(canvas, nodeEl) {\n      this.isFocused = false;\n      this.canvas = canvas;\n      this.nodeEl = nodeEl;\n      this.nodeEl.nodeObj = this;\n      this.labelEl = nodeEl.querySelector(".canvas-node-label");\n      this.containerEl = nodeEl.querySelector(".canvas-node-container");\n      this.contentEl = nodeEl.querySelector(".canvas-node-content");\n      if (!this.labelEl || !this.containerEl || !this.contentEl) {\n        console.error("Failed to find all required elements for canvas node", this);\n        return;\n      }\n      const contentClasses = this.contentEl.classList;\n      if (contentClasses.contains("image-embed"))\n        this.type = "image" /* Image */;\n      else if (contentClasses.contains("video-embed"))\n        this.type = "video" /* Video */;\n      else if (contentClasses.contains("audio-embed"))\n        this.type = "audio" /* Audio */;\n      else if (contentClasses.contains("markdown-embed") && contentClasses.contains("external-markdown-embed"))\n        this.type = "external-markdown" /* ExternalMarkdown */;\n      else if (contentClasses.contains("markdown-embed"))\n        this.type = "markdown" /* Markdown */;\n      else if (contentClasses.contains("canvas-embed"))\n        this.type = "canvas" /* Canvas */;\n      else if (this.contentEl.firstElementChild?.tagName === "IFRAME")\n        this.type = "website" /* Website */;\n      else if (this.nodeEl.classList.contains("canvas-node-group"))\n        this.type = "group" /* Group */;\n      else\n        this.type = "none" /* None */;\n      if (this.type == "external-markdown" /* ExternalMarkdown */) {\n        const documentEl = this.contentEl.querySelector(".obsidian-document");\n        console.log(documentEl);\n        const documentObj = canvas.document.children.find((doc) => doc.documentEl == documentEl);\n        if (documentObj)\n          this.document = documentObj;\n        else\n          console.error("Failed to find document object for external markdown node", this);\n      }\n      this.initEvents();\n    }\n    get size() {\n      return new Vector2(parseFloat(this.nodeEl.style.width.replace("px", "")), parseFloat(this.nodeEl.style.height.replace("px", "")));\n    }\n    set size(newSize) {\n      this.nodeEl.style.width = newSize.x + "px";\n      this.nodeEl.style.height = newSize.y + "px";\n      this.nodeEl.style.setProperty("--canvas-node-width", newSize.x + "px");\n      this.nodeEl.style.setProperty("--canvas-node-height", newSize.y + "px");\n    }\n    get position() {\n      const transform = this.nodeEl.style.transform;\n      const match = transform.match(/translate\\(([^,]+)px, ([^,]+)px\\)/);\n      const translate = this.nodeEl.style.translate;\n      const match2 = translate.match(/([^,]+)px ([^,]+)px/);\n      let x = 0;\n      let y = 0;\n      if (match) {\n        x += parseFloat(match[1]);\n        y += parseFloat(match[2]);\n      }\n      if (match2) {\n        x += parseFloat(match2[1]);\n        y += parseFloat(match2[2]);\n      }\n      return new Vector2(x, y);\n    }\n    set position(newPos) {\n      this.nodeEl.style.transform = `translate(${newPos.x}px, ${newPos.y}px)`;\n    }\n    get bounds() {\n      let bounds = new Bounds(0, 0, 0, 0);\n      let size = this.size.scale(this.canvas.scale);\n      let position = this.position.scale(this.canvas.scale).add(this.canvas.position);\n      bounds.position = position;\n      bounds.size = size;\n      return bounds;\n    }\n    get label() {\n      return this.labelEl.textContent ?? "";\n    }\n    set label(newLabel) {\n      this.labelEl.textContent = newLabel;\n    }\n    get isScrollable() {\n      if (!this.document)\n        return false;\n      return this.document?.documentEl.scrollHeight > this.document?.documentEl.clientHeight;\n    }\n    get scrollContainer() {\n      return this.document?.documentEl;\n    }\n    focus(force = true) {\n      if (this.isFocused && force)\n        return;\n      if (this.canvas.focusedNode != this)\n        this.canvas.focusedNode?.focus(false);\n      this.nodeEl.classList.toggle("is-focused", force);\n      this.canvas.focusedNode = force ? this : null;\n      this.isFocused = force;\n    }\n    initEvents() {\n      const node = this;\n      this.nodeEl.addEventListener("dblclick", (e) => {\n        node.fitToView(false);\n      });\n      function onEnter(event) {\n        node.focus(true);\n        node.nodeEl.addEventListener("mouseleave", onLeave);\n        node.nodeEl.addEventListener("touchend", onLeave);\n        event.stopPropagation();\n      }\n      function onLeave() {\n        console.log("leave");\n        node.focus(false);\n        node.nodeEl.removeEventListener("mouseleave", onLeave);\n        node.nodeEl.removeEventListener("touchend", onLeave);\n      }\n      this.nodeEl.addEventListener("pointerenter", onEnter);\n    }\n    fitToView(instant = false) {\n      this.canvas.fitToBounds(this.bounds, 0.9, instant);\n    }\n  };\n  var Canvas = class {\n    constructor(document2) {\n      this.hiddenNodes = [];\n      this.focusedNode = null;\n      this._renderScale = 1;\n      this._minScale = 0.1;\n      this._maxScale = 5;\n      this._targetScale = 1;\n      this._scale = 1;\n      this._targetPosition = new Vector2(0, 0);\n      this._position = new Vector2(0, 0);\n      this._backgroundBaseScale = 20;\n      this._invisibleBackgroundScale = 2;\n      this._backgroundScale = this._backgroundBaseScale;\n      this._backgroundDotSize = 1;\n      this._backgroundPosition = new Vector2(0, 0);\n      this.lastTime = 0;\n      this.document = document2;\n      this.nodes = Array.from(document2.documentEl.querySelectorAll(".canvas-node")).map((nodeEl) => new CanvasNode(this, nodeEl));\n      this.document.documentEl.style.position = "absolute";\n      this.document.documentEl.style.width = "100%";\n      this.document.documentEl.style.height = "100%";\n      this.document.documentEl.style.overflow = "hidden";\n      this.document.documentEl.style.top = "0";\n      this.document.documentEl.style.left = "0";\n      this.canvasEl = document2.documentEl.querySelector(".canvas");\n      this.wrapperEl = document2.documentEl.querySelector(".canvas-wrapper");\n      this.backgroundEl = document2.documentEl.querySelector(".canvas-background pattern");\n      this.backgroundDotEl = this.backgroundEl?.querySelector("circle");\n      this.canvasEl.setAttribute("style", `translate: 0px 1px; scale: 1;`);\n      this.backgroundScale = this._backgroundScale;\n      this.backgroundDotSize = this._backgroundDotSize;\n      this.renderScale = this._renderScale;\n      const nodespaceOffset = Bounds.fromElement(this.canvasEl).min.sub(this.nodeBounds.min);\n      Array.from(this.canvasEl.children).forEach((el) => {\n        el.style.translate = `${nodespaceOffset.x}px ${nodespaceOffset.y}px`;\n      });\n      this.forcePosition = this.nodeBounds.min.sub(this.wrapperBounds.min);\n      requestAnimationFrame(this.updateScale.bind(this));\n      this.initEvents();\n      this.wrapperEl.style.transition = "opacity 0.0s";\n      this.wrapperEl.classList.add("hide");\n      this.wrapperEl.style.transition = "opacity 3s";\n      this.wrapperEl.classList.remove("hide");\n      this.fitToBounds(this.nodeBounds, 3, true);\n      setTimeout(() => {\n        this.fitToBounds(this.nodeBounds, 0.9, false);\n      }, 100);\n    }\n    get renderScale() {\n      return this._renderScale;\n    }\n    set renderScale(scale) {\n      this._renderScale = scale;\n      this.canvasEl.style.zoom = scale * 100 + "%";\n      this.scale = this._scale;\n      this.position = this._position;\n    }\n    get nodeBounds() {\n      if (this.nodes.length == 0)\n        return new Bounds(0, 0, 0, 0);\n      const bounds = this.nodes[0].bounds;\n      for (const node of this.nodes) {\n        bounds.encapsulate(node.bounds);\n      }\n      ;\n      return bounds;\n    }\n    get wrapperBounds() {\n      return Bounds.fromElement(this.wrapperEl);\n    }\n    get minScale() {\n      return this._minScale;\n    }\n    get maxScale() {\n      return this._maxScale;\n    }\n    get targetScale() {\n      return this._targetScale;\n    }\n    set targetScale(newScale) {\n      newScale = Math.min(Math.max(newScale, this.minScale), this.maxScale);\n      this._targetScale = newScale;\n    }\n    get scale() {\n      return this._scale;\n    }\n    set scale(newScale) {\n      let ratio = newScale / this._scale;\n      this._scale = newScale;\n      let scaled = newScale / this.renderScale;\n      const scaleStr = scaled.toString() ?? "1";\n      this.canvasEl.style.scale = scaleStr;\n      const zoomStr = (1 / Math.sqrt(newScale)).toString() ?? "1";\n      this.wrapperEl.style.setProperty("--zoom-multiplier", zoomStr);\n      this.canvasEl.classList.toggle("small-scale", this.scale < 0.15);\n      this.backgroundScale = this.backgroundScale * ratio;\n    }\n    get targetPosition() {\n      return this._targetPosition;\n    }\n    set targetPosition(screenPos) {\n      this._targetPosition = screenPos;\n    }\n    get position() {\n      return this._position;\n    }\n    set position(screenPos) {\n      this._position = screenPos;\n      let scaled = screenPos.divide(this.renderScale);\n      this.canvasEl.style.translate = `${scaled.x}px ${scaled.y}px`;\n      this.backgroundPosition = this.position;\n    }\n    set forcePosition(screenPos) {\n      this.targetPosition = screenPos;\n      this.position = screenPos;\n    }\n    get forcePosition() {\n      return this.position;\n    }\n    get backgroundScale() {\n      return this._backgroundScale;\n    }\n    set backgroundScale(newScale) {\n      const scaleStr = newScale.toString() ?? "20";\n      this.backgroundEl?.setAttribute("width", scaleStr);\n      this.backgroundEl?.setAttribute("height", scaleStr);\n      this._backgroundScale = newScale;\n      if (this.backgroundEl?.parentElement)\n        this.backgroundEl.parentElement.style.opacity = (1 - mapRangeClamped(this._backgroundScale, this._backgroundBaseScale / 2, this._invisibleBackgroundScale, 0, 1)).toString();\n    }\n    get backgroundDotSize() {\n      return this._backgroundDotSize;\n    }\n    set backgroundDotSize(newSize) {\n      const sizeStr = newSize.toString() ?? "0.7";\n      this.backgroundDotEl?.setAttribute("r", sizeStr);\n      this.backgroundDotEl?.setAttribute("cx", sizeStr);\n      this.backgroundDotEl?.setAttribute("cy", sizeStr);\n      this._backgroundDotSize = newSize;\n    }\n    get backgroundPosition() {\n      return this._backgroundPosition;\n    }\n    set backgroundPosition(newPosition) {\n      if (!this.backgroundEl)\n        return;\n      this.backgroundEl?.setAttribute("x", newPosition.x.toString());\n      this.backgroundEl?.setAttribute("y", newPosition.y.toString());\n      this._backgroundPosition = newPosition;\n    }\n    updateScale(time) {\n      if (this.lastTime == 0)\n        this.lastTime = time;\n      const deltaTime = (time - this.lastTime) / 1e3;\n      this.lastTime = time;\n      if (Math.abs(this.targetScale - this.scale) > 1e-4)\n        this.scale = inOutQuadBlend(this.scale, this.targetScale, 6 * deltaTime);\n      if (this.targetPosition.sub(this.position).magnitude > 1e-3)\n        this.position = inOutQuadBlendv(this.position, this.targetPosition, 6 * deltaTime);\n      let screenBounds = Bounds.screenBounds;\n      this.hiddenNodes.sort((a, b) => {\n        const aCenter = a.bounds.center;\n        const bCenter = b.bounds.center;\n        const aDist = aCenter.sub(screenBounds.center).magnitude;\n        const bDist = bCenter.sub(screenBounds.center).magnitude;\n        return aDist - bDist;\n      });\n      for (let i = 0; i < 50; i++) {\n        if (i >= this.hiddenNodes.length)\n          break;\n        const node = this.hiddenNodes[i];\n        if (!node) {\n          this.hiddenNodes.splice(i, 1);\n          continue;\n        }\n        const bounds = node.bounds.expand(100);\n        const isVisible = bounds.overlaps(screenBounds);\n        node.nodeEl.style.display = isVisible ? "" : "none";\n        if (isVisible)\n          this.hiddenNodes.splice(i, 1);\n      }\n      requestAnimationFrame(this.updateScale.bind(this));\n    }\n    initEvents() {\n      const observer = new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          entry.target.style.display = entry.isIntersecting ? "" : "none";\n          if (!entry.isIntersecting)\n            this.hiddenNodes.push(entry.target.nodeObj);\n        });\n      }, { root: null, rootMargin: "0px", threshold: 0 });\n      this.nodes.forEach((node) => observer.observe(node.nodeEl));\n      const localThis = this;\n      const isWindows = navigator.userAgent.includes("Windows");\n      function getRelativePointerPosition(event) {\n        const rect = localThis.wrapperEl.getBoundingClientRect();\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n        return new Vector2(x, y);\n      }\n      function dragStart(event) {\n        if (event.pointerType != "mouse" && event.pointerType != "pen")\n          return;\n        const startPointerPos = getRelativePointerPosition(event);\n        const startCanvasPos = localThis.position;\n        const startingNode = localThis.focusedNode;\n        function drag(dragEvent) {\n          if (isWindows && startingNode?.isScrollable && dragEvent.buttons == 4)\n            return;\n          dragEvent.preventDefault();\n          const pointer = getRelativePointerPosition(dragEvent);\n          const delta = pointer.sub(startPointerPos);\n          localThis.forcePosition = startCanvasPos.add(delta);\n        }\n        function dragEnd(e) {\n          document.removeEventListener("mousemove", drag);\n          document.removeEventListener("mouseup", dragEnd);\n        }\n        document.addEventListener("mousemove", drag);\n        document.addEventListener("mouseup", dragEnd);\n      }\n      this.wrapperEl.addEventListener("pointerdown", dragStart);\n      function shouldOverrideScroll(deltaY, deltaX, node) {\n        const scrollContainer = node?.scrollContainer;\n        if (scrollContainer) {\n          if (scrollContainer.scrollTop != 0 && deltaY < 0 && Math.abs(deltaY / (deltaX + 0.01)) > 2)\n            return false;\n          if (scrollContainer.scrollHeight - scrollContainer.scrollTop > scrollContainer.clientHeight + 1 && deltaY > 0 && Math.abs(deltaY / (deltaX + 0.01)) > 2)\n            return false;\n          if (scrollContainer.scrollLeft != 0 && deltaX < 0 && Math.abs(deltaX / (deltaY + 0.01)) > 2)\n            return false;\n          if (scrollContainer.scrollWidth - scrollContainer.scrollLeft > scrollContainer.clientWidth + 1 && deltaX > 0 && Math.abs(deltaX / (deltaY + 0.01)) > 2)\n            return false;\n        }\n        return true;\n      }\n      this.wrapperEl.addEventListener("wheel", function(event) {\n        if (!shouldOverrideScroll(event.deltaY, event.deltaX, localThis.focusedNode))\n          return;\n        let scale = 1;\n        scale -= event.deltaY / 700 * scale;\n        localThis.scaleAround(scale, getRelativePointerPosition(event));\n      }, { passive: true });\n      let touching = false;\n      this.wrapperEl.addEventListener("touchstart", function(event) {\n        if (touching)\n          return;\n        touching = true;\n        const touches = event.touches;\n        function getTouchData(touches2) {\n          const touch1 = getRelativePointerPosition(touches2[0]);\n          const touch2 = touches2.length == 2 ? getRelativePointerPosition(touches2[1]) : null;\n          const center = touch2 ? touch1.add(touch2).scale(0.5) : touch1;\n          const distance = touch2 ? Vector2.distance(touch1, touch2) : 0;\n          return { touch1, touch2, center, distance };\n        }\n        let lastTouchData = getTouchData(touches);\n        let isTwoFingerDrag = touches.length == 2;\n        const startingNode = localThis.focusedNode;\n        function touchMove(event2) {\n          const touches2 = event2.touches;\n          const touchData = getTouchData(touches2);\n          if (touches2.length == 2) {\n            if (!isTwoFingerDrag) {\n              lastTouchData = getTouchData(touches2);\n              isTwoFingerDrag = true;\n            }\n            const scaleDelta = (touchData.distance - lastTouchData.distance) / lastTouchData.distance;\n            localThis.scaleAround(1 + scaleDelta, touchData.center);\n          }\n          const delta = touchData.center.sub(lastTouchData.center);\n          if (!isTwoFingerDrag && !shouldOverrideScroll(-delta.y, delta.x, startingNode)) {\n            lastTouchData = getTouchData(touches2);\n            return;\n          }\n          event2.preventDefault();\n          localThis.targetPosition = localThis.targetPosition.add(delta);\n          lastTouchData = getTouchData(touches2);\n        }\n        function touchEnd(event2) {\n          document.removeEventListener("touchmove", touchMove);\n          document.removeEventListener("touchend", touchEnd);\n          touching = false;\n        }\n        document.addEventListener("touchmove", touchMove);\n        document.addEventListener("touchend", touchEnd);\n      });\n    }\n    scaleAround(scaleBy, point, instantScale = false) {\n      const currentScale = this.targetScale;\n      let newScale = currentScale * scaleBy;\n      newScale = Math.min(Math.max(newScale, this.minScale), this.maxScale);\n      scaleBy = newScale / currentScale;\n      const centerToPoint = point.sub(this.targetPosition);\n      const centerPin = centerToPoint.scale(scaleBy).add(this.targetPosition);\n      const offset = point.sub(centerPin);\n      if (instantScale) {\n        this.scale *= scaleBy;\n        this.targetScale = this.scale;\n        this.forcePosition = this.forcePosition.add(offset);\n      } else {\n        this.targetScale *= scaleBy;\n        this.targetPosition = this.targetPosition.add(offset);\n      }\n      return offset;\n    }\n    setScaleAround(scale, point, instant = false) {\n      this.scaleAround(scale / this.targetScale, point, instant);\n    }\n    fitToBounds(bounds = this.nodeBounds, scaleMultiplier = 0.9, instant = false) {\n      this.hideNodesOutsideBounds(bounds.scale(2));\n      const documentWidth = this.document.containerEl.clientWidth;\n      const documentHeight = this.document.containerEl.clientHeight;\n      const xRatio = documentWidth / bounds.width;\n      const yRatio = documentHeight / bounds.height;\n      const scale = scaleMultiplier * Math.min(xRatio, yRatio);\n      this.scaleAround(scale, bounds.center, instant);\n      this.centerView(bounds.center, instant);\n    }\n    hideNodesOutsideBounds(bounds) {\n      for (const node of this.nodes) {\n        if (!bounds.overlaps(node.bounds)) {\n          node.nodeEl.style.display = "none";\n          this.hiddenNodes.push(node);\n        }\n      }\n    }\n    centerView(center, instant = false) {\n      const offset = this.wrapperBounds.center.sub(center);\n      if (instant)\n        this.forcePosition = this.forcePosition.add(offset);\n      else\n        this.targetPosition = this.targetPosition.add(offset);\n    }\n  };\n\n  // src/shared/features/feature-options-base.ts\n  \n  var RelationType = /* @__PURE__ */ ((RelationType2) => {\n    RelationType2["Before"] = "before";\n    RelationType2["After"] = "after";\n    RelationType2["Start"] = "start";\n    RelationType2["End"] = "end";\n    return RelationType2;\n  })(RelationType || {});\n  var FeatureRelation = class {\n    constructor(selector = "#right-sidebar-content", type = "start" /* Start */) {\n      this.selector = "#right-sidebar-content";\n      this.type = "start" /* Start */;\n      \n      \n      this.selector = selector;\n      this.type = type;\n    }\n  };\n  var FeatureSettingInfo = class {\n    constructor(options) {\n      this.show = true;\n      this.name = "";\n      this.description = "";\n      this.placeholder = "";\n      this.fileInputOptions = void 0;\n      this.dropdownOptions = void 0;\n      if (options) {\n        this.show = options.show ?? this.show;\n        this.name = options.name ?? this.name;\n        this.description = options.description ?? this.description;\n        this.placeholder = options.placeholder ?? this.placeholder;\n        this.fileInputOptions = options.fileInputOptions ?? this.fileInputOptions;\n        this.dropdownOptions = options.dropdownTypes ?? this.dropdownOptions;\n      }\n    }\n  };\n  var FeatureOptions = class {\n    constructor() {\n      this.featureId = "feature";\n      this.enabled = true;\n      this.unavailable = false;\n      this.alwaysEnabled = false;\n      this.hideSettingsButton = false;\n    }\n    setAvailable(value) {\n      this.unavailable = !value;\n      this.enabled = value;\n    }\n  };\n  var InsertedFeatureOptions = class extends FeatureOptions {\n    constructor(featureId, featurePlacement) {\n      super();\n      this.featurePlacement = new FeatureRelation();\n      \n      this.featureId = featureId ?? "inserted-feature";\n      this.featurePlacement = featurePlacement ?? new FeatureRelation();\n    }\n    insertFeature(container, feature) {\n      if (!container)\n        return false;\n      let relation = container.querySelector(this.featurePlacement.selector);\n      if (relation) {\n        switch (this.featurePlacement.type) {\n          case "before" /* Before */:\n            relation.before(feature);\n            return true;\n          case "after" /* After */:\n            relation.after(feature);\n            return true;\n          case "start" /* Start */:\n            relation.prepend(feature);\n            return true;\n          case "end" /* End */:\n            relation.append(feature);\n            return true;\n          default:\n            return false;\n        }\n      }\n      return false;\n    }\n  };\n  var InsertedFeatureOptionsWithTitle = class extends InsertedFeatureOptions {\n    constructor() {\n      super(...arguments);\n      this.displayTitle = "Feature";\n      \n    }\n  };\n  var FetchedFeatureOptions = class extends InsertedFeatureOptions {\n    constructor() {\n      super(...arguments);\n      \n    }\n  };\n\n  // src/shared/features/aliases.ts\n  var AliasesOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.featureId = "aliases";\n      this.displayTitle = "Aliases";\n      this.featurePlacement = new FeatureRelation(".header .data-bar", "start" /* Start */);\n    }\n  };\n\n  // src/shared/features/backlinks.ts\n  \n  var BacklinksOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.featureId = "backlinks";\n      this.displayTitle = \'\';\n      this.featurePlacement = new FeatureRelation(".footer", "start" /* Start */);\n    }\n  };\n\n  // src/shared/shared.ts\n  var Shared = class {\n  };\n  Shared.libFolderName = "site-lib";\n  Shared.mediaFolderName = "media";\n  Shared.scriptsFolderName = "scripts";\n  Shared.cssFolderName = "styles";\n  Shared.fontFolderName = "fonts";\n  Shared.htmlFolderName = "html";\n  Shared.metadataFileName = "metadata.json";\n  Shared.searchIndexFileName = "search-index.json";\n\n  // src/shared/features/custom-head.ts\n  \n  var CustomHeadOptions = class extends FetchedFeatureOptions {\n    constructor() {\n      super();\n      this.sourcePath = "";\n      \n      this.featureId = "custom-head";\n      this.featurePlacement = new FeatureRelation("head", "end" /* End */);\n      this.includePath = `${Shared.libFolderName}/${Shared.htmlFolderName}/custom-head.html`;\n    }\n  };\n\n  // src/shared/features/document.ts\n  \n  var DocumentOptions = class extends FeatureOptions {\n    constructor() {\n      super();\n      this.allowFoldingLists = true;\n      this.allowFoldingHeadings = true;\n      this.documentWidth = "40em";\n      \n      \n      \n      this.featureId = "obsidian-document";\n      this.alwaysEnabled = true;\n    }\n  };\n\n  // src/shared/features/file-navigation.ts\n  \n  var FileNavigationOptions = class extends FetchedFeatureOptions {\n    constructor() {\n      super();\n      this.showCustomIcons = false;\n      this.showDefaultFolderIcons = false;\n      this.showDefaultFileIcons = false;\n      this.defaultFolderIcon = "lucide//folder";\n      this.defaultFileIcon = "lucide//file";\n      this.defaultMediaIcon = "lucide//file-image";\n      this.exposeStartingPath = true;\n      \n      \n      \n      \n      \n      \n      \n      this.featureId = "file-navigation";\n      this.featurePlacement = new FeatureRelation("#left-sidebar-content", "end" /* End */);\n      this.includePath = `${Shared.libFolderName}/${Shared.htmlFolderName}/file-tree.html`;\n    }\n  };\n\n  // src/shared/features/graph-view.ts\n  \n  var GraphViewOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.showOrphanNodes = true;\n      this.showAttachments = false;\n      this.allowGlobalGraph = true;\n      this.allowExpand = true;\n      this.attractionForce = 1;\n      this.linkLength = 15;\n      this.repulsionForce = 80;\n      this.centralForce = 2;\n      this.edgePruning = 100;\n      this.minNodeRadius = 3;\n      this.maxNodeRadius = 7;\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      this.featureId = "graph-view";\n      this.displayTitle = \'\';\n      this.featurePlacement = new FeatureRelation("#right-sidebar-content", "start" /* Start */);\n    }\n  };\n\n  // src/shared/features/link-preview.ts\n  var LinkPreviewOptions = class extends FeatureOptions {\n    constructor() {\n      super();\n      this.featureId = "link-preview";\n      this.hideSettingsButton = true;\n    }\n  };\n\n  // src/shared/features/outline.ts\n  \n  var OutlineOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.startCollapsed = false;\n      this.minCollapseDepth = 0;\n      \n      \n      this.featureId = "outline";\n      this.displayTitle = \'\';\n      this.featurePlacement = new FeatureRelation("#right-sidebar-content", "end" /* End */);\n    }\n  };\n\n  // src/shared/features/properties.ts\n  \n  var PropertiesOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      \n      this.featureId = "properties";\n      this.displayTitle = \'\';\n      this.featurePlacement = new FeatureRelation(".header", "start" /* Start */);\n    }\n  };\n\n  // src/shared/features/rss.ts\n  \n  var RssOptions = class extends FeatureOptions {\n    constructor() {\n      super();\n      this.siteUrl = "";\n      this.authorName = "";\n      \n      \n      this.featureId = "rss";\n    }\n  };\n\n  // src/shared/features/search.ts\n  \n  var SearchOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.featureId = "search";\n      this.displayTitle = \'\';\n      this.featurePlacement = new FeatureRelation("#left-sidebar .topbar-content", "start" /* Start */);\n    }\n  };\n\n  // src/shared/features/sidebar.ts\n  \n  var SidebarOptions = class extends FeatureOptions {\n    constructor() {\n      super();\n      this.allowResizing = true;\n      this.allowCollapsing = true;\n      this.rightDefaultWidth = "20em";\n      this.leftDefaultWidth = "20em";\n      \n      \n      \n      \n      this.featureId = "sidebar";\n    }\n  };\n\n  // src/shared/features/tags.ts\n  \n  var TagsOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.showInlineTags = true;\n      this.showFrontmatterTags = true;\n      \n      \n      this.featureId = "tags";\n      this.displayTitle = "";\n      this.featurePlacement = new FeatureRelation(".header .data-bar", "end" /* End */);\n    }\n  };\n\n  // src/shared/features/theme-toggle.ts\n  var ThemeToggleOptions = class extends InsertedFeatureOptionsWithTitle {\n    constructor() {\n      super();\n      this.featureId = "theme-toggle";\n      this.displayTitle = "";\n      this.featurePlacement = new FeatureRelation("#right-sidebar .topbar-content", "start" /* Start */);\n    }\n  };\n\n  // src/shared/website-data.ts\n  var WebsiteOptions = class {\n    static fromJSON(json) {\n      let data = Object.assign(new WebsiteOptions(), JSON.parse(json));\n      data.backlinks = Object.assign(new BacklinksOptions(), data.backlinks);\n      data.tags = Object.assign(new TagsOptions(), data.tags);\n      data.alias = Object.assign(new AliasesOptions(), data.alias);\n      data.properties = Object.assign(new PropertiesOptions(), data.properties);\n      data.fileNavigation = Object.assign(new FileNavigationOptions(), data.fileNavigation);\n      data.search = Object.assign(new SearchOptions(), data.search);\n      data.outline = Object.assign(new OutlineOptions(), data.outline);\n      data.themeToggle = Object.assign(new ThemeToggleOptions(), data.themeToggle);\n      data.graphView = Object.assign(new GraphViewOptions(), data.graphView);\n      data.sidebar = Object.assign(new SidebarOptions(), data.sidebar);\n      data.customHead = Object.assign(new CustomHeadOptions(), data.customHead);\n      data.document = Object.assign(new DocumentOptions(), data.document);\n      data.rss = Object.assign(new RssOptions(), data.rss);\n      data.linkPreview = Object.assign(new LinkPreviewOptions(), data.linkPreview);\n      return data;\n    }\n  };\n  var WebsiteData = class {\n    constructor() {\n      this.ignoreMetadata = false;\n      this.webpages = {};\n      this.fileInfo = {};\n      this.sourceToTarget = {};\n      this.attachments = [];\n      this.shownInTree = [];\n      this.allFiles = [];\n      this.siteName = "";\n      this.vaultName = "";\n      this.createdTime = 0;\n      this.modifiedTime = 0;\n      this.pluginVersion = "";\n      this.exportRoot = "";\n      this.baseURL = "";\n      this.themeName = "";\n      this.bodyClasses = "";\n      this.hasFavicon = false;\n      this.featureOptions = new WebsiteOptions();\n    }\n    static fromJSON(json) {\n      let data = Object.assign(new WebsiteData(), JSON.parse(json));\n      data.featureOptions = WebsiteOptions.fromJSON(JSON.stringify(data.featureOptions));\n      return data;\n    }\n  };\n\n  // src/frontend/main/callouts.ts\n  var Callout = class {\n    constructor(calloutEl, initEvents = true) {\n      this._collapsed = false;\n      this.calloutEl = calloutEl;\n      this.titleEl = calloutEl.querySelector(".callout-title-inner");\n      this.contentEl = calloutEl.querySelector(".callout-content");\n      this.iconEl = calloutEl.querySelector(".callout-icon");\n      this.foldIconEl = calloutEl.querySelector(".callout-fold");\n      const fold = calloutEl.getAttribute("data-callout-fold");\n      switch (fold) {\n        case "+":\n          this.foldType = 0 /* StartOpen */;\n          this._collapsed = false;\n          break;\n        case "-":\n          this.foldType = 1 /* StartClosed */;\n          this._collapsed = true;\n          break;\n        default:\n          this.foldType = 2 /* Static */;\n          this._collapsed = false;\n          break;\n      }\n      this.type = calloutEl.getAttribute("data-callout") ?? "";\n      this.metadata = calloutEl.getAttribute("data-callout-metadata") ?? "";\n      if (initEvents)\n        this.init();\n    }\n    get title() {\n      return this.titleEl?.textContent ?? "";\n    }\n    set title(title) {\n      this.titleEl.textContent = title;\n    }\n    get collapsed() {\n      return this._collapsed;\n    }\n    set collapsed(collapse) {\n      this.toggle(collapse);\n    }\n    toggle(force) {\n      if (this.foldType == 2 /* Static */)\n        return;\n      if (force === void 0)\n        force = !this._collapsed;\n      this.calloutEl?.classList.toggle("is-collapsed", force);\n      this.foldIconEl?.classList.toggle("is-collapsed", force);\n      if (force)\n        slideUp(this.contentEl, 150);\n      else\n        slideDown(this.contentEl, 150);\n      this._collapsed = force;\n    }\n    collapse() {\n      this.toggle(true);\n    }\n    expand() {\n      this.toggle(false);\n    }\n    init() {\n      if (this.foldIconEl) {\n        this.foldIconEl.addEventListener("click", () => {\n          this.toggle();\n        });\n      }\n    }\n  };\n\n  // src/frontend/main/headers.ts\n  var _Header = class {\n    constructor(element) {\n      this._children = [];\n      this._isCollapsed = false;\n      this._content = [];\n      this._divParent = element.parentElement;\n      this._headerElement = element;\n      this._collapseIndicatorElement = this._headerElement.querySelector(".heading-collapse-indicator");\n      this._id = element.id;\n      this._level = parseInt(element.tagName.replace("H", ""));\n      _Header.headerMap.set(element, this);\n      if (this._collapseIndicatorElement) {\n        this._collapseIndicatorElement.addEventListener("click", () => {\n          this.toggleCollapse();\n        });\n      }\n    }\n    get id() {\n      return this._id;\n    }\n    get text() {\n      return this._headerElement.textContent ?? "";\n    }\n    set text(value) {\n      this._headerElement.textContent = value;\n    }\n    get level() {\n      return this._level;\n    }\n    get headerElement() {\n      return this._headerElement;\n    }\n    get collapseIndicatorElement() {\n      return this._collapseIndicatorElement;\n    }\n    get children() {\n      return this._children;\n    }\n    get isCollapsed() {\n      return this._isCollapsed;\n    }\n    scrollTo(options = { behavior: "smooth", block: "start" }) {\n      this._headerElement.scrollIntoView(options);\n    }\n    find(predicate) {\n      if (predicate(this)) {\n        return this;\n      }\n      for (const child of this.children) {\n        const result = child.find(predicate);\n        if (result) {\n          return result;\n        }\n      }\n      return void 0;\n    }\n    findByID(id) {\n      if (id.startsWith("#")) {\n        id = id.substring(1);\n      }\n      return this.find((header) => header.id === id);\n    }\n    getFlatChildren() {\n      let headers = [this];\n      for (const child of this._children) {\n        headers = headers.concat(child.getFlatChildren());\n      }\n      return headers;\n    }\n    toggleCollapse() {\n      this._isCollapsed = !this._isCollapsed;\n      this._collapseIndicatorElement?.classList.toggle("is-collapsed", this._isCollapsed);\n      this._headerElement.classList.toggle("is-collapsed", this._isCollapsed);\n      this.updateVisibility(this._isCollapsed);\n    }\n    updateVisibility(collapse) {\n      this._collapseIndicatorElement?.classList.toggle("is-collapsed", collapse);\n      this._headerElement.classList.toggle("is-collapsed", collapse);\n      for (const element of this._content) {\n        element.style.display = collapse ? "none" : "";\n      }\n      for (const child of this._children) {\n        child.headerElement.style.display = collapse ? "none" : "";\n        if (collapse) {\n          child.updateVisibility(true);\n        } else {\n          child.updateVisibility(child._isCollapsed);\n        }\n      }\n    }\n    getHeaderWithContentRecursive() {\n      let content = [];\n      content.push(this._divParent);\n      for (const element of this._content) {\n        content.push(element);\n      }\n      for (const child of this._children) {\n        content = content.concat(child.getHeaderWithContentRecursive());\n      }\n      return content;\n    }\n    static createHeaderTree(html) {\n      const headers = Array.from(html.querySelectorAll("h1, h2, h3, h4, h5, h6"));\n      const headerObjects = headers.map((el) => new _Header(el));\n      const rootHeaders = [];\n      const stack = [];\n      for (let i = 0; i < headerObjects.length; i++) {\n        const currentHeader = headerObjects[i];\n        while (stack.length > 0 && stack[stack.length - 1].level >= currentHeader.level) {\n          stack.pop();\n        }\n        if (stack.length > 0) {\n          stack[stack.length - 1].children.push(currentHeader);\n        } else {\n          rootHeaders.push(currentHeader);\n        }\n        stack.push(currentHeader);\n        let nextElement = currentHeader.headerElement.nextElementSibling;\n        while (nextElement && !(nextElement instanceof HTMLHeadingElement)) {\n          if (nextElement instanceof HTMLElement) {\n            currentHeader._content.push(nextElement);\n          }\n          nextElement = nextElement.nextElementSibling;\n        }\n        nextElement = currentHeader.headerElement.parentElement?.nextElementSibling ?? null;\n        while (nextElement && !nextElement.querySelector("h1, h2, h3, h4, h5, h6")) {\n          if (nextElement instanceof HTMLElement && !nextElement.classList.contains("footer")) {\n            currentHeader._content.push(nextElement);\n          }\n          nextElement = nextElement.nextElementSibling;\n        }\n      }\n      return rootHeaders;\n    }\n  };\n  var Header = _Header;\n  Header.headerMap = /* @__PURE__ */ new WeakMap();\n\n  // src/frontend/main/link-preview.ts\n  var _FilePreviewPopover = class {\n    constructor(link, target, onRemove) {\n      this.isPinned = false;\n      this.resizeObserver = null;\n      this.hoverTimeout = null;\n      this.showTimeout = null;\n      this.link = link;\n      this.target = target;\n      this.onRemove = onRemove;\n      this.createPreviewElements();\n      this.setupEventListeners();\n      this.positionPreview();\n      this.setupOutsideClickListener();\n    }\n    static savePinnedPreviews() {\n      const previewDatas = _FilePreviewPopover.pinnedPreviews.map((preview) => {\n        return {\n          target: preview.target,\n          top: preview.filePreviewPopover.style.top,\n          left: preview.filePreviewPopover.style.left,\n          width: preview.filePreviewPopover.style.width,\n          height: preview.filePreviewPopover.style.height,\n          zIndex: preview.filePreviewPopover.style.zIndex\n        };\n      });\n      localStorage.setItem("pinnedPreviews", JSON.stringify(previewDatas));\n    }\n    static loadPinnedPreviews() {\n      const previewDatas = JSON.parse(localStorage.getItem("pinnedPreviews") ?? "[]");\n      previewDatas.forEach(async (previewData) => {\n        const preview = new _FilePreviewPopover(null, previewData.target, () => {\n        });\n        preview.setPinned(true);\n        preview.filePreviewPopover.style.top = previewData.top;\n        preview.filePreviewPopover.style.left = previewData.left;\n        preview.filePreviewPopover.style.width = previewData.width;\n        preview.filePreviewPopover.style.height = previewData.height;\n        preview.filePreviewPopover.style.zIndex = previewData.zIndex || _FilePreviewPopover.baseZIndex.toString();\n        preview.show();\n      });\n    }\n    static create(target, x, y, pinned = true) {\n      const preview = new _FilePreviewPopover(null, target, () => {\n      });\n      preview.setPinned(pinned);\n      preview.filePreviewPopover.style.top = y + "px";\n      preview.filePreviewPopover.style.left = x + "px";\n      preview.show();\n    }\n    static initializeLink(link, target) {\n      let preview = null;\n      link.addEventListener("pointerenter", function() {\n        if (!preview) {\n          preview = new _FilePreviewPopover(link, target, () => {\n            preview = null;\n          });\n          preview.startShowTimeout();\n        }\n      });\n      link.addEventListener("pointerleave", function() {\n        if (preview) {\n          if (!preview.isPinned) {\n            preview.startRemoveTimeout();\n          }\n          preview.clearShowTimeout();\n        }\n      });\n      link.addEventListener("click", function(event) {\n        if (preview) {\n          if (!preview.isPinned) {\n            preview.startRemoveTimeout();\n          }\n          preview.clearShowTimeout();\n        }\n      });\n    }\n    createPreviewElements() {\n      this.filePreviewPopover = document.createElement("div");\n      this.filePreviewPopover.className = "file-preview popover hover-popover hide";\n      document.body.appendChild(this.filePreviewPopover);\n      this.markdownEmbed = document.createElement("div");\n      this.markdownEmbed.className = "markdown-embed";\n      this.filePreviewPopover.appendChild(this.markdownEmbed);\n      this.markdownEmbedContent = document.createElement("div");\n      this.markdownEmbedContent.className = "markdown-embed-content";\n      this.markdownEmbed.appendChild(this.markdownEmbedContent);\n      this.actionContainer = document.createElement("div");\n      this.actionContainer.className = "preview-action-container";\n      this.filePreviewPopover.appendChild(this.actionContainer);\n      this.dragHandle = document.createElement("div");\n      this.dragHandle.className = "drag-handle clickable-icon popover-action";\n      this.actionContainer.appendChild(this.dragHandle);\n      this.pinButton = document.createElement("button");\n      this.pinButton.className = "pin-button clickable-icon popover-action";\n      this.actionContainer.appendChild(this.pinButton);\n      this.goToButton = document.createElement("button");\n      this.goToButton.className = "go-to-button clickable-icon popover-action";\n      this.actionContainer.appendChild(this.goToButton);\n      this.filePreviewPopover.style.zIndex = _FilePreviewPopover.baseZIndex.toString();\n      this.bringToFront();\n    }\n    setPinned(pinned) {\n      this.isPinned = pinned;\n      this.pinButton.classList.toggle("pinned", this.isPinned);\n      this.filePreviewPopover.classList.toggle("pinned", this.isPinned);\n      if (this.isPinned) {\n        _FilePreviewPopover.pinnedPreviews.push(this);\n      } else {\n        _FilePreviewPopover.pinnedPreviews = _FilePreviewPopover.pinnedPreviews.filter((preview) => preview !== this);\n      }\n    }\n    setupEventListeners() {\n      this.pinButton.addEventListener("click", () => {\n        this.setPinned(!this.isPinned);\n        _FilePreviewPopover.savePinnedPreviews();\n      });\n      this.goToButton.addEventListener("click", () => {\n        ObsidianSite.loadURL(this.target);\n      });\n      this.setupDragHandleListeners();\n      this.filePreviewPopover.addEventListener("pointerenter", () => {\n        this.clearRemoveTimeout();\n      });\n      this.filePreviewPopover.addEventListener("pointerleave", () => {\n        if (!this.isPinned) {\n          this.startRemoveTimeout();\n        }\n      });\n      this.setupResizeObserver();\n    }\n    updateMaxSize() {\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n      const rect = this.filePreviewPopover.getBoundingClientRect();\n      const margin = 10;\n      const maxWidth = viewportWidth - rect.left - margin;\n      const maxHeight = viewportHeight - rect.top - margin;\n      this.filePreviewPopover.style.maxWidth = `${maxWidth}px`;\n      this.filePreviewPopover.style.maxHeight = `${maxHeight}px`;\n      const newLeft = Math.max(margin, rect.left);\n      const newTop = Math.max(margin, rect.top);\n      if (newLeft !== rect.left) {\n        this.filePreviewPopover.style.left = `${newLeft}px`;\n      }\n      if (newTop !== rect.top) {\n        this.filePreviewPopover.style.top = `${newTop}px`;\n      }\n      _FilePreviewPopover.savePinnedPreviews();\n    }\n    setupResizeObserver() {\n      this.updateMaxSize();\n      this.resizeObserver = new ResizeObserver(() => {\n        this.updateMaxSize();\n      });\n      this.resizeObserver.observe(this.filePreviewPopover);\n      window.addEventListener("resize", this.updateMaxSize);\n    }\n    dragPreviewCallback(event) {\n      event.stopPropagation();\n      this.bringToFront();\n      const offsetX = event.clientX - this.filePreviewPopover.getBoundingClientRect().left;\n      const offsetY = event.clientY - this.filePreviewPopover.getBoundingClientRect().top;\n      const onPointerMove = (event2) => {\n        let newLeft = event2.clientX - offsetX;\n        let newTop = event2.clientY - offsetY;\n        const viewportWidth = window.innerWidth;\n        const viewportHeight = window.innerHeight;\n        const previewRect = this.filePreviewPopover.getBoundingClientRect();\n        newLeft = Math.max(0, Math.min(newLeft, viewportWidth - previewRect.width));\n        newTop = Math.max(0, Math.min(newTop, viewportHeight - previewRect.height));\n        this.filePreviewPopover.style.left = newLeft + "px";\n        this.filePreviewPopover.style.top = newTop + "px";\n        this.updateMaxSize();\n      };\n      const onPointerUp = () => {\n        if (this.isPinned) {\n          _FilePreviewPopover.savePinnedPreviews();\n        }\n        document.removeEventListener("pointermove", onPointerMove);\n        document.removeEventListener("pointerup", onPointerUp);\n      };\n      document.addEventListener("pointermove", onPointerMove);\n      document.addEventListener("pointerup", onPointerUp);\n    }\n    setupDragHandleListeners() {\n      this.dragHandle.addEventListener("pointerdown", this.dragPreviewCallback.bind(this));\n      this.actionContainer.addEventListener("pointerdown", this.dragPreviewCallback.bind(this));\n    }\n    positionPreview() {\n      if (!this.link)\n        return;\n      const linkRect = this.link.getBoundingClientRect();\n      const previewRect = this.filePreviewPopover.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n      this.filePreviewPopover.style.top = "";\n      this.filePreviewPopover.style.left = "";\n      const margin = 10;\n      let top, left;\n      if (viewportHeight - linkRect.bottom >= previewRect.height + margin) {\n        top = linkRect.bottom + margin;\n      } else {\n        top = Math.max(margin, linkRect.top - previewRect.height - margin);\n      }\n      left = linkRect.left;\n      if (left + previewRect.width > viewportWidth - margin) {\n        left = Math.max(margin, linkRect.right - previewRect.width);\n      }\n      top = Math.min(Math.max(margin, top), viewportHeight - previewRect.height - margin);\n      left = Math.min(Math.max(margin, left), viewportWidth - previewRect.width - margin);\n      this.filePreviewPopover.style.top = `${top}px`;\n      this.filePreviewPopover.style.left = `${left}px`;\n    }\n    setupOutsideClickListener() {\n      this.outsideClickListener = (event) => {\n        if (!this.isPinned && !this.filePreviewPopover.contains(event.target) && !this.link?.contains(event.target)) {\n          this.remove();\n        }\n      };\n      document.addEventListener("pointerdown", this.outsideClickListener);\n    }\n    startShowTimeout() {\n      this.clearShowTimeout();\n      this.showTimeout = window.setTimeout(() => this.show(), 350);\n    }\n    clearShowTimeout() {\n      if (this.showTimeout !== null) {\n        clearTimeout(this.showTimeout);\n        this.showTimeout = null;\n      }\n    }\n    async show() {\n      this.filePreviewDocument = new WebpageDocument(this.target);\n      await (await this.filePreviewDocument.load(null, this.markdownEmbedContent, true, true))?.show();\n      this.positionPreview();\n      this.filePreviewPopover.classList.remove("hide");\n    }\n    bringToFront() {\n      let maxZIndex = Math.max(_FilePreviewPopover.baseZIndex, ..._FilePreviewPopover.pinnedPreviews.map((p) => parseInt(p.filePreviewPopover.style.zIndex) || _FilePreviewPopover.baseZIndex));\n      if (maxZIndex >= _FilePreviewPopover.maxZIndex) {\n        _FilePreviewPopover.pinnedPreviews.forEach((p, index) => {\n          p.filePreviewPopover.style.zIndex = (_FilePreviewPopover.baseZIndex + index).toString();\n        });\n        maxZIndex = _FilePreviewPopover.baseZIndex + _FilePreviewPopover.pinnedPreviews.length - 1;\n      }\n      this.filePreviewPopover.style.zIndex = (maxZIndex + 1).toString();\n    }\n    startRemoveTimeout() {\n      this.clearRemoveTimeout();\n      this.hoverTimeout = window.setTimeout(() => this.remove(), 300);\n    }\n    clearRemoveTimeout() {\n      if (this.hoverTimeout !== null) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = null;\n      }\n    }\n    remove() {\n      this.clearRemoveTimeout();\n      this.clearShowTimeout();\n      if (this.filePreviewPopover && this.filePreviewPopover.parentNode) {\n        this.filePreviewPopover.parentNode.removeChild(this.filePreviewPopover);\n      }\n      if (this.resizeObserver) {\n        this.resizeObserver.disconnect();\n      }\n      window.removeEventListener("resize", this.updateMaxSize);\n      document.removeEventListener("pointerdown", this.outsideClickListener);\n      this.onRemove();\n    }\n  };\n  var FilePreviewPopover = _FilePreviewPopover;\n  FilePreviewPopover.baseZIndex = 100;\n  FilePreviewPopover.maxZIndex = 1e3;\n  FilePreviewPopover.pinnedPreviews = [];\n\n  // src/frontend/main/links.ts\n  var LinkHandler = class {\n    static initializeLinks(onElement) {\n      console.log("Initializing links on element", onElement);\n      onElement?.querySelectorAll(".internal-link, a.tag, a.tree-item-self, a.footnote-link").forEach(function(link) {\n        const target = link.getAttribute("href") ?? "null";\n        if (target == "null") {\n          console.log("No target found for link");\n          return;\n        }\n        link.addEventListener("click", function(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          ObsidianSite.loadURL(target);\n          if (ObsidianSite.deviceSize === "phone") {\n            const leftSidebar = link.closest("#left-sidebar");\n            const rightSidebar = link.closest("#right-sidebar");\n            if (leftSidebar && ObsidianSite.leftSidebar?.collapsed === false) {\n              ObsidianSite.leftSidebar.collapsed = true;\n            } else if (rightSidebar && ObsidianSite.rightSidebar?.collapsed === false) {\n              ObsidianSite.rightSidebar.collapsed = true;\n            }\n          }\n        });\n        if (target && !target.startsWith("http") && !ObsidianSite.documentExists(target)) {\n          link.classList.add("is-unresolved");\n        } else if (link.classList.contains("internal-link")) {\n          if (!ObsidianSite.metadata?.ignoreMetadata && ObsidianSite.metadata?.featureOptions?.linkPreview?.enabled) {\n            FilePreviewPopover.initializeLink(link, target);\n          }\n        }\n      });\n    }\n    static getPathnameFromURL(url) {\n      if (url == "" || url == "/" || url == "\\\\")\n        return "index.html";\n      if (url?.startsWith("#") || url?.startsWith("?"))\n        return (ObsidianSite.document?.pathname?.split("#")[0]?.split("?")[0] ?? "") + (url ?? "");\n      return url?.split("?")[0]?.split("#")[0]?.trim() ?? "";\n    }\n    static getHashFromURL(url) {\n      return (url.split("#")[1] ?? "").split("?")[0]?.trim() ?? "";\n    }\n    static getQueryFromURL(url) {\n      return url.split("?")[1]?.trim() ?? "";\n    }\n    static getFileDataIdFromURL(url) {\n      url = this.getPathnameFromURL(url);\n      if (url.startsWith("./"))\n        url = url.substring(2);\n      while (url.startsWith("../")) {\n        url = url.substring(3);\n      }\n      return btoa(encodeURI(url));\n    }\n  };\n\n  // src/frontend/main/lists.ts\n  var ListItem = class {\n    constructor(element, parent) {\n      this.parent = void 0;\n      this.collapsible = false;\n      this.collapseEl = void 0;\n      this.line = 0;\n      this.itemEl = element;\n      this.parent = parent;\n      this.line = parseInt(this.itemEl.getAttribute("data-line") ?? "0");\n      this.collapseEl = Array.from(this.itemEl.children).find((el) => el.classList.contains("list-collapse-indicator"));\n      const child = this.itemEl.querySelector("ol, ul");\n      if (child) {\n        this.child = new List(child, this);\n        if (this.collapseEl) {\n          this.collapsible = true;\n          const localThis = this;\n          this.collapseEl.addEventListener("click", function(event) {\n            localThis.isCollapsed = !localThis.isCollapsed;\n            event.stopPropagation();\n          });\n        }\n      }\n    }\n    get isChecked() {\n      return this.itemEl.classList.contains("is-checked");\n    }\n    get isCollapsed() {\n      return this.itemEl.classList.contains("is-collapsed");\n    }\n    set isCollapsed(collapse) {\n      this.itemEl.classList.toggle("is-collapsed", collapse);\n      if (this.collapseEl)\n        this.collapseEl.classList.toggle("is-collapsed", collapse);\n    }\n    get textContent() {\n      return Array.prototype.filter.call(this.itemEl.childNodes, (child) => child.nodeType === Node.TEXT_NODE).map((child) => child.textContent).join("").trim();\n    }\n    get htmlContent() {\n      return this.itemEl.innerHTML;\n    }\n  };\n  var List = class {\n    constructor(element, parent) {\n      this.children = [];\n      this.parent = void 0;\n      if (element.tagName != "OL" && element.tagName != "UL")\n        throw new Error("Invalid list element");\n      this.listType = element.tagName == "OL" ? "ordered" /* Ordered */ : element.classList.contains("contains-task-list") ? "checklist" /* Checklist */ : "unordered" /* Unordered */;\n      this.listEl = element;\n      this.parent = parent;\n      const childItems = Array.from(this.listEl.children).filter((el) => el.tagName == "LI");\n      childItems.forEach((child) => {\n        this.children.push(new ListItem(child, this));\n      });\n    }\n    get linearList() {\n      let list = [];\n      this.children.forEach((child) => {\n        list.push(child);\n        if (child.child)\n          list = list.concat(child.child.linearList);\n      });\n      return list;\n    }\n  };\n\n  // src/frontend/main/notifications.ts\n  var Notice = class {\n    constructor(message, duration = 5e3) {\n      this.message = message;\n      this.duration = duration;\n      this.show();\n    }\n    show() {\n      if (!Notice.container) {\n        Notice.container = document.createElement("div");\n        Notice.container.classList.add("notice-container");\n        Notice.container.style.top = "0";\n        Notice.container.style.right = "0";\n        document.body.appendChild(Notice.container);\n      }\n      this.notification = document.createElement("div");\n      this.notification.classList.add("notice");\n      this.notification.innerHTML = this.message;\n      Notice.container.appendChild(this.notification);\n      this.notification.style.opacity = "0";\n      this.notification.style.transform = "translateX(350px)";\n      this.notification.style.transition = "all 0.5s";\n      setTimeout(() => {\n        this.notification.style.opacity = "1";\n        this.notification.style.transform = "translateX(0)";\n        this.notification.style.height = this.notification.scrollHeight + "px";\n      }, 100);\n      setTimeout(() => {\n        this.dismiss();\n      }, this.duration);\n      this.notification.addEventListener("click", () => {\n        this.dismiss();\n      }, { once: true });\n    }\n    dismiss() {\n      if (!this.notification)\n        return;\n      this.notification.style.opacity = "0";\n      this.notification.style.height = "0";\n      this.notification.style.margin = "0";\n      this.notification.style.padding = "0";\n      setTimeout(() => {\n        this.notification.remove();\n      }, 500);\n    }\n  };\n\n  // src/frontend/main/document.ts\n  var WebpageDocument = class {\n    constructor(url) {\n      this.title = "";\n      this.headers = [];\n      this.callouts = [];\n      this.lists = [];\n      this.children = [];\n      this.isPreview = false;\n      this.initialized = false;\n      this._exists = false;\n      if (!window?.location)\n        return;\n      url = url.trim();\n      if (url.startsWith("http") || url.startsWith("www") || url.startsWith("/") || url.startsWith("\\\\")) {\n        console.error("Please use a relative path from the root of the wesite to load a webpage");\n        return;\n      }\n      this.pathname = LinkHandler.getPathnameFromURL(url);\n      this.hash = LinkHandler.getHashFromURL(url);\n      this.query = LinkHandler.getQueryFromURL(url);\n      let origin = window?.location?.origin;\n      if (origin == "null")\n        origin = "file://";\n      this.info = ObsidianSite.getWebpageData(this.pathname);\n      if (!this.info && !ObsidianSite.metadata.ignoreMetadata) {\n        new Notice("This page does not exist yet.");\n        console.warn("This page does not exist yet.", this.pathname);\n        return;\n      }\n      this._exists = true;\n      this.documentType = this.info?.type ?? "markdown" /* Markdown */;\n      this.title = this.info?.title ?? this.pathname;\n    }\n    get isMainDocument() {\n      return this.parent == null && !this.isPreview;\n    }\n    get bounds() {\n      return Bounds.fromElement(this.documentEl);\n    }\n    get exists() {\n      return this._exists;\n    }\n    findHeader(predicate) {\n      for (const header of this.headers) {\n        let result = header.find(predicate);\n        if (result)\n          return result;\n      }\n      return null;\n    }\n    getFlatHeaders() {\n      return this.headers.flatMap((h) => h.getFlatChildren());\n    }\n    scrollToHeader(headerId) {\n      console.log("Scrolling to header", headerId);\n      const header = this.findHeader((h) => h.id == headerId);\n      if (header)\n        header.scrollTo();\n    }\n    findElements() {\n      if (!this.containerEl)\n        this.containerEl = ObsidianSite.centerContentEl;\n      this.sizerEl = this.documentType == "markdown" /* Markdown */ ? this.containerEl.querySelector(".markdown-preview-sizer") : void 0;\n      this.documentEl = this.containerEl.querySelector(".obsidian-document");\n      this.headerEl = this.containerEl.querySelector(".header");\n      this.footerEl = this.containerEl.querySelector(".footer");\n    }\n    async load(parent = null, containerEl = ObsidianSite.centerContentEl, isPreview = false, headerOnly = false) {\n      this.parent = parent;\n      this.isPreview = isPreview;\n      if (!this.pathname || !this.exists)\n        return this;\n      let oldDocument = ObsidianSite.document;\n      await ObsidianSite.showLoading(true, containerEl);\n      this.containerEl = containerEl;\n      const documentReq = await ObsidianSite.fetch(this.pathname);\n      if (documentReq?.ok) {\n        const documentText = await documentReq.text();\n        this.sourceHtml = new DOMParser().parseFromString(documentText, "text/html");\n        let newDocumentEl = this.sourceHtml.querySelector(".obsidian-document");\n        if (newDocumentEl) {\n          newDocumentEl = document.adoptNode(newDocumentEl);\n          const docEl = containerEl.querySelector(".obsidian-document");\n          if (docEl) {\n            docEl.before(newDocumentEl);\n            docEl.remove();\n          } else\n            containerEl.appendChild(newDocumentEl);\n        }\n        await this.loadChildDocuments();\n        await this.postLoadInit();\n        if (this.sizerEl && headerOnly && this.hash && this.hash != "") {\n          var header = this.headers.find((h) => h.findByID(this.hash))?.findByID(this.hash);\n          if (header) {\n            this.sizerEl.innerHTML = header.getHeaderWithContentRecursive().map((e) => e.outerHTML).join("");\n          }\n        }\n        this.initialized = false;\n      } else {\n        new Notice("This document could not be loaded.");\n        console.error("Failed to load document", this.pathname);\n        return void 0;\n      }\n      return this;\n    }\n    async show() {\n      await ObsidianSite.showLoading(false, this.containerEl);\n    }\n    async postLoadInit() {\n      this.findElements();\n      this.postProcess();\n      if (this.isMainDocument || this.isPreview) {\n        this.processHeaders();\n        this.processCallouts();\n        this.processLists();\n      }\n      if (this.documentType == "canvas" /* Canvas */) {\n        this.canvas = new Canvas(this);\n      }\n      if (this.isMainDocument || this.isPreview)\n        LinkHandler.initializeLinks(this.documentEl ?? this.containerEl);\n      return this;\n    }\n    processHeaders() {\n      this.headers = Header.createHeaderTree(this.documentEl);\n    }\n    processCallouts() {\n      const calloutEls = Array.from(this.documentEl.querySelectorAll(".callout"));\n      this.callouts = [];\n      for (const calloutEl of calloutEls) {\n        this.callouts.push(new Callout(calloutEl));\n      }\n    }\n    processLists() {\n      const listEls = Array.from(this.documentEl.querySelectorAll(":is(ul, ol):not(:is(ul, ol) :is(ul, ol))"));\n      this.lists = [];\n      for (const listEl of listEls) {\n        this.lists.push(new List(listEl, void 0));\n      }\n    }\n    postProcess() {\n      this.documentEl?.querySelectorAll(".kanban-plugin__item.is-complete input[type=\'checkbox\']").forEach((el) => el.checked = true);\n      if (!ObsidianSite.metadata.ignoreMetadata) {\n        this.documentEl?.classList.toggle("allow-fold-headings", ObsidianSite.metadata.featureOptions.document.allowFoldingHeadings);\n        this.documentEl?.classList.toggle("allow-fold-lists", ObsidianSite.metadata.featureOptions.document.allowFoldingLists);\n      }\n    }\n    async loadChildDocuments() {\n      this.findElements();\n      let parentTemp = this;\n      let parentCount = 0;\n      while (parentTemp) {\n        parentTemp = parentTemp.parent;\n        parentCount++;\n      }\n      if (parentCount > 4)\n        return;\n      const childRefs = Array.from(this.documentEl.querySelectorAll("link[itemprop=\'include-document\']"));\n      const promises = [];\n      for (const ref of childRefs) {\n        const url = ref.getAttribute("href");\n        if (!url)\n          continue;\n        const childPromise = new WebpageDocument(url).load(this, ref.parentElement);\n        promises.push(childPromise);\n        console.log("Loading child", url);\n        ref.remove();\n      }\n      const childrenTemp = await Promise.all(promises);\n      console.log("Loaded child documents", childrenTemp);\n      this.children.push(...childrenTemp.filter((c) => c != void 0));\n    }\n    async loadChild(url, containerEl) {\n      let child = new WebpageDocument(url);\n      let loaded = await child.load(this, containerEl);\n      if (loaded)\n        this.children.push(loaded);\n      return loaded;\n    }\n    async unloadChild(child) {\n      this.children = this.children.filter((c) => c != child);\n      child.documentEl?.remove();\n    }\n    getMinReadableWidth() {\n      const fontSize = parseFloat(getComputedStyle(this.sizerEl ?? this.documentEl).fontSize);\n      return fontSize * 30;\n    }\n  };\n\n  // node_modules/minisearch/dist/es/index.js\n  function __awaiter(thisArg, _arguments, P, generator) {\n    function adopt(value) {\n      return value instanceof P ? value : new P(function(resolve) {\n        resolve(value);\n      });\n    }\n    return new (P || (P = Promise))(function(resolve, reject) {\n      function fulfilled(value) {\n        try {\n          step(generator.next(value));\n        } catch (e) {\n          reject(e);\n        }\n      }\n      function rejected(value) {\n        try {\n          step(generator["throw"](value));\n        } catch (e) {\n          reject(e);\n        }\n      }\n      function step(result) {\n        result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n      }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n  }\n  var ENTRIES = "ENTRIES";\n  var KEYS = "KEYS";\n  var VALUES = "VALUES";\n  var LEAF = "";\n  var TreeIterator = class {\n    constructor(set, type) {\n      const node = set._tree;\n      const keys = Array.from(node.keys());\n      this.set = set;\n      this._type = type;\n      this._path = keys.length > 0 ? [{ node, keys }] : [];\n    }\n    next() {\n      const value = this.dive();\n      this.backtrack();\n      return value;\n    }\n    dive() {\n      if (this._path.length === 0) {\n        return { done: true, value: void 0 };\n      }\n      const { node, keys } = last$1(this._path);\n      if (last$1(keys) === LEAF) {\n        return { done: false, value: this.result() };\n      }\n      const child = node.get(last$1(keys));\n      this._path.push({ node: child, keys: Array.from(child.keys()) });\n      return this.dive();\n    }\n    backtrack() {\n      if (this._path.length === 0) {\n        return;\n      }\n      const keys = last$1(this._path).keys;\n      keys.pop();\n      if (keys.length > 0) {\n        return;\n      }\n      this._path.pop();\n      this.backtrack();\n    }\n    key() {\n      return this.set._prefix + this._path.map(({ keys }) => last$1(keys)).filter((key) => key !== LEAF).join("");\n    }\n    value() {\n      return last$1(this._path).node.get(LEAF);\n    }\n    result() {\n      switch (this._type) {\n        case VALUES:\n          return this.value();\n        case KEYS:\n          return this.key();\n        default:\n          return [this.key(), this.value()];\n      }\n    }\n    [Symbol.iterator]() {\n      return this;\n    }\n  };\n  var last$1 = (array) => {\n    return array[array.length - 1];\n  };\n  var fuzzySearch = (node, query, maxDistance) => {\n    const results = /* @__PURE__ */ new Map();\n    if (query === void 0)\n      return results;\n    const n = query.length + 1;\n    const m = n + maxDistance;\n    const matrix = new Uint8Array(m * n).fill(maxDistance + 1);\n    for (let j = 0; j < n; ++j)\n      matrix[j] = j;\n    for (let i = 1; i < m; ++i)\n      matrix[i * n] = i;\n    recurse(node, query, maxDistance, results, matrix, 1, n, "");\n    return results;\n  };\n  var recurse = (node, query, maxDistance, results, matrix, m, n, prefix) => {\n    const offset = m * n;\n    key:\n      for (const key of node.keys()) {\n        if (key === LEAF) {\n          const distance = matrix[offset - 1];\n          if (distance <= maxDistance) {\n            results.set(prefix, [node.get(key), distance]);\n          }\n        } else {\n          let i = m;\n          for (let pos = 0; pos < key.length; ++pos, ++i) {\n            const char = key[pos];\n            const thisRowOffset = n * i;\n            const prevRowOffset = thisRowOffset - n;\n            let minDistance = matrix[thisRowOffset];\n            const jmin = Math.max(0, i - maxDistance - 1);\n            const jmax = Math.min(n - 1, i + maxDistance);\n            for (let j = jmin; j < jmax; ++j) {\n              const different = char !== query[j];\n              const rpl = matrix[prevRowOffset + j] + +different;\n              const del = matrix[prevRowOffset + j + 1] + 1;\n              const ins = matrix[thisRowOffset + j] + 1;\n              const dist = matrix[thisRowOffset + j + 1] = Math.min(rpl, del, ins);\n              if (dist < minDistance)\n                minDistance = dist;\n            }\n            if (minDistance > maxDistance) {\n              continue key;\n            }\n          }\n          recurse(node.get(key), query, maxDistance, results, matrix, i, n, prefix + key);\n        }\n      }\n  };\n  var SearchableMap = class {\n    constructor(tree = /* @__PURE__ */ new Map(), prefix = "") {\n      this._size = void 0;\n      this._tree = tree;\n      this._prefix = prefix;\n    }\n    atPrefix(prefix) {\n      if (!prefix.startsWith(this._prefix)) {\n        throw new Error("Mismatched prefix");\n      }\n      const [node, path] = trackDown(this._tree, prefix.slice(this._prefix.length));\n      if (node === void 0) {\n        const [parentNode, key] = last(path);\n        for (const k of parentNode.keys()) {\n          if (k !== LEAF && k.startsWith(key)) {\n            const node2 = /* @__PURE__ */ new Map();\n            node2.set(k.slice(key.length), parentNode.get(k));\n            return new SearchableMap(node2, prefix);\n          }\n        }\n      }\n      return new SearchableMap(node, prefix);\n    }\n    clear() {\n      this._size = void 0;\n      this._tree.clear();\n    }\n    delete(key) {\n      this._size = void 0;\n      return remove(this._tree, key);\n    }\n    entries() {\n      return new TreeIterator(this, ENTRIES);\n    }\n    forEach(fn) {\n      for (const [key, value] of this) {\n        fn(key, value, this);\n      }\n    }\n    fuzzyGet(key, maxEditDistance) {\n      return fuzzySearch(this._tree, key, maxEditDistance);\n    }\n    get(key) {\n      const node = lookup(this._tree, key);\n      return node !== void 0 ? node.get(LEAF) : void 0;\n    }\n    has(key) {\n      const node = lookup(this._tree, key);\n      return node !== void 0 && node.has(LEAF);\n    }\n    keys() {\n      return new TreeIterator(this, KEYS);\n    }\n    set(key, value) {\n      if (typeof key !== "string") {\n        throw new Error("key must be a string");\n      }\n      this._size = void 0;\n      const node = createPath(this._tree, key);\n      node.set(LEAF, value);\n      return this;\n    }\n    get size() {\n      if (this._size) {\n        return this._size;\n      }\n      this._size = 0;\n      const iter = this.entries();\n      while (!iter.next().done)\n        this._size += 1;\n      return this._size;\n    }\n    update(key, fn) {\n      if (typeof key !== "string") {\n        throw new Error("key must be a string");\n      }\n      this._size = void 0;\n      const node = createPath(this._tree, key);\n      node.set(LEAF, fn(node.get(LEAF)));\n      return this;\n    }\n    fetch(key, initial) {\n      if (typeof key !== "string") {\n        throw new Error("key must be a string");\n      }\n      this._size = void 0;\n      const node = createPath(this._tree, key);\n      let value = node.get(LEAF);\n      if (value === void 0) {\n        node.set(LEAF, value = initial());\n      }\n      return value;\n    }\n    values() {\n      return new TreeIterator(this, VALUES);\n    }\n    [Symbol.iterator]() {\n      return this.entries();\n    }\n    static from(entries) {\n      const tree = new SearchableMap();\n      for (const [key, value] of entries) {\n        tree.set(key, value);\n      }\n      return tree;\n    }\n    static fromObject(object) {\n      return SearchableMap.from(Object.entries(object));\n    }\n  };\n  var trackDown = (tree, key, path = []) => {\n    if (key.length === 0 || tree == null) {\n      return [tree, path];\n    }\n    for (const k of tree.keys()) {\n      if (k !== LEAF && key.startsWith(k)) {\n        path.push([tree, k]);\n        return trackDown(tree.get(k), key.slice(k.length), path);\n      }\n    }\n    path.push([tree, key]);\n    return trackDown(void 0, "", path);\n  };\n  var lookup = (tree, key) => {\n    if (key.length === 0 || tree == null) {\n      return tree;\n    }\n    for (const k of tree.keys()) {\n      if (k !== LEAF && key.startsWith(k)) {\n        return lookup(tree.get(k), key.slice(k.length));\n      }\n    }\n  };\n  var createPath = (node, key) => {\n    const keyLength = key.length;\n    outer:\n      for (let pos = 0; node && pos < keyLength; ) {\n        for (const k of node.keys()) {\n          if (k !== LEAF && key[pos] === k[0]) {\n            const len = Math.min(keyLength - pos, k.length);\n            let offset = 1;\n            while (offset < len && key[pos + offset] === k[offset])\n              ++offset;\n            const child2 = node.get(k);\n            if (offset === k.length) {\n              node = child2;\n            } else {\n              const intermediate = /* @__PURE__ */ new Map();\n              intermediate.set(k.slice(offset), child2);\n              node.set(key.slice(pos, pos + offset), intermediate);\n              node.delete(k);\n              node = intermediate;\n            }\n            pos += offset;\n            continue outer;\n          }\n        }\n        const child = /* @__PURE__ */ new Map();\n        node.set(key.slice(pos), child);\n        return child;\n      }\n    return node;\n  };\n  var remove = (tree, key) => {\n    const [node, path] = trackDown(tree, key);\n    if (node === void 0) {\n      return;\n    }\n    node.delete(LEAF);\n    if (node.size === 0) {\n      cleanup(path);\n    } else if (node.size === 1) {\n      const [key2, value] = node.entries().next().value;\n      merge(path, key2, value);\n    }\n  };\n  var cleanup = (path) => {\n    if (path.length === 0) {\n      return;\n    }\n    const [node, key] = last(path);\n    node.delete(key);\n    if (node.size === 0) {\n      cleanup(path.slice(0, -1));\n    } else if (node.size === 1) {\n      const [key2, value] = node.entries().next().value;\n      if (key2 !== LEAF) {\n        merge(path.slice(0, -1), key2, value);\n      }\n    }\n  };\n  var merge = (path, key, value) => {\n    if (path.length === 0) {\n      return;\n    }\n    const [node, nodeKey] = last(path);\n    node.set(nodeKey + key, value);\n    node.delete(nodeKey);\n  };\n  var last = (array) => {\n    return array[array.length - 1];\n  };\n  var OR = "or";\n  var AND = "and";\n  var AND_NOT = "and_not";\n  var MiniSearch = class {\n    constructor(options) {\n      if ((options === null || options === void 0 ? void 0 : options.fields) == null) {\n        throw new Error(\'MiniSearch: option "fields" must be provided\');\n      }\n      const autoVacuum = options.autoVacuum == null || options.autoVacuum === true ? defaultAutoVacuumOptions : options.autoVacuum;\n      this._options = Object.assign(Object.assign(Object.assign({}, defaultOptions), options), { autoVacuum, searchOptions: Object.assign(Object.assign({}, defaultSearchOptions), options.searchOptions || {}), autoSuggestOptions: Object.assign(Object.assign({}, defaultAutoSuggestOptions), options.autoSuggestOptions || {}) });\n      this._index = new SearchableMap();\n      this._documentCount = 0;\n      this._documentIds = /* @__PURE__ */ new Map();\n      this._idToShortId = /* @__PURE__ */ new Map();\n      this._fieldIds = {};\n      this._fieldLength = /* @__PURE__ */ new Map();\n      this._avgFieldLength = [];\n      this._nextId = 0;\n      this._storedFields = /* @__PURE__ */ new Map();\n      this._dirtCount = 0;\n      this._currentVacuum = null;\n      this._enqueuedVacuum = null;\n      this._enqueuedVacuumConditions = defaultVacuumConditions;\n      this.addFields(this._options.fields);\n    }\n    add(document2) {\n      const { extractField, tokenize, processTerm, fields, idField } = this._options;\n      const id = extractField(document2, idField);\n      if (id == null) {\n        throw new Error(`MiniSearch: document does not have ID field "${idField}"`);\n      }\n      if (this._idToShortId.has(id)) {\n        throw new Error(`MiniSearch: duplicate ID ${id}`);\n      }\n      const shortDocumentId = this.addDocumentId(id);\n      this.saveStoredFields(shortDocumentId, document2);\n      for (const field of fields) {\n        const fieldValue = extractField(document2, field);\n        if (fieldValue == null)\n          continue;\n        const tokens = tokenize(fieldValue.toString(), field);\n        const fieldId = this._fieldIds[field];\n        const uniqueTerms = new Set(tokens).size;\n        this.addFieldLength(shortDocumentId, fieldId, this._documentCount - 1, uniqueTerms);\n        for (const term of tokens) {\n          const processedTerm = processTerm(term, field);\n          if (Array.isArray(processedTerm)) {\n            for (const t of processedTerm) {\n              this.addTerm(fieldId, shortDocumentId, t);\n            }\n          } else if (processedTerm) {\n            this.addTerm(fieldId, shortDocumentId, processedTerm);\n          }\n        }\n      }\n    }\n    addAll(documents) {\n      for (const document2 of documents)\n        this.add(document2);\n    }\n    addAllAsync(documents, options = {}) {\n      const { chunkSize = 10 } = options;\n      const acc = { chunk: [], promise: Promise.resolve() };\n      const { chunk, promise } = documents.reduce(({ chunk: chunk2, promise: promise2 }, document2, i) => {\n        chunk2.push(document2);\n        if ((i + 1) % chunkSize === 0) {\n          return {\n            chunk: [],\n            promise: promise2.then(() => new Promise((resolve) => setTimeout(resolve, 0))).then(() => this.addAll(chunk2))\n          };\n        } else {\n          return { chunk: chunk2, promise: promise2 };\n        }\n      }, acc);\n      return promise.then(() => this.addAll(chunk));\n    }\n    remove(document2) {\n      const { tokenize, processTerm, extractField, fields, idField } = this._options;\n      const id = extractField(document2, idField);\n      if (id == null) {\n        throw new Error(`MiniSearch: document does not have ID field "${idField}"`);\n      }\n      const shortId = this._idToShortId.get(id);\n      if (shortId == null) {\n        throw new Error(`MiniSearch: cannot remove document with ID ${id}: it is not in the index`);\n      }\n      for (const field of fields) {\n        const fieldValue = extractField(document2, field);\n        if (fieldValue == null)\n          continue;\n        const tokens = tokenize(fieldValue.toString(), field);\n        const fieldId = this._fieldIds[field];\n        const uniqueTerms = new Set(tokens).size;\n        this.removeFieldLength(shortId, fieldId, this._documentCount, uniqueTerms);\n        for (const term of tokens) {\n          const processedTerm = processTerm(term, field);\n          if (Array.isArray(processedTerm)) {\n            for (const t of processedTerm) {\n              this.removeTerm(fieldId, shortId, t);\n            }\n          } else if (processedTerm) {\n            this.removeTerm(fieldId, shortId, processedTerm);\n          }\n        }\n      }\n      this._storedFields.delete(shortId);\n      this._documentIds.delete(shortId);\n      this._idToShortId.delete(id);\n      this._fieldLength.delete(shortId);\n      this._documentCount -= 1;\n    }\n    removeAll(documents) {\n      if (documents) {\n        for (const document2 of documents)\n          this.remove(document2);\n      } else if (arguments.length > 0) {\n        throw new Error("Expected documents to be present. Omit the argument to remove all documents.");\n      } else {\n        this._index = new SearchableMap();\n        this._documentCount = 0;\n        this._documentIds = /* @__PURE__ */ new Map();\n        this._idToShortId = /* @__PURE__ */ new Map();\n        this._fieldLength = /* @__PURE__ */ new Map();\n        this._avgFieldLength = [];\n        this._storedFields = /* @__PURE__ */ new Map();\n        this._nextId = 0;\n      }\n    }\n    discard(id) {\n      const shortId = this._idToShortId.get(id);\n      if (shortId == null) {\n        throw new Error(`MiniSearch: cannot discard document with ID ${id}: it is not in the index`);\n      }\n      this._idToShortId.delete(id);\n      this._documentIds.delete(shortId);\n      this._storedFields.delete(shortId);\n      (this._fieldLength.get(shortId) || []).forEach((fieldLength, fieldId) => {\n        this.removeFieldLength(shortId, fieldId, this._documentCount, fieldLength);\n      });\n      this._fieldLength.delete(shortId);\n      this._documentCount -= 1;\n      this._dirtCount += 1;\n      this.maybeAutoVacuum();\n    }\n    maybeAutoVacuum() {\n      if (this._options.autoVacuum === false) {\n        return;\n      }\n      const { minDirtFactor, minDirtCount, batchSize, batchWait } = this._options.autoVacuum;\n      this.conditionalVacuum({ batchSize, batchWait }, { minDirtCount, minDirtFactor });\n    }\n    discardAll(ids) {\n      const autoVacuum = this._options.autoVacuum;\n      try {\n        this._options.autoVacuum = false;\n        for (const id of ids) {\n          this.discard(id);\n        }\n      } finally {\n        this._options.autoVacuum = autoVacuum;\n      }\n      this.maybeAutoVacuum();\n    }\n    replace(updatedDocument) {\n      const { idField, extractField } = this._options;\n      const id = extractField(updatedDocument, idField);\n      this.discard(id);\n      this.add(updatedDocument);\n    }\n    vacuum(options = {}) {\n      return this.conditionalVacuum(options);\n    }\n    conditionalVacuum(options, conditions) {\n      if (this._currentVacuum) {\n        this._enqueuedVacuumConditions = this._enqueuedVacuumConditions && conditions;\n        if (this._enqueuedVacuum != null) {\n          return this._enqueuedVacuum;\n        }\n        this._enqueuedVacuum = this._currentVacuum.then(() => {\n          const conditions2 = this._enqueuedVacuumConditions;\n          this._enqueuedVacuumConditions = defaultVacuumConditions;\n          return this.performVacuuming(options, conditions2);\n        });\n        return this._enqueuedVacuum;\n      }\n      if (this.vacuumConditionsMet(conditions) === false) {\n        return Promise.resolve();\n      }\n      this._currentVacuum = this.performVacuuming(options);\n      return this._currentVacuum;\n    }\n    performVacuuming(options, conditions) {\n      return __awaiter(this, void 0, void 0, function* () {\n        const initialDirtCount = this._dirtCount;\n        if (this.vacuumConditionsMet(conditions)) {\n          const batchSize = options.batchSize || defaultVacuumOptions.batchSize;\n          const batchWait = options.batchWait || defaultVacuumOptions.batchWait;\n          let i = 1;\n          for (const [term, fieldsData] of this._index) {\n            for (const [fieldId, fieldIndex] of fieldsData) {\n              for (const [shortId] of fieldIndex) {\n                if (this._documentIds.has(shortId)) {\n                  continue;\n                }\n                if (fieldIndex.size <= 1) {\n                  fieldsData.delete(fieldId);\n                } else {\n                  fieldIndex.delete(shortId);\n                }\n              }\n            }\n            if (this._index.get(term).size === 0) {\n              this._index.delete(term);\n            }\n            if (i % batchSize === 0) {\n              yield new Promise((resolve) => setTimeout(resolve, batchWait));\n            }\n            i += 1;\n          }\n          this._dirtCount -= initialDirtCount;\n        }\n        yield null;\n        this._currentVacuum = this._enqueuedVacuum;\n        this._enqueuedVacuum = null;\n      });\n    }\n    vacuumConditionsMet(conditions) {\n      if (conditions == null) {\n        return true;\n      }\n      let { minDirtCount, minDirtFactor } = conditions;\n      minDirtCount = minDirtCount || defaultAutoVacuumOptions.minDirtCount;\n      minDirtFactor = minDirtFactor || defaultAutoVacuumOptions.minDirtFactor;\n      return this.dirtCount >= minDirtCount && this.dirtFactor >= minDirtFactor;\n    }\n    get isVacuuming() {\n      return this._currentVacuum != null;\n    }\n    get dirtCount() {\n      return this._dirtCount;\n    }\n    get dirtFactor() {\n      return this._dirtCount / (1 + this._documentCount + this._dirtCount);\n    }\n    has(id) {\n      return this._idToShortId.has(id);\n    }\n    getStoredFields(id) {\n      const shortId = this._idToShortId.get(id);\n      if (shortId == null) {\n        return void 0;\n      }\n      return this._storedFields.get(shortId);\n    }\n    search(query, searchOptions = {}) {\n      const rawResults = this.executeQuery(query, searchOptions);\n      const results = [];\n      for (const [docId, { score, terms, match }] of rawResults) {\n        const quality = terms.length || 1;\n        const result = {\n          id: this._documentIds.get(docId),\n          score: score * quality,\n          terms: Object.keys(match),\n          queryTerms: terms,\n          match\n        };\n        Object.assign(result, this._storedFields.get(docId));\n        if (searchOptions.filter == null || searchOptions.filter(result)) {\n          results.push(result);\n        }\n      }\n      if (query === MiniSearch.wildcard && searchOptions.boostDocument == null && this._options.searchOptions.boostDocument == null) {\n        return results;\n      }\n      results.sort(byScore);\n      return results;\n    }\n    autoSuggest(queryString, options = {}) {\n      options = Object.assign(Object.assign({}, this._options.autoSuggestOptions), options);\n      const suggestions = /* @__PURE__ */ new Map();\n      for (const { score, terms } of this.search(queryString, options)) {\n        const phrase = terms.join(" ");\n        const suggestion = suggestions.get(phrase);\n        if (suggestion != null) {\n          suggestion.score += score;\n          suggestion.count += 1;\n        } else {\n          suggestions.set(phrase, { score, terms, count: 1 });\n        }\n      }\n      const results = [];\n      for (const [suggestion, { score, terms, count }] of suggestions) {\n        results.push({ suggestion, terms, score: score / count });\n      }\n      results.sort(byScore);\n      return results;\n    }\n    get documentCount() {\n      return this._documentCount;\n    }\n    get termCount() {\n      return this._index.size;\n    }\n    static loadJSON(json, options) {\n      if (options == null) {\n        throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");\n      }\n      return this.loadJS(JSON.parse(json), options);\n    }\n    static loadJSONAsync(json, options) {\n      return __awaiter(this, void 0, void 0, function* () {\n        if (options == null) {\n          throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");\n        }\n        return this.loadJSAsync(JSON.parse(json), options);\n      });\n    }\n    static getDefault(optionName) {\n      if (defaultOptions.hasOwnProperty(optionName)) {\n        return getOwnProperty(defaultOptions, optionName);\n      } else {\n        throw new Error(`MiniSearch: unknown option "${optionName}"`);\n      }\n    }\n    static loadJS(js, options) {\n      const { index, documentIds, fieldLength, storedFields, serializationVersion } = js;\n      const miniSearch = this.instantiateMiniSearch(js, options);\n      miniSearch._documentIds = objectToNumericMap(documentIds);\n      miniSearch._fieldLength = objectToNumericMap(fieldLength);\n      miniSearch._storedFields = objectToNumericMap(storedFields);\n      for (const [shortId, id] of miniSearch._documentIds) {\n        miniSearch._idToShortId.set(id, shortId);\n      }\n      for (const [term, data] of index) {\n        const dataMap = /* @__PURE__ */ new Map();\n        for (const fieldId of Object.keys(data)) {\n          let indexEntry = data[fieldId];\n          if (serializationVersion === 1) {\n            indexEntry = indexEntry.ds;\n          }\n          dataMap.set(parseInt(fieldId, 10), objectToNumericMap(indexEntry));\n        }\n        miniSearch._index.set(term, dataMap);\n      }\n      return miniSearch;\n    }\n    static loadJSAsync(js, options) {\n      return __awaiter(this, void 0, void 0, function* () {\n        const { index, documentIds, fieldLength, storedFields, serializationVersion } = js;\n        const miniSearch = this.instantiateMiniSearch(js, options);\n        miniSearch._documentIds = yield objectToNumericMapAsync(documentIds);\n        miniSearch._fieldLength = yield objectToNumericMapAsync(fieldLength);\n        miniSearch._storedFields = yield objectToNumericMapAsync(storedFields);\n        for (const [shortId, id] of miniSearch._documentIds) {\n          miniSearch._idToShortId.set(id, shortId);\n        }\n        let count = 0;\n        for (const [term, data] of index) {\n          const dataMap = /* @__PURE__ */ new Map();\n          for (const fieldId of Object.keys(data)) {\n            let indexEntry = data[fieldId];\n            if (serializationVersion === 1) {\n              indexEntry = indexEntry.ds;\n            }\n            dataMap.set(parseInt(fieldId, 10), yield objectToNumericMapAsync(indexEntry));\n          }\n          if (++count % 1e3 === 0)\n            yield wait(0);\n          miniSearch._index.set(term, dataMap);\n        }\n        return miniSearch;\n      });\n    }\n    static instantiateMiniSearch(js, options) {\n      const { documentCount, nextId, fieldIds, averageFieldLength, dirtCount, serializationVersion } = js;\n      if (serializationVersion !== 1 && serializationVersion !== 2) {\n        throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");\n      }\n      const miniSearch = new MiniSearch(options);\n      miniSearch._documentCount = documentCount;\n      miniSearch._nextId = nextId;\n      miniSearch._idToShortId = /* @__PURE__ */ new Map();\n      miniSearch._fieldIds = fieldIds;\n      miniSearch._avgFieldLength = averageFieldLength;\n      miniSearch._dirtCount = dirtCount || 0;\n      miniSearch._index = new SearchableMap();\n      return miniSearch;\n    }\n    executeQuery(query, searchOptions = {}) {\n      if (query === MiniSearch.wildcard) {\n        return this.executeWildcardQuery(searchOptions);\n      }\n      if (typeof query !== "string") {\n        const options2 = Object.assign(Object.assign(Object.assign({}, searchOptions), query), { queries: void 0 });\n        const results2 = query.queries.map((subquery) => this.executeQuery(subquery, options2));\n        return this.combineResults(results2, options2.combineWith);\n      }\n      const { tokenize, processTerm, searchOptions: globalSearchOptions } = this._options;\n      const options = Object.assign(Object.assign({ tokenize, processTerm }, globalSearchOptions), searchOptions);\n      const { tokenize: searchTokenize, processTerm: searchProcessTerm } = options;\n      const terms = searchTokenize(query).flatMap((term) => searchProcessTerm(term)).filter((term) => !!term);\n      const queries = terms.map(termToQuerySpec(options));\n      const results = queries.map((query2) => this.executeQuerySpec(query2, options));\n      return this.combineResults(results, options.combineWith);\n    }\n    executeQuerySpec(query, searchOptions) {\n      const options = Object.assign(Object.assign({}, this._options.searchOptions), searchOptions);\n      const boosts = (options.fields || this._options.fields).reduce((boosts2, field) => Object.assign(Object.assign({}, boosts2), { [field]: getOwnProperty(options.boost, field) || 1 }), {});\n      const { boostDocument, weights, maxFuzzy, bm25: bm25params } = options;\n      const { fuzzy: fuzzyWeight, prefix: prefixWeight } = Object.assign(Object.assign({}, defaultSearchOptions.weights), weights);\n      const data = this._index.get(query.term);\n      const results = this.termResults(query.term, query.term, 1, query.termBoost, data, boosts, boostDocument, bm25params);\n      let prefixMatches;\n      let fuzzyMatches;\n      if (query.prefix) {\n        prefixMatches = this._index.atPrefix(query.term);\n      }\n      if (query.fuzzy) {\n        const fuzzy = query.fuzzy === true ? 0.2 : query.fuzzy;\n        const maxDistance = fuzzy < 1 ? Math.min(maxFuzzy, Math.round(query.term.length * fuzzy)) : fuzzy;\n        if (maxDistance)\n          fuzzyMatches = this._index.fuzzyGet(query.term, maxDistance);\n      }\n      if (prefixMatches) {\n        for (const [term, data2] of prefixMatches) {\n          const distance = term.length - query.term.length;\n          if (!distance) {\n            continue;\n          }\n          fuzzyMatches === null || fuzzyMatches === void 0 ? void 0 : fuzzyMatches.delete(term);\n          const weight = prefixWeight * term.length / (term.length + 0.3 * distance);\n          this.termResults(query.term, term, weight, query.termBoost, data2, boosts, boostDocument, bm25params, results);\n        }\n      }\n      if (fuzzyMatches) {\n        for (const term of fuzzyMatches.keys()) {\n          const [data2, distance] = fuzzyMatches.get(term);\n          if (!distance) {\n            continue;\n          }\n          const weight = fuzzyWeight * term.length / (term.length + distance);\n          this.termResults(query.term, term, weight, query.termBoost, data2, boosts, boostDocument, bm25params, results);\n        }\n      }\n      return results;\n    }\n    executeWildcardQuery(searchOptions) {\n      const results = /* @__PURE__ */ new Map();\n      const options = Object.assign(Object.assign({}, this._options.searchOptions), searchOptions);\n      for (const [shortId, id] of this._documentIds) {\n        const score = options.boostDocument ? options.boostDocument(id, "", this._storedFields.get(shortId)) : 1;\n        results.set(shortId, {\n          score,\n          terms: [],\n          match: {}\n        });\n      }\n      return results;\n    }\n    combineResults(results, combineWith = OR) {\n      if (results.length === 0) {\n        return /* @__PURE__ */ new Map();\n      }\n      const operator = combineWith.toLowerCase();\n      const combinator = combinators[operator];\n      if (!combinator) {\n        throw new Error(`Invalid combination operator: ${combineWith}`);\n      }\n      return results.reduce(combinator) || /* @__PURE__ */ new Map();\n    }\n    toJSON() {\n      const index = [];\n      for (const [term, fieldIndex] of this._index) {\n        const data = {};\n        for (const [fieldId, freqs] of fieldIndex) {\n          data[fieldId] = Object.fromEntries(freqs);\n        }\n        index.push([term, data]);\n      }\n      return {\n        documentCount: this._documentCount,\n        nextId: this._nextId,\n        documentIds: Object.fromEntries(this._documentIds),\n        fieldIds: this._fieldIds,\n        fieldLength: Object.fromEntries(this._fieldLength),\n        averageFieldLength: this._avgFieldLength,\n        storedFields: Object.fromEntries(this._storedFields),\n        dirtCount: this._dirtCount,\n        index,\n        serializationVersion: 2\n      };\n    }\n    termResults(sourceTerm, derivedTerm, termWeight, termBoost, fieldTermData, fieldBoosts, boostDocumentFn, bm25params, results = /* @__PURE__ */ new Map()) {\n      if (fieldTermData == null)\n        return results;\n      for (const field of Object.keys(fieldBoosts)) {\n        const fieldBoost = fieldBoosts[field];\n        const fieldId = this._fieldIds[field];\n        const fieldTermFreqs = fieldTermData.get(fieldId);\n        if (fieldTermFreqs == null)\n          continue;\n        let matchingFields = fieldTermFreqs.size;\n        const avgFieldLength = this._avgFieldLength[fieldId];\n        for (const docId of fieldTermFreqs.keys()) {\n          if (!this._documentIds.has(docId)) {\n            this.removeTerm(fieldId, docId, derivedTerm);\n            matchingFields -= 1;\n            continue;\n          }\n          const docBoost = boostDocumentFn ? boostDocumentFn(this._documentIds.get(docId), derivedTerm, this._storedFields.get(docId)) : 1;\n          if (!docBoost)\n            continue;\n          const termFreq = fieldTermFreqs.get(docId);\n          const fieldLength = this._fieldLength.get(docId)[fieldId];\n          const rawScore = calcBM25Score(termFreq, matchingFields, this._documentCount, fieldLength, avgFieldLength, bm25params);\n          const weightedScore = termWeight * termBoost * fieldBoost * docBoost * rawScore;\n          const result = results.get(docId);\n          if (result) {\n            result.score += weightedScore;\n            assignUniqueTerm(result.terms, sourceTerm);\n            const match = getOwnProperty(result.match, derivedTerm);\n            if (match) {\n              match.push(field);\n            } else {\n              result.match[derivedTerm] = [field];\n            }\n          } else {\n            results.set(docId, {\n              score: weightedScore,\n              terms: [sourceTerm],\n              match: { [derivedTerm]: [field] }\n            });\n          }\n        }\n      }\n      return results;\n    }\n    addTerm(fieldId, documentId, term) {\n      const indexData = this._index.fetch(term, createMap);\n      let fieldIndex = indexData.get(fieldId);\n      if (fieldIndex == null) {\n        fieldIndex = /* @__PURE__ */ new Map();\n        fieldIndex.set(documentId, 1);\n        indexData.set(fieldId, fieldIndex);\n      } else {\n        const docs = fieldIndex.get(documentId);\n        fieldIndex.set(documentId, (docs || 0) + 1);\n      }\n    }\n    removeTerm(fieldId, documentId, term) {\n      if (!this._index.has(term)) {\n        this.warnDocumentChanged(documentId, fieldId, term);\n        return;\n      }\n      const indexData = this._index.fetch(term, createMap);\n      const fieldIndex = indexData.get(fieldId);\n      if (fieldIndex == null || fieldIndex.get(documentId) == null) {\n        this.warnDocumentChanged(documentId, fieldId, term);\n      } else if (fieldIndex.get(documentId) <= 1) {\n        if (fieldIndex.size <= 1) {\n          indexData.delete(fieldId);\n        } else {\n          fieldIndex.delete(documentId);\n        }\n      } else {\n        fieldIndex.set(documentId, fieldIndex.get(documentId) - 1);\n      }\n      if (this._index.get(term).size === 0) {\n        this._index.delete(term);\n      }\n    }\n    warnDocumentChanged(shortDocumentId, fieldId, term) {\n      for (const fieldName of Object.keys(this._fieldIds)) {\n        if (this._fieldIds[fieldName] === fieldId) {\n          this._options.logger("warn", `MiniSearch: document with ID ${this._documentIds.get(shortDocumentId)} has changed before removal: term "${term}" was not present in field "${fieldName}". Removing a document after it has changed can corrupt the index!`, "version_conflict");\n          return;\n        }\n      }\n    }\n    addDocumentId(documentId) {\n      const shortDocumentId = this._nextId;\n      this._idToShortId.set(documentId, shortDocumentId);\n      this._documentIds.set(shortDocumentId, documentId);\n      this._documentCount += 1;\n      this._nextId += 1;\n      return shortDocumentId;\n    }\n    addFields(fields) {\n      for (let i = 0; i < fields.length; i++) {\n        this._fieldIds[fields[i]] = i;\n      }\n    }\n    addFieldLength(documentId, fieldId, count, length) {\n      let fieldLengths = this._fieldLength.get(documentId);\n      if (fieldLengths == null)\n        this._fieldLength.set(documentId, fieldLengths = []);\n      fieldLengths[fieldId] = length;\n      const averageFieldLength = this._avgFieldLength[fieldId] || 0;\n      const totalFieldLength = averageFieldLength * count + length;\n      this._avgFieldLength[fieldId] = totalFieldLength / (count + 1);\n    }\n    removeFieldLength(documentId, fieldId, count, length) {\n      if (count === 1) {\n        this._avgFieldLength[fieldId] = 0;\n        return;\n      }\n      const totalFieldLength = this._avgFieldLength[fieldId] * count - length;\n      this._avgFieldLength[fieldId] = totalFieldLength / (count - 1);\n    }\n    saveStoredFields(documentId, doc) {\n      const { storeFields, extractField } = this._options;\n      if (storeFields == null || storeFields.length === 0) {\n        return;\n      }\n      let documentFields = this._storedFields.get(documentId);\n      if (documentFields == null)\n        this._storedFields.set(documentId, documentFields = {});\n      for (const fieldName of storeFields) {\n        const fieldValue = extractField(doc, fieldName);\n        if (fieldValue !== void 0)\n          documentFields[fieldName] = fieldValue;\n      }\n    }\n  };\n  MiniSearch.wildcard = Symbol("*");\n  var getOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property) ? object[property] : void 0;\n  var combinators = {\n    [OR]: (a, b) => {\n      for (const docId of b.keys()) {\n        const existing = a.get(docId);\n        if (existing == null) {\n          a.set(docId, b.get(docId));\n        } else {\n          const { score, terms, match } = b.get(docId);\n          existing.score = existing.score + score;\n          existing.match = Object.assign(existing.match, match);\n          assignUniqueTerms(existing.terms, terms);\n        }\n      }\n      return a;\n    },\n    [AND]: (a, b) => {\n      const combined = /* @__PURE__ */ new Map();\n      for (const docId of b.keys()) {\n        const existing = a.get(docId);\n        if (existing == null)\n          continue;\n        const { score, terms, match } = b.get(docId);\n        assignUniqueTerms(existing.terms, terms);\n        combined.set(docId, {\n          score: existing.score + score,\n          terms: existing.terms,\n          match: Object.assign(existing.match, match)\n        });\n      }\n      return combined;\n    },\n    [AND_NOT]: (a, b) => {\n      for (const docId of b.keys())\n        a.delete(docId);\n      return a;\n    }\n  };\n  var defaultBM25params = { k: 1.2, b: 0.7, d: 0.5 };\n  var calcBM25Score = (termFreq, matchingCount, totalCount, fieldLength, avgFieldLength, bm25params) => {\n    const { k, b, d } = bm25params;\n    const invDocFreq = Math.log(1 + (totalCount - matchingCount + 0.5) / (matchingCount + 0.5));\n    return invDocFreq * (d + termFreq * (k + 1) / (termFreq + k * (1 - b + b * fieldLength / avgFieldLength)));\n  };\n  var termToQuerySpec = (options) => (term, i, terms) => {\n    const fuzzy = typeof options.fuzzy === "function" ? options.fuzzy(term, i, terms) : options.fuzzy || false;\n    const prefix = typeof options.prefix === "function" ? options.prefix(term, i, terms) : options.prefix === true;\n    const termBoost = typeof options.boostTerm === "function" ? options.boostTerm(term, i, terms) : 1;\n    return { term, fuzzy, prefix, termBoost };\n  };\n  var defaultOptions = {\n    idField: "id",\n    extractField: (document2, fieldName) => document2[fieldName],\n    tokenize: (text) => text.split(SPACE_OR_PUNCTUATION),\n    processTerm: (term) => term.toLowerCase(),\n    fields: void 0,\n    searchOptions: void 0,\n    storeFields: [],\n    logger: (level, message) => {\n      if (typeof (console === null || console === void 0 ? void 0 : console[level]) === "function")\n        console[level](message);\n    },\n    autoVacuum: true\n  };\n  var defaultSearchOptions = {\n    combineWith: OR,\n    prefix: false,\n    fuzzy: false,\n    maxFuzzy: 6,\n    boost: {},\n    weights: { fuzzy: 0.45, prefix: 0.375 },\n    bm25: defaultBM25params\n  };\n  var defaultAutoSuggestOptions = {\n    combineWith: AND,\n    prefix: (term, i, terms) => i === terms.length - 1\n  };\n  var defaultVacuumOptions = { batchSize: 1e3, batchWait: 10 };\n  var defaultVacuumConditions = { minDirtFactor: 0.1, minDirtCount: 20 };\n  var defaultAutoVacuumOptions = Object.assign(Object.assign({}, defaultVacuumOptions), defaultVacuumConditions);\n  var assignUniqueTerm = (target, term) => {\n    if (!target.includes(term))\n      target.push(term);\n  };\n  var assignUniqueTerms = (target, source) => {\n    for (const term of source) {\n      if (!target.includes(term))\n        target.push(term);\n    }\n  };\n  var byScore = ({ score: a }, { score: b }) => b - a;\n  var createMap = () => /* @__PURE__ */ new Map();\n  var objectToNumericMap = (object) => {\n    const map = /* @__PURE__ */ new Map();\n    for (const key of Object.keys(object)) {\n      map.set(parseInt(key, 10), object[key]);\n    }\n    return map;\n  };\n  var objectToNumericMapAsync = (object) => __awaiter(void 0, void 0, void 0, function* () {\n    const map = /* @__PURE__ */ new Map();\n    let count = 0;\n    for (const key of Object.keys(object)) {\n      map.set(parseInt(key, 10), object[key]);\n      if (++count % 1e3 === 0) {\n        yield wait(0);\n      }\n    }\n    return map;\n  });\n  var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n  var SPACE_OR_PUNCTUATION = /[\\n\\r\\p{Z}\\p{P}]+/u;\n\n  // src/frontend/main/search.ts\n  var allSearch = 1 /* Title */ | 2 /* Aliases */ | 4 /* Headers */ | 8 /* Tags */ | 16 /* Path */ | 32 /* Content */;\n  var Search = class {\n    search(query, type = allSearch) {\n      if (query.length == 0) {\n        this.clear();\n        return;\n      }\n      this.input.value = query;\n      if (type != allSearch) {\n        this.input.style.color = "var(--text-accent)";\n      } else {\n        this.input.style.color = "";\n      }\n      const searchFields = [];\n      if (type & 1 /* Title */)\n        searchFields.push("title");\n      if (type & 2 /* Aliases */)\n        searchFields.push("aliases");\n      if (type & 4 /* Headers */)\n        searchFields.push("headers");\n      if (type & 8 /* Tags */)\n        searchFields.push("tags");\n      if (type & 16 /* Path */)\n        searchFields.push("path");\n      if (type & 32 /* Content */)\n        searchFields.push("content");\n      console.log(type & 1 /* Title */, type & 2 /* Aliases */, type & 4 /* Headers */, type & 8 /* Tags */, type & 16 /* Path */, type & 32 /* Content */);\n      const results = this.index.search(query, {\n        prefix: true,\n        fuzzy: 0.2,\n        boost: { title: 2, aliases: 1.8, headers: 1.5, tags: 1.3, path: 1.1 },\n        fields: searchFields\n      });\n      console.log("Search results", results);\n      if (results.length > 50)\n        results.splice(50);\n      const showPaths = [];\n      const headerLinks = /* @__PURE__ */ new Map();\n      for (const result of results) {\n        if (result.score < results[0].score * 0.3 && showPaths.length > 4 || result.score < results[0].score * 0.1)\n          break;\n        showPaths.push(result.path);\n        if (query.length > 2) {\n          const headers = [];\n          let breakEarly = false;\n          for (const match in result.match) {\n            if (result.match[match].includes("headers")) {\n              for (const header of result.headers) {\n                if (header.toLowerCase().includes(match.toLowerCase())) {\n                  if (!headers.includes(header))\n                    headers.push(header);\n                  if (query.toLowerCase() != match.toLowerCase()) {\n                    breakEarly = true;\n                    break;\n                  }\n                }\n              }\n            }\n            if (breakEarly)\n              break;\n          }\n          headerLinks.set(result.path, headers);\n        }\n      }\n      ObsidianSite.fileTree?.filter(showPaths);\n      ObsidianSite.fileTree?.setSubHeadings(headerLinks);\n      ObsidianSite.fileTree?.sort((a, b) => {\n        if (!a || !b)\n          return 0;\n        return showPaths.findIndex((path) => a.path == path) - showPaths.findIndex((path) => b.path == path);\n      });\n      if (!ObsidianSite.fileTree) {\n        const list = document.createElement("div");\n        results.filter((result) => result.path.endsWith(".html")).slice(0, 20).forEach((result) => {\n          const item = document.createElement("div");\n          item.classList.add("search-result");\n          const link = document.createElement("a");\n          link.classList.add("tree-item-self");\n          const searchURL = result.path + "?mark=" + encodeURIComponent(query);\n          link.setAttribute("href", searchURL);\n          link.appendChild(document.createTextNode(result.title));\n          item.appendChild(link);\n          list.append(item);\n        });\n        this.dedicatedSearchResultsList.replaceChildren(list);\n        this.container.after(this.dedicatedSearchResultsList);\n        LinkHandler.initializeLinks(this.dedicatedSearchResultsList);\n      }\n    }\n    searchParseFilters(queryString) {\n      if (queryString.startsWith("?"))\n        queryString = queryString.substring(1);\n      let filterName = queryString.split(":")[0];\n      if (!queryString.includes(":"))\n        filterName = "";\n      if (filterName == "content" || filterName == "text" || filterName == "body") {\n        this.search(queryString, 32 /* Content */);\n      } else if (filterName == "title" || filterName == "name") {\n        this.search(queryString, 1 /* Title */);\n      } else if (filterName == "path") {\n        this.search(queryString, 16 /* Path */);\n      } else if (filterName == "header" || filterName == "headers") {\n        this.search(queryString, 4 /* Headers */);\n      } else if (filterName == "tag" || filterName == "tags" || queryString.startsWith("#")) {\n        this.search(queryString, 8 /* Tags */);\n      } else if (filterName == "alias" || filterName == "aliases") {\n        this.search(queryString, 2 /* Aliases */);\n      } else {\n        this.search(queryString);\n      }\n    }\n    clear() {\n      this.container?.classList.remove("has-content");\n      this.input.value = "";\n      this.clearCurrentDocumentSearch();\n      ObsidianSite.fileTree?.unfilter();\n      ObsidianSite.fileTree?.removeSubHeadings();\n      ObsidianSite.fileTree?.unsort();\n    }\n    async init() {\n      this.input = document.querySelector(\'input[type="search"]\');\n      this.container = this.input?.closest("#search-container");\n      if (!this.input || !this.container)\n        return;\n      ObsidianSite.metadata.featureOptions.search.insertFeature(document.body, this.container);\n      const indexResp = await ObsidianSite.fetch(Shared.libFolderName + "/search-index.json");\n      if (!indexResp?.ok) {\n        console.error("Failed to fetch search index");\n        return;\n      }\n      const indexJSON = await indexResp.json();\n      try {\n        this.index = MiniSearch.loadJS(indexJSON, { fields: ["title", "path", "tags", "headers"] });\n      } catch (e) {\n        console.error("Failed to load search index: ", e);\n        return;\n      }\n      const inputClear = document.querySelector("#search-clear-button");\n      inputClear?.addEventListener("click", (event) => {\n        this.clear();\n      });\n      this.input.addEventListener("input", (event) => {\n        const query = event.target?.value ?? "";\n        if (query.length == 0) {\n          this.clear();\n          return;\n        }\n        this.searchParseFilters(query);\n      });\n      if (!ObsidianSite.fileTree) {\n        this.dedicatedSearchResultsList = document.createElement("div");\n        this.dedicatedSearchResultsList.setAttribute("id", "search-results");\n      }\n      return this;\n    }\n    async searchCurrentDocument(query) {\n      this.clearCurrentDocumentSearch();\n      const textNodes = getTextNodes(ObsidianSite.document.sizerEl ?? ObsidianSite.document.documentEl);\n      textNodes.forEach(async (node) => {\n        const content = node.nodeValue;\n        const newContent = content?.replace(new RegExp(query, "gi"), (match) => `<mark>${match}</mark>`);\n        if (newContent && newContent !== content) {\n          const tempDiv = document.createElement("div");\n          tempDiv.innerHTML = newContent;\n          const newNodes = Array.from(tempDiv.childNodes);\n          newNodes.forEach((newNode) => {\n            if (newNode.nodeType != Node.TEXT_NODE) {\n              newNode?.setAttribute("class", "search-mark");\n            }\n            node?.parentNode?.insertBefore(newNode, node);\n          });\n          node?.parentNode?.removeChild(node);\n        }\n      });\n      const firstMark = document.querySelector(".search-mark");\n      setTimeout(() => {\n        if (firstMark)\n          ObsidianSite.scrollTo(firstMark);\n      }, 500);\n    }\n    clearCurrentDocumentSearch() {\n      document.querySelectorAll(".search-mark").forEach((node) => {\n        node.outerHTML = node.innerHTML;\n      });\n    }\n  };\n\n  // src/frontend/main/sidebars.ts\n  var Sidebar = class {\n    constructor(container) {\n      this.minWidthEm = 15;\n      if (!container.classList.contains("sidebar"))\n        throw new Error("Invalid sidebar container");\n      this.containerEl = container;\n      this.contentEl = container.querySelector(".leaf-content");\n      this.topbarEl = container.querySelector(".sidebar-topbar");\n      this.collapseEl = container.querySelector(".sidebar-collapse-icon");\n      this.topbarContentEl = container.querySelector(".topbar-content");\n      this.resizeHandleEl = container.querySelector(".sidebar-handle") ?? void 0;\n      this._isLeft = container.id == "left-sidebar";\n      this._sidebarID = container.id;\n      this.collapseEl.addEventListener("click", () => {\n        this.collapsed = !this.collapsed;\n      });\n      this.clickOutsideCollapse = this.clickOutsideCollapse.bind(this);\n      this.minResizeWidth = parseFloat(getComputedStyle(this.resizeHandleEl?.parentElement ?? this.resizeHandleEl).fontSize) * this.minWidthEm;\n      this.collapseWidth = this.minResizeWidth / 4;\n      this.setupSidebarResize();\n    }\n    get sidebarID() {\n      return this._sidebarID;\n    }\n    get isLeft() {\n      return this._isLeft;\n    }\n    get resizing() {\n      return this._resizing;\n    }\n    get collapsed() {\n      return this._collapsed;\n    }\n    set collapsed(collapse) {\n      if (this._collapsed === collapse) {\n        return;\n      }\n      this._collapsed = collapse;\n      const isPhone = ObsidianSite.deviceSize === "phone";\n      const isTablet = ObsidianSite.deviceSize === "tablet";\n      if (!collapse) {\n        if (isPhone) {\n          if (this.isLeft) {\n            if (ObsidianSite.rightSidebar && !ObsidianSite.rightSidebar.collapsed) {\n              ObsidianSite.rightSidebar.collapsed = true;\n            }\n          } else {\n            if (ObsidianSite.leftSidebar && !ObsidianSite.leftSidebar.collapsed) {\n              ObsidianSite.leftSidebar.collapsed = true;\n            }\n          }\n        }\n        if (isPhone || isTablet) {\n          document.body.removeEventListener("click", this.clickOutsideCollapse);\n          document.body.addEventListener("click", this.clickOutsideCollapse);\n        }\n      } else {\n        document.body.removeEventListener("click", this.clickOutsideCollapse);\n      }\n      this.containerEl.classList.toggle("is-collapsed", collapse);\n    }\n    get floating() {\n      return this._floating;\n    }\n    set floating(floating) {\n      this._floating = floating;\n      this.containerEl.classList.toggle("floating", floating);\n    }\n    get width() {\n      return this.containerEl.offsetWidth;\n    }\n    set width(width) {\n      const newWidth = `min(max(${width}px, ${this.minWidthEm}em), 40vw)`;\n      if (width < this.collapseWidth) {\n        this.collapsed = true;\n        this.containerEl.style.removeProperty("transition-duration");\n      } else {\n        this.collapsed = false;\n        this.containerEl.style.setProperty("--sidebar-width", newWidth);\n        if (width > this.minResizeWidth)\n          this.containerEl.style.transitionDuration = "0s";\n      }\n      if (ObsidianSite.graphView)\n        ObsidianSite.graphView.graphRenderer.autoResizeCanvas();\n    }\n    setupSidebarResize() {\n      if (!this.resizeHandleEl)\n        return;\n      const savedWidth = localStorage.getItem(`${this.sidebarID}-width`);\n      if (savedWidth)\n        this.containerEl.style.setProperty("--sidebar-width", savedWidth);\n      const localThis = this;\n      function resizeMove(e) {\n        if (!localThis.resizing)\n          return;\n        const distance = localThis.isLeft ? e.clientX : window.innerWidth - e.clientX;\n        localThis.width = distance;\n      }\n      function handleClick(e) {\n        localThis._resizing = true;\n        localThis.containerEl.classList.add("is-resizing");\n        document.addEventListener("pointermove", resizeMove);\n        document.addEventListener("pointerup", function() {\n          document.removeEventListener("pointermove", resizeMove);\n          const finalWidth = getComputedStyle(localThis.containerEl).getPropertyValue("--sidebar-width");\n          localStorage.setItem(`${localThis.sidebarID}-width`, finalWidth);\n          localThis.containerEl.classList.remove("is-resizing");\n          localThis.containerEl.style.removeProperty("transition-duration");\n        });\n      }\n      this.resizeHandleEl.addEventListener("pointerdown", handleClick);\n      function resetSidebarEvent(e) {\n        localThis.resetWidth();\n      }\n      this.resizeHandleEl.addEventListener("dblclick", resetSidebarEvent);\n    }\n    resetWidth() {\n      this.containerEl.style.removeProperty("transition-duration");\n      this.containerEl.style.removeProperty("--sidebar-width");\n      localStorage.removeItem(`${this.sidebarID}-width`);\n      setTimeout(() => {\n        console.log("Resizing canvas");\n        if (ObsidianSite.graphView) {\n          ObsidianSite.graphView.graphRenderer.autoResizeCanvas();\n          ObsidianSite.graphView.graphRenderer.centerCamera();\n        }\n      }, 500);\n    }\n    clickOutsideCollapse(event) {\n      if (event.target?.closest(`#${this.containerEl.id}`)) {\n        return;\n      }\n      const isPhone = ObsidianSite.deviceSize === "phone";\n      const isTablet = ObsidianSite.deviceSize === "tablet";\n      if (isPhone || isTablet) {\n        this.collapsed = true;\n      }\n    }\n  };\n\n  // src/frontend/main/trees.ts\n  var TreeItem = class {\n    constructor(itemEl, parent, depth = 0, minCollapseDepth = 1) {\n      this._path = "";\n      this.collapseAnimationLength = 150;\n      this._oldAnimationLength = this.collapseAnimationLength;\n      this.root = this instanceof Tree ? this : parent?.root ?? (parent instanceof Tree ? parent : void 0);\n      this.parent = parent;\n      this.minCollapseDepth = minCollapseDepth;\n      let isRoot = this instanceof Tree;\n      this.itemEl = itemEl;\n      this.selfEl = isRoot ? itemEl : itemEl.querySelector(".tree-item-self");\n      this.collapseIconEl = isRoot ? itemEl : this.selfEl.querySelector(".collapse-icon");\n      this.innerEl = isRoot ? itemEl : this.selfEl.querySelector(".tree-item-inner");\n      this.childrenEl = isRoot ? itemEl : itemEl.querySelector(".tree-item-children");\n      const hrefAttr = this.selfEl.getAttribute("href");\n      if (hrefAttr)\n        this.path = hrefAttr;\n      this.children = [];\n      const childItems = Array.from(this.childrenEl.children).filter((el) => el.classList.contains("tree-item"));\n      childItems.forEach((child) => {\n        this.children.push(new TreeItem(child, this, depth + 1, this.minCollapseDepth));\n      });\n      this._isFolder = this.itemEl.classList.contains("nav-folder");\n      this._isLink = this.selfEl.tagName == "A";\n      this.depth = depth;\n      this._isCollapsible = this.itemEl.classList.contains("mod-collapsible") && this.depth >= this.minCollapseDepth;\n      if (!this._isCollapsible) {\n        if (this.collapseIconEl && !(this instanceof Tree)) {\n          console.log(this);\n          this.collapseIconEl.remove();\n          this.collapseIconEl = void 0;\n        }\n        this.selfEl.classList.remove("mod-collapsible");\n        this.itemEl.classList.remove("mod-collapsible");\n        this.itemEl.classList.remove("is-collapsed");\n      }\n      this.collapsed = this.itemEl.classList.contains("is-collapsed");\n      if (this._isCollapsible) {\n        const clickItem = this.isLink ? this.collapseIconEl ?? this.selfEl : this.selfEl;\n        clickItem.addEventListener("click", (e) => {\n          this.collapsed = !this.collapsed;\n          e.preventDefault();\n          e.stopPropagation();\n        });\n      }\n      this._checkAnyChildrenOpen();\n    }\n    get path() {\n      return this._path;\n    }\n    set path(path) {\n      if (this.root.pathToItem) {\n        this.root.pathToItem.delete(this._path);\n        this.root.pathToItem.set(path, this);\n      }\n      this._path = path;\n      this.selfEl.setAttribute("href", path);\n    }\n    get title() {\n      return this.innerEl.innerHTML;\n    }\n    set title(title) {\n      this.innerEl.innerHTML = title;\n    }\n    get isFolder() {\n      return this._isFolder;\n    }\n    get isLink() {\n      return this._isLink;\n    }\n    get collapsable() {\n      return this._isCollapsible;\n    }\n    get collapsed() {\n      return this._collapsed;\n    }\n    set collapsed(collapse) {\n      if (!this.collapsable)\n        collapse = false;\n      if (this.collapsed == collapse)\n        return;\n      if (!collapse && this.parent instanceof TreeItem && this.parent.collapsed) {\n        this.parent.collapsed = false;\n      }\n      this._collapsed = collapse;\n      this.itemEl.classList.toggle("is-collapsed", collapse);\n      this.collapseIconEl?.classList.toggle("is-collapsed", collapse);\n      if (collapse)\n        slideUp(this.childrenEl, this.collapseAnimationLength);\n      else\n        slideDown(this.childrenEl, this.collapseAnimationLength);\n      this.parent?._checkAnyChildrenOpen();\n    }\n    get collapsedRecursive() {\n      return this._collapsedRecursive;\n    }\n    set collapsedRecursive(collapse) {\n      if (this.collapsedRecursive == collapse)\n        return;\n      this._collapsedRecursive = collapse;\n      this.children.forEach((child) => {\n        child.collapsed = collapse;\n        child.collapsedRecursive = collapse;\n      });\n    }\n    get anyChildrenOpen() {\n      return this._anyChildrenOpen;\n    }\n    _checkAnyChildrenOpen() {\n      this._anyChildrenOpen = this.children.some((child) => !child.collapsed && child.collapsable);\n      this._collapsedRecursive = !this._anyChildrenOpen;\n      return this._anyChildrenOpen;\n    }\n    forAllChildren(callback) {\n      this.children.forEach((child) => {\n        callback(child);\n        child.forAllChildren(callback);\n      });\n    }\n    overrideAnimationLength(length) {\n      this._oldAnimationLength = this.collapseAnimationLength;\n      this.collapseAnimationLength = length;\n      this.children.forEach((child) => {\n        child.overrideAnimationLength(length);\n      });\n    }\n    restoreAnimationLength() {\n      this.collapseAnimationLength = this._oldAnimationLength;\n      this.children.forEach((child) => {\n        child.restoreAnimationLength();\n      });\n    }\n    setActive() {\n      if (this.root.activeItem)\n        this.root.activeItem.selfEl.classList.remove("is-active");\n      this.root.activeItem = this;\n      this.selfEl.classList.add("is-active");\n    }\n    setFiltered(filteredOut) {\n      if (filteredOut) {\n        this.itemEl.classList.add("filtered-out");\n      } else {\n        this.itemEl.classList.remove("filtered-out");\n        this.parent?.setFiltered(false);\n      }\n    }\n    filter(paths) {\n      this.overrideAnimationLength(0);\n      this.itemEl.classList.add("filtered");\n      this.collapsedRecursive = false;\n      this.forAllChildren((child) => {\n        child.setFiltered(true);\n      });\n      paths.forEach((path) => {\n        const item = this.findByPath(path);\n        if (item)\n          item.setFiltered(false);\n      });\n    }\n    async unfilter() {\n      this.itemEl.classList.remove("filtered");\n      this.forAllChildren((child) => {\n        child.setFiltered(false);\n      });\n      this.collapsedRecursive = true;\n      this.restoreAnimationLength();\n    }\n    setSubHeadings(hintLabelLists) {\n      this.removeSubHeadings();\n      for (const [path, hintLabels] of hintLabelLists) {\n        if (hintLabels.length == 0)\n          continue;\n        const item = this.findByPath(path);\n        if (!item)\n          continue;\n        item.itemEl.classList.add("has-hints");\n        const hintContainer = document.createElement("div");\n        hintContainer.classList.add("tree-hint-container");\n        item.itemEl.appendChild(hintContainer);\n        hintLabels.forEach((label) => {\n          const hintLabelEl = document.createElement("a");\n          hintLabelEl.classList.add("tree-hint-label");\n          hintLabelEl.classList.add("internal-link");\n          hintLabelEl.textContent = label;\n          hintLabelEl.href = path + "#" + label;\n          hintContainer.appendChild(hintLabelEl);\n        });\n        LinkHandler.initializeLinks(hintContainer);\n      }\n    }\n    removeSubHeadings() {\n      this.itemEl.classList.remove("has-hints");\n      this.itemEl.querySelectorAll(".tree-hint-container").forEach((el) => {\n        el.remove();\n      });\n      this.itemEl.querySelectorAll(".has-hints").forEach((el) => {\n        el.classList.remove("has-hints");\n      });\n    }\n    sort(sortFunction) {\n      this.itemEl.classList.add("sorted");\n      this.children.sort(sortFunction);\n      this.children.forEach((child) => {\n        child.sort(sortFunction);\n      });\n      this.children.forEach((child) => {\n        this.childrenEl.appendChild(child.itemEl);\n      });\n    }\n    unsort() {\n      this.itemEl.classList.remove("sorted");\n      this.sort((a, b) => (ObsidianSite.getWebpageData(a.path)?.treeOrder ?? 0) - (ObsidianSite.getWebpageData(b.path)?.treeOrder ?? 0));\n    }\n    find(predicate) {\n      if (predicate(this))\n        return this;\n      for (const child of this.children) {\n        const found = child.find(predicate);\n        if (found)\n          return found;\n      }\n      return void 0;\n    }\n    findByPath(path) {\n      return this.root.pathToItem.get(path);\n    }\n  };\n  var _Tree = class extends TreeItem {\n    constructor(container, minCollapseDepth = 1) {\n      const wrapperEl = container.classList.contains("tree-container") ? container : container.querySelector(".tree-container");\n      if (wrapperEl == null)\n        throw new Error("Invalid tree container");\n      super(wrapperEl, void 0, 0, minCollapseDepth);\n      this.pathToItem = /* @__PURE__ */ new Map();\n      this.rootEl = wrapperEl;\n      this.childrenEl = this.rootEl;\n      this.selfEl = this.rootEl;\n      this.innerEl = this.rootEl;\n      this.collapseAllEl = this.rootEl.querySelector(".tree-collapse-all");\n      const collapseSvg = this.collapseAllEl?.querySelector("svg");\n      if (collapseSvg) {\n        collapseSvg.innerHTML = "<path d></path><path d></path>";\n        this.collapsePath1 = collapseSvg.querySelector("path");\n        this.collapsePath2 = collapseSvg.querySelector("path:last-child");\n      }\n      this.forAllChildren((child) => {\n        if (child.path != "")\n          this.pathToItem.set(child.path, child);\n      });\n      this.collapseAllEl?.addEventListener("click", () => {\n        this.setCollapseIcon(!this.collapsedRecursive);\n        this.collapsedRecursive = !this.collapsedRecursive;\n      });\n      LinkHandler.initializeLinks(this.rootEl);\n      this.setCollapseIcon(!this.anyChildrenOpen);\n    }\n    _checkAnyChildrenOpen() {\n      const open = super._checkAnyChildrenOpen();\n      this.setCollapseIcon(!open);\n      return open;\n    }\n    setCollapseIcon(collapsed) {\n      if (collapsed) {\n        this.collapsePath1?.setAttribute("d", _Tree.collapsePaths[0]);\n        this.collapsePath2?.setAttribute("d", _Tree.collapsePaths[1]);\n      } else {\n        this.collapsePath1?.setAttribute("d", _Tree.uncollapsePaths[0]);\n        this.collapsePath2?.setAttribute("d", _Tree.uncollapsePaths[1]);\n      }\n    }\n    revealPath(path) {\n      const item = this.findByPath(path);\n      if (!item)\n        return;\n      item.collapsed = false;\n    }\n  };\n  var Tree = _Tree;\n  Tree.collapsePaths = ["m7 15 5 5 5-5", "m7 9 5-5 5 5"];\n  Tree.uncollapsePaths = ["m7 20 5-5 5 5", "m7 4 5 5 5-5"];\n\n  // src/frontend/graph-view/graph-wasm-helper.ts\n  var _positionsPtr, _positionsByteLength, _radiiPtr, _linkSourcesPtr, _linkTargetsPtr;\n  var GraphWASMHelper = class {\n    constructor() {\n      this.nodeCount = 0;\n      this.linkCount = 0;\n      this.hoveredNode = -1;\n      __privateAdd(this, _positionsPtr, 0);\n      __privateAdd(this, _positionsByteLength, 0);\n      __privateAdd(this, _radiiPtr, 0);\n      __privateAdd(this, _linkSourcesPtr, 0);\n      __privateAdd(this, _linkTargetsPtr, 0);\n      this.startPositions = new Float32Array(0);\n      this.linkSources = new Int32Array(0);\n      this.linkTargets = new Int32Array(0);\n      this.radii = new Float32Array(0);\n      this.maxRadius = 0;\n      this.averageRadius = 0;\n      this.minRadius = 0;\n    }\n    init(graph, positions) {\n      this.free();\n      this.graphView = graph;\n      this.nodeCount = graph.nodeCount;\n      this.linkCount = graph.linkCount;\n      if (positions?.length != this.nodeCount * 2) {\n        throw new Error("Invalid positions array length");\n      }\n      this.radii = new Float32Array(graph.radii);\n      this.linkSources = new Int32Array(graph.linkSources);\n      this.linkTargets = new Int32Array(graph.linkTargets);\n      this.maxRadius = this.radii.reduce((a, b) => Math.max(a, b));\n      this.averageRadius = this.radii.reduce((a, b) => a + b) / this.radii.length;\n      this.minRadius = this.radii.reduce((a, b) => Math.min(a, b));\n      this.startPositions = new Float32Array(this.nodeCount * 2);\n      this.startPositions = this.generatePositions(positions);\n      __privateSet(this, _positionsPtr, Module._malloc(this.startPositions.byteLength));\n      __privateSet(this, _positionsByteLength, this.startPositions.byteLength);\n      __privateSet(this, _radiiPtr, Module._malloc(this.radii.byteLength));\n      __privateSet(this, _linkSourcesPtr, Module._malloc(this.linkSources.byteLength));\n      __privateSet(this, _linkTargetsPtr, Module._malloc(this.linkTargets.byteLength));\n      Module.HEAP32.set(new Int32Array(this.startPositions.buffer), __privateGet(this, _positionsPtr) / this.startPositions.BYTES_PER_ELEMENT);\n      Module.HEAP32.set(new Int32Array(this.radii.buffer), __privateGet(this, _radiiPtr) / this.radii.BYTES_PER_ELEMENT);\n      Module.HEAP32.set(new Int32Array(this.linkSources.buffer), __privateGet(this, _linkSourcesPtr) / this.linkSources.BYTES_PER_ELEMENT);\n      Module.HEAP32.set(new Int32Array(this.linkTargets.buffer), __privateGet(this, _linkTargetsPtr) / this.linkTargets.BYTES_PER_ELEMENT);\n      Module._Init(__privateGet(this, _positionsPtr), __privateGet(this, _radiiPtr), __privateGet(this, _linkSourcesPtr), __privateGet(this, _linkTargetsPtr), this.nodeCount, this.linkCount, graph.batchFraction, graph.ticker.deltaTime, graph.options.attractionForce, graph.options.linkLength, graph.options.repulsionForce, graph.options.centralForce);\n    }\n    get positions() {\n      return Module.HEAP32.buffer.slice(__privateGet(this, _positionsPtr), __privateGet(this, _positionsPtr) + __privateGet(this, _positionsByteLength));\n    }\n    get positionsF() {\n      return new Float32Array(this.positions);\n    }\n    generatePositions(defaultPositions) {\n      let positions = new Float32Array(defaultPositions ?? new Array(this.nodeCount * 2).fill(0));\n      const spawnRadius = this.averageRadius * 2 * Math.sqrt(this.nodeCount) * 2;\n      for (let i = 0; i < this.nodeCount; i++) {\n        const value = positions[i * 2];\n        if (value != 0 && !isNaN(value) && value != void 0) {\n          continue;\n        }\n        const distance = (1 - this.radii[i] / this.maxRadius) * spawnRadius;\n        positions[i * 2] = Math.cos(i / this.nodeCount * 7.41 * 2 * Math.PI) * distance;\n        positions[i * 2 + 1] = Math.sin(i / this.nodeCount * 7.41 * 2 * Math.PI) * distance;\n      }\n      return positions;\n    }\n    getBounds() {\n      let bounds = new Bounds(0, 0, 0, 0);\n      const positions = new Float32Array(this.positions);\n      for (let i = 0; i < this.nodeCount - 1; i += 2) {\n        const pos = new Vector2(positions[i], positions[i + 1]);\n        bounds.encapsulatePoint(pos.scale(2));\n      }\n      const centerDelta = bounds.center;\n      const centerDist = centerDelta.magnitude;\n      bounds = bounds.expand(50 + centerDist);\n      bounds.translate(centerDelta.inverse);\n      return bounds;\n    }\n    update(mousePosition, grabbedNode, cameraScale) {\n      this.hoveredNode = Module._Update(mousePosition.x, mousePosition.y, grabbedNode, cameraScale);\n    }\n    free() {\n      Module._free(__privateGet(this, _positionsPtr));\n      Module._free(__privateGet(this, _radiiPtr));\n      Module._free(__privateGet(this, _linkSourcesPtr));\n      Module._free(__privateGet(this, _linkTargetsPtr));\n      Module._FreeMemory();\n    }\n    set batchFraction(value) {\n      Module._SetBatchFractionSize(value);\n    }\n    set attractionForce(value) {\n      Module._SetAttractionForce(value);\n    }\n    set repulsionForce(value) {\n      Module._SetRepulsionForce(value);\n    }\n    set centralForce(value) {\n      Module._SetCentralForce(value);\n    }\n    set linkLength(value) {\n      Module._SetLinkLength(value);\n    }\n    set dt(value) {\n      Module._SetDt(value);\n    }\n    set settleness(value) {\n      Module._SetSettleness(value);\n    }\n  };\n  _positionsPtr = new WeakMap();\n  _positionsByteLength = new WeakMap();\n  _radiiPtr = new WeakMap();\n  _linkSourcesPtr = new WeakMap();\n  _linkTargetsPtr = new WeakMap();\n\n  // src/frontend/graph-view/graph-worker-helper.ts\n  var _pixiInit, pixiInit_fn, _pixiSetInteraction, pixiSetInteraction_fn, _pixiSetCamera, pixiSetCamera_fn, _pixiSetColors, pixiSetColors_fn;\n  var GraphRenderWorker = class {\n    constructor(graph) {\n      __privateAdd(this, _pixiInit);\n      __privateAdd(this, _pixiSetInteraction);\n      __privateAdd(this, _pixiSetCamera);\n      __privateAdd(this, _pixiSetColors);\n      this.graph = graph;\n      this.canvas = document.querySelector("#graph-canvas");\n      this.canvasSidebar = this.canvas.closest(".sidebar");\n      console.log("Creating graph worker");\n      try {\n        this.view = this.canvas.transferControlToOffscreen();\n      } catch (e) {\n        console.log("Failed to transfer control to offscreen canvas");\n      }\n      var workerPath = `${ObsidianSite.document.info.pathToRoot}/${Shared.libFolderName}/${Shared.scriptsFolderName}/graph-render-worker.js`;\n      if (window.location.protocol === "file:") {\n        var fileInfo = ObsidianSite.getLocalDataFromId(LinkHandler.getFileDataIdFromURL(workerPath));\n        const data = Uint8Array.from(Array.from(fileInfo.data).map((s) => s.charCodeAt(0)));\n        this.worker = new Worker(URL.createObjectURL(new Blob([data], { type: "application/javascript" })));\n      } else {\n        this.worker = new Worker(new URL(workerPath, window.location.href).pathname);\n      }\n      this._cameraOffset = new Vector2(0, 0);\n      this._cameraScale = 1;\n      this._hoveredNode = -1;\n      this._grabbedNode = -1;\n      this._colors = {\n        background: 0,\n        link: 0,\n        node: 0,\n        outline: 0,\n        text: 0,\n        accent: 0\n      };\n      this._width = 0;\n      this._height = 0;\n      this.cameraOffset = new Vector2(this.canvas.width, this.canvas.height).scale(0.5);\n      this.cameraScale = 1;\n      this.hoveredNode = -1;\n      this.grabbedNode = -1;\n      this.resampleColors();\n      __privateMethod(this, _pixiInit, pixiInit_fn).call(this, true);\n      this.width = this.canvas.width;\n      this.height = this.canvas.height;\n      this.autoResizeCanvas();\n    }\n    get cameraOffset() {\n      return this._cameraOffset;\n    }\n    set cameraOffset(offset) {\n      this._cameraOffset = offset;\n      __privateMethod(this, _pixiSetCamera, pixiSetCamera_fn).call(this, offset, this.cameraScale);\n    }\n    get cameraScale() {\n      return this._cameraScale;\n    }\n    set cameraScale(scale) {\n      this._cameraScale = scale;\n      __privateMethod(this, _pixiSetCamera, pixiSetCamera_fn).call(this, this.cameraOffset, scale);\n    }\n    get hoveredNode() {\n      return this._hoveredNode;\n    }\n    set hoveredNode(node) {\n      this._hoveredNode = node;\n      __privateMethod(this, _pixiSetInteraction, pixiSetInteraction_fn).call(this, node, this._grabbedNode);\n    }\n    get grabbedNode() {\n      return this._grabbedNode;\n    }\n    set grabbedNode(node) {\n      this._grabbedNode = node;\n      __privateMethod(this, _pixiSetInteraction, pixiSetInteraction_fn).call(this, this._hoveredNode, node);\n    }\n    get colors() {\n      return this._colors;\n    }\n    set colors(colors) {\n      this._colors = colors;\n      __privateMethod(this, _pixiSetColors, pixiSetColors_fn).call(this, colors);\n    }\n    get width() {\n      return this._width;\n    }\n    set width(width) {\n      this._width = width;\n      this.resizeCanvas(width, this._height);\n    }\n    get height() {\n      return this._height;\n    }\n    set height(height) {\n      this._height = height;\n      this.resizeCanvas(this._width, height);\n    }\n    set activeNode(node) {\n      this.worker.postMessage({\n        type: "set_active",\n        active: node\n      });\n    }\n    updateData(graph) {\n      this.graph = graph;\n      __privateMethod(this, _pixiInit, pixiInit_fn).call(this);\n    }\n    sampleColor(variable) {\n      const testEl = document.createElement("div");\n      document.body.appendChild(testEl);\n      testEl.style.setProperty("display", "none");\n      testEl.style.setProperty("color", "var(" + variable + ")");\n      const col = getComputedStyle(testEl).color;\n      const opacity = getComputedStyle(testEl).opacity;\n      testEl.remove();\n      function toColorObject(str) {\n        const match = str.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n        return match ? {\n          red: parseInt(match[1]),\n          green: parseInt(match[2]),\n          blue: parseInt(match[3]),\n          alpha: 1\n        } : null;\n      }\n      const color = toColorObject(col);\n      const alpha = parseFloat(opacity);\n      const result = {\n        a: alpha * (color?.alpha ?? 1),\n        rgb: (color?.red ?? 8912896) << 16 | (color?.green ?? 34816) << 8 | (color?.blue ?? 136)\n      };\n      return result;\n    }\n    resampleColors() {\n      this.colors = {\n        background: this.sampleColor("--background-secondary").rgb,\n        link: this.sampleColor("--graph-line").rgb,\n        node: this.sampleColor("--graph-node").rgb,\n        outline: this.sampleColor("--graph-line").rgb,\n        text: this.sampleColor("--graph-text").rgb,\n        accent: this.sampleColor("--interactive-accent").rgb\n      };\n    }\n    draw(_positions) {\n      this.worker.postMessage({\n        type: "draw",\n        positions: _positions\n      }, [_positions]);\n    }\n    resizeCanvas(width, height) {\n      this.worker.postMessage({\n        type: "resize",\n        width,\n        height\n      });\n      this._width = width;\n      this._height = height;\n    }\n    autoResizeCanvas() {\n      let canvasWidth = this.canvas.offsetWidth;\n      let canvasHeight = this.canvas.offsetHeight;\n      if (this.width != canvasWidth || this.height != canvasHeight) {\n        this.centerCamera();\n        this.resizeCanvas(canvasWidth, canvasHeight);\n      }\n    }\n    centerCamera() {\n      this.cameraOffset = new Vector2(this.width, this.height).scale(0.5);\n    }\n    toScreenSpace(x, y, floor = true) {\n      let xScreen = x * this.cameraScale + this.cameraOffset.x;\n      let yScreen = y * this.cameraScale + this.cameraOffset.y;\n      if (floor) {\n        xScreen = Math.floor(xScreen);\n        yScreen = Math.floor(yScreen);\n      }\n      return new Vector2(xScreen, yScreen);\n    }\n    vecToScreenSpace(vector, floor = true) {\n      return this.toScreenSpace(vector.x, vector.y, floor);\n    }\n    toWorldspace(x, y) {\n      const xWorld = (x - this.cameraOffset.x) / this.cameraScale;\n      const yWorld = (y - this.cameraOffset.y) / this.cameraScale;\n      return new Vector2(xWorld, yWorld);\n    }\n    vecToWorldspace(vector) {\n      return this.toWorldspace(vector.x, vector.y);\n    }\n    setCameraCenterWorldspace(position) {\n      this.cameraOffset = new Vector2(this.width / 2 - position.x * this.cameraScale, this.height / 2 - position.y * this.cameraScale);\n    }\n    getCameraCenterWorldspace() {\n      return this.toWorldspace(this.width / 2, this.height / 2);\n    }\n  };\n  _pixiInit = new WeakSet();\n  pixiInit_fn = function(initial = false) {\n    const { width, height } = this.view;\n    let options = { width, height, view: this.view };\n    let objects = [this.view];\n    if (!initial) {\n      options = { width, height };\n      objects = [];\n    }\n    this.worker.postMessage({\n      type: "init",\n      linkCount: this.graph.graphSim.linkCount,\n      linkSources: this.graph.graphSim.linkSources,\n      linkTargets: this.graph.graphSim.linkTargets,\n      nodeCount: this.graph.graphSim.nodeCount,\n      radii: this.graph.graphSim.radii,\n      labels: this.graph.labels,\n      linkLength: this.graph.options.linkLength,\n      edgePruning: this.graph.options.edgePruning,\n      options\n    }, objects);\n  };\n  _pixiSetInteraction = new WeakSet();\n  pixiSetInteraction_fn = function(hoveredNodeIndex, grabbedNodeIndex) {\n    const obj = {\n      type: "update_interaction",\n      hoveredNode: hoveredNodeIndex,\n      grabbedNode: grabbedNodeIndex\n    };\n    this.worker.postMessage(obj);\n  };\n  _pixiSetCamera = new WeakSet();\n  pixiSetCamera_fn = function(cameraOffset, cameraScale) {\n    this.worker.postMessage({\n      type: "update_camera",\n      cameraOffset,\n      cameraScale\n    });\n  };\n  _pixiSetColors = new WeakSet();\n  pixiSetColors_fn = function(colors) {\n    this.worker.postMessage({\n      type: "update_colors",\n      colors\n    });\n  };\n\n  // src/shared/inserted-feature.ts\n  var _InsertedFeature = class {\n    constructor(options, existingElement) {\n      this.elements = /* @__PURE__ */ new Map();\n      this._options = options;\n      if (existingElement) {\n        this.replaceFeature(existingElement);\n      } else {\n        this.setupFeatureContainer();\n      }\n      this.options.insertFeature(document.body, this.getElement(_InsertedFeature.FEATURE_KEY));\n      this.onAfterMount();\n    }\n    getElementDefinitions() {\n      return {\n        [_InsertedFeature.FEATURE_KEY]: {\n          type: "div",\n          className: ["feature", "hide"],\n          id: this.options.featureId\n        },\n        [_InsertedFeature.HEADER_KEY]: {\n          type: "div",\n          className: "feature-header"\n        },\n        [_InsertedFeature.CONTENT_KEY]: {\n          type: "div",\n          className: `${this.options.featureId}-content`\n        },\n        [_InsertedFeature.TITLE_KEY]: {\n          type: "div",\n          className: "feature-title"\n        }\n      };\n    }\n    getElementHierarchy() {\n      return {\n        [_InsertedFeature.FEATURE_KEY]: null,\n        [_InsertedFeature.HEADER_KEY]: _InsertedFeature.FEATURE_KEY,\n        [_InsertedFeature.TITLE_KEY]: _InsertedFeature.HEADER_KEY,\n        [_InsertedFeature.CONTENT_KEY]: _InsertedFeature.FEATURE_KEY\n      };\n    }\n    createElement(definition) {\n      const element = document.createElement(definition.type);\n      if (definition.className) {\n        const classes = Array.isArray(definition.className) ? definition.className : [definition.className];\n        element.classList.add(...classes);\n      }\n      if (definition.id) {\n        element.id = definition.id;\n      }\n      if (definition.attributes) {\n        Object.entries(definition.attributes).forEach(([key, value]) => {\n          element.setAttribute(key, value);\n        });\n      }\n      return element;\n    }\n    getElement(key) {\n      return this.elements.get(key);\n    }\n    setupFeatureContainer() {\n      const definitions = this.getElementDefinitions();\n      const hierarchy = this.getElementHierarchy();\n      Object.entries(definitions).forEach(([key, def]) => {\n        this.elements.set(key, this.createElement(def));\n      });\n      Object.entries(hierarchy).forEach(([key, parentKey]) => {\n        if (parentKey === null)\n          return;\n        const element = this.elements.get(key);\n        const parent = this.elements.get(parentKey);\n        if (element && parent) {\n          parent.appendChild(element);\n        }\n      });\n      if (this._options instanceof InsertedFeatureOptionsWithTitle && this._options.displayTitle?.length > 0) {\n        const titleEl = this.getElement(_InsertedFeature.TITLE_KEY);\n        if (titleEl) {\n          titleEl.innerText = this._options.displayTitle;\n        }\n      }\n      setTimeout(() => {\n        const featureEl = this.getElement(_InsertedFeature.FEATURE_KEY);\n        featureEl?.classList.remove("hide");\n      }, 0);\n    }\n    replaceFeature(existingElement) {\n      this.destroy();\n      const definitions = this.getElementDefinitions();\n      const hierarchy = this.getElementHierarchy();\n      this.elements.set(_InsertedFeature.FEATURE_KEY, existingElement);\n      Object.entries(definitions).forEach(([key, def]) => {\n        if (key === _InsertedFeature.FEATURE_KEY)\n          return;\n        let element = existingElement.querySelector(`.${Array.isArray(def.className) ? def.className[0] : def.className}`);\n        if (!element) {\n          element = this.createElement(def);\n          const parentKey = hierarchy[key];\n          if (parentKey) {\n            const parent = this.elements.get(parentKey);\n            parent?.appendChild(element);\n          }\n        }\n        this.elements.set(key, element);\n      });\n    }\n    onAfterMount() {\n    }\n    get options() {\n      return this._options;\n    }\n    destroy() {\n      this.elements.forEach((element) => {\n        if (element.parentNode) {\n          element.parentNode.removeChild(element);\n        }\n      });\n      this.elements.clear();\n    }\n  };\n  var InsertedFeature = _InsertedFeature;\n  InsertedFeature.FEATURE_KEY = "feature";\n  InsertedFeature.HEADER_KEY = "header";\n  InsertedFeature.CONTENT_KEY = "content";\n  InsertedFeature.TITLE_KEY = "title";\n\n  // src/frontend/main/graph-view.ts\n  var GraphView = class extends InsertedFeature {\n    constructor(featureEl) {\n      super(ObsidianSite.metadata.featureOptions.graphView, featureEl);\n      this.batchFraction = 1;\n      this.graphExpanded = false;\n      this._paused = false;\n      this._isGlobalGraph = false;\n      this.eventsInitialized = false;\n      this.updateRunning = false;\n      this.mouseWorldPos = new Vector2(0, 0);\n      this.scrollVelocity = 0;\n      this.firstUpdate = true;\n      this.drawLastTime = 0;\n      this.graphSim = new GraphWASMHelper();\n      this.graphContainer = document.querySelector(".graph-view-container");\n      this.globalGraphButton = document.querySelector(".graph-global.graph-icon");\n      this.expandGraphButton = document.querySelector(".graph-expand.graph-icon");\n      this.ticker = new Ticker(60);\n      this.ticker.add(this.update.bind(this));\n      this.ticker.start();\n      requestAnimationFrame(this.draw.bind(this));\n    }\n    set options(value) {\n      this._options = value;\n      if (!this.graphSim)\n        return;\n      this.graphSim.attractionForce = value.attractionForce;\n      this.graphSim.centralForce = value.centralForce;\n      this.graphSim.linkLength = value.linkLength;\n      this.graphSim.repulsionForce = value.repulsionForce / this.batchFraction;\n    }\n    get options() {\n      return this._options;\n    }\n    set attractionForce(value) {\n      if (value == this.options.attractionForce)\n        return;\n      this.options.attractionForce = value;\n      if (this.graphSim) {\n        this.graphSim.attractionForce = value;\n        this.graphSim.settleness = 1;\n      }\n    }\n    get attractionForce() {\n      return this.options.attractionForce;\n    }\n    set centralForce(value) {\n      if (value == this.options.centralForce)\n        return;\n      this.options.centralForce = value;\n      if (this.graphSim) {\n        this.graphSim.centralForce = value;\n        this.graphSim.settleness = 1;\n      }\n    }\n    get centralForce() {\n      return this.options.centralForce;\n    }\n    set linkLength(value) {\n      if (value == this.options.linkLength)\n        return;\n      this.options.linkLength = value;\n      if (this.graphSim) {\n        this.graphSim.linkLength = value;\n        this.graphSim.settleness = 1;\n      }\n    }\n    get linkLength() {\n      return this.options.linkLength;\n    }\n    set repulsionForce(value) {\n      if (value == this.options.repulsionForce)\n        return;\n      this.options.repulsionForce = value;\n      if (this.graphSim) {\n        this.graphSim.repulsionForce = value / this.batchFraction;\n        this.graphSim.settleness = 1;\n      }\n    }\n    get repulsionForce() {\n      return this.options.repulsionForce;\n    }\n    get paused() {\n      return this._paused;\n    }\n    set paused(value) {\n      this._paused = value;\n    }\n    get isGlobalGraph() {\n      return this._isGlobalGraph;\n    }\n    set isGlobalGraph(value) {\n      this._isGlobalGraph = value;\n    }\n    initEvents() {\n      const localThis = this;\n      function getMousePositionOnCanvas(event) {\n        const rect = localThis.graphRenderer.canvas.getBoundingClientRect();\n        const pos = getPointerPosition(event);\n        return new Vector2(pos.x - rect.left, pos.y - rect.top);\n      }\n      function getTouchPositionOnCanvas(event) {\n        const rect = localThis.graphRenderer.canvas.getBoundingClientRect();\n        const pos = getTouchPosition(event);\n        return new Vector2(pos.x - rect.left, pos.y - rect.top);\n      }\n      let pointerPos = new Vector2(0, 0);\n      let lastPointerPos = new Vector2(0, 0);\n      let pointerDelta = new Vector2(0, 0);\n      let dragDisplacement = new Vector2(0, 0);\n      let startDragTime = 0;\n      let pointerDown = false;\n      let middleDown = false;\n      let startPointerPos = new Vector2(0, 0);\n      let firstPointerDownId = -1;\n      let pointerInside = false;\n      const graphContainer = this.graphContainer;\n      const graphRenderer = this.graphRenderer;\n      function handlePointerEnter(enter) {\n        let lastDistance = 0;\n        let startZoom = false;\n        function handleMouseMove(move) {\n          pointerPos = getMousePositionOnCanvas(move);\n          localThis.mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos);\n          pointerDelta = new Vector2(pointerPos.x - lastPointerPos.x, pointerPos.y - lastPointerPos.y);\n          lastPointerPos = pointerPos;\n          if (graphRenderer.grabbedNode != -1)\n            dragDisplacement = new Vector2(pointerPos.x - startPointerPos.x, pointerPos.y - startPointerPos.y);\n          if (pointerDown && graphRenderer.hoveredNode != -1 && graphRenderer.grabbedNode == -1 && graphRenderer.hoveredNode != graphRenderer.grabbedNode) {\n            graphRenderer.grabbedNode = graphRenderer.hoveredNode;\n          }\n          if (pointerDown && graphRenderer.hoveredNode == -1 && graphRenderer.grabbedNode == -1 || middleDown) {\n            graphRenderer.cameraOffset = new Vector2(graphRenderer.cameraOffset.x + pointerDelta.x, graphRenderer.cameraOffset.y + pointerDelta.y);\n          } else {\n            if (graphRenderer.hoveredNode != -1)\n              graphRenderer.canvas.style.cursor = "pointer";\n            else\n              graphRenderer.canvas.style.cursor = "default";\n          }\n        }\n        function handleTouchMove(move) {\n          if (move.touches?.length == 1) {\n            if (startZoom) {\n              lastPointerPos = getTouchPositionOnCanvas(move);\n              startZoom = false;\n            }\n            handleMouseMove(move);\n            return;\n          }\n          if (move.touches?.length == 2) {\n            const touch1 = getTouchPositionVector(move.touches[0]);\n            const touch2 = getTouchPositionVector(move.touches[1]);\n            pointerPos = getTouchPositionOnCanvas(move);\n            pointerDelta = new Vector2(pointerPos.x - lastPointerPos.x, pointerPos.y - lastPointerPos.y);\n            lastPointerPos = pointerPos;\n            const distance = Math.sqrt(Math.pow(touch1.x - touch2.x, 2) + Math.pow(touch1.y - touch2.y, 2));\n            if (!startZoom) {\n              startZoom = true;\n              lastDistance = distance;\n              pointerDelta = new Vector2(0, 0);\n              localThis.mouseWorldPos = Vector2.Undefined;\n              graphRenderer.grabbedNode = -1;\n              graphRenderer.hoveredNode = -1;\n            }\n            const distanceDelta = distance - lastDistance;\n            const scaleDelta = distanceDelta / lastDistance;\n            localThis.scaleAround(graphRenderer.vecToWorldspace(pointerPos), 1 + scaleDelta, 0.15, 15);\n            graphRenderer.cameraOffset = new Vector2(graphRenderer.cameraOffset.x + pointerDelta.x, graphRenderer.cameraOffset.y + pointerDelta.y);\n            lastDistance = distance;\n          }\n        }\n        function handlePointerUp(up) {\n          document.removeEventListener("pointerup", handlePointerUp);\n          const pointerUpTime = Date.now();\n          setTimeout(() => {\n            if (pointerDown && graphRenderer.hoveredNode != -1 && Math.abs(dragDisplacement.x) <= 4 && Math.abs(dragDisplacement.y) <= 4 && pointerUpTime - startDragTime < 300) {\n              localThis.navigateToNode(graphRenderer.hoveredNode);\n            }\n            if (pointerDown && graphRenderer.grabbedNode != -1) {\n              graphRenderer.grabbedNode = -1;\n            }\n            if (up.button == 0)\n              pointerDown = false;\n            if (up.pointerType == "touch" && firstPointerDownId == up.pointerId) {\n              firstPointerDownId = -1;\n              pointerDown = false;\n            }\n            if (up.button == 1)\n              middleDown = false;\n            if (!pointerInside) {\n              document.removeEventListener("mousemove", handleMouseMove);\n              document.removeEventListener("touchmove", handleTouchMove);\n            }\n          }, 0);\n        }\n        function handlePointerDown(down) {\n          document.addEventListener("pointerup", handlePointerUp);\n          localThis.mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos);\n          dragDisplacement = new Vector2(0, 0);\n          if (down.button == 0)\n            pointerDown = true;\n          if (down.pointerType == "touch" && firstPointerDownId == -1) {\n            firstPointerDownId = down.pointerId;\n            pointerDown = true;\n          }\n          if (down.button == 1)\n            middleDown = true;\n          startPointerPos = pointerPos;\n          startDragTime = Date.now();\n        }\n        function handlePointerLeave(leave) {\n          setTimeout(() => {\n            pointerInside = false;\n            if (!pointerDown) {\n              document.removeEventListener("mousemove", handleMouseMove);\n              document.removeEventListener("touchmove", handleTouchMove);\n              localThis.mouseWorldPos = Vector2.Undefined;\n            }\n            graphContainer.removeEventListener("pointerdown", handlePointerDown);\n            graphContainer.removeEventListener("pointerleave", handlePointerLeave);\n          }, 1);\n        }\n        pointerPos = getMousePositionOnCanvas(enter);\n        localThis.mouseWorldPos = graphRenderer.vecToWorldspace(pointerPos);\n        lastPointerPos = getMousePositionOnCanvas(enter);\n        pointerInside = true;\n        document.addEventListener("mousemove", handleMouseMove);\n        document.addEventListener("touchmove", handleTouchMove);\n        graphContainer.addEventListener("pointerdown", handlePointerDown);\n        graphContainer.addEventListener("pointerleave", handlePointerLeave);\n      }\n      this.graphRenderer.canvas.addEventListener("pointerenter", handlePointerEnter);\n      this.expandGraphButton?.addEventListener("click", (event) => {\n        event.stopPropagation();\n        localThis.toggleExpandedGraph();\n      });\n      this.globalGraphButton?.addEventListener("click", (event) => {\n        event.stopPropagation();\n        if (!localThis.isGlobalGraph) {\n          localThis.showGraph();\n        } else {\n          localThis.showGraph([ObsidianSite.document.pathname]);\n        }\n      });\n      graphContainer.addEventListener("wheel", function(e) {\n        const startingScrollVelocity = 0.065;\n        const delta = e.deltaY;\n        if (delta > 0) {\n          if (localThis.scrollVelocity >= -startingScrollVelocity) {\n            localThis.scrollVelocity = -startingScrollVelocity;\n          }\n          localThis.scrollVelocity *= 1.16;\n        } else {\n          if (localThis.scrollVelocity <= startingScrollVelocity) {\n            localThis.scrollVelocity = startingScrollVelocity;\n          }\n          localThis.scrollVelocity *= 1.16;\n        }\n      });\n      graphContainer.addEventListener("dblclick", function(e) {\n        localThis.fitToNodes();\n      });\n      document.querySelector(".theme-toggle-input")?.addEventListener("change", (event) => {\n        setTimeout(() => graphRenderer.resampleColors(), 0);\n      });\n    }\n    async generate(paths) {\n      this.paths = paths;\n      this.nodeCount = this.paths.length;\n      this.linkSources = [];\n      this.linkTargets = [];\n      this.labels = [];\n      this.radii = [];\n      this.colors = [];\n      const linkCounts = [];\n      for (let i = 0; i < this.nodeCount; i++) {\n        linkCounts.push(0);\n      }\n      let pathIndex = 0;\n      for (const source of this.paths) {\n        const fileInfo = ObsidianSite.getWebpageData(source);\n        if (!fileInfo)\n          continue;\n        this.labels.push(fileInfo.title);\n        const links = fileInfo.links.map((l) => LinkHandler.getPathnameFromURL(l)).concat(fileInfo.attachments).concat(fileInfo.backlinks);\n        let uniqueLinks = [...new Set(links)];\n        uniqueLinks.push(source);\n        for (const link of uniqueLinks) {\n          const targetIndex = this.paths.indexOf(link);\n          if (targetIndex != -1) {\n            this.linkSources.push(targetIndex);\n            this.linkTargets.push(pathIndex);\n            linkCounts[pathIndex]++;\n            linkCounts[targetIndex]++;\n          }\n        }\n        pathIndex++;\n      }\n      const maxLinks = Math.max(...linkCounts);\n      this.radii = linkCounts.map((l) => inOutQuadBlend(this.options.minNodeRadius, this.options.maxNodeRadius, Math.min(l / (maxLinks * 0.8), 1)));\n      this.linkCount = this.linkSources.length;\n    }\n    async showGraph(paths) {\n      this.paused = true;\n      let linked = [];\n      if (paths) {\n        for (const element of paths) {\n          const fileInfo = ObsidianSite.getWebpageData(element);\n          if (fileInfo?.backlinks)\n            linked.push(...fileInfo.backlinks);\n          if (fileInfo?.links)\n            linked.push(...fileInfo.links.map((l) => LinkHandler.getPathnameFromURL(l)));\n          if (fileInfo?.attachments)\n            linked.push(...fileInfo.attachments);\n        }\n        linked.push(...paths);\n      } else {\n        linked = ObsidianSite.metadata.allFiles;\n      }\n      if (linked.length == ObsidianSite.metadata.allFiles.length)\n        this.isGlobalGraph = true;\n      else\n        this.isGlobalGraph = false;\n      linked = linked.filter((l) => {\n        let data = ObsidianSite.getWebpageData(l);\n        if (!data?.backlinks || !data?.links || !data?.type)\n          return false;\n        if (data.backlinks.length == 0) {\n          console.log("No backlinks for", l);\n        }\n        if (!this.options.showOrphanNodes && data.backlinks.length == 0 && data.links.length == 0)\n          return false;\n        if (!this.options.showAttachments && (data.type == "attachment" || data.type == "media" || data.type == "other"))\n          return false;\n        return true;\n      });\n      if (linked.length == 0) {\n        console.log("No nodes to display.");\n        return;\n      }\n      const uniquePaths = [...new Set(linked)];\n      const newPositions = new Array(uniquePaths.length * 2).fill(0);\n      if (this.paths?.length > 0) {\n        const oldPositions = this.graphSim.positionsF;\n        for (let i = 0; i < uniquePaths.length; i++) {\n          const path = uniquePaths[i];\n          const index = this.paths.indexOf(path);\n          if (index == -1)\n            continue;\n          newPositions[i * 2] = oldPositions[index * 2];\n          newPositions[i * 2 + 1] = oldPositions[index * 2 + 1];\n        }\n      }\n      await this.generate(uniquePaths);\n      this.graphSim.init(this, newPositions);\n      if (!this.graphRenderer)\n        this.graphRenderer = new GraphRenderWorker(this);\n      else\n        this.graphRenderer.updateData(this);\n      this.fitToNodes();\n      if (!this.eventsInitialized) {\n        this.initEvents();\n        this.eventsInitialized = true;\n      }\n      this.paused = false;\n      const localSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-circle-dot"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="1"/></svg>`;\n      const globalSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-git-fork"><circle cx="12" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9"/><path d="M12 12v3"/></svg>`;\n      this.globalGraphButton.innerHTML = this.isGlobalGraph ? localSVG : globalSVG;\n      this.setActiveNodeByPath(ObsidianSite.document.pathname);\n    }\n    fitToNodes() {\n      this.graphRenderer.centerCamera();\n      this.graphRenderer.cameraScale = 1 / Math.sqrt(this.nodeCount) * this.graphRenderer.canvas.width / 200;\n      this.graphSim.settleness = 1;\n    }\n    update(dt) {\n      if (this.paused || !this.graphRenderer || !this.graphSim) {\n        return;\n      }\n      if (this.firstUpdate) {\n        setTimeout(() => this.graphRenderer?.canvas?.classList.remove("hide"), 500);\n        this.firstUpdate = false;\n      }\n      this.graphSim.dt = dt;\n      this.graphSim.update(this.mouseWorldPos, this.graphRenderer.grabbedNode, this.graphRenderer.cameraScale);\n      if (this.graphSim.hoveredNode != this.graphRenderer.hoveredNode) {\n        this.graphRenderer.hoveredNode = this.graphSim.hoveredNode;\n        this.graphRenderer.canvas.style.cursor = this.graphSim.hoveredNode == -1 ? "default" : "pointer";\n      }\n    }\n    async draw(time) {\n      if (!this.graphRenderer || !this.graphSim || this.paths.length == 0)\n        return;\n      const dt = (time - this.drawLastTime) / 1e3;\n      this.drawLastTime = time;\n      this.graphRenderer.draw(this.graphSim.positions);\n      if (this.scrollVelocity != 0) {\n        if (Math.abs(this.scrollVelocity) < 1e-3) {\n          this.scrollVelocity = 0;\n        }\n        this.zoomAround(this.mouseWorldPos, this.scrollVelocity);\n        this.scrollVelocity *= 1 - dt * 15;\n      }\n      requestAnimationFrame(this.draw.bind(this));\n    }\n    zoomAround(point, zoom, minScale = 0.15, maxScale = 15) {\n      const cameraCenter = this.graphRenderer.getCameraCenterWorldspace();\n      this.graphRenderer.cameraScale = Math.max(Math.min(this.graphRenderer.cameraScale + zoom * this.graphRenderer.cameraScale, maxScale), minScale);\n      if (this.graphRenderer.cameraScale != minScale && this.graphRenderer.cameraScale != maxScale && this.scrollVelocity > 0 && !this.mouseWorldPos.isUndefined) {\n        const aroundDiff = new Vector2(point.x - cameraCenter.x, point.y - cameraCenter.y);\n        const movePos = new Vector2(cameraCenter.x + aroundDiff.x * zoom, cameraCenter.y + aroundDiff.y * zoom);\n        this.graphRenderer.setCameraCenterWorldspace(movePos);\n      } else\n        this.graphRenderer.setCameraCenterWorldspace(cameraCenter);\n    }\n    scaleAround(point, scale, minScale = 0.15, maxScale = 15) {\n      const cameraCenter = this.graphRenderer.getCameraCenterWorldspace();\n      const scaleBefore = this.graphRenderer.cameraScale;\n      this.graphRenderer.cameraScale = Math.max(Math.min(scale * this.graphRenderer.cameraScale, maxScale), minScale);\n      const diff = (scaleBefore - this.graphRenderer.cameraScale) / scaleBefore;\n      if (this.graphRenderer.cameraScale != minScale && this.graphRenderer.cameraScale != maxScale && scale != 0) {\n        const aroundDiff = new Vector2(point.x - cameraCenter.x, point.y - cameraCenter.y);\n        const movePos = new Vector2(cameraCenter.x - aroundDiff.x * diff, cameraCenter.y - aroundDiff.y * diff);\n        this.graphRenderer.setCameraCenterWorldspace(movePos);\n      } else\n        this.graphRenderer.setCameraCenterWorldspace(cameraCenter);\n    }\n    async navigateToNode(nodeIndex) {\n      if (nodeIndex < 0 || nodeIndex >= this.nodeCount)\n        return;\n      if (this.graphExpanded)\n        this.toggleExpandedGraph();\n      const url = this.paths[nodeIndex];\n      await ObsidianSite.loadURL(url);\n    }\n    toggleExpandedGraph() {\n      const initialWidth = this.graphContainer.clientWidth;\n      const initialHeight = this.graphContainer.clientHeight;\n      this.graphContainer.classList.add("scale-down");\n      const fadeOutAnimation = this.graphContainer.animate({ opacity: 0 }, { duration: 100, easing: "ease-in", fill: "forwards" });\n      const localThis = this;\n      fadeOutAnimation.addEventListener("finish", function() {\n        localThis.graphContainer.classList.toggle("expanded");\n        localThis.graphRenderer.autoResizeCanvas();\n        localThis.graphRenderer.centerCamera();\n        const finalWidth = localThis.graphContainer.clientWidth;\n        const finalHeight = localThis.graphContainer.clientHeight;\n        localThis.graphRenderer.cameraScale *= (finalWidth / initialWidth + finalHeight / initialHeight) / 2;\n        localThis.graphContainer.classList.remove("scale-down");\n        localThis.graphContainer.classList.add("scale-up");\n        const fadeInAnimation = localThis.graphContainer.animate({ opacity: 1 }, { duration: 200, easing: "ease-out", fill: "forwards" });\n        fadeInAnimation.addEventListener("finish", function() {\n          localThis.graphContainer.classList.remove("scale-up");\n        });\n      });\n      this.graphExpanded = !this.graphExpanded;\n      if (this.graphExpanded) {\n        document.addEventListener("pointerdown", handleOutsideClick, { once: true });\n      } else {\n        document.removeEventListener("pointerdown", handleOutsideClick);\n      }\n      function handleOutsideClick(event) {\n        if (!localThis.graphExpanded)\n          return;\n        if (event.composedPath().includes(localThis.graphContainer)) {\n          document.addEventListener("pointerdown", handleOutsideClick, { once: true });\n          return;\n        }\n        localThis.toggleExpandedGraph();\n      }\n      this.graphRenderer.autoResizeCanvas();\n    }\n    getNodeByPath(path) {\n      return this.paths.indexOf(path);\n    }\n    setActiveNode(nodeIndex) {\n      if (nodeIndex < 0 || nodeIndex >= this.nodeCount)\n        return;\n      this.graphRenderer.activeNode = nodeIndex;\n    }\n    setActiveNodeByPath(path) {\n      this.setActiveNode(this.getNodeByPath(path));\n    }\n  };\n\n  // src/frontend/main/theme.ts\n  var Theme = class {\n    constructor() {\n      this.themeToggle = document.querySelector(".theme-toggle-input");\n      this.themeToggle?.addEventListener("change", (event) => {\n        this.switchTheme();\n      });\n    }\n    switchTheme() {\n      const current = localStorage.getItem("theme");\n      let opposite = current == "light" /* Light */ ? "dark" /* Dark */ : "light" /* Light */;\n      this.setTheme(opposite, false);\n    }\n    setTheme(theme, instant = false) {\n      let state = theme == "light" /* Light */;\n      this.themeToggle.checked = state;\n      let oldTransition = "";\n      if (instant) {\n        oldTransition = document.body.style.transition;\n        document.body.style.transition = "none";\n      }\n      if (!this.themeToggle.classList.contains("is-checked") && state) {\n        this.themeToggle.classList.add("is-checked");\n      } else if (this.themeToggle.classList.contains("is-checked") && !state) {\n        this.themeToggle.classList.remove("is-checked");\n      }\n      if (!state) {\n        if (document.body.classList.contains("theme-light")) {\n          document.body.classList.remove("theme-light");\n        }\n        if (!document.body.classList.contains("theme-dark")) {\n          document.body.classList.add("theme-dark");\n        }\n      } else {\n        if (document.body.classList.contains("theme-dark")) {\n          document.body.classList.remove("theme-dark");\n        }\n        if (!document.body.classList.contains("theme-light")) {\n          document.body.classList.add("theme-light");\n        }\n      }\n      if (instant) {\n        setTimeout(function() {\n          document.body.style.transition = oldTransition;\n        }, 100);\n      }\n      localStorage.setItem("theme", state ? "light" : "dark");\n    }\n  };\n\n  // src/shared/dynamic-inserted-feature.ts\n  var DynamicInsertedFeature = class extends InsertedFeature {\n    constructor(options, dependencies, existingElement) {\n      super(options, existingElement);\n      this.dependencies = dependencies;\n      this.updateContent();\n    }\n    regenerate() {\n      this.updateContent();\n    }\n    updateDependencies(newDependencies, autoRegenerate = true) {\n      this.dependencies = newDependencies;\n      if (autoRegenerate) {\n        this.regenerate();\n      }\n    }\n    modifyDependencies(modifier, autoRegenerate = true) {\n      modifier(this.dependencies);\n      if (autoRegenerate) {\n        this.regenerate();\n      }\n    }\n    getDependencies() {\n      return this.dependencies;\n    }\n    updateContent() {\n      const contentEl = this.getElement(InsertedFeature.CONTENT_KEY);\n      if (!contentEl)\n        return;\n      while (contentEl.firstChild) {\n        contentEl.removeChild(contentEl.firstChild);\n      }\n      const featureEl = this.getElement(InsertedFeature.FEATURE_KEY);\n      if (!featureEl?.isConnected && featureEl) {\n        this.options.insertFeature(document.body, featureEl);\n      }\n      this.generateContent(contentEl);\n    }\n    hide() {\n      const featureEl = this.getElement(InsertedFeature.FEATURE_KEY);\n      if (featureEl) {\n        featureEl.style.display = "none";\n      }\n    }\n    show() {\n      const featureEl = this.getElement(InsertedFeature.FEATURE_KEY);\n      if (featureEl) {\n        featureEl.style.display = "";\n      }\n    }\n  };\n\n  // src/frontend/main/backlinks.ts\n  var Backlink = class {\n    get url() {\n      return this._url;\n    }\n    constructor(container, targetURL) {\n      this.targetData = ObsidianSite.getWebpageData(targetURL);\n      if (!this.targetData) {\n        console.error("Failed to find target for backlink", targetURL);\n        return;\n      }\n      this._url = targetURL;\n      this.backlinkEl = document.createElement("a");\n      this.backlinkEl.href = targetURL;\n      this.backlinkEl.classList.add("backlink");\n      container.appendChild(this.backlinkEl);\n      this.backlinkIconEl = document.createElement("div");\n      this.backlinkIconEl.classList.add("backlink-icon");\n      this.backlinkIconEl.innerHTML = this.targetData.icon;\n      this.backlinkEl.appendChild(this.backlinkIconEl);\n      this.backlinkTitleEl = document.createElement("div");\n      this.backlinkTitleEl.classList.add("backlink-title");\n      this.backlinkTitleEl.innerText = this.targetData.title;\n      this.backlinkEl.appendChild(this.backlinkTitleEl);\n      this.backlinkEl.addEventListener("click", (e) => {\n        e.preventDefault();\n        ObsidianSite.loadURL(this.url);\n      });\n    }\n  };\n  var BacklinkList = class extends DynamicInsertedFeature {\n    constructor(backlinkPaths) {\n      super(ObsidianSite.metadata.featureOptions.backlinks, {\n        backlinkPaths\n      });\n    }\n    generateContent(container) {\n      const deps = this.getDependencies();\n      this.backlinks = deps.backlinkPaths.map((url) => new Backlink(container, url));\n    }\n  };\n\n  // src/frontend/main/tags.ts\n  var Tags = class extends DynamicInsertedFeature {\n    constructor(tags) {\n      super(ObsidianSite.metadata.featureOptions.tags, { tags });\n    }\n    generateContent(container) {\n      const deps = this.getDependencies();\n      for (const tagName of deps.tags) {\n        const tagEl = document.createElement("a");\n        tagEl.classList.add("tag");\n        tagEl.setAttribute("href", `?query=tag:${tagName.replace("#", "")}`);\n        tagEl.innerText = tagName;\n        container.appendChild(tagEl);\n      }\n      LinkHandler.initializeLinks(container);\n    }\n  };\n\n  // src/frontend/main/aliases.ts\n  var Aliases = class extends DynamicInsertedFeature {\n    constructor(aliases) {\n      super(ObsidianSite.metadata.featureOptions.alias, {\n        aliases\n      });\n    }\n    generateContent(container) {\n      const deps = this.getDependencies();\n      for (const aliasName of deps.aliases) {\n        const aliasEl = document.createElement("span");\n        aliasEl.classList.add("alias");\n        aliasEl.innerText = aliasName;\n        container.appendChild(aliasEl);\n      }\n      return container;\n    }\n  };\n\n  // src/frontend/main/website.ts\n  var ObsidianWebsite = class {\n    constructor() {\n      this.LinkHandler = LinkHandler;\n      this.LinkPreview = FilePreviewPopover;\n      this.isLoaded = false;\n      this.isHttp = window.location.protocol != "file:";\n      this.fileTree = void 0;\n      this.outlineTree = void 0;\n      this.search = void 0;\n      this.leftSidebar = void 0;\n      this.rightSidebar = void 0;\n      this.graphView = void 0;\n      this.backlinkList = void 0;\n      this.tags = void 0;\n      this.aliases = void 0;\n      this.onloadCallbacks = [];\n      this.cachedWebpageDataMap = /* @__PURE__ */ new Map();\n      this.cachedFileDataMap = /* @__PURE__ */ new Map();\n      this.lastScreenWidth = void 0;\n      this.isResizing = false;\n      this.checkStillResizingTimeout = void 0;\n      this._deviceSize = "large-screen";\n    }\n    onDocumentLoad(callback) {\n      this.onloadCallbacks.push(callback);\n    }\n    async init() {\n      window.addEventListener("load", () => ObsidianSite.onInit());\n      if (this.isHttp) {\n        this.metadata = await this.loadWebsiteData();\n        if (!this.metadata) {\n          console.error("Failed to load website data.");\n          return;\n        }\n      }\n    }\n    async onInit() {\n      if (!this.isHttp) {\n        this.metadata = await this.loadWebsiteData();\n        if (!this.metadata) {\n          console.error("Failed to load website data.");\n          this.metadata = new WebsiteData();\n          this.metadata.ignoreMetadata = true;\n        }\n      }\n      await waitUntil(() => this.metadata != void 0, 16);\n      console.log("Website init");\n      if (window.location.protocol != "file:") {\n        await loadIncludes();\n      }\n      this.theme = new Theme();\n      this.bodyEl = document.body;\n      this.horizontalLayout = document.querySelector("#main-horizontal");\n      this.centerContentEl = document.querySelector("#center-content");\n      const fileTreeEl = document.querySelector("#file-explorer");\n      const outlineTreeEl = document.querySelector("#outline");\n      const leftSidebarEl = document.querySelector(".sidebar#left-sidebar");\n      const rightSidebarEl = document.querySelector(".sidebar#right-sidebar");\n      this.bodyEl.className += " " + this.metadata.bodyClasses;\n      this.createLoadingEl();\n      if (fileTreeEl)\n        this.fileTree = new Tree(fileTreeEl);\n      if (outlineTreeEl)\n        this.outlineTree = new Tree(outlineTreeEl, this.metadata.featureOptions.outline.minCollapseDepth);\n      if (leftSidebarEl)\n        this.leftSidebar = new Sidebar(leftSidebarEl);\n      if (rightSidebarEl)\n        this.rightSidebar = new Sidebar(rightSidebarEl);\n      this.search = await new Search().init();\n      const pathname = document.querySelector("meta[name=\'pathname\']")?.getAttribute("content") ?? "unknown";\n      this.entryPage = pathname;\n      this.document = await new WebpageDocument(pathname);\n      await this.document.loadChildDocuments();\n      await this.document.postLoadInit();\n      if (!ObsidianSite.metadata.ignoreMetadata && ObsidianSite.metadata.featureOptions.graphView.enabled) {\n        this.loadGraphView().then(() => this.graphView?.showGraph([pathname]));\n      }\n      this.initEvents();\n      FilePreviewPopover.loadPinnedPreviews();\n      this.onDocumentLoad((doc) => {\n        if (!ObsidianSite.metadata.ignoreMetadata) {\n          const insertBacklinks = doc.isMainDocument && !ObsidianSite.metadata.ignoreMetadata && ObsidianSite.metadata.featureOptions.backlinks.enabled && doc.documentType == "markdown" /* Markdown */;\n          const insertTags = doc.isMainDocument && !ObsidianSite.metadata.ignoreMetadata && ObsidianSite.metadata.featureOptions.tags.enabled && doc.documentType == "markdown" /* Markdown */;\n          const insertAliases = doc.isMainDocument && !ObsidianSite.metadata.ignoreMetadata && ObsidianSite.metadata.featureOptions.alias.enabled && doc.documentType == "markdown" /* Markdown */;\n          if (insertBacklinks) {\n            const backlinks = doc.info.backlinks?.filter((b) => b != doc.pathname);\n            if (!this.backlinkList) {\n              this.backlinkList = new BacklinkList(doc.info.backlinks ?? []);\n            } else {\n              this.backlinkList?.modifyDependencies((d) => {\n                d.backlinkPaths = doc.info.backlinks ?? [];\n              });\n            }\n            if (!backlinks || backlinks.length == 0) {\n              this.backlinkList?.hide();\n            } else {\n              this.backlinkList?.show();\n            }\n          } else {\n            this.backlinkList?.hide();\n          }\n          if (insertTags) {\n            const tags = [];\n            if (ObsidianSite.metadata.featureOptions.tags.showInlineTags && doc.info.inlineTags) {\n              tags.push(...doc.info.inlineTags);\n            }\n            if (ObsidianSite.metadata.featureOptions.tags.showFrontmatterTags && doc.info.frontmatterTags) {\n              tags.push(...doc.info.frontmatterTags);\n            }\n            if (!this.tags) {\n              this.tags = new Tags(tags);\n            } else {\n              this.tags?.modifyDependencies((d) => {\n                d.tags = tags;\n              });\n            }\n            if (tags.length == 0) {\n              this.tags?.hide();\n            } else {\n              this.tags?.show();\n            }\n          } else {\n            this.tags?.hide();\n          }\n          if (insertAliases) {\n            const aliases = doc.info.aliases;\n            if (!this.aliases) {\n              this.aliases = new Aliases(aliases ?? []);\n            } else {\n              this.aliases?.modifyDependencies((d) => {\n                d.aliases = aliases ?? [];\n              });\n            }\n            if (!aliases || aliases.length == 0) {\n              this.aliases?.hide();\n            } else {\n              this.aliases?.show();\n            }\n          } else {\n            this.aliases?.hide();\n          }\n        }\n      });\n      if (this.isHttp) {\n        let initialPath = this.document.pathname;\n        if (initialPath == "index.html")\n          initialPath = "";\n        history.replaceState({ pathname: initialPath }, this.document.title, initialPath);\n      }\n      this.isLoaded = true;\n      this.onloadCallbacks.forEach((cb) => cb(this.document));\n    }\n    initEvents() {\n      window.addEventListener("popstate", async (e) => {\n        console.log("popstate", e);\n        if (!e.state)\n          return;\n        const pathname = e.state.pathname;\n        await ObsidianSite.loadURL(pathname, false);\n      });\n      const localThis = this;\n      window.addEventListener("resize", () => {\n        localThis.onResize();\n      });\n      this.onResize();\n    }\n    updateMetaTag(name, content) {\n      let meta = document.querySelector(`meta[name="${name}"], meta[property="${name}"]`);\n      if (!meta) {\n        meta = document.createElement("meta");\n        if (name.startsWith("og:")) {\n          meta.setAttribute("property", name);\n        } else {\n          meta.setAttribute("name", name);\n        }\n        document.head.appendChild(meta);\n      }\n      meta.setAttribute("content", content);\n    }\n    async loadURL(url, pushState = true) {\n      const header = LinkHandler.getHashFromURL(url);\n      const query = LinkHandler.getQueryFromURL(url);\n      url = LinkHandler.getPathnameFromURL(url);\n      console.log("Loading URL", url, header, query);\n      if (query && query.startsWith("query=")) {\n        this.search?.searchParseFilters(query.substring(6));\n        return;\n      }\n      if (this.document.pathname == url) {\n        if (header)\n          this.document.scrollToHeader(header);\n        else {\n          new Notice("This page is already loaded.");\n        }\n        return this.document;\n      }\n      const data = ObsidianSite.getWebpageData(url);\n      if (!data) {\n        new Notice("This page does not exist yet.");\n        console.warn("Page does not exist", url);\n        return void 0;\n      }\n      const page = await new WebpageDocument(url).load();\n      if (!page) {\n        new Notice("Failed to load page. Unknown error.");\n        return;\n      }\n      document.title = page.title;\n      this.updateMetaTag("pathname", page.pathname);\n      this.updateMetaTag("description", page.info?.description || "");\n      this.updateMetaTag("author", page.info?.author || "");\n      this.updateMetaTag("og:title", page.title);\n      this.updateMetaTag("og:description", page.info?.description || "");\n      this.updateMetaTag("og:url", window.location.href);\n      this.updateMetaTag("og:image", page.info?.coverImageURL || "");\n      await this.graphView?.showGraph([page.pathname]);\n      this.fileTree?.findByPath(page.pathname)?.setActive();\n      this.fileTree?.revealPath(page.pathname);\n      this.graphView?.setActiveNodeByPath(page.pathname);\n      this.document = page;\n      if (this.document && this.isHttp && pushState) {\n        let currentPath = this.document.pathname;\n        if (currentPath == "index.html")\n          currentPath = "";\n        history.pushState({ pathname: currentPath }, this.document.title, currentPath);\n      }\n      let newOutlineEl = page.sourceHtml.querySelector("#outline");\n      if (newOutlineEl) {\n        newOutlineEl = document.adoptNode(newOutlineEl);\n        document.querySelector("#outline")?.replaceWith(newOutlineEl);\n        ObsidianSite.outlineTree = new Tree(newOutlineEl, this.metadata.featureOptions.outline.minCollapseDepth);\n      }\n      setTimeout(async () => {\n        this.onloadCallbacks.forEach((cb) => cb(page));\n        await page.show();\n        if (header) {\n          page.scrollToHeader(header);\n        }\n      }, 100);\n      return page;\n    }\n    async fetch(url) {\n      url = LinkHandler.getPathnameFromURL(url);\n      if (this.isHttp || url.startsWith("http")) {\n        const req = await fetch(url);\n        if (req.ok) {\n          return req;\n        } else {\n          console.error("Failed to fetch", url);\n          return;\n        }\n      } else {\n        const file = this.getFileData(url);\n        if (!file?.data) {\n          console.error("Failed to fetch", url);\n          return;\n        }\n        const req = new Response(file.data, { status: 200 });\n        return req;\n      }\n    }\n    documentExists(url) {\n      url = LinkHandler.getPathnameFromURL(url);\n      if (this.isHttp) {\n        return !!this.metadata.webpages[url];\n      } else {\n        return !!this.getFileData(url)?.data;\n      }\n    }\n    async loadWebsiteData() {\n      if (this.isHttp) {\n        try {\n          const dataReq = await fetch(Shared.libFolderName + "/metadata.json");\n          if (dataReq.ok) {\n            const jsonStr = await dataReq.text();\n            return WebsiteData.fromJSON(jsonStr);\n          }\n        } catch (e) {\n          console.error("Failed to load website metadata.", e);\n          new Notice("Failed to load website metadata.");\n        }\n      } else {\n        const jsonData = this.getLocalDataFromId("website-metadata");\n        return jsonData ? WebsiteData.fromJSON(JSON.stringify(jsonData)) : void 0;\n      }\n      return void 0;\n    }\n    async loadGraphView() {\n      const graphViewFeature = document.querySelector(".graph-view-wrapper");\n      if (!graphViewFeature)\n        return;\n      const localThis = this;\n      waitLoadScripts(["graph-render-worker", "graph-wasm"], () => {\n        console.log("scripts loaded");\n        async function initGraphView() {\n          console.log("Initializing graph view");\n          const graphView = new GraphView(graphViewFeature);\n          localThis.graphView = graphView;\n          console.log("Graph view initialized");\n        }\n        Module["onRuntimeInitialized"] = () => {\n          console.log("Wasm loaded");\n          initGraphView();\n        };\n        run();\n        setTimeout(() => {\n          if (localThis.graphView == void 0) {\n            initGraphView();\n          }\n        }, 100);\n      });\n      await waitUntil(() => this.graphView != void 0);\n    }\n    getLocalDataFromId(id) {\n      const el = document.getElementById(id);\n      if (!el)\n        return;\n      return JSON.parse(decodeURI(atob(el.getAttribute("value") ?? "")));\n    }\n    getWebpageData(url) {\n      if (!this.isHttp) {\n        if (this.cachedWebpageDataMap.has(url)) {\n          return this.cachedWebpageDataMap.get(url);\n        } else {\n          const data = this.getLocalDataFromId(LinkHandler.getFileDataIdFromURL(url));\n          this.cachedWebpageDataMap.set(url, data);\n          return data;\n        }\n      }\n      if (this.metadata) {\n        const data = this.metadata.webpages[url];\n        if (data) {\n          return data;\n        }\n      }\n      return;\n    }\n    getFileData(url) {\n      if (!this.isHttp) {\n        if (this.cachedFileDataMap.has(url)) {\n          return this.cachedFileDataMap.get(url);\n        } else {\n          const data = this.getLocalDataFromId(LinkHandler.getFileDataIdFromURL(url));\n          this.cachedFileDataMap.set(url, data);\n          return data;\n        }\n      }\n      if (this.metadata) {\n        const data = this.metadata.fileInfo[url];\n        if (data) {\n          return data;\n        }\n      }\n      return {};\n    }\n    scrollTo(element) {\n      element.scrollIntoView();\n    }\n    async showLoading(loading, inside = this.centerContentEl) {\n      inside.style.transitionDuration = "";\n      inside.classList.toggle("hide", loading);\n      this.loadingEl.classList.toggle("show", loading);\n      if (loading) {\n        const viewBounds = Bounds.fromElement(inside);\n        this.loadingEl.style.left = viewBounds.center.x - this.loadingEl.offsetWidth / 2 + "px";\n        this.loadingEl.style.top = viewBounds.center.y - this.loadingEl.offsetHeight / 2 + "px";\n      }\n      await delay(200);\n    }\n    createLoadingEl() {\n      this.loadingEl = document.createElement("div");\n      this.loadingEl.classList.add("loading-icon");\n      document.body.appendChild(this.loadingEl);\n      this.loadingEl.innerHTML = `<div></div><div></div><div></div><div></div>`;\n    }\n    get documentBounds() {\n      return Bounds.fromElement(this.centerContentEl);\n    }\n    onEndResize() {\n      this.graphView?.graphRenderer?.autoResizeCanvas();\n      document.body.classList.toggle("resizing", false);\n    }\n    onStartResize() {\n      document.body.classList.toggle("resizing", true);\n    }\n    get deviceSize() {\n      return this._deviceSize;\n    }\n    set deviceSize(size) {\n      this._deviceSize = size;\n    }\n    onResize() {\n      if (!this.isResizing) {\n        this.onStartResize();\n        this.isResizing = true;\n      }\n      const localThis = this;\n      function widthNowInRange(low, high) {\n        const w = window.innerWidth;\n        return w > low && w < high && localThis.lastScreenWidth == void 0 || w > low && w < high && ((localThis.lastScreenWidth ?? 0) <= low || (localThis.lastScreenWidth ?? 0) >= high);\n      }\n      function widthNowGreaterThan(value) {\n        const w = window.innerWidth;\n        return w > value && localThis.lastScreenWidth == void 0 || w > value && (localThis.lastScreenWidth ?? 0) < value;\n      }\n      function widthNowLessThan(value) {\n        const w = window.innerWidth;\n        return w < value && localThis.lastScreenWidth == void 0 || w < value && (localThis.lastScreenWidth ?? 0) > value;\n      }\n      const docWidthCSS = this.metadata.featureOptions.document?.documentWidth ?? "45em";\n      const leftWdithCSS = this.metadata.featureOptions.sidebar?.leftDefaultWidth ?? "20em";\n      const rightWidthCSS = this.metadata.featureOptions.sidebar?.rightDefaultWidth ?? "20em";\n      const docWidth = getLengthInPixels(docWidthCSS, this.centerContentEl);\n      const leftWidth = this.leftSidebar ? getLengthInPixels(leftWdithCSS, this.leftSidebar?.containerEl) : 0;\n      const rightWidth = this.rightSidebar ? getLengthInPixels(rightWidthCSS, this.rightSidebar?.containerEl) : 0;\n      if (widthNowGreaterThan(docWidth + leftWidth + rightWidth) || widthNowGreaterThan(1025)) {\n        this.deviceSize = "large-screen";\n        document.body.classList.toggle("floating-sidebars", false);\n        document.body.classList.toggle("is-large-screen", true);\n        document.body.classList.toggle("is-small-screen", false);\n        document.body.classList.toggle("is-tablet", false);\n        document.body.classList.toggle("is-phone", false);\n        if (this.leftSidebar)\n          this.leftSidebar.collapsed = false;\n        if (this.rightSidebar)\n          this.rightSidebar.collapsed = false;\n      } else if (widthNowInRange(docWidth + leftWidth, docWidth + leftWidth + rightWidth) || widthNowInRange(769, 1024)) {\n        this.deviceSize = "small screen";\n        document.body.classList.toggle("floating-sidebars", false);\n        document.body.classList.toggle("is-large-screen", false);\n        document.body.classList.toggle("is-small-screen", true);\n        document.body.classList.toggle("is-tablet", false);\n        document.body.classList.toggle("is-phone", false);\n        if (this.leftSidebar && this.rightSidebar && !this.leftSidebar.collapsed) {\n          this.rightSidebar.collapsed = true;\n        }\n      } else if (widthNowInRange(leftWidth + rightWidth, docWidth + leftWidth) || widthNowInRange(481, 768)) {\n        this.deviceSize = "tablet";\n        document.body.classList.toggle("floating-sidebars", true);\n        document.body.classList.toggle("is-large-screen", false);\n        document.body.classList.toggle("is-small-screen", false);\n        document.body.classList.toggle("is-tablet", true);\n        document.body.classList.toggle("is-phone", false);\n        if (this.leftSidebar && this.rightSidebar && !this.leftSidebar.collapsed) {\n          this.rightSidebar.collapsed = true;\n        }\n      } else if (widthNowLessThan(leftWidth + rightWidth) || widthNowLessThan(480)) {\n        this.deviceSize = "phone";\n        document.body.classList.toggle("floating-sidebars", true);\n        document.body.classList.toggle("is-large-screen", false);\n        document.body.classList.toggle("is-small-screen", false);\n        document.body.classList.toggle("is-tablet", false);\n        document.body.classList.toggle("is-phone", true);\n        if (this.leftSidebar)\n          this.leftSidebar.collapsed = true;\n        if (this.rightSidebar)\n          this.rightSidebar.collapsed = true;\n      }\n      this.lastScreenWidth = window.innerWidth;\n      if (this.checkStillResizingTimeout != void 0)\n        clearTimeout(this.checkStillResizingTimeout);\n      const screenWidthSnapshot = window.innerWidth;\n      this.checkStillResizingTimeout = setTimeout(function() {\n        if (window.innerWidth == screenWidthSnapshot) {\n          localThis.checkStillResizingTimeout = void 0;\n          localThis.isResizing = false;\n          localThis.onEndResize();\n        }\n      }, 200);\n    }\n  };\n\n  // src/frontend/main/index.txt.ts\n  if (window && window.location) {\n    window.ObsidianSite = new ObsidianWebsite();\n    ObsidianSite = window.ObsidianSite;\n    window.WebpageDocument = WebpageDocument;\n    window.Canvas = Canvas;\n    window.Bounds = Bounds;\n    window.Vector2 = Vector2;\n    window.LinkHandler = LinkHandler;\n    window.FilePreviewPopover = FilePreviewPopover;\n    ObsidianSite.init();\n  }\n})();\n';

// src/plugin/asset-loaders/website-js.ts
var WebsiteJS = class extends AssetLoader {
  constructor() {
    super("webpage.js", "", null, "script" /* Script */, "autohead" /* AutoHead */, true, "static" /* Static */, "async" /* Async */);
  }
  async load() {
    this.data = index_txt_default;
    await super.load();
  }
};

// node_modules/postcss/lib/postcss.mjs
var import_postcss = __toESM(require_postcss(), 1);
var postcss_default = import_postcss.default;
var stringify = import_postcss.default.stringify;
var fromJSON = import_postcss.default.fromJSON;
var plugin = import_postcss.default.plugin;
var parse = import_postcss.default.parse;
var list = import_postcss.default.list;
var document2 = import_postcss.default.document;
var comment = import_postcss.default.comment;
var atRule = import_postcss.default.atRule;
var rule = import_postcss.default.rule;
var decl = import_postcss.default.decl;
var root = import_postcss.default.root;
var CssSyntaxError = import_postcss.default.CssSyntaxError;
var Declaration = import_postcss.default.Declaration;
var Container = import_postcss.default.Container;
var Processor = import_postcss.default.Processor;
var Document = import_postcss.default.Document;
var Comment = import_postcss.default.Comment;
var Warning = import_postcss.default.Warning;
var AtRule = import_postcss.default.AtRule;
var Result = import_postcss.default.Result;
var Input = import_postcss.default.Input;
var Rule = import_postcss.default.Rule;
var Root = import_postcss.default.Root;
var Node2 = import_postcss.default.Node;

// src/plugin/asset-loaders/asset-handler.ts
var import_postcss_safe_parser2 = __toESM(require_safe_parse());
var mime2 = require_mime();
var _AssetHandler = class {
  static get libraryPath() {
    if (!this.libraryFolder)
      this.initPaths();
    return _AssetHandler.libraryFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static get mediaPath() {
    if (!this.mediaFolder)
      this.initPaths();
    return _AssetHandler.mediaFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static get jsPath() {
    if (!this.jsFolder)
      this.initPaths();
    return _AssetHandler.jsFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static get cssPath() {
    if (!this.cssFolder)
      this.initPaths();
    return _AssetHandler.cssFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static get fontPath() {
    if (!this.fontFolder)
      this.initPaths();
    return _AssetHandler.fontFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static get htmlPath() {
    if (!this.htmlFolder)
      this.initPaths();
    return _AssetHandler.htmlFolder.slugified(this.exportOptions.slugifyPaths);
  }
  static generateSavePath(filename, type, destinationDir) {
    return AssetLoader.typeToDir(type).joinString(filename).setWorkingDirectory(destinationDir.path).slugified(this.exportOptions.slugifyPaths);
  }
  static initPaths() {
    this.libraryFolder = new Path(Shared.libFolderName);
    this.mediaFolder = this.libraryFolder.joinString(Shared.mediaFolderName);
    this.jsFolder = this.libraryFolder.joinString(Shared.scriptsFolderName);
    this.cssFolder = this.libraryFolder.joinString(Shared.cssFolderName);
    this.fontFolder = this.libraryFolder.joinString(Shared.fontFolderName);
    this.htmlFolder = this.libraryFolder.joinString(Shared.htmlFolderName);
    this.vaultPluginsPath = Path.vaultPath.joinString(app.vault.configDir, "plugins/").absolute();
  }
  static async initialize() {
    var _a3, _b3;
    this.obsidianStyles = new ObsidianStyles();
    this.otherPluginStyles = new OtherPluginStyles();
    this.themeStyles = new ThemeStyles();
    this.snippetStyles = new SnippetStyles();
    this.mathjaxStyles = new MathjaxStyles();
    this.globalDataStyles = new GlobalVariableStyles();
    this.supportedPluginStyles = new SupportedPluginStyles();
    this.websiteJS = new WebsiteJS();
    this.websiteStyles = new AssetLoader("main-styles.css", plugin_styles_txt_default, null, "style" /* Style */, "autohead" /* AutoHead */, true, "static" /* Static */, "async" /* Async */, 4);
    this.deferredCSS = new AssetLoader("deferred.css", deferred_txt_default2, null, "style" /* Style */, "inlinehead" /* InlineHead */, true, "static" /* Static */, "defer" /* Defer */, -1e3);
    this.graphWASMJS = new AssetLoader("graph-wasm.js", graph_wasm_txt_default, null, "script" /* Script */, "autohead" /* AutoHead */, true, "static" /* Static */);
    this.graphWASM = new AssetLoader("graph-wasm.wasm", Buffer.from(graph_wasm_default), null, "script" /* Script */, "download" /* Download */, false, "static" /* Static */);
    this.renderWorkerJS = new AssetLoader("graph-render-worker.js", graph_render_worker_txt_default, null, "script" /* Script */, "autohead" /* AutoHead */, true, "static" /* Static */);
    this.deferredJS = new AssetLoader("deferred.js", deferred_txt_default, null, "script" /* Script */, "inlinehead" /* InlineHead */, true, "static" /* Static */, "defer" /* Defer */, -1e3);
    this.themeLoadJS = new AssetLoader("theme-load.js", theme_load_txt_default, null, "script" /* Script */, "inline" /* Inline */, true, "static" /* Static */, "defer" /* Defer */);
    this.favicon = new Favicon();
    this.customHeadContent = new CustomHeadContent();
    this.initPaths();
    this.mainJsPath = this.vaultPluginsPath.joinString("webpage-html-export/main.js");
    this.mainJsModTime = (_b3 = (_a3 = this.mainJsPath.stat) == null ? void 0 : _a3.mtimeMs) != null ? _b3 : 0;
    this.staticAssets.forEach((asset) => asset.sourceStat.mtime = this.mainJsModTime);
    this.allAssets.sort((a, b) => a.loadPriority - b.loadPriority);
    const loadPromises = [];
    for (const asset of this.allAssets) {
      loadPromises.push(asset.load());
    }
    await Promise.all(loadPromises);
  }
  static async reloadAssets(options) {
    this.exportOptions = options;
    this.allAssets = this.allAssets.filter((asset) => asset.mutability != "temporary" /* Temporary */);
    this.temporaryAssets = [];
    let i = 0;
    const loadPromises = [];
    ExportLog.addToProgressCap(this.dynamicAssets.length / 4);
    for (const asset of this.dynamicAssets) {
      const loadPromise = asset.load();
      loadPromise.then(() => {
        i++;
        ExportLog.progress(0.25, "Initialize Export", "Loading asset: " + asset.filename, "var(--color-yellow)");
      });
      loadPromises.push(loadPromise);
    }
    await Promise.all(loadPromises);
  }
  static getAssetsOfType(type) {
    let assets = this.allAssets.filter((asset) => asset.type == type);
    assets = assets.concat(this.allAssets.map((asset) => asset.childAssets).flat().filter((asset) => asset.type == type));
    return assets;
  }
  static getAssetsOfInlinePolicy(inlinePolicy) {
    let assets = this.allAssets.filter((asset) => asset.inlinePolicy == inlinePolicy);
    assets = assets.concat(this.allAssets.map((asset) => asset.childAssets).flat().filter((asset) => asset.inlinePolicy == inlinePolicy));
    return assets;
  }
  static filterDownloads(downloads, options) {
    if (!options.graphViewOptions.enabled) {
      downloads = downloads.filter((asset) => ![this.graphWASMJS, this.graphWASM, this.renderWorkerJS].includes(asset));
    }
    if (!options.includeCSS) {
      downloads = downloads.filter((asset) => asset.type != "style" /* Style */);
    }
    if (!options.includeJS) {
      downloads = downloads.filter((asset) => asset.type != "script" /* Script */);
    }
    downloads = downloads.filter((asset, index, self2) => self2.findIndex((t) => t.targetPath.path == asset.targetPath.path) === index);
    downloads = downloads.filter((asset) => asset.data && asset.data.length > 0);
    return downloads;
  }
  static getDownloads(destination, options) {
    let downloads = this.getAssetsOfInlinePolicy("download" /* Download */).concat(this.getAssetsOfInlinePolicy("downloadhead" /* DownloadHead */)).concat(this.getAssetsOfInlinePolicy("auto" /* Auto */)).concat(this.getAssetsOfInlinePolicy("autohead" /* AutoHead */));
    downloads = this.filterDownloads(downloads, options);
    downloads.sort((a, b) => b.loadPriority - a.loadPriority);
    downloads.forEach((asset) => asset.targetPath.setWorkingDirectory(destination.path));
    if (options.inlineMedia) {
      downloads = downloads.filter((asset) => asset.type != "media" /* Media */);
    }
    if (options.inlineFonts) {
      downloads = downloads.filter((asset) => asset.type != "font" /* Font */);
    }
    if (options.inlineJS) {
      downloads = downloads.filter((asset) => asset.type != "script" /* Script */ || (asset.extensionName == "wasm" || asset.filename == this.renderWorkerJS.filename));
    }
    if (options.inlineCSS) {
      downloads = downloads.filter((asset) => asset.type != "style" /* Style */);
    }
    if (options.inlineHTML) {
      downloads = downloads.filter((asset) => asset.type != "html" /* HTML */);
    }
    return downloads;
  }
  static getHeadReferences(options) {
    let head = "";
    let referenceAssets = this.getAssetsOfInlinePolicy("downloadhead" /* DownloadHead */).concat(this.getAssetsOfInlinePolicy("autohead" /* AutoHead */)).concat(this.getAssetsOfInlinePolicy("inlinehead" /* InlineHead */));
    referenceAssets = this.filterDownloads(referenceAssets, options);
    referenceAssets.sort((a, b) => b.loadPriority - a.loadPriority);
    for (const asset of referenceAssets) {
      head += asset.getHTML(options);
    }
    return head;
  }
  static async getStyleChildAssets(asset, makeBase64External = false) {
    if (typeof asset.data != "string")
      throw new Error("Asset content is not a string");
    let content = asset.data.replaceAll("app://obsidian.md/", "");
    let urls = Array.from(content.matchAll(/url\("([^"]+)"\)|url\('([^']+)'\)/g));
    urls = urls.filter((url, index, self2) => self2.findIndex((t) => t[0] === url[0]) === index);
    const promises = [];
    for (const urlObj of urls) {
      let url = urlObj[1] || urlObj[2];
      url = url.trim();
      if (!this.exportOptions.offlineResources && url.startsWith("http"))
        continue;
      if (url == "")
        continue;
      if (url.startsWith("data:")) {
        if (!this.exportOptions.inlineMedia && makeBase64External) {
          let hash = function(str, seed = 0) {
            let h1 = 3735928559 ^ seed, h2 = 1103547991 ^ seed;
            for (let i = 0, ch; i < str.length; i++) {
              ch = str.charCodeAt(i);
              h1 = Math.imul(h1 ^ ch, 2654435761);
              h2 = Math.imul(h2 ^ ch, 1597334677);
            }
            h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);
            h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);
            h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);
            h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);
            return 4294967296 * (2097151 & h2) + (h1 >>> 0);
          };
          const splitData = url.split(",");
          const data = splitData.slice(1).join(",");
          let extension = AssetLoader.mimeToExtention(splitData[0].split(":")[1].split(";")[0]);
          const buffer = Buffer.from(data, "base64");
          const dataHash = hash(data);
          let filename = `${dataHash}.${extension}`;
          if (extension == "") {
            const type3 = await fileTypeFromBuffer(buffer);
            if (type3)
              extension = type3.ext;
            filename = `${dataHash}.${extension}`;
          }
          const type2 = AssetLoader.extentionToType(extension);
          const childAsset2 = new AssetLoader(filename, buffer, null, type2, "download" /* Download */, false, "child" /* Child */);
          asset.childAssets.push(childAsset2);
          const loadPromise2 = childAsset2.load();
          promises.push(loadPromise2);
          loadPromise2.then(() => {
            if (childAsset2.data == void 0 || childAsset2.data == null || childAsset2.data.length == 0) {
              return;
            }
            const newPath = childAsset2.getAssetPath(asset.getAssetPath());
            content = content.replaceAll(url, newPath.path);
          });
        }
        continue;
      }
      const path = new Path(url);
      if (path.isDirectory || path.isEmpty) {
        continue;
      }
      const type = AssetLoader.extentionToType(path.extension);
      const childAsset = new FetchBuffer(path.fullName, url, type, "download" /* Download */, false, "child" /* Child */);
      asset.childAssets.push(childAsset);
      const loadPromise = childAsset.load();
      promises.push(loadPromise);
      loadPromise.then(() => {
        if (childAsset.data == void 0 || childAsset.data == null || childAsset.data.length == 0) {
          return;
        }
        function addAsBase64() {
          const base64 = childAsset.data.toString("base64");
          content = content.replaceAll(url, `data:${mime2.getType(url)};base64,${base64}`);
        }
        if (this.exportOptions.inlineMedia && type == "media" /* Media */ || this.exportOptions.inlineFonts && type == "font" /* Font */ || this.exportOptions.inlineCSS && type == "style" /* Style */ || this.exportOptions.inlineJS && type == "script" /* Script */ || this.exportOptions.inlineHTML && type == "html" /* HTML */)
          addAsBase64();
        else {
          const newPath = childAsset.getAssetPath(asset.getAssetPath());
          content = content.replaceAll(url, newPath.path);
        }
      });
    }
    await Promise.all(promises);
    return content;
  }
  static async filterStyleRulesCore(cssContent, alwaysDiscard, discard, keep) {
    const result = await postcss_default([
      (root2) => {
        root2.walkRules((rule2) => {
          const filteredSelectors = rule2.selectors.filter((selector) => {
            const selectorParts = selector.split(/[\s.#:>+~]+/).filter(Boolean);
            if (selectorParts.some((part) => alwaysDiscard.some((d) => part.includes(d)))) {
              return false;
            }
            if (selectorParts.some((part) => keep.some((k) => part.includes(k)))) {
              return true;
            }
            return !selectorParts.some((part) => discard.some((d) => part.includes(d)));
          });
          if (filteredSelectors.length === 0) {
            rule2.remove();
          } else if (filteredSelectors.length !== rule2.selectors.length) {
            rule2.selectors = filteredSelectors;
          }
        });
      }
    ]).process(cssContent, {
      from: void 0,
      parser: import_postcss_safe_parser2.default
    });
    return result.css;
  }
  static async filterStyleRules(input, alwaysDiscard, discard, keep) {
    let cssContent;
    if (typeof input === "string") {
      cssContent = input;
    } else {
      const cssRules = Array.from(input.cssRules);
      cssContent = cssRules.map((rule2) => rule2.cssText).join("\n");
    }
    return this.filterStyleRulesCore(cssContent, alwaysDiscard, discard, keep);
  }
};
var AssetHandler = _AssetHandler;
AssetHandler.staticAssets = [];
AssetHandler.dynamicAssets = [];
AssetHandler.allAssets = [];
AssetHandler.temporaryAssets = [];
AssetHandler.exportOptions = new ExportPipelineOptions();
AssetHandler.mainJsModTime = 0;

// src/plugin/exporter.ts
var import_obsidian11 = require("obsidian");

// src/plugin/features/tree.ts
var Tree = class {
  constructor() {
    this.children = [];
    this.minCollapsableDepth = 1;
    this.title = void 0;
    this.class = "";
    this.id = "";
    this.showNestingIndicator = true;
    this.minDepth = 1;
    this.generateWithItemsClosed = false;
    this.makeLinksWebStyle = false;
    this.renderMarkdownTitles = true;
    this.addCollapseAllButton = true;
    this.container = void 0;
  }
  async buildTreeRecursive(tree, container, minDepth = 1, closeAllItems = false) {
    tree.minCollapsableDepth = this.minCollapsableDepth;
    const treeItem = await tree.insert(container, closeAllItems);
    if (!tree.childContainer)
      return;
    for (const item of tree.children) {
      if (item.depth < minDepth)
        continue;
      await this.buildTreeRecursive(item, tree.childContainer, minDepth, closeAllItems);
    }
  }
  async generateTree(container) {
    for (const item of this.children) {
      await this.buildTreeRecursive(item, container, this.minDepth, this.generateWithItemsClosed);
    }
    this.forAllChildren((child) => {
      if (child.isCollapsed)
        child.setCollapse(true, false);
    });
  }
  async generate(container) {
    container = container != null ? container : document.body;
    this.container = container;
    const wrapper = container.createDiv({ attr: { id: this.id, class: this.class + " tree-container" } });
    const header = wrapper.createDiv("feature-header");
    if (this.title || this.addCollapseAllButton) {
      if (this.title) {
        const titleEl = header.createDiv("feature-title");
        titleEl.textContent = this.title;
      }
      if (this.addCollapseAllButton) {
        const collapseAllEl = header.createEl("button", { cls: "clickable-icon nav-action-button tree-collapse-all" });
        collapseAllEl.setAttribute("aria-label", "Collapse All");
        collapseAllEl.innerHTML = "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'></svg>";
        if (this.generateWithItemsClosed)
          collapseAllEl.classList.add("is-collapsed");
      }
    }
    await this.generateTree(wrapper);
    return wrapper;
  }
  sortAlphabetically(reverse = false) {
    this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true }));
    for (const child of this.children) {
      child.sortAlphabetically();
    }
  }
  forAllChildren(func, recursive = true) {
    for (const child of this.children) {
      func(child);
      if (recursive)
        child.forAllChildren(func);
    }
  }
};
var TreeItem = class {
  constructor(tree, parent, depth) {
    this.children = [];
    this.depth = 0;
    this.title = "";
    this.icon = "";
    this._href = void 0;
    this.dataRef = void 0;
    this.minCollapsableDepth = 1;
    this.isCollapsed = false;
    this.childContainer = void 0;
    this.treeOrder = 0;
    this.itemEl = void 0;
    this.collapseIcon = void 0;
    this.tree = tree;
    this.parent = parent;
    this.depth = depth;
  }
  get href() {
    return this._href;
  }
  set href(value) {
    var _a3;
    this._href = value;
    this.dataRef = (_a3 = this.dataRef) != null ? _a3 : value;
  }
  async insert(container, startClosed = true) {
    if (startClosed)
      this.isCollapsed = true;
    this.itemEl = this.insertItem(container);
    await this.insertSelf(this.itemEl);
    this.insertChildren(this.itemEl);
    return this.itemEl;
  }
  forAllChildren(func, recursive = true) {
    for (const child of this.children) {
      func(child);
      if (recursive)
        child.forAllChildren(func);
    }
  }
  async setCollapse(collapsed, animate = true) {
    var _a3, _b3;
    if (!this.isCollapsible())
      return;
    if (!this.itemEl || !this.itemEl.classList.contains("mod-collapsible"))
      return;
    const childrenEl = this.itemEl.querySelector(".tree-item-children");
    if (childrenEl == null)
      return;
    if (collapsed) {
      this.itemEl.classList.add("is-collapsed");
      (_a3 = this.collapseIcon) == null ? void 0 : _a3.classList.add("is-collapsed");
      if (animate)
        this.slideUp(childrenEl, 100);
      else
        childrenEl.style.display = "none";
    } else {
      this.itemEl.classList.remove("is-collapsed");
      (_b3 = this.collapseIcon) == null ? void 0 : _b3.classList.remove("is-collapsed");
      if (animate)
        this.slideDown(childrenEl, 100);
      else
        childrenEl.style.removeProperty("display");
    }
    this.isCollapsed = collapsed;
  }
  toggleCollapse() {
    if (!this.itemEl)
      return;
    this.setCollapse(!this.itemEl.classList.contains("is-collapsed"));
  }
  sortAlphabetically(reverse = false) {
    this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true }));
    for (const child of this.children) {
      child.sortAlphabetically();
    }
  }
  isCollapsible() {
    return this.children.length != 0 && this.depth >= this.minCollapsableDepth;
  }
  insertItem(container) {
    const itemEl = container.createDiv("tree-item");
    itemEl.setAttribute("data-depth", this.depth.toString());
    if (this.isCollapsible())
      itemEl.classList.add("mod-collapsible");
    if (this.isCollapsed)
      itemEl.classList.add("is-collapsed");
    return itemEl;
  }
  async insertInner(container) {
    const itemContentsEl = container.createDiv("tree-item-inner");
    if (this.tree.renderMarkdownTitles)
      MarkdownRendererAPI.renderMarkdownSimpleEl(this.title, itemContentsEl);
    else
      itemContentsEl.innerText = this.title;
    itemContentsEl.querySelectorAll("a").forEach((a) => {
      const span = a.ownerDocument.createElement("span");
      span.innerHTML = a.innerHTML;
      a.replaceWith(span);
    });
    itemContentsEl.innerHTML = itemContentsEl.innerHTML.replace(/\n/g, "");
    return itemContentsEl;
  }
  async insertSelf(container) {
    var _a3, _b3;
    if (this.tree.makeLinksWebStyle && this.href)
      this.href = Path.slugify(this.href);
    const itemLinkEl = container.createEl(this.href ? "a" : "div", { cls: "tree-item-self is-clickable" });
    if (this.href)
      itemLinkEl.setAttribute("href", this.href);
    itemLinkEl.setAttribute("data-path", (_b3 = (_a3 = this.dataRef) != null ? _a3 : this.href) != null ? _b3 : this.title);
    if (this.isCollapsible()) {
      this.insertCollapseIcon(itemLinkEl);
      itemLinkEl.classList.add("mod-collapsible");
    }
    this.insertIcon(itemLinkEl);
    await this.insertInner(itemLinkEl);
    return itemLinkEl;
  }
  insertCollapseIcon(container) {
    const arrowIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg>`;
    this.collapseIcon = container.createDiv("tree-item-icon collapse-icon");
    if (this.isCollapsed)
      this.collapseIcon.classList.add("is-collapsed");
    this.collapseIcon.innerHTML = arrowIcon;
    return this.collapseIcon;
  }
  insertIcon(container) {
    if (this.icon.trim() == "")
      return void 0;
    const itemIconEl = container.createDiv("tree-icon iconize-icon");
    if (this.tree.renderMarkdownTitles)
      MarkdownRendererAPI.renderMarkdownSimpleEl(this.icon, itemIconEl);
    else
      itemIconEl.innerText = this.icon;
    return itemIconEl;
  }
  insertChildren(container) {
    this.childContainer = container.createDiv("tree-item-children");
    return this.childContainer;
  }
  slideUp(target, duration = 500) {
    target.style.transitionProperty = "height, margin, padding";
    target.style.transitionDuration = duration + "ms";
    target.style.boxSizing = "border-box";
    target.style.height = target.offsetHeight + "px";
    target.offsetHeight;
    target.style.overflow = "hidden";
    target.style.height = "0";
    target.style.paddingTop = "0";
    target.style.paddingBottom = "0";
    target.style.marginTop = "0";
    target.style.marginBottom = "0";
    window.setTimeout(async () => {
      target.style.display = "none";
      target.style.removeProperty("height");
      target.style.removeProperty("padding-top");
      target.style.removeProperty("padding-bottom");
      target.style.removeProperty("margin-top");
      target.style.removeProperty("margin-bottom");
      target.style.removeProperty("overflow");
      target.style.removeProperty("transition-duration");
      target.style.removeProperty("transition-property");
    }, duration);
  }
  slideDown(target, duration = 500) {
    target.style.removeProperty("display");
    let display = window.getComputedStyle(target).display;
    if (display === "none")
      display = "block";
    target.style.display = display;
    const height = target.offsetHeight;
    target.style.overflow = "hidden";
    target.style.height = "0";
    target.style.paddingTop = "0";
    target.style.paddingBottom = "0";
    target.style.marginTop = "0";
    target.style.marginBottom = "0";
    target.offsetHeight;
    target.style.boxSizing = "border-box";
    target.style.transitionProperty = "height, margin, padding";
    target.style.transitionDuration = duration + "ms";
    target.style.height = height + "px";
    target.style.removeProperty("padding-top");
    target.style.removeProperty("padding-bottom");
    target.style.removeProperty("margin-top");
    target.style.removeProperty("margin-bottom");
    window.setTimeout(async () => {
      target.style.removeProperty("height");
      target.style.removeProperty("overflow");
      target.style.removeProperty("transition-duration");
      target.style.removeProperty("transition-property");
    }, duration);
  }
};

// src/plugin/features/file-tree.ts
var FileTree = class extends Tree {
  constructor(files, keepOriginalExtensions = false, sort = true) {
    super();
    this.children = [];
    this.showFileExtentionTags = true;
    this.hideFileExtentionTags = [];
    this.regexBlacklist = [];
    this.regexWhitelist = [];
    this.pathToItem = /* @__PURE__ */ new Map();
    if (files.some((file) => file.isDirectory)) {
      console.warn("FileTree: Some paths are directories. These will be treated as folders in the tree.");
    }
    this.files = files;
    this.keepOriginalExtensions = keepOriginalExtensions;
    this.sort = sort;
    this.renderMarkdownTitles = true;
    this.addCollapseAllButton = true;
  }
  async populateTree() {
    this.regexBlacklist = this.regexBlacklist.filter((pattern) => pattern.trim() != "");
    this.regexWhitelist = this.regexWhitelist.filter((pattern) => pattern.trim() != "");
    let filteredFiles = this.files.filter((file) => this.regexBlacklist.every((pattern) => !file.path.match(new RegExp(pattern))) && (this.regexWhitelist.length === 0 || this.regexWhitelist.some((pattern) => file.path.match(new RegExp(pattern)))));
    this.children = [];
    this.pathToItem.clear();
    for (const file of filteredFiles) {
      const pathSections = [];
      let currentPathSegment = file;
      while (currentPathSegment != void 0 && currentPathSegment.path !== "") {
        pathSections.push(currentPathSegment);
        currentPathSegment = currentPathSegment.parent;
      }
      pathSections.reverse();
      let currentParentNode = this;
      for (let i = 0; i < pathSections.length; i++) {
        const section = pathSections[i];
        const depth = i + 1;
        const isFolder = i < pathSections.length - 1 || file.isDirectory;
        const titleForLookup = section.basename;
        let child = currentParentNode.children.find((sibling) => sibling.dataRef == section.path);
        if (child == void 0) {
          child = new FileTreeItem(this, currentParentNode, depth);
          child.isFolder = isFolder;
          child.dataRef = section.path;
          child.title = titleForLookup;
          if (child.isFolder) {
            const tfolder = app.vault.getAbstractFileByPath(section.path);
            if (tfolder && tfolder.name !== "") {
              child.title = tfolder.name;
              child.icon = (await _MarkdownRendererInternal.getIconForFile(tfolder)).icon;
            }
          }
          currentParentNode.children.push(child);
          this.pathToItem.set(child.dataRef, child);
        }
        currentParentNode = child;
      }
      if (currentParentNode instanceof FileTreeItem && currentParentNode.dataRef === file.path) {
        const targetPath = file.copy;
        const tfile = app.vault.getAbstractFileByPath(file.path);
        currentParentNode.isFolder = file.isDirectory;
        if (file.isDirectory) {
          targetPath.folderize();
          if (tfile)
            currentParentNode.title = tfile.name;
        } else {
          if (targetPath.path.endsWith(".excalidraw.md"))
            targetPath.setExtension("drawing");
          currentParentNode.originalExtension = file.extensionName;
          if (!this.keepOriginalExtensions && MarkdownRendererAPI.isConvertable(targetPath.extensionName))
            targetPath.setExtension("html");
          if (tfile)
            currentParentNode.title = (await _MarkdownRendererInternal.getTitleForFile(tfile)).title;
        }
        currentParentNode.href = targetPath.path;
      }
    }
    if (this.sort) {
      this.sortAlphabetically();
      this.sortByIsFolder();
    }
    this.assignTreeOrder();
  }
  assignTreeOrder() {
    let orderCounter = { value: 0 };
    if (this.sort) {
      this.children.sort((a, b) => a.title.localeCompare(b.title, void 0, { numeric: true }));
      this.children.sort((a, b) => a.isFolder === b.isFolder ? 0 : a.isFolder ? -1 : 1);
    }
    for (const child of this.children) {
      this.assignTreeOrderRecursive(child, orderCounter);
    }
  }
  assignTreeOrderRecursive(item, orderCounter) {
    item.treeOrder = orderCounter.value++;
    if (this.sort) {
      item.children.sort((a, b) => a.title.localeCompare(b.title, void 0, { numeric: true }));
      item.children.sort((a, b) => a.isFolder === b.isFolder ? 0 : a.isFolder ? -1 : 1);
    }
    for (const child of item.children) {
      this.assignTreeOrderRecursive(child, orderCounter);
    }
  }
  getItemBySourcePath(sourcePath) {
    return this.pathToItem.get(sourcePath);
  }
  async generateTree(container) {
    await this.populateTree();
    await super.generateTree(container);
  }
  sortByIsFolder(reverse = false) {
    this.children.sort((a, b) => {
      if (a.isFolder === b.isFolder)
        return 0;
      return reverse ? a.isFolder ? 1 : -1 : a.isFolder ? -1 : 1;
    });
    for (const child of this.children) {
      if (child.children.length > 0)
        child.sortByIsFolder(reverse);
    }
  }
  sortAlphabetically(reverse = false) {
    this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true }));
    for (const child of this.children) {
      if (child.children.length > 0)
        child.sortAlphabetically(reverse);
    }
  }
  forAllChildren(func, recursive = true) {
    for (const child of this.children) {
      func(child);
      if (recursive && child.children.length > 0)
        child.forAllChildren(func, recursive);
    }
  }
};
var FileTreeItem = class extends TreeItem {
  constructor(tree, parent, depth) {
    super(tree, parent, depth);
    this.children = [];
    this.isFolder = false;
    this.originalExtension = "";
    this.tree = tree;
    this.parent = parent;
  }
  forAllChildren(func, recursive = true) {
    for (const child of this.children) {
      func(child);
      if (recursive && child.children.length > 0) {
        child.forAllChildren(func, recursive);
      }
    }
  }
  sortByIsFolder(reverse = false) {
    this.children.sort((a, b) => {
      if (a.isFolder === b.isFolder)
        return 0;
      return reverse ? a.isFolder ? 1 : -1 : a.isFolder ? -1 : 1;
    });
    for (const child of this.children) {
      if (child.children.length > 0)
        child.sortByIsFolder(reverse);
    }
  }
  sortAlphabetically(reverse = false) {
    this.children.sort((a, b) => reverse ? b.title.localeCompare(a.title, void 0, { numeric: true }) : a.title.localeCompare(b.title, void 0, { numeric: true }));
    for (const child of this.children) {
      if (child.children.length > 0)
        child.sortAlphabetically(reverse);
    }
  }
  async insertSelf(container) {
    const self2 = await super.insertSelf(container);
    self2.classList.toggle("nav-folder-title", this.isFolder);
    self2.classList.toggle("nav-file-title", !this.isFolder);
    if (!this.isFolder && this.tree.showFileExtentionTags && !this.tree.hideFileExtentionTags.includes(this.originalExtension) && this.originalExtension != "") {
      const tag = self2.createDiv({ cls: "nav-file-tag" });
      tag.textContent = this.originalExtension;
    }
    return self2;
  }
  async insertInner(container) {
    const inner = await super.insertInner(container);
    inner.classList.toggle("nav-folder-title-content", this.isFolder);
    inner.classList.toggle("nav-file-title-content", !this.isFolder);
    return inner;
  }
  insertCollapseIcon(container) {
    const icon = super.insertCollapseIcon(container);
    icon == null ? void 0 : icon.classList.toggle("nav-folder-collapse-indicator", this.isFolder);
    return icon;
  }
  insertItem(container) {
    const item = super.insertItem(container);
    item.classList.toggle("nav-folder", this.isFolder);
    item.classList.toggle("nav-file", !this.isFolder);
    return item;
  }
  insertChildren(container) {
    const childrenContainer = super.insertChildren(container);
    childrenContainer.classList.toggle("nav-folder-children", this.isFolder);
    childrenContainer.classList.toggle("nav-file-children", !this.isFolder);
    return childrenContainer;
  }
};

// src/plugin/features/outline-tree.ts
var OutlineTree = class extends Tree {
  constructor(webpage, minDepth = 1) {
    var _a3, _b3;
    super();
    this.minDepth = 1;
    this.depth = 0;
    this.webpage = webpage;
    this.file = webpage.source;
    this.minDepth = minDepth;
    if (webpage.type != "markdown")
      return;
    const headings = webpage.headings;
    this.depth = Math.min(...headings.map((h) => h.level)) - 1;
    let parent = this;
    for (const heading of headings) {
      if (heading.level < minDepth)
        continue;
      if (heading.level > parent.depth) {
        const child = this.createTreeItem(heading, parent);
        parent.children.push(child);
        if (heading.level == parent.depth + 1)
          parent = child;
      } else if (heading.level == parent.depth) {
        if (parent instanceof OutlineTreeItem) {
          const child = this.createTreeItem(heading, parent.parent);
          parent.parent.children.push(child);
          parent = child;
        }
      } else if (heading.level < parent.depth) {
        if (parent instanceof OutlineTreeItem) {
          const levelChange = parent.depth - heading.level;
          let backParent = (_a3 = parent.parent) != null ? _a3 : parent;
          for (let i = 0; i < levelChange; i++) {
            if (backParent instanceof OutlineTreeItem)
              backParent = (_b3 = backParent.parent) != null ? _b3 : backParent;
          }
          const child = this.createTreeItem(heading, backParent);
          backParent.children.push(child);
          parent = child;
        }
      }
    }
  }
  createTreeItem(heading, parent) {
    const item = new OutlineTreeItem(this, parent, heading);
    item.title = heading.heading;
    return item;
  }
};
var OutlineTreeItem = class extends TreeItem {
  constructor(tree, parent, heading) {
    super(tree, parent, heading.level);
    this.children = [];
    this.heading = heading.heading;
    this.href = "#" + heading.headingEl.id;
    if (!tree.webpage.exportOptions.relativeHeaderLinks) {
      this.href = tree.webpage.targetPath + this.href;
    }
  }
  forAllChildren(func, recursive = true) {
    super.forAllChildren(func, recursive);
  }
  async insertInner(container) {
    const linkEl = await super.insertInner(container);
    linkEl == null ? void 0 : linkEl.setAttribute("heading-name", this.heading);
    linkEl.classList.add("heading-link");
    return linkEl;
  }
};

// src/plugin/website/webpage.ts
var import_obsidian9 = require("obsidian");
var WebpageOutputData = class {
  constructor() {
    this.html = "";
    this.title = "";
    this.icon = "";
    this.description = "";
    this.author = "";
    this.fullURL = "";
    this.rssDate = "";
    this.pathToRoot = "";
    this.coverImageURL = "";
    this.allTags = [];
    this.inlineTags = [];
    this.frontmatterTags = [];
    this.aliases = [];
    this.backlinks = [];
    this.headings = [];
    this.renderedHeadings = [];
    this.descriptionOrShortenedContent = "";
    this.searchContent = "";
    this.srcLinks = [];
    this.hrefLinks = [];
    this.linksToOtherFiles = [];
  }
};
var Webpage = class extends Attachment {
  constructor(file, filename, website, options) {
    if (!MarkdownRendererAPI.isConvertable(file.extension))
      throw new Error("File type not supported: " + file.extension);
    const targetPath = website.getTargetPathForFile(file, filename);
    options = Object.assign(Settings.exportOptions, options);
    super("", targetPath, file, options);
    this.pageDocument = document.implementation.createHTMLDocument();
    this.attachments = [];
    this.type = "markdown" /* Markdown */;
    this.title = "";
    this.icon = "";
    this.outputData = new WebpageOutputData();
    this.headerMap = /* @__PURE__ */ new Map();
    this.targetPath.setExtension("html");
    this.exportOptions = options;
    this.source = file;
    this.website = website;
    if (this.exportOptions.flattenExportPaths)
      this.targetPath.parent = Path.emptyPath;
  }
  get source() {
    return super.source;
  }
  set source(file) {
    super.source = file;
  }
  async generateOutput() {
    var _a3;
    const output = new WebpageOutputData();
    output.html = this.html;
    output.title = this.title;
    output.icon = this.icon;
    output.description = this.descriptionOrShortenedContent;
    output.author = this.author;
    output.fullURL = this.fullURL;
    output.rssDate = this.rssDate;
    output.pathToRoot = this.pathToRoot.path;
    output.coverImageURL = (_a3 = this.coverImageURL) != null ? _a3 : "";
    output.allTags = this.allTags;
    output.frontmatterTags = this.frontmatterTags;
    output.aliases = this.aliases;
    output.backlinks = this.backlinks;
    output.headings = this.headings;
    output.renderedHeadings = await this.getRenderedHeadings();
    output.descriptionOrShortenedContent = this.descriptionOrShortenedContent;
    output.searchContent = this.searchContent;
    output.srcLinks = this.srcLinks;
    output.hrefLinks = this.hrefLinks;
    output.linksToOtherFiles = this.linksToOtherFiles;
    this.data = output.html;
    this.outputData = output;
  }
  get searchContent() {
    var _a3, _b3, _c2;
    const contentElement = (_c2 = (_a3 = this.sizerElement) != null ? _a3 : this.viewElement) != null ? _c2 : (_b3 = this.pageDocument) == null ? void 0 : _b3.body;
    if (!contentElement) {
      return "";
    }
    const skipSelector = ".math, svg, img, .frontmatter, .metadata-container, .heading-after, style, script";
    function getTextNodes(element) {
      var _a4;
      const textNodes2 = [];
      const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null);
      let node;
      while (node = walker.nextNode()) {
        if ((_a4 = node.parentElement) == null ? void 0 : _a4.closest(skipSelector)) {
          continue;
        }
        textNodes2.push(node);
      }
      return textNodes2;
    }
    const textNodes = getTextNodes(contentElement);
    let content = "";
    for (const node of textNodes) {
      content += " " + node.textContent + " ";
    }
    content += this.hrefLinks.join(" ");
    content += this.srcLinks.join(" ");
    content = content.trim().replace(/\s+/g, " ");
    return content;
  }
  get html() {
    const htmlString = "<!DOCTYPE html> " + this.pageDocument.documentElement.outerHTML;
    return htmlString;
  }
  get viewElement() {
    return this.pageDocument.querySelector(".obsidian-document");
  }
  get sizerElement() {
    var _a3, _b3;
    return (_b3 = (_a3 = this.pageDocument.querySelector(".canvas-wrapper")) != null ? _a3 : this.pageDocument.querySelector(".markdown-preview-sizer")) != null ? _b3 : this.pageDocument.querySelector(".obsidian-document");
  }
  get headerElement() {
    return this.pageDocument.querySelector(".header");
  }
  get footerElement() {
    return this.pageDocument.querySelector(".footer");
  }
  get pathToRoot() {
    const ptr = Path.getRelativePath(this.targetPath, new Path(this.targetPath.workingDirectory), true);
    return ptr;
  }
  get allTags() {
    const tags = this.frontmatterTags.concat(this.inlineTags);
    const uniqueTags = tags.filter((tag, index) => tags.indexOf(tag) == index);
    return uniqueTags;
  }
  get frontmatterTags() {
    var _a3;
    let tags = [];
    const frontmatterTags = ((_a3 = this.frontmatter) == null ? void 0 : _a3.tags) || [];
    if (!Array.isArray(frontmatterTags)) {
      tags = [String(frontmatterTags)];
    } else {
      tags = frontmatterTags.map((tag) => String(tag));
    }
    tags = tags.map((tag) => tag.startsWith("#") ? tag : "#" + tag);
    return tags;
  }
  get inlineTags() {
    var _a3, _b3;
    const tagCaches = (_b3 = (_a3 = app.metadataCache.getFileCache(this.source)) == null ? void 0 : _a3.tags) == null ? void 0 : _b3.values();
    const tags = [];
    if (tagCaches) {
      tags.push(...Array.from(tagCaches).map((tag) => tag.tag));
    }
    return tags;
  }
  get headings() {
    const headers = [];
    if (this.pageDocument) {
      this.pageDocument.querySelectorAll(".heading").forEach((headerEl) => {
        var _a3, _b3;
        let level = parseInt(headerEl.tagName[1]);
        if (headerEl.closest("[class^='block-language-']") || headerEl.closest(".markdown-embed.inline-embed"))
          level += 6;
        const heading = (_b3 = (_a3 = headerEl.getAttribute("data-heading")) != null ? _a3 : headerEl.innerText) != null ? _b3 : "";
        headers.push({ heading, level, id: headerEl.id, headingEl: headerEl });
      });
    }
    return headers;
  }
  async getRenderedHeadings() {
    var _a3;
    const headings = this.headings.map((header) => {
      return { heading: header.heading, level: header.level, id: header.id };
    });
    for (const header of headings) {
      const h = (_a3 = await MarkdownRendererAPI.renderMarkdownSimple(header.heading)) != null ? _a3 : header.heading;
      header.heading = h;
    }
    return headings;
  }
  get aliases() {
    var _a3, _b3;
    const aliases = (_b3 = (_a3 = this.frontmatter) == null ? void 0 : _a3.aliases) != null ? _b3 : [];
    return aliases;
  }
  get description() {
    return this.frontmatter["description"] || this.frontmatter["summary"] || "";
  }
  get descriptionOrShortenedContent() {
    let description = this.description;
    let localThis = this;
    if (!description) {
      let keepTextLinksImages = function(element) {
        var _a3, _b3, _c2;
        const walker = localThis.pageDocument.createTreeWalker(element, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT);
        let node;
        const nodes = [];
        while (node = walker.nextNode()) {
          if (node.nodeType == Node.ELEMENT_NODE) {
            const element2 = node;
            if (element2.tagName == "A" || element2.tagName == "IMG" || element2.tagName == "BR") {
              nodes.push(element2);
            }
            if (element2.tagName == "DIV") {
              const classes = (_a3 = element2.parentElement) == null ? void 0 : _a3.classList;
              if ((classes == null ? void 0 : classes.contains("heading-children")) || (classes == null ? void 0 : classes.contains("markdown-preview-sizer"))) {
                nodes.push(document.createElement("br"));
              }
            }
            if (element2.tagName == "LI") {
              nodes.push(document.createElement("br"));
            }
          } else {
            if (((_b3 = node.parentElement) == null ? void 0 : _b3.tagName) != "A" && ((_c2 = node.parentElement) == null ? void 0 : _c2.tagName) != "IMG")
              nodes.push(node);
          }
        }
        element.innerHTML = "";
        element.append(...nodes);
      };
      if (!this.viewElement)
        return "";
      const content = this.viewElement.cloneNode(true);
      content.querySelectorAll(`h1, h2, h3, h4, h5, h6, .mermaid, table, mjx-container, style, script, 
.mod-header, .mod-footer, .metadata-container, .frontmatter, img[src^="data:"]`).forEach((heading) => heading.remove());
      content.querySelectorAll("[src]").forEach((el) => {
        var _a3;
        let src = el.getAttribute("src");
        if (!src)
          return;
        if (src.startsWith("http") || src.startsWith("data:"))
          return;
        if (src.startsWith("data:")) {
          el.remove();
          return;
        }
        src = src.replace("app://obsidian", "");
        src = src.replace(".md", "");
        const path = Path.joinStrings((_a3 = this.exportOptions.rssOptions.siteUrl) != null ? _a3 : "", src);
        el.setAttribute("src", path.path);
      });
      content.querySelectorAll("[href]").forEach((el) => {
        var _a3;
        let href = el.getAttribute("href");
        if (!href)
          return;
        if (href.startsWith("http") || href.startsWith("data:"))
          return;
        href = href.replace("app://obsidian", "");
        href = href.replace(".md", "");
        const path = Path.joinStrings((_a3 = this.exportOptions.rssOptions.siteUrl) != null ? _a3 : "", href);
        el.setAttribute("href", path.path);
      });
      keepTextLinksImages(content);
      content.querySelectorAll("br").forEach((br) => {
        const next = br.nextElementSibling;
        if ((next == null ? void 0 : next.tagName) == "BR")
          br.remove();
      });
      const first = content.firstElementChild;
      if ((first == null ? void 0 : first.tagName) == "BR")
        first.remove();
      const last2 = content.lastElementChild;
      if ((last2 == null ? void 0 : last2.tagName) == "BR")
        last2.remove();
      description = content.innerHTML;
      content.remove();
    }
    description = description.replace(/\s{2,}/g, " ");
    return description != null ? description : "";
  }
  get author() {
    return this.frontmatter["author"] || this.exportOptions.rssOptions.authorName || "";
  }
  get fullURL() {
    var _a3;
    const url = Path.joinStrings((_a3 = this.exportOptions.rssOptions.siteUrl) != null ? _a3 : "", this.targetPath.path).path;
    return url;
  }
  get rssDate() {
    const date = this.frontmatter[Settings.rssDateProperty];
    console.log(date);
    if (date)
      return date;
    const mtimeMs = this.source.stat.mtime;
    const rssDate = new Date(mtimeMs).toISOString();
    return rssDate;
  }
  get backlinks() {
    var _a3, _b3, _c2;
    const backlinks = Array.from(((_c2 = (_b3 = (_a3 = app.metadataCache.getBacklinksForFile(this.source)) == null ? void 0 : _a3.data) == null ? void 0 : _b3.keys) == null ? void 0 : _c2.call(_b3)) || []);
    let linkedWebpages = backlinks.map((path) => this.website.index.getWebpage(path));
    linkedWebpages = linkedWebpages.filter((page) => page != void 0);
    return linkedWebpages;
  }
  get coverImageURL() {
    var _a3, _b3, _c2;
    if (!this.viewElement)
      return void 0;
    let mediaPathStr = (_b3 = (_a3 = this.viewElement.querySelector("img")) == null ? void 0 : _a3.getAttribute("src")) != null ? _b3 : "";
    if (mediaPathStr.startsWith("data:"))
      return void 0;
    const hasMedia = mediaPathStr.length > 0;
    if (!hasMedia)
      return void 0;
    if (!mediaPathStr.startsWith("http") && !mediaPathStr.startsWith("data:")) {
      const resolvedPath = this.website.getFilePathFromSrc(mediaPathStr, this.source.path);
      const attachment = this.website.index.getFile(resolvedPath.pathname, true);
      if (attachment) {
        mediaPathStr = attachment.targetPath.path;
      } else {
        mediaPathStr = resolvedPath.path;
      }
      const mediaPath = Path.joinStrings((_c2 = this.exportOptions.rssOptions.siteUrl) != null ? _c2 : "", mediaPathStr);
      mediaPathStr = mediaPath.path;
    }
    return mediaPathStr;
  }
  get frontmatter() {
    var _a3, _b3;
    const frontmatter = (_b3 = (_a3 = app.metadataCache.getFileCache(this.source)) == null ? void 0 : _a3.frontmatter) != null ? _b3 : {};
    return frontmatter;
  }
  get srcLinks() {
    const srcEls = this.srcLinkElements.map((item) => item.getAttribute("src"));
    return srcEls;
  }
  get hrefLinks() {
    const hrefEls = this.hrefLinkElements.map((item) => item.getAttribute("href"));
    return hrefEls;
  }
  get srcLinkElements() {
    const srcEls = Array.from(this.pageDocument.querySelectorAll(".obsidian-document [src]:not(head *)"));
    return srcEls;
  }
  get hrefLinkElements() {
    const hrefEls = Array.from(this.pageDocument.querySelectorAll(".obsidian-document [href]:not(head *)"));
    return hrefEls;
  }
  get linksToOtherFiles() {
    const links = this.hrefLinks;
    const otherFiles = links.filter((link) => !link.startsWith("#") && !link.startsWith(Shared.libFolderName + "/") && !link.startsWith("http") && !link.startsWith("data:"));
    return otherFiles;
  }
  async build() {
    var _a3, _b3, _c2, _d, _e;
    let isMedia = MarkdownRendererAPI.viewableMediaExtensions.contains(this.source.extension);
    if (isMedia)
      this.type = "attachment" /* Attachment */;
    (_a3 = this.viewElement) == null ? void 0 : _a3.setAttribute("data-type", this.type);
    const titleInfo = await _MarkdownRendererInternal.getTitleForFile(this.source);
    const iconInfo = await _MarkdownRendererInternal.getIconForFile(this.source);
    this.title = titleInfo.title;
    this.icon = iconInfo.icon;
    this.icon = (_b3 = await MarkdownRendererAPI.renderMarkdownSimple(this.icon)) != null ? _b3 : this.icon;
    if (this.exportOptions.inlineMedia)
      await this.inlineMedia();
    if (this.exportOptions.addHeadTag)
      await this.addHead();
    if (this.exportOptions.fixLinks) {
      this.remapLinks();
      this.remapEmbedLinks();
    }
    if (this.exportOptions.addMathjaxStyles && this.type != "attachment" /* Attachment */) {
      const mathStyleEl = document.createElement("style");
      mathStyleEl.id = "MJX-CHTML-styles";
      await AssetHandler.mathjaxStyles.load();
      mathStyleEl.innerHTML = AssetHandler.mathjaxStyles.data;
      (_c2 = this.viewElement) == null ? void 0 : _c2.prepend(mathStyleEl);
    }
    if (this.exportOptions.outlineOptions.enabled) {
      const headerTree = new OutlineTree(this, 1);
      headerTree.id = "outline";
      headerTree.title = "Table Of Contents";
      headerTree.showNestingIndicator = false;
      headerTree.generateWithItemsClosed = this.exportOptions.outlineOptions.startCollapsed === true;
      headerTree.minCollapsableDepth = (_d = this.exportOptions.outlineOptions.minCollapseDepth) != null ? _d : 2;
      this.exportOptions.outlineOptions.insertFeature(this.pageDocument.documentElement, await headerTree.generate());
    }
    const fileExplorer = this.pageDocument.querySelector("#file-explorer");
    if (fileExplorer && this.exportOptions.fileNavigationOptions.exposeStartingPath && this.exportOptions.inlineHTML) {
      const unixPath = this.targetPath.path;
      let fileElement = fileExplorer == null ? void 0 : fileExplorer.querySelector(`[href="${unixPath}"]`);
      fileElement = fileElement == null ? void 0 : fileElement.closest(".tree-item");
      while (fileElement) {
        fileElement == null ? void 0 : fileElement.classList.remove("is-collapsed");
        const children = fileElement == null ? void 0 : fileElement.querySelector(".tree-item-children");
        if (children)
          children.style.display = "block";
        fileElement = (_e = fileElement == null ? void 0 : fileElement.parentElement) == null ? void 0 : _e.closest(".tree-item");
      }
    }
    if (this.exportOptions.includeJS) {
      const bodyScript = this.pageDocument.body.createEl("script");
      bodyScript.setAttribute("defer", "");
      bodyScript.innerText = AssetHandler.themeLoadJS.data.toString();
      this.pageDocument.body.prepend(bodyScript);
    }
    this.pageDocument.documentElement.lang = import_obsidian9.moment.locale();
    await this.generateOutput();
    return this;
  }
  async renderDocument() {
    var _a3;
    this.pageDocument.documentElement.innerHTML = this.website.webpageTemplate.getDocElementInner();
    const centerContent = this.pageDocument.querySelector("#center-content");
    if (!centerContent)
      return void 0;
    const options = { ...this.exportOptions, container: centerContent };
    const renderInfo = await MarkdownRendererAPI.renderFile(this.source, options);
    const contentEl = renderInfo == null ? void 0 : renderInfo.contentEl;
    if (!contentEl)
      return void 0;
    if (MarkdownRendererAPI.checkCancelled())
      return void 0;
    this.type = (_a3 = renderInfo == null ? void 0 : renderInfo.viewType) != null ? _a3 : "markdown" /* Markdown */;
    if (this.type == "markdown") {
      contentEl.classList.toggle("allow-fold-headings", this.exportOptions.documentOptions.allowFoldingHeadings);
      contentEl.classList.toggle("allow-fold-lists", this.exportOptions.documentOptions.allowFoldingLists);
      contentEl.classList.add("is-readable-line-width");
      const cssclasses = this.frontmatter["cssclasses"];
      if (cssclasses && cssclasses.length > 0)
        contentEl.classList.add(...cssclasses);
    }
    if (this.sizerElement)
      this.sizerElement.style.paddingBottom = "";
    return this;
  }
  async getAttachments() {
    const sources = this.srcLinks;
    for (const src of sources) {
      if (!src.startsWith("app://") && /\w+:(\/\/|\\\\)/.exec(src) || src.startsWith("data:"))
        continue;
      const sourcePath = this.website.getFilePathFromSrc(src, this.source.path).pathname;
      let attachment = this.attachments.find((attachment2) => attachment2.sourcePath == sourcePath);
      attachment != null ? attachment : attachment = this.website.index.getFile(sourcePath);
      attachment != null ? attachment : attachment = await this.website.createAttachmentFromSrc(src, this.source);
      if (!sourcePath || !attachment) {
        ExportLog.log("Attachment source not found: " + src);
        continue;
      }
      if (!this.attachments.includes(attachment))
        this.attachments.push(attachment);
    }
    return this.attachments;
  }
  resolveLink(link, linkEl, preferAttachment = false) {
    var _a3, _b3, _c2;
    if (!link)
      return "";
    if (!link.startsWith("app://") && /\w+:(\/\/|\\\\)/.exec(link))
      return;
    if (link.startsWith("data:"))
      return;
    if (link == null ? void 0 : link.startsWith("?"))
      return;
    if (link.startsWith("mailto:"))
      return;
    if (link.startsWith("#")) {
      let headerText = ((_a3 = linkEl == null ? void 0 : linkEl.getAttribute("data-href")) != null ? _a3 : link).replaceAll(" ", "_").replaceAll(":", "").replaceAll("__", "_").substring(1);
      if (this.headerMap.has(headerText)) {
        let hrefValue = `#${headerText}_${this.headerMap.get(headerText)}`;
        if (!this.exportOptions.relativeHeaderLinks)
          hrefValue = this.targetPath + hrefValue;
        return hrefValue;
      }
      return link;
    }
    const linkSplit = link.split("#")[0].split("?")[0];
    const attachmentPath = this.website.getFilePathFromSrc(linkSplit, this.source.path);
    const attachment = this.website.index.getFile(attachmentPath.pathname, preferAttachment);
    if (!attachment) {
      const resolved = attachmentPath.slugify(this.exportOptions.slugifyPaths).setExtension("html");
      return resolved.path;
    }
    let hash = (_c2 = ((_b3 = linkEl == null ? void 0 : linkEl.getAttribute("data-href")) != null ? _b3 : link).split("#")[1]) != null ? _c2 : "";
    if (hash != "")
      hash = "#" + hash;
    if (attachment.targetPath.extensionName == "html") {
      const headerText = hash.replaceAll(" ", "_").replaceAll(":", "").replaceAll("__", "_").substring(1);
      if (this.headerMap.has(headerText)) {
        const headerId = this.headerMap.get(headerText);
        hash = `#${headerText}_${headerId}`;
      }
    }
    return attachment.targetPath.path + hash;
  }
  remapLinks() {
    var _a3;
    this.pageDocument.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((headerEl) => {
      var _a4, _b3;
      let headerText = ((_b3 = (_a4 = headerEl.getAttribute("data-heading")) != null ? _a4 : headerEl.textContent) != null ? _b3 : "").replaceAll(" ", "_").replaceAll(":", "").replaceAll("__", "_");
      let headerId = this.headerMap.get(headerText);
      if (headerId) {
        headerId = `${+headerId + 1}`;
      } else {
        headerId = "0";
      }
      this.headerMap.set(headerText, headerId);
      headerEl.setAttribute("id", `${headerText}_${headerId}`);
    });
    const links = this.hrefLinkElements;
    for (const link of links) {
      const href = link.getAttribute("href");
      const newHref = this.resolveLink(href, link);
      link.setAttribute("href", (_a3 = newHref != null ? newHref : href) != null ? _a3 : "");
      link.setAttribute("target", "_self");
      link.classList.toggle("is-unresolved", !newHref);
    }
  }
  remapEmbedLinks() {
    var _a3;
    const links = this.srcLinkElements;
    for (const link of links) {
      const src = link.getAttribute("src");
      const newSrc = this.resolveLink(src, link, true);
      link.setAttribute("src", (_a3 = newSrc != null ? newSrc : src) != null ? _a3 : "");
      link.setAttribute("target", "_self");
      link.classList.toggle("is-unresolved", !newSrc);
    }
  }
  async addHead() {
    let rootPath = this.pathToRoot.slugified(this.exportOptions.slugifyPaths).path;
    if (rootPath == "")
      rootPath = ".";
    const description = this.description || this.exportOptions.siteName + " - " + this.title;
    let head = `
<title>${this.title}</title>
<base href="${rootPath}">
<meta name="pathname" content="${this.targetPath}">
<meta name="description" content="${description}">
<meta property="og:title" content="${this.title}">
<meta property="og:description" content="${description}">
<meta property="og:type" content="website">
<meta property="og:url" content="${this.fullURL}">
<meta property="og:image" content="${this.coverImageURL}">
`;
    if (this.author && this.author != "") {
      head += `<meta name="author" content="${this.author}">`;
    }
    this.pageDocument.head.innerHTML = head + this.pageDocument.head.innerHTML;
  }
  async inlineMedia() {
    var _a3, _b3;
    const elements = Array.from(this.pageDocument.querySelectorAll("[src]:not(head [src])"));
    for (const mediaEl of elements) {
      const rawSrc = (_a3 = mediaEl.getAttribute("src")) != null ? _a3 : "";
      const filePath = this.website.getFilePathFromSrc(rawSrc, this.source.path);
      if (filePath.isEmpty || filePath.isDirectory || filePath.isAbsolute)
        continue;
      const base64 = await filePath.readAsString("base64");
      if (!base64)
        return;
      let ext = filePath.extensionName;
      const type = (_b3 = app.viewRegistry.typeByExtension[ext]) != null ? _b3 : "audio";
      if (ext === "svg")
        ext += "+xml";
      mediaEl.setAttribute("src", `data:${type}/${ext};base64,${base64}`);
    }
    ;
  }
  dispose() {
    var _a3;
    (_a3 = this.viewElement) == null ? void 0 : _a3.remove();
    this.pageDocument = void 0;
  }
};

// node_modules/minisearch/dist/es/index.js
function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) {
    return value instanceof P ? value : new P(function(resolve) {
      resolve(value);
    });
  }
  return new (P || (P = Promise))(function(resolve, reject) {
    function fulfilled(value) {
      try {
        step(generator.next(value));
      } catch (e) {
        reject(e);
      }
    }
    function rejected(value) {
      try {
        step(generator["throw"](value));
      } catch (e) {
        reject(e);
      }
    }
    function step(result) {
      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
    }
    step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}
var ENTRIES = "ENTRIES";
var KEYS = "KEYS";
var VALUES = "VALUES";
var LEAF = "";
var TreeIterator = class {
  constructor(set, type) {
    const node = set._tree;
    const keys = Array.from(node.keys());
    this.set = set;
    this._type = type;
    this._path = keys.length > 0 ? [{ node, keys }] : [];
  }
  next() {
    const value = this.dive();
    this.backtrack();
    return value;
  }
  dive() {
    if (this._path.length === 0) {
      return { done: true, value: void 0 };
    }
    const { node, keys } = last$1(this._path);
    if (last$1(keys) === LEAF) {
      return { done: false, value: this.result() };
    }
    const child = node.get(last$1(keys));
    this._path.push({ node: child, keys: Array.from(child.keys()) });
    return this.dive();
  }
  backtrack() {
    if (this._path.length === 0) {
      return;
    }
    const keys = last$1(this._path).keys;
    keys.pop();
    if (keys.length > 0) {
      return;
    }
    this._path.pop();
    this.backtrack();
  }
  key() {
    return this.set._prefix + this._path.map(({ keys }) => last$1(keys)).filter((key) => key !== LEAF).join("");
  }
  value() {
    return last$1(this._path).node.get(LEAF);
  }
  result() {
    switch (this._type) {
      case VALUES:
        return this.value();
      case KEYS:
        return this.key();
      default:
        return [this.key(), this.value()];
    }
  }
  [Symbol.iterator]() {
    return this;
  }
};
var last$1 = (array) => {
  return array[array.length - 1];
};
var fuzzySearch = (node, query, maxDistance) => {
  const results = /* @__PURE__ */ new Map();
  if (query === void 0)
    return results;
  const n = query.length + 1;
  const m = n + maxDistance;
  const matrix = new Uint8Array(m * n).fill(maxDistance + 1);
  for (let j = 0; j < n; ++j)
    matrix[j] = j;
  for (let i = 1; i < m; ++i)
    matrix[i * n] = i;
  recurse(node, query, maxDistance, results, matrix, 1, n, "");
  return results;
};
var recurse = (node, query, maxDistance, results, matrix, m, n, prefix) => {
  const offset = m * n;
  key:
    for (const key of node.keys()) {
      if (key === LEAF) {
        const distance = matrix[offset - 1];
        if (distance <= maxDistance) {
          results.set(prefix, [node.get(key), distance]);
        }
      } else {
        let i = m;
        for (let pos = 0; pos < key.length; ++pos, ++i) {
          const char = key[pos];
          const thisRowOffset = n * i;
          const prevRowOffset = thisRowOffset - n;
          let minDistance = matrix[thisRowOffset];
          const jmin = Math.max(0, i - maxDistance - 1);
          const jmax = Math.min(n - 1, i + maxDistance);
          for (let j = jmin; j < jmax; ++j) {
            const different = char !== query[j];
            const rpl = matrix[prevRowOffset + j] + +different;
            const del = matrix[prevRowOffset + j + 1] + 1;
            const ins = matrix[thisRowOffset + j] + 1;
            const dist = matrix[thisRowOffset + j + 1] = Math.min(rpl, del, ins);
            if (dist < minDistance)
              minDistance = dist;
          }
          if (minDistance > maxDistance) {
            continue key;
          }
        }
        recurse(node.get(key), query, maxDistance, results, matrix, i, n, prefix + key);
      }
    }
};
var SearchableMap = class {
  constructor(tree = /* @__PURE__ */ new Map(), prefix = "") {
    this._size = void 0;
    this._tree = tree;
    this._prefix = prefix;
  }
  atPrefix(prefix) {
    if (!prefix.startsWith(this._prefix)) {
      throw new Error("Mismatched prefix");
    }
    const [node, path] = trackDown(this._tree, prefix.slice(this._prefix.length));
    if (node === void 0) {
      const [parentNode, key] = last(path);
      for (const k of parentNode.keys()) {
        if (k !== LEAF && k.startsWith(key)) {
          const node2 = /* @__PURE__ */ new Map();
          node2.set(k.slice(key.length), parentNode.get(k));
          return new SearchableMap(node2, prefix);
        }
      }
    }
    return new SearchableMap(node, prefix);
  }
  clear() {
    this._size = void 0;
    this._tree.clear();
  }
  delete(key) {
    this._size = void 0;
    return remove(this._tree, key);
  }
  entries() {
    return new TreeIterator(this, ENTRIES);
  }
  forEach(fn) {
    for (const [key, value] of this) {
      fn(key, value, this);
    }
  }
  fuzzyGet(key, maxEditDistance) {
    return fuzzySearch(this._tree, key, maxEditDistance);
  }
  get(key) {
    const node = lookup(this._tree, key);
    return node !== void 0 ? node.get(LEAF) : void 0;
  }
  has(key) {
    const node = lookup(this._tree, key);
    return node !== void 0 && node.has(LEAF);
  }
  keys() {
    return new TreeIterator(this, KEYS);
  }
  set(key, value) {
    if (typeof key !== "string") {
      throw new Error("key must be a string");
    }
    this._size = void 0;
    const node = createPath(this._tree, key);
    node.set(LEAF, value);
    return this;
  }
  get size() {
    if (this._size) {
      return this._size;
    }
    this._size = 0;
    const iter = this.entries();
    while (!iter.next().done)
      this._size += 1;
    return this._size;
  }
  update(key, fn) {
    if (typeof key !== "string") {
      throw new Error("key must be a string");
    }
    this._size = void 0;
    const node = createPath(this._tree, key);
    node.set(LEAF, fn(node.get(LEAF)));
    return this;
  }
  fetch(key, initial) {
    if (typeof key !== "string") {
      throw new Error("key must be a string");
    }
    this._size = void 0;
    const node = createPath(this._tree, key);
    let value = node.get(LEAF);
    if (value === void 0) {
      node.set(LEAF, value = initial());
    }
    return value;
  }
  values() {
    return new TreeIterator(this, VALUES);
  }
  [Symbol.iterator]() {
    return this.entries();
  }
  static from(entries) {
    const tree = new SearchableMap();
    for (const [key, value] of entries) {
      tree.set(key, value);
    }
    return tree;
  }
  static fromObject(object) {
    return SearchableMap.from(Object.entries(object));
  }
};
var trackDown = (tree, key, path = []) => {
  if (key.length === 0 || tree == null) {
    return [tree, path];
  }
  for (const k of tree.keys()) {
    if (k !== LEAF && key.startsWith(k)) {
      path.push([tree, k]);
      return trackDown(tree.get(k), key.slice(k.length), path);
    }
  }
  path.push([tree, key]);
  return trackDown(void 0, "", path);
};
var lookup = (tree, key) => {
  if (key.length === 0 || tree == null) {
    return tree;
  }
  for (const k of tree.keys()) {
    if (k !== LEAF && key.startsWith(k)) {
      return lookup(tree.get(k), key.slice(k.length));
    }
  }
};
var createPath = (node, key) => {
  const keyLength = key.length;
  outer:
    for (let pos = 0; node && pos < keyLength; ) {
      for (const k of node.keys()) {
        if (k !== LEAF && key[pos] === k[0]) {
          const len = Math.min(keyLength - pos, k.length);
          let offset = 1;
          while (offset < len && key[pos + offset] === k[offset])
            ++offset;
          const child2 = node.get(k);
          if (offset === k.length) {
            node = child2;
          } else {
            const intermediate = /* @__PURE__ */ new Map();
            intermediate.set(k.slice(offset), child2);
            node.set(key.slice(pos, pos + offset), intermediate);
            node.delete(k);
            node = intermediate;
          }
          pos += offset;
          continue outer;
        }
      }
      const child = /* @__PURE__ */ new Map();
      node.set(key.slice(pos), child);
      return child;
    }
  return node;
};
var remove = (tree, key) => {
  const [node, path] = trackDown(tree, key);
  if (node === void 0) {
    return;
  }
  node.delete(LEAF);
  if (node.size === 0) {
    cleanup(path);
  } else if (node.size === 1) {
    const [key2, value] = node.entries().next().value;
    merge(path, key2, value);
  }
};
var cleanup = (path) => {
  if (path.length === 0) {
    return;
  }
  const [node, key] = last(path);
  node.delete(key);
  if (node.size === 0) {
    cleanup(path.slice(0, -1));
  } else if (node.size === 1) {
    const [key2, value] = node.entries().next().value;
    if (key2 !== LEAF) {
      merge(path.slice(0, -1), key2, value);
    }
  }
};
var merge = (path, key, value) => {
  if (path.length === 0) {
    return;
  }
  const [node, nodeKey] = last(path);
  node.set(nodeKey + key, value);
  node.delete(nodeKey);
};
var last = (array) => {
  return array[array.length - 1];
};
var OR = "or";
var AND = "and";
var AND_NOT = "and_not";
var MiniSearch = class {
  constructor(options) {
    if ((options === null || options === void 0 ? void 0 : options.fields) == null) {
      throw new Error('MiniSearch: option "fields" must be provided');
    }
    const autoVacuum = options.autoVacuum == null || options.autoVacuum === true ? defaultAutoVacuumOptions : options.autoVacuum;
    this._options = Object.assign(Object.assign(Object.assign({}, defaultOptions), options), { autoVacuum, searchOptions: Object.assign(Object.assign({}, defaultSearchOptions), options.searchOptions || {}), autoSuggestOptions: Object.assign(Object.assign({}, defaultAutoSuggestOptions), options.autoSuggestOptions || {}) });
    this._index = new SearchableMap();
    this._documentCount = 0;
    this._documentIds = /* @__PURE__ */ new Map();
    this._idToShortId = /* @__PURE__ */ new Map();
    this._fieldIds = {};
    this._fieldLength = /* @__PURE__ */ new Map();
    this._avgFieldLength = [];
    this._nextId = 0;
    this._storedFields = /* @__PURE__ */ new Map();
    this._dirtCount = 0;
    this._currentVacuum = null;
    this._enqueuedVacuum = null;
    this._enqueuedVacuumConditions = defaultVacuumConditions;
    this.addFields(this._options.fields);
  }
  add(document3) {
    const { extractField, tokenize, processTerm, fields, idField } = this._options;
    const id = extractField(document3, idField);
    if (id == null) {
      throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
    }
    if (this._idToShortId.has(id)) {
      throw new Error(`MiniSearch: duplicate ID ${id}`);
    }
    const shortDocumentId = this.addDocumentId(id);
    this.saveStoredFields(shortDocumentId, document3);
    for (const field of fields) {
      const fieldValue = extractField(document3, field);
      if (fieldValue == null)
        continue;
      const tokens = tokenize(fieldValue.toString(), field);
      const fieldId = this._fieldIds[field];
      const uniqueTerms = new Set(tokens).size;
      this.addFieldLength(shortDocumentId, fieldId, this._documentCount - 1, uniqueTerms);
      for (const term of tokens) {
        const processedTerm = processTerm(term, field);
        if (Array.isArray(processedTerm)) {
          for (const t of processedTerm) {
            this.addTerm(fieldId, shortDocumentId, t);
          }
        } else if (processedTerm) {
          this.addTerm(fieldId, shortDocumentId, processedTerm);
        }
      }
    }
  }
  addAll(documents) {
    for (const document3 of documents)
      this.add(document3);
  }
  addAllAsync(documents, options = {}) {
    const { chunkSize = 10 } = options;
    const acc = { chunk: [], promise: Promise.resolve() };
    const { chunk, promise } = documents.reduce(({ chunk: chunk2, promise: promise2 }, document3, i) => {
      chunk2.push(document3);
      if ((i + 1) % chunkSize === 0) {
        return {
          chunk: [],
          promise: promise2.then(() => new Promise((resolve) => setTimeout(resolve, 0))).then(() => this.addAll(chunk2))
        };
      } else {
        return { chunk: chunk2, promise: promise2 };
      }
    }, acc);
    return promise.then(() => this.addAll(chunk));
  }
  remove(document3) {
    const { tokenize, processTerm, extractField, fields, idField } = this._options;
    const id = extractField(document3, idField);
    if (id == null) {
      throw new Error(`MiniSearch: document does not have ID field "${idField}"`);
    }
    const shortId = this._idToShortId.get(id);
    if (shortId == null) {
      throw new Error(`MiniSearch: cannot remove document with ID ${id}: it is not in the index`);
    }
    for (const field of fields) {
      const fieldValue = extractField(document3, field);
      if (fieldValue == null)
        continue;
      const tokens = tokenize(fieldValue.toString(), field);
      const fieldId = this._fieldIds[field];
      const uniqueTerms = new Set(tokens).size;
      this.removeFieldLength(shortId, fieldId, this._documentCount, uniqueTerms);
      for (const term of tokens) {
        const processedTerm = processTerm(term, field);
        if (Array.isArray(processedTerm)) {
          for (const t of processedTerm) {
            this.removeTerm(fieldId, shortId, t);
          }
        } else if (processedTerm) {
          this.removeTerm(fieldId, shortId, processedTerm);
        }
      }
    }
    this._storedFields.delete(shortId);
    this._documentIds.delete(shortId);
    this._idToShortId.delete(id);
    this._fieldLength.delete(shortId);
    this._documentCount -= 1;
  }
  removeAll(documents) {
    if (documents) {
      for (const document3 of documents)
        this.remove(document3);
    } else if (arguments.length > 0) {
      throw new Error("Expected documents to be present. Omit the argument to remove all documents.");
    } else {
      this._index = new SearchableMap();
      this._documentCount = 0;
      this._documentIds = /* @__PURE__ */ new Map();
      this._idToShortId = /* @__PURE__ */ new Map();
      this._fieldLength = /* @__PURE__ */ new Map();
      this._avgFieldLength = [];
      this._storedFields = /* @__PURE__ */ new Map();
      this._nextId = 0;
    }
  }
  discard(id) {
    const shortId = this._idToShortId.get(id);
    if (shortId == null) {
      throw new Error(`MiniSearch: cannot discard document with ID ${id}: it is not in the index`);
    }
    this._idToShortId.delete(id);
    this._documentIds.delete(shortId);
    this._storedFields.delete(shortId);
    (this._fieldLength.get(shortId) || []).forEach((fieldLength, fieldId) => {
      this.removeFieldLength(shortId, fieldId, this._documentCount, fieldLength);
    });
    this._fieldLength.delete(shortId);
    this._documentCount -= 1;
    this._dirtCount += 1;
    this.maybeAutoVacuum();
  }
  maybeAutoVacuum() {
    if (this._options.autoVacuum === false) {
      return;
    }
    const { minDirtFactor, minDirtCount, batchSize, batchWait } = this._options.autoVacuum;
    this.conditionalVacuum({ batchSize, batchWait }, { minDirtCount, minDirtFactor });
  }
  discardAll(ids) {
    const autoVacuum = this._options.autoVacuum;
    try {
      this._options.autoVacuum = false;
      for (const id of ids) {
        this.discard(id);
      }
    } finally {
      this._options.autoVacuum = autoVacuum;
    }
    this.maybeAutoVacuum();
  }
  replace(updatedDocument) {
    const { idField, extractField } = this._options;
    const id = extractField(updatedDocument, idField);
    this.discard(id);
    this.add(updatedDocument);
  }
  vacuum(options = {}) {
    return this.conditionalVacuum(options);
  }
  conditionalVacuum(options, conditions) {
    if (this._currentVacuum) {
      this._enqueuedVacuumConditions = this._enqueuedVacuumConditions && conditions;
      if (this._enqueuedVacuum != null) {
        return this._enqueuedVacuum;
      }
      this._enqueuedVacuum = this._currentVacuum.then(() => {
        const conditions2 = this._enqueuedVacuumConditions;
        this._enqueuedVacuumConditions = defaultVacuumConditions;
        return this.performVacuuming(options, conditions2);
      });
      return this._enqueuedVacuum;
    }
    if (this.vacuumConditionsMet(conditions) === false) {
      return Promise.resolve();
    }
    this._currentVacuum = this.performVacuuming(options);
    return this._currentVacuum;
  }
  performVacuuming(options, conditions) {
    return __awaiter(this, void 0, void 0, function* () {
      const initialDirtCount = this._dirtCount;
      if (this.vacuumConditionsMet(conditions)) {
        const batchSize = options.batchSize || defaultVacuumOptions.batchSize;
        const batchWait = options.batchWait || defaultVacuumOptions.batchWait;
        let i = 1;
        for (const [term, fieldsData] of this._index) {
          for (const [fieldId, fieldIndex] of fieldsData) {
            for (const [shortId] of fieldIndex) {
              if (this._documentIds.has(shortId)) {
                continue;
              }
              if (fieldIndex.size <= 1) {
                fieldsData.delete(fieldId);
              } else {
                fieldIndex.delete(shortId);
              }
            }
          }
          if (this._index.get(term).size === 0) {
            this._index.delete(term);
          }
          if (i % batchSize === 0) {
            yield new Promise((resolve) => setTimeout(resolve, batchWait));
          }
          i += 1;
        }
        this._dirtCount -= initialDirtCount;
      }
      yield null;
      this._currentVacuum = this._enqueuedVacuum;
      this._enqueuedVacuum = null;
    });
  }
  vacuumConditionsMet(conditions) {
    if (conditions == null) {
      return true;
    }
    let { minDirtCount, minDirtFactor } = conditions;
    minDirtCount = minDirtCount || defaultAutoVacuumOptions.minDirtCount;
    minDirtFactor = minDirtFactor || defaultAutoVacuumOptions.minDirtFactor;
    return this.dirtCount >= minDirtCount && this.dirtFactor >= minDirtFactor;
  }
  get isVacuuming() {
    return this._currentVacuum != null;
  }
  get dirtCount() {
    return this._dirtCount;
  }
  get dirtFactor() {
    return this._dirtCount / (1 + this._documentCount + this._dirtCount);
  }
  has(id) {
    return this._idToShortId.has(id);
  }
  getStoredFields(id) {
    const shortId = this._idToShortId.get(id);
    if (shortId == null) {
      return void 0;
    }
    return this._storedFields.get(shortId);
  }
  search(query, searchOptions = {}) {
    const rawResults = this.executeQuery(query, searchOptions);
    const results = [];
    for (const [docId, { score, terms, match }] of rawResults) {
      const quality = terms.length || 1;
      const result = {
        id: this._documentIds.get(docId),
        score: score * quality,
        terms: Object.keys(match),
        queryTerms: terms,
        match
      };
      Object.assign(result, this._storedFields.get(docId));
      if (searchOptions.filter == null || searchOptions.filter(result)) {
        results.push(result);
      }
    }
    if (query === MiniSearch.wildcard && searchOptions.boostDocument == null && this._options.searchOptions.boostDocument == null) {
      return results;
    }
    results.sort(byScore);
    return results;
  }
  autoSuggest(queryString, options = {}) {
    options = Object.assign(Object.assign({}, this._options.autoSuggestOptions), options);
    const suggestions = /* @__PURE__ */ new Map();
    for (const { score, terms } of this.search(queryString, options)) {
      const phrase = terms.join(" ");
      const suggestion = suggestions.get(phrase);
      if (suggestion != null) {
        suggestion.score += score;
        suggestion.count += 1;
      } else {
        suggestions.set(phrase, { score, terms, count: 1 });
      }
    }
    const results = [];
    for (const [suggestion, { score, terms, count }] of suggestions) {
      results.push({ suggestion, terms, score: score / count });
    }
    results.sort(byScore);
    return results;
  }
  get documentCount() {
    return this._documentCount;
  }
  get termCount() {
    return this._index.size;
  }
  static loadJSON(json, options) {
    if (options == null) {
      throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");
    }
    return this.loadJS(JSON.parse(json), options);
  }
  static loadJSONAsync(json, options) {
    return __awaiter(this, void 0, void 0, function* () {
      if (options == null) {
        throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");
      }
      return this.loadJSAsync(JSON.parse(json), options);
    });
  }
  static getDefault(optionName) {
    if (defaultOptions.hasOwnProperty(optionName)) {
      return getOwnProperty(defaultOptions, optionName);
    } else {
      throw new Error(`MiniSearch: unknown option "${optionName}"`);
    }
  }
  static loadJS(js, options) {
    const { index, documentIds, fieldLength, storedFields, serializationVersion } = js;
    const miniSearch = this.instantiateMiniSearch(js, options);
    miniSearch._documentIds = objectToNumericMap(documentIds);
    miniSearch._fieldLength = objectToNumericMap(fieldLength);
    miniSearch._storedFields = objectToNumericMap(storedFields);
    for (const [shortId, id] of miniSearch._documentIds) {
      miniSearch._idToShortId.set(id, shortId);
    }
    for (const [term, data] of index) {
      const dataMap = /* @__PURE__ */ new Map();
      for (const fieldId of Object.keys(data)) {
        let indexEntry = data[fieldId];
        if (serializationVersion === 1) {
          indexEntry = indexEntry.ds;
        }
        dataMap.set(parseInt(fieldId, 10), objectToNumericMap(indexEntry));
      }
      miniSearch._index.set(term, dataMap);
    }
    return miniSearch;
  }
  static loadJSAsync(js, options) {
    return __awaiter(this, void 0, void 0, function* () {
      const { index, documentIds, fieldLength, storedFields, serializationVersion } = js;
      const miniSearch = this.instantiateMiniSearch(js, options);
      miniSearch._documentIds = yield objectToNumericMapAsync(documentIds);
      miniSearch._fieldLength = yield objectToNumericMapAsync(fieldLength);
      miniSearch._storedFields = yield objectToNumericMapAsync(storedFields);
      for (const [shortId, id] of miniSearch._documentIds) {
        miniSearch._idToShortId.set(id, shortId);
      }
      let count = 0;
      for (const [term, data] of index) {
        const dataMap = /* @__PURE__ */ new Map();
        for (const fieldId of Object.keys(data)) {
          let indexEntry = data[fieldId];
          if (serializationVersion === 1) {
            indexEntry = indexEntry.ds;
          }
          dataMap.set(parseInt(fieldId, 10), yield objectToNumericMapAsync(indexEntry));
        }
        if (++count % 1e3 === 0)
          yield wait(0);
        miniSearch._index.set(term, dataMap);
      }
      return miniSearch;
    });
  }
  static instantiateMiniSearch(js, options) {
    const { documentCount, nextId, fieldIds, averageFieldLength, dirtCount, serializationVersion } = js;
    if (serializationVersion !== 1 && serializationVersion !== 2) {
      throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");
    }
    const miniSearch = new MiniSearch(options);
    miniSearch._documentCount = documentCount;
    miniSearch._nextId = nextId;
    miniSearch._idToShortId = /* @__PURE__ */ new Map();
    miniSearch._fieldIds = fieldIds;
    miniSearch._avgFieldLength = averageFieldLength;
    miniSearch._dirtCount = dirtCount || 0;
    miniSearch._index = new SearchableMap();
    return miniSearch;
  }
  executeQuery(query, searchOptions = {}) {
    if (query === MiniSearch.wildcard) {
      return this.executeWildcardQuery(searchOptions);
    }
    if (typeof query !== "string") {
      const options2 = Object.assign(Object.assign(Object.assign({}, searchOptions), query), { queries: void 0 });
      const results2 = query.queries.map((subquery) => this.executeQuery(subquery, options2));
      return this.combineResults(results2, options2.combineWith);
    }
    const { tokenize, processTerm, searchOptions: globalSearchOptions } = this._options;
    const options = Object.assign(Object.assign({ tokenize, processTerm }, globalSearchOptions), searchOptions);
    const { tokenize: searchTokenize, processTerm: searchProcessTerm } = options;
    const terms = searchTokenize(query).flatMap((term) => searchProcessTerm(term)).filter((term) => !!term);
    const queries = terms.map(termToQuerySpec(options));
    const results = queries.map((query2) => this.executeQuerySpec(query2, options));
    return this.combineResults(results, options.combineWith);
  }
  executeQuerySpec(query, searchOptions) {
    const options = Object.assign(Object.assign({}, this._options.searchOptions), searchOptions);
    const boosts = (options.fields || this._options.fields).reduce((boosts2, field) => Object.assign(Object.assign({}, boosts2), { [field]: getOwnProperty(options.boost, field) || 1 }), {});
    const { boostDocument, weights, maxFuzzy, bm25: bm25params } = options;
    const { fuzzy: fuzzyWeight, prefix: prefixWeight } = Object.assign(Object.assign({}, defaultSearchOptions.weights), weights);
    const data = this._index.get(query.term);
    const results = this.termResults(query.term, query.term, 1, query.termBoost, data, boosts, boostDocument, bm25params);
    let prefixMatches;
    let fuzzyMatches;
    if (query.prefix) {
      prefixMatches = this._index.atPrefix(query.term);
    }
    if (query.fuzzy) {
      const fuzzy = query.fuzzy === true ? 0.2 : query.fuzzy;
      const maxDistance = fuzzy < 1 ? Math.min(maxFuzzy, Math.round(query.term.length * fuzzy)) : fuzzy;
      if (maxDistance)
        fuzzyMatches = this._index.fuzzyGet(query.term, maxDistance);
    }
    if (prefixMatches) {
      for (const [term, data2] of prefixMatches) {
        const distance = term.length - query.term.length;
        if (!distance) {
          continue;
        }
        fuzzyMatches === null || fuzzyMatches === void 0 ? void 0 : fuzzyMatches.delete(term);
        const weight = prefixWeight * term.length / (term.length + 0.3 * distance);
        this.termResults(query.term, term, weight, query.termBoost, data2, boosts, boostDocument, bm25params, results);
      }
    }
    if (fuzzyMatches) {
      for (const term of fuzzyMatches.keys()) {
        const [data2, distance] = fuzzyMatches.get(term);
        if (!distance) {
          continue;
        }
        const weight = fuzzyWeight * term.length / (term.length + distance);
        this.termResults(query.term, term, weight, query.termBoost, data2, boosts, boostDocument, bm25params, results);
      }
    }
    return results;
  }
  executeWildcardQuery(searchOptions) {
    const results = /* @__PURE__ */ new Map();
    const options = Object.assign(Object.assign({}, this._options.searchOptions), searchOptions);
    for (const [shortId, id] of this._documentIds) {
      const score = options.boostDocument ? options.boostDocument(id, "", this._storedFields.get(shortId)) : 1;
      results.set(shortId, {
        score,
        terms: [],
        match: {}
      });
    }
    return results;
  }
  combineResults(results, combineWith = OR) {
    if (results.length === 0) {
      return /* @__PURE__ */ new Map();
    }
    const operator = combineWith.toLowerCase();
    const combinator = combinators[operator];
    if (!combinator) {
      throw new Error(`Invalid combination operator: ${combineWith}`);
    }
    return results.reduce(combinator) || /* @__PURE__ */ new Map();
  }
  toJSON() {
    const index = [];
    for (const [term, fieldIndex] of this._index) {
      const data = {};
      for (const [fieldId, freqs] of fieldIndex) {
        data[fieldId] = Object.fromEntries(freqs);
      }
      index.push([term, data]);
    }
    return {
      documentCount: this._documentCount,
      nextId: this._nextId,
      documentIds: Object.fromEntries(this._documentIds),
      fieldIds: this._fieldIds,
      fieldLength: Object.fromEntries(this._fieldLength),
      averageFieldLength: this._avgFieldLength,
      storedFields: Object.fromEntries(this._storedFields),
      dirtCount: this._dirtCount,
      index,
      serializationVersion: 2
    };
  }
  termResults(sourceTerm, derivedTerm, termWeight, termBoost, fieldTermData, fieldBoosts, boostDocumentFn, bm25params, results = /* @__PURE__ */ new Map()) {
    if (fieldTermData == null)
      return results;
    for (const field of Object.keys(fieldBoosts)) {
      const fieldBoost = fieldBoosts[field];
      const fieldId = this._fieldIds[field];
      const fieldTermFreqs = fieldTermData.get(fieldId);
      if (fieldTermFreqs == null)
        continue;
      let matchingFields = fieldTermFreqs.size;
      const avgFieldLength = this._avgFieldLength[fieldId];
      for (const docId of fieldTermFreqs.keys()) {
        if (!this._documentIds.has(docId)) {
          this.removeTerm(fieldId, docId, derivedTerm);
          matchingFields -= 1;
          continue;
        }
        const docBoost = boostDocumentFn ? boostDocumentFn(this._documentIds.get(docId), derivedTerm, this._storedFields.get(docId)) : 1;
        if (!docBoost)
          continue;
        const termFreq = fieldTermFreqs.get(docId);
        const fieldLength = this._fieldLength.get(docId)[fieldId];
        const rawScore = calcBM25Score(termFreq, matchingFields, this._documentCount, fieldLength, avgFieldLength, bm25params);
        const weightedScore = termWeight * termBoost * fieldBoost * docBoost * rawScore;
        const result = results.get(docId);
        if (result) {
          result.score += weightedScore;
          assignUniqueTerm(result.terms, sourceTerm);
          const match = getOwnProperty(result.match, derivedTerm);
          if (match) {
            match.push(field);
          } else {
            result.match[derivedTerm] = [field];
          }
        } else {
          results.set(docId, {
            score: weightedScore,
            terms: [sourceTerm],
            match: { [derivedTerm]: [field] }
          });
        }
      }
    }
    return results;
  }
  addTerm(fieldId, documentId, term) {
    const indexData = this._index.fetch(term, createMap);
    let fieldIndex = indexData.get(fieldId);
    if (fieldIndex == null) {
      fieldIndex = /* @__PURE__ */ new Map();
      fieldIndex.set(documentId, 1);
      indexData.set(fieldId, fieldIndex);
    } else {
      const docs = fieldIndex.get(documentId);
      fieldIndex.set(documentId, (docs || 0) + 1);
    }
  }
  removeTerm(fieldId, documentId, term) {
    if (!this._index.has(term)) {
      this.warnDocumentChanged(documentId, fieldId, term);
      return;
    }
    const indexData = this._index.fetch(term, createMap);
    const fieldIndex = indexData.get(fieldId);
    if (fieldIndex == null || fieldIndex.get(documentId) == null) {
      this.warnDocumentChanged(documentId, fieldId, term);
    } else if (fieldIndex.get(documentId) <= 1) {
      if (fieldIndex.size <= 1) {
        indexData.delete(fieldId);
      } else {
        fieldIndex.delete(documentId);
      }
    } else {
      fieldIndex.set(documentId, fieldIndex.get(documentId) - 1);
    }
    if (this._index.get(term).size === 0) {
      this._index.delete(term);
    }
  }
  warnDocumentChanged(shortDocumentId, fieldId, term) {
    for (const fieldName of Object.keys(this._fieldIds)) {
      if (this._fieldIds[fieldName] === fieldId) {
        this._options.logger("warn", `MiniSearch: document with ID ${this._documentIds.get(shortDocumentId)} has changed before removal: term "${term}" was not present in field "${fieldName}". Removing a document after it has changed can corrupt the index!`, "version_conflict");
        return;
      }
    }
  }
  addDocumentId(documentId) {
    const shortDocumentId = this._nextId;
    this._idToShortId.set(documentId, shortDocumentId);
    this._documentIds.set(shortDocumentId, documentId);
    this._documentCount += 1;
    this._nextId += 1;
    return shortDocumentId;
  }
  addFields(fields) {
    for (let i = 0; i < fields.length; i++) {
      this._fieldIds[fields[i]] = i;
    }
  }
  addFieldLength(documentId, fieldId, count, length) {
    let fieldLengths = this._fieldLength.get(documentId);
    if (fieldLengths == null)
      this._fieldLength.set(documentId, fieldLengths = []);
    fieldLengths[fieldId] = length;
    const averageFieldLength = this._avgFieldLength[fieldId] || 0;
    const totalFieldLength = averageFieldLength * count + length;
    this._avgFieldLength[fieldId] = totalFieldLength / (count + 1);
  }
  removeFieldLength(documentId, fieldId, count, length) {
    if (count === 1) {
      this._avgFieldLength[fieldId] = 0;
      return;
    }
    const totalFieldLength = this._avgFieldLength[fieldId] * count - length;
    this._avgFieldLength[fieldId] = totalFieldLength / (count - 1);
  }
  saveStoredFields(documentId, doc) {
    const { storeFields, extractField } = this._options;
    if (storeFields == null || storeFields.length === 0) {
      return;
    }
    let documentFields = this._storedFields.get(documentId);
    if (documentFields == null)
      this._storedFields.set(documentId, documentFields = {});
    for (const fieldName of storeFields) {
      const fieldValue = extractField(doc, fieldName);
      if (fieldValue !== void 0)
        documentFields[fieldName] = fieldValue;
    }
  }
};
MiniSearch.wildcard = Symbol("*");
var getOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property) ? object[property] : void 0;
var combinators = {
  [OR]: (a, b) => {
    for (const docId of b.keys()) {
      const existing = a.get(docId);
      if (existing == null) {
        a.set(docId, b.get(docId));
      } else {
        const { score, terms, match } = b.get(docId);
        existing.score = existing.score + score;
        existing.match = Object.assign(existing.match, match);
        assignUniqueTerms(existing.terms, terms);
      }
    }
    return a;
  },
  [AND]: (a, b) => {
    const combined = /* @__PURE__ */ new Map();
    for (const docId of b.keys()) {
      const existing = a.get(docId);
      if (existing == null)
        continue;
      const { score, terms, match } = b.get(docId);
      assignUniqueTerms(existing.terms, terms);
      combined.set(docId, {
        score: existing.score + score,
        terms: existing.terms,
        match: Object.assign(existing.match, match)
      });
    }
    return combined;
  },
  [AND_NOT]: (a, b) => {
    for (const docId of b.keys())
      a.delete(docId);
    return a;
  }
};
var defaultBM25params = { k: 1.2, b: 0.7, d: 0.5 };
var calcBM25Score = (termFreq, matchingCount, totalCount, fieldLength, avgFieldLength, bm25params) => {
  const { k, b, d } = bm25params;
  const invDocFreq = Math.log(1 + (totalCount - matchingCount + 0.5) / (matchingCount + 0.5));
  return invDocFreq * (d + termFreq * (k + 1) / (termFreq + k * (1 - b + b * fieldLength / avgFieldLength)));
};
var termToQuerySpec = (options) => (term, i, terms) => {
  const fuzzy = typeof options.fuzzy === "function" ? options.fuzzy(term, i, terms) : options.fuzzy || false;
  const prefix = typeof options.prefix === "function" ? options.prefix(term, i, terms) : options.prefix === true;
  const termBoost = typeof options.boostTerm === "function" ? options.boostTerm(term, i, terms) : 1;
  return { term, fuzzy, prefix, termBoost };
};
var defaultOptions = {
  idField: "id",
  extractField: (document3, fieldName) => document3[fieldName],
  tokenize: (text) => text.split(SPACE_OR_PUNCTUATION),
  processTerm: (term) => term.toLowerCase(),
  fields: void 0,
  searchOptions: void 0,
  storeFields: [],
  logger: (level, message) => {
    if (typeof (console === null || console === void 0 ? void 0 : console[level]) === "function")
      console[level](message);
  },
  autoVacuum: true
};
var defaultSearchOptions = {
  combineWith: OR,
  prefix: false,
  fuzzy: false,
  maxFuzzy: 6,
  boost: {},
  weights: { fuzzy: 0.45, prefix: 0.375 },
  bm25: defaultBM25params
};
var defaultAutoSuggestOptions = {
  combineWith: AND,
  prefix: (term, i, terms) => i === terms.length - 1
};
var defaultVacuumOptions = { batchSize: 1e3, batchWait: 10 };
var defaultVacuumConditions = { minDirtFactor: 0.1, minDirtCount: 20 };
var defaultAutoVacuumOptions = Object.assign(Object.assign({}, defaultVacuumOptions), defaultVacuumConditions);
var assignUniqueTerm = (target, term) => {
  if (!target.includes(term))
    target.push(term);
};
var assignUniqueTerms = (target, source) => {
  for (const term of source) {
    if (!target.includes(term))
      target.push(term);
  }
};
var byScore = ({ score: a }, { score: b }) => b - a;
var createMap = () => /* @__PURE__ */ new Map();
var objectToNumericMap = (object) => {
  const map = /* @__PURE__ */ new Map();
  for (const key of Object.keys(object)) {
    map.set(parseInt(key, 10), object[key]);
  }
  return map;
};
var objectToNumericMapAsync = (object) => __awaiter(void 0, void 0, void 0, function* () {
  const map = /* @__PURE__ */ new Map();
  let count = 0;
  for (const key of Object.keys(object)) {
    map.set(parseInt(key, 10), object[key]);
    if (++count % 1e3 === 0) {
      yield wait(0);
    }
  }
  return map;
});
var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
var SPACE_OR_PUNCTUATION = /[\n\r\p{Z}\p{P}]+/u;

// src/plugin/website/index.ts
var import_rss3 = __toESM(require_lib5());

// src/plugin/website/webpage-template.ts
var _WebpageTemplate = class {
  constructor(options, rssURL) {
    this.deferredFeatures = [];
    this.options = options;
    this.rssURL = rssURL;
  }
  async loadLayout() {
    this.doc = document.implementation.createHTMLDocument();
    const collapseSidebarIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="svg-icon"><path d="M21 3H3C1.89543 3 1 3.89543 1 5V19C1 20.1046 1.89543 21 3 21H21C22.1046 21 23 20.1046 23 19V5C23 3.89543 22.1046 3 21 3Z"></path><path d="M10 4V20"></path><path d="M4 7H7"></path><path d="M4 10H7"></path><path d="M4 13H7"></path></svg>`;
    const head = this.doc.head;
    head.innerHTML = `<meta charset="UTF-8">` + head.innerHTML;
    head.innerHTML += `<meta property="og:site_name" content="${this.options.siteName}">`;
    head.innerHTML += `<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, minimum-scale=1.0, maximum-scale=5.0">`;
    if (!this.options.combineAsSingleFile) {
      if (this.options.rssOptions.enabled) {
        head.innerHTML += `<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="${this.rssURL}">`;
      }
      head.innerHTML += AssetHandler.getHeadReferences(this.options);
    }
    const body = this.doc.body;
    if (this.options.addBodyClasses)
      body.setAttribute("class", await _WebpageTemplate.getValidBodyClasses());
    const main = body.createDiv({ attr: { id: "main" } });
    const navbar = main.createDiv({ attr: { id: "navbar" } });
    const mainHorizontal = main.createDiv({ attr: { id: "main-horizontal" } });
    const leftContent = mainHorizontal.createDiv({ attr: { id: "left-content", class: "leaf" } });
    const leftSidebar = leftContent.createDiv({ attr: { id: "left-sidebar", class: "sidebar" } });
    const leftSidebarHandle = leftSidebar.createDiv({ attr: { class: "sidebar-handle" } });
    const leftTopbar = leftSidebar.createDiv({ attr: { class: "sidebar-topbar" } });
    const leftTopbarContent = leftTopbar.createDiv({ attr: { class: "topbar-content" } });
    const leftCollapseIcon = leftTopbar.createDiv({ attr: { class: "clickable-icon sidebar-collapse-icon" } });
    leftCollapseIcon.innerHTML = collapseSidebarIcon;
    const leftSidebarContentWrapper = leftSidebar.createDiv({ attr: { class: "sidebar-content-wrapper" } });
    const leftSidebarContent = leftSidebarContentWrapper.createDiv({ attr: { id: "left-sidebar-content", class: "leaf-content" } });
    const centerContent = mainHorizontal.createDiv({ attr: { id: "center-content", class: "leaf" } });
    const rightContent = mainHorizontal.createDiv({ attr: { id: "right-content", class: "leaf" } });
    const rightSidebar = rightContent.createDiv({ attr: { id: "right-sidebar", class: "sidebar" } });
    const rightSidebarHandle = rightSidebar.createDiv({ attr: { class: "sidebar-handle" } });
    const rightTopbar = rightSidebar.createDiv({ attr: { class: "sidebar-topbar" } });
    const rightTopbarContent = rightTopbar.createDiv({ attr: { class: "topbar-content" } });
    const rightCollapseIcon = rightTopbar.createDiv({ attr: { class: "clickable-icon sidebar-collapse-icon" } });
    rightCollapseIcon.innerHTML = collapseSidebarIcon;
    const rightSidebarContentWrapper = rightSidebar.createDiv({ attr: { class: "sidebar-content-wrapper" } });
    const rightSidebarContent = rightSidebarContentWrapper.createDiv({ attr: { id: "right-sidebar-content", class: "leaf-content" } });
    leftContent.style.setProperty("--sidebar-width", "var(--sidebar-width-left)");
    rightContent.style.setProperty("--sidebar-width", "var(--sidebar-width-right)");
    let leftSidebarScript = leftSidebar.createEl("script");
    let rightSidebarScript = rightSidebar.createEl("script");
    leftSidebarScript.setAttribute("defer", "");
    rightSidebarScript.setAttribute("defer", "");
    leftSidebarScript.innerHTML = `let ls = document.querySelector("#left-sidebar"); ls.classList.toggle("is-collapsed", window.innerWidth < 768); ls.style.setProperty("--sidebar-width", localStorage.getItem("sidebar-left-width"));`;
    rightSidebarScript.innerHTML = `let rs = document.querySelector("#right-sidebar"); rs.classList.toggle("is-collapsed", window.innerWidth < 768); rs.style.setProperty("--sidebar-width", localStorage.getItem("sidebar-right-width"));`;
    if (!this.options.sidebarOptions.enabled) {
      leftSidebar.remove();
      rightSidebar.remove();
    }
  }
  insertFeature(feature, featureOptions) {
    const existingFeature = this.doc.body.querySelector("#" + featureOptions.featureId);
    if (existingFeature) {
      console.warn(`Feature with id ${featureOptions.featureId} already exists in the layout. Removing the existing feature.`);
      existingFeature.remove();
    }
    let insertedSuccesfully = featureOptions.insertFeature(this.doc.documentElement, feature);
    if (insertedSuccesfully) {
      let deferredFeatures = this.deferredFeatures;
      this.deferredFeatures = [];
      for (let deferredFeature of deferredFeatures) {
        if (deferredFeature.feature === feature)
          continue;
        this.insertFeature(deferredFeature.feature, deferredFeature.featureOptions);
      }
    } else {
      this.deferredFeatures.push({ feature, featureOptions });
    }
  }
  insertFeatureString(feature, featureOptions) {
    let div = this.doc.createElement("div");
    div.classList.add("parsed-feature-container");
    div.style.display = "contents";
    div.innerHTML = feature;
    this.insertFeature(div, featureOptions);
  }
  getDocElementInner() {
    for (let feature of this.deferredFeatures) {
      ExportLog.warning(`Could not insert feature ${feature.featureOptions.featureId} with placement: ${feature.featureOptions.featurePlacement}`);
    }
    return this.doc.documentElement.innerHTML;
  }
  static async getValidBodyClasses() {
    const bodyClasses = Array.from(document.body.classList);
    let validClasses = "";
    validClasses += " publish ";
    validClasses += " css-settings-manager ";
    const styles = AssetHandler.getAssetsOfType("style" /* Style */);
    let i = 0;
    let classes = [];
    for (const style of styles) {
      ExportLog.progress(0, "Compiling css classes", "Scanning: " + style.filename, "var(--color-yellow)");
      if (typeof style.data != "string")
        continue;
      const matches = Array.from(style.data.matchAll(/\.([A-Za-z_-]+[\w-]+)/g));
      let styleClasses = matches.map((match) => match[0].substring(1).trim());
      styleClasses = styleClasses.filter((value, index, self2) => self2.indexOf(value) === index);
      classes = classes.concat(styleClasses);
      i++;
      await Utils.delay(0);
    }
    ExportLog.progress(0, "Filtering classes", "...", "var(--color-yellow)");
    classes = classes.filter((value, index, self2) => self2.indexOf(value) === index);
    ExportLog.progress(0, "Sorting classes", "...", "var(--color-yellow)");
    classes = classes.sort();
    i = 0;
    for (const bodyClass of bodyClasses) {
      ExportLog.progress(0, "Collecting valid classes", "Scanning: " + bodyClass, "var(--color-yellow)");
      if (classes.includes(bodyClass) && !_WebpageTemplate.ignoreClasses.includes(bodyClass)) {
        validClasses += bodyClass + " ";
      }
      i++;
    }
    ExportLog.progress(0, "Cleanup classes", "...", "var(--color-yellow)");
    let result = validClasses.replace(/\s\s+/g, " ");
    ExportLog.progress(0, "Filter duplicate classes", result.length + " classes", "var(--color-yellow)");
    result = result.split(" ").filter((value, index, self2) => self2.indexOf(value) === index).join(" ").trim();
    ExportLog.progress(0, "Classes done", "...", "var(--color-yellow)");
    return result;
  }
};
var WebpageTemplate = _WebpageTemplate;
WebpageTemplate.ignoreClasses = ["publish", "css-settings-manager", "theme-light", "theme-dark"];

// src/plugin/website/index.ts
var Index = class {
  constructor() {
    this.sourceToWebpage = /* @__PURE__ */ new Map();
    this.sourceToAttachment = /* @__PURE__ */ new Map();
    this.stopWords = ["a", "about", "actually", "almost", "also", "although", "always", "am", "an", "and", "any", "are", "as", "at", "be", "became", "become", "but", "by", "can", "could", "did", "do", "does", "each", "either", "else", "for", "from", "had", "has", "have", "hence", "how", "i", "if", "in", "is", "it", "its", "just", "may", "maybe", "me", "might", "mine", "must", "my", "mine", "must", "my", "neither", "nor", "not", "of", "oh", "ok", "when", "where", "whereas", "wherever", "whenever", "whether", "which", "while", "who", "whom", "whoever", "whose", "why", "will", "with", "within", "without", "would", "yes", "yet", "you", "your"];
    this.minisearchOptions = {
      idField: "path",
      fields: ["title", "aliases", "headers", "tags", "path", "content"],
      storeFields: ["title", "aliases", "headers", "tags", "path"],
      processTerm: (term, _fieldName) => this.stopWords.includes(term) ? null : term.toLowerCase()
    };
    this.webpages = [];
    this.attachments = [];
    this.attachmentsShownInTree = [];
    this.oldWebsiteData = void 0;
    this.websiteData = {};
    this.minisearch = void 0;
    this.rssFeed = void 0;
    this.rssAsset = void 0;
    this.deletedFiles = [];
    this.newFiles = [];
    this.updatedFiles = [];
    this.allFiles = [];
  }
  async load(website, options) {
    var _a3, _b3, _c2, _d, _e, _f, _g;
    this.website = website;
    this.exportOptions = options;
    try {
      const metadataPath = this.website.destination.join(AssetHandler.libraryPath).joinString(Shared.metadataFileName);
      const metadata = await metadataPath.readAsString();
      if (metadata) {
        this.oldWebsiteData = JSON.parse(metadata);
        this.websiteData = JSON.parse(metadata);
        this.deletedFiles = (_a3 = this.oldWebsiteData.allFiles) != null ? _a3 : [];
      } else {
        console.log("No metadata found. Creating new metadata.");
        this.websiteData = {};
        this.websiteData.createdTime = Date.now();
      }
      if (!this.websiteData.shownInTree)
        this.websiteData.shownInTree = [];
      if (!this.websiteData.attachments)
        this.websiteData.attachments = [];
      if (!this.websiteData.allFiles)
        this.websiteData.allFiles = [];
      if (!this.websiteData.webpages)
        this.websiteData.webpages = {};
      if (!this.websiteData.fileInfo)
        this.websiteData.fileInfo = {};
      if (!this.websiteData.sourceToTarget)
        this.websiteData.sourceToTarget = {};
      this.websiteData.featureOptions = {
        backlinks: options.backlinkOptions,
        tags: options.tagOptions,
        alias: options.aliasOptions,
        properties: options.propertiesOptions,
        fileNavigation: options.fileNavigationOptions,
        search: options.searchOptions,
        outline: options.outlineOptions,
        themeToggle: options.themeToggleOptions,
        graphView: options.graphViewOptions,
        sidebar: options.sidebarOptions,
        customHead: options.customHeadOptions,
        document: options.documentOptions,
        rss: options.rssOptions,
        linkPreview: options.linkPreviewOptions
      };
      this.websiteData.modifiedTime = Date.now();
      this.websiteData.siteName = (_b3 = this.website.exportOptions.siteName) != null ? _b3 : "";
      this.websiteData.vaultName = app.vault.getName();
      this.websiteData.exportRoot = (_c2 = this.website.exportOptions.exportRoot) != null ? _c2 : "";
      this.websiteData.baseURL = (_d = this.website.exportOptions.rssOptions.siteUrl) != null ? _d : "";
      this.websiteData.pluginVersion = HTMLExportPlugin.pluginVersion;
      this.websiteData.themeName = (_e = this.website.exportOptions.themeName) != null ? _e : "Default";
      this.websiteData.bodyClasses = (_f = await WebpageTemplate.getValidBodyClasses()) != null ? _f : "";
      this.websiteData.hasFavicon = this.exportOptions.faviconPath != "";
    } catch (e) {
      ExportLog.warning(e, "Failed to load metadata.json. Recreating metadata.");
    }
    try {
      const indexPath = this.website.destination.join(AssetHandler.libraryPath).joinString(Shared.searchIndexFileName);
      const indexJson = await indexPath.readAsString();
      if (indexJson) {
        this.minisearch = MiniSearch.loadJSON(indexJson, this.minisearchOptions);
      } else
        throw new Error("No index found");
    } catch (e) {
      ExportLog.log(e, "No search-index.json exists. Creating new index.");
      this.minisearch = new MiniSearch(this.minisearchOptions);
    }
    this.rssPath = AssetHandler.generateSavePath("rss.xml", "other" /* Other */, this.website.destination);
    this.rssURL = AssetHandler.generateSavePath("rss.xml", "other" /* Other */, new Path((_g = this.exportOptions.rssOptions.siteUrl) != null ? _g : "")).absolute();
  }
  async finalize() {
    this.websiteData.shownInTree = this.attachmentsShownInTree.map((attachment) => attachment.targetPath.path);
    this.websiteData.allFiles = this.allFiles.map((file) => file.targetPath.path);
    for (const file of this.deletedFiles) {
      delete this.websiteData.fileInfo[file];
      delete this.websiteData.webpages[file];
      this.websiteData.attachments.remove(file);
      this.websiteData.allFiles.remove(file);
      this.websiteData.shownInTree.remove(file);
      const webpages = Object.values(this.websiteData.webpages);
      for (const webpage of webpages) {
        webpage.attachments.remove(file);
        webpage.backlinks.remove(file);
      }
    }
  }
  async clearCache() {
    const metadataPath = this.website.destination.join(AssetHandler.libraryPath).joinString(Shared.metadataFileName);
    const indexPath = this.website.destination.join(AssetHandler.libraryPath).joinString(Shared.searchIndexFileName);
    await metadataPath.delete();
    await indexPath.delete();
  }
  async createRSSFeed() {
    var _a3, _b3, _c2, _d, _e, _f, _g;
    let author = this.exportOptions.rssOptions.authorName || void 0;
    this.rssFeed = new import_rss3.default({
      title: (_a3 = this.exportOptions.siteName) != null ? _a3 : app.vault.getName(),
      description: "Obsidian digital garden",
      generator: "Webpage HTML Export plugin for Obsidian",
      feed_url: this.rssURL.path,
      site_url: (_b3 = this.exportOptions.rssOptions.siteUrl) != null ? _b3 : "",
      image_url: Path.joinStrings((_c2 = this.exportOptions.rssOptions.siteUrl) != null ? _c2 : "", AssetHandler.favicon.targetPath.path).path,
      pubDate: new Date(this.websiteData.modifiedTime),
      copyright: author,
      ttl: 60,
      custom_elements: [
        { "dc:creator": author }
      ]
    });
    for (const page of this.webpages) {
      const title = page.title;
      const url = Path.joinStrings((_d = this.exportOptions.rssOptions.siteUrl) != null ? _d : "", page.targetPath.path).path;
      const guid = page.source.path;
      const date = (_e = page.outputData.rssDate) != null ? _e : new Date(page.source.stat.mtime);
      author = (_f = page.outputData.author) != null ? _f : author;
      const media = (_g = page.outputData.coverImageURL) != null ? _g : "";
      const hasMedia = media != "";
      const description = page.outputData.descriptionOrShortenedContent;
      this.rssFeed.item({
        title,
        description,
        url,
        guid,
        date,
        enclosure: hasMedia ? { url: media } : void 0,
        author,
        custom_elements: [
          hasMedia ? { "content:encoded": `<figure><img src="${media}"></figure>` } : void 0
        ]
      });
    }
    let rssXML = this.rssFeed.xml();
    const rssFileOld = await this.rssPath.readAsString();
    if (rssFileOld) {
      const rssDocOld = new DOMParser().parseFromString(rssFileOld, "text/xml");
      const rssDocNew = new DOMParser().parseFromString(rssXML, "text/xml");
      let oldItems = Array.from(rssDocOld.querySelectorAll("item"));
      let newItems = Array.from(rssDocNew.querySelectorAll("item"));
      oldItems = oldItems.filter((oldItem) => {
        var _a4, _b4;
        return !this.deletedFiles.includes((_b4 = (_a4 = oldItem.querySelector("guid")) == null ? void 0 : _a4.textContent) != null ? _b4 : "");
      });
      oldItems = oldItems.filter((oldItem) => !newItems.some((newItem) => {
        var _a4, _b4;
        return ((_a4 = newItem.querySelector("guid")) == null ? void 0 : _a4.textContent) == ((_b4 = oldItem.querySelector("guid")) == null ? void 0 : _b4.textContent);
      }));
      newItems.forEach((item) => item.remove());
      newItems = newItems.concat(oldItems);
      const channel = rssDocNew.querySelector("channel");
      newItems.forEach((item) => channel == null ? void 0 : channel.appendChild(item));
      rssXML = rssDocNew.documentElement.outerHTML;
    }
    const rssAsset = new Attachment(rssXML, this.rssPath, null, this.exportOptions);
    this.addFile(rssAsset);
  }
  async addFile(file) {
    let updatedFile = false;
    let newFile = false;
    const key = file.targetPath.path;
    if (!this.hadFile(key)) {
      this.newFiles.push(file);
      newFile = true;
    } else {
      const oldData = this.getOldFile(key);
      if (oldData) {
        if (oldData.modifiedTime != file.sourceStat.mtime || oldData.sourceSize != file.sourceStat.size) {
          this.updatedFiles.push(file);
          updatedFile = true;
        }
      }
      this.deletedFiles.remove(file.targetPath.path);
      if (!updatedFile) {
        const oldWebpage = this.getOldWebpage(key);
        if (oldWebpage) {
          for (const attachment of oldWebpage.attachments) {
            this.deletedFiles.remove(attachment);
          }
        }
      }
    }
    if (!this.allFiles.includes(file)) {
      this.allFiles.push(file);
      this.allFiles.sort((a, b) => {
        var _a3, _b3, _c2, _d;
        return ((_b3 = (_a3 = b.source) == null ? void 0 : _a3.stat.mtime) != null ? _b3 : 0) - ((_d = (_c2 = a.source) == null ? void 0 : _c2.stat.mtime) != null ? _d : 0);
      });
    }
    if (file.showInTree && !this.attachmentsShownInTree.includes(file))
      this.attachmentsShownInTree.push(file);
    if (file instanceof Webpage && file.sourcePath && !this.sourceToWebpage.has(file.sourcePath)) {
      this.sourceToWebpage.set(file.sourcePath, file);
    }
    if (file instanceof Attachment && file.sourcePath && !this.sourceToAttachment.has(file.sourcePath)) {
      this.sourceToAttachment.set(file.sourcePath, file);
    }
    if (newFile || updatedFile) {
      if (file instanceof Webpage) {
        await this.updateWebpage(file);
      } else {
        this.updateAttachment(file);
      }
    }
  }
  async addFiles(files) {
    for (const file of files) {
      this.addFile(file);
    }
  }
  async removeFile(file) {
    if (file instanceof Webpage) {
      this.removeWebpage(file);
    } else {
      this.removeAttachment(file);
    }
  }
  async removeFiles(files) {
    for (const file of files) {
      this.removeFile(file);
    }
  }
  getFileFromSrc(src, sourceFile) {
    const attachedFile = this.website.getFilePathFromSrc(src, sourceFile.path);
    return this.getFile(attachedFile.pathname);
  }
  getAttachment(sourcePath) {
    return this.sourceToAttachment.get(sourcePath);
  }
  getWebpage(sourcePath) {
    return this.sourceToWebpage.get(sourcePath);
  }
  getFile(sourcePath, preferAttachment = false) {
    var _a3, _b3;
    if (preferAttachment) {
      return (_a3 = this.sourceToAttachment.get(sourcePath)) != null ? _a3 : this.sourceToWebpage.get(sourcePath);
    }
    return (_b3 = this.sourceToWebpage.get(sourcePath)) != null ? _b3 : this.sourceToAttachment.get(sourcePath);
  }
  hasFile(sourcePath) {
    return this.sourceToWebpage.has(sourcePath);
  }
  hadFile(targetPath) {
    var _a3;
    return ((_a3 = this.oldWebsiteData) == null ? void 0 : _a3.fileInfo[targetPath]) != void 0;
  }
  getOldFile(targetPath) {
    var _a3;
    return (_a3 = this.oldWebsiteData) == null ? void 0 : _a3.fileInfo[targetPath];
  }
  getOldWebpage(targetPath) {
    var _a3;
    return (_a3 = this.oldWebsiteData) == null ? void 0 : _a3.webpages[targetPath];
  }
  async applyToOldWebpages(callback) {
    const promises = [];
    if (this.oldWebsiteData) {
      const webpages = Object.entries(this.oldWebsiteData.webpages);
      for (const [path, data] of webpages) {
        if (this.deletedFiles.includes(path))
          continue;
        const filePath = new Path(path, this.website.destination.path);
        const fileData = await filePath.readAsBuffer();
        if (fileData) {
          const document3 = new DOMParser().parseFromString(fileData.toString(), "text/html");
          await callback(document3, data);
          promises.push(filePath.write(`<!DOCTYPE html>
${document3.documentElement.outerHTML}`));
        }
      }
    }
    Promise.all(promises);
  }
  async addWebpageToWebsiteData(webpage) {
    if (webpage.sourcePath && this.websiteData) {
      const webpageInfo = {};
      webpageInfo.title = webpage.title;
      webpageInfo.icon = webpage.icon;
      webpageInfo.description = webpage.outputData.descriptionOrShortenedContent;
      webpageInfo.aliases = webpage.outputData.aliases;
      webpageInfo.inlineTags = webpage.outputData.inlineTags;
      webpageInfo.frontmatterTags = webpage.outputData.frontmatterTags;
      webpageInfo.headers = await webpage.outputData.renderedHeadings;
      webpageInfo.links = webpage.outputData.linksToOtherFiles;
      webpageInfo.author = webpage.outputData.author;
      webpageInfo.coverImageURL = webpage.outputData.coverImageURL;
      webpageInfo.fullURL = webpage.outputData.fullURL;
      webpageInfo.pathToRoot = webpage.outputData.pathToRoot == "" ? "." : webpage.outputData.pathToRoot;
      webpageInfo.attachments = webpage.attachments.map((download) => download.targetPath.path);
      webpageInfo.createdTime = webpage.source.stat.ctime;
      webpageInfo.modifiedTime = webpage.source.stat.mtime;
      webpageInfo.sourceSize = webpage.source.stat.size;
      webpageInfo.sourcePath = new Path(webpage.source.path).path;
      webpageInfo.exportPath = webpage.targetPath.path;
      webpageInfo.showInTree = webpage.showInTree;
      webpageInfo.treeOrder = webpage.treeOrder;
      webpageInfo.backlinks = webpage.outputData.backlinks.map((backlink) => backlink.targetPath.path);
      webpageInfo.type = webpage.type;
      if (this.exportOptions.combineAsSingleFile) {
        webpageInfo.data = webpage.data.toString();
      }
      const fileInfo = {};
      fileInfo.createdTime = webpageInfo.createdTime;
      fileInfo.modifiedTime = webpageInfo.modifiedTime;
      fileInfo.sourceSize = webpageInfo.sourceSize;
      fileInfo.sourcePath = webpageInfo.sourcePath;
      fileInfo.exportPath = webpageInfo.exportPath;
      fileInfo.showInTree = webpageInfo.showInTree;
      fileInfo.treeOrder = webpageInfo.treeOrder;
      fileInfo.backlinks = webpageInfo.backlinks;
      fileInfo.type = webpageInfo.type;
      fileInfo.data = null;
      this.websiteData.webpages[webpageInfo.exportPath] = webpageInfo;
      this.websiteData.fileInfo[webpageInfo.exportPath] = fileInfo;
      this.websiteData.sourceToTarget[webpageInfo.sourcePath] = webpageInfo.exportPath;
    }
  }
  async addWebpageToMinisearch(webpage) {
    if (this.minisearch) {
      const webpagePath = webpage.targetPath.path;
      if (this.minisearch.has(webpagePath)) {
        this.minisearch.discard(webpagePath);
      }
      const headersInfo = await webpage.outputData.renderedHeadings;
      if (headersInfo.length > 0 && headersInfo[0].level == 1 && headersInfo[0].heading == webpage.title)
        headersInfo.shift();
      const headers = headersInfo.map((header) => header.heading);
      this.minisearch.add({
        title: webpage.title,
        aliases: webpage.outputData.aliases,
        headers,
        tags: webpage.outputData.allTags,
        path: webpagePath,
        content: webpage.outputData.description + " " + webpage.outputData.searchContent
      });
    }
  }
  async updateWebpage(webpage) {
    if (!this.webpages.includes(webpage)) {
      this.webpages.push(webpage);
      this.webpages.sort((a, b) => b.source.stat.mtime - a.source.stat.mtime);
    }
    await this.addWebpageToWebsiteData(webpage);
    await this.addWebpageToMinisearch(webpage);
  }
  addAttachmentToWebsiteData(attachment) {
    var _a3;
    const exportPath = attachment.targetPath.path;
    const key = exportPath;
    if (this.websiteData) {
      const fileInfo = {};
      fileInfo.createdTime = attachment.sourceStat.ctime;
      fileInfo.modifiedTime = attachment.sourceStat.mtime;
      fileInfo.sourceSize = attachment.sourceStat.size;
      fileInfo.sourcePath = (_a3 = attachment.sourcePath) != null ? _a3 : "";
      fileInfo.exportPath = exportPath;
      fileInfo.showInTree = attachment.showInTree;
      fileInfo.treeOrder = attachment.treeOrder;
      fileInfo.backlinks = [];
      fileInfo.type = AssetLoader.extentionToType(attachment.targetPath.extension);
      fileInfo.data = null;
      if (this.exportOptions.combineAsSingleFile) {
        if (attachment.data instanceof Buffer)
          fileInfo.data = attachment.data.toString("base64");
        else
          fileInfo.data = attachment.data.toString();
      }
      this.websiteData.fileInfo[key] = fileInfo;
      if (!this.websiteData.attachments.includes(key))
        this.websiteData.attachments.push(key);
      this.websiteData.sourceToTarget[fileInfo.sourcePath] = fileInfo.exportPath;
    }
    return key;
  }
  updateAttachment(attachment) {
    this.addAttachmentToWebsiteData(attachment);
    if (!this.attachments.includes(attachment)) {
      this.attachments.push(attachment);
      this.attachments.sort((a, b) => {
        var _a3, _b3, _c2, _d;
        return ((_b3 = (_a3 = b.source) == null ? void 0 : _a3.stat.mtime) != null ? _b3 : 0) - ((_d = (_c2 = a.source) == null ? void 0 : _c2.stat.mtime) != null ? _d : 0);
      });
    }
  }
  removeWebpage(webpage) {
    if (webpage.sourcePath && !this.sourceToWebpage.has(webpage.sourcePath)) {
      this.sourceToWebpage.delete(webpage.sourcePath);
    }
    const key = webpage.targetPath.path;
    delete this.websiteData.webpages[key];
    delete this.websiteData.fileInfo[key];
    if (this.minisearch) {
      if (this.minisearch.has(key)) {
        this.minisearch.discard(key);
      }
    }
  }
  removeAttachment(attachment) {
    if (attachment.sourcePath && !this.sourceToAttachment.has(attachment.sourcePath)) {
      this.sourceToAttachment.delete(attachment.sourcePath);
    }
    const key = attachment.targetPath.path;
    delete this.websiteData.fileInfo[key];
  }
  websiteDataAttachment() {
    const websiteDataString = JSON.stringify(this.websiteData);
    const websiteDataPath = AssetHandler.generateSavePath("metadata.json", "other" /* Other */, this.website.destination);
    return new Attachment(websiteDataString, websiteDataPath, null, this.exportOptions);
  }
  indexDataAttachment() {
    const indexDataString = JSON.stringify(this.minisearch);
    const indexDataPath = AssetHandler.generateSavePath("search-index.json", "other" /* Other */, this.website.destination);
    return new Attachment(indexDataString, indexDataPath, null, this.exportOptions);
  }
};

// src/plugin/features/graph-view.ts
var GraphView = class {
  async generate(container) {
    container = container != null ? container : document.body;
    const graphWrapper = container.createDiv();
    graphWrapper.classList.add("graph-view-wrapper");
    const graphHeader = graphWrapper.createDiv("feature-header");
    const graphTitle = graphHeader.createDiv("feature-title");
    graphTitle.innerText = "Interactive Graph";
    const graphEl = graphWrapper.createDiv("graph-view-placeholder");
    const expandSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon"><line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline></svg>`;
    const globalSVG = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-git-fork"><circle cx="12" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9"></path><path d="M12 12v3"></path></svg>`;
    graphEl.innerHTML = `
		<div class="graph-view-container">
			<div class="graph-icon graph-expand" role="button" aria-label="Expand" data-tooltip-position="top">${expandSVG}</div>
			<div class="graph-icon graph-global" role="button" aria-label="Global Graph" data-tooltip-position="top">${globalSVG}</div>
			<canvas id="graph-canvas" class="hide" width="512px" height="512px"></canvas>
		</div>
		`;
    return graphWrapper;
  }
};

// src/plugin/features/theme-toggle.ts
var ThemeToggle = class {
  async generate(container, featureOptions) {
    var _a3;
    container = container != null ? container : document.body;
    const label = container.createEl("label", {
      attr: { for: "theme-toggle-input", id: (_a3 = featureOptions == null ? void 0 : featureOptions.featureId) != null ? _a3 : "" },
      cls: "theme-toggle-container"
    });
    label.createEl("input", { attr: { type: "checkbox", id: "theme-toggle-input" }, cls: "theme-toggle-input" });
    label.createDiv({ cls: "toggle-background" });
    return label;
  }
};

// src/plugin/features/search-input.ts
var SearchInput = class {
  async generate(container) {
    container = container != null ? container : document.body;
    this.inputContainerEl = container.createDiv({ attr: { id: "search-container" } });
    this.inputWrapperEl = this.inputContainerEl.createDiv({ attr: { id: "search-wrapper" } });
    this.inputEl = this.inputWrapperEl.createEl("input");
    this.inputEl.setAttribute("enterkeyhint", "search");
    this.inputEl.setAttribute("type", "search");
    this.inputEl.setAttribute("spellcheck", "false");
    this.inputEl.setAttribute("placeholder", "Search...");
    this.clearButtonEl = this.inputWrapperEl.createDiv({ attr: { "aria-label": "Clear search", id: "search-clear-button" } });
    return this.inputContainerEl;
  }
};

// src/plugin/website/website.ts
var Website = class {
  constructor(destination, options) {
    this.sourceFiles = [];
    if (typeof destination == "string")
      destination = new Path(destination);
    this.exportOptions = Object.assign(Settings.exportOptions, options);
    if (!destination.isDirectoryFS)
      throw new Error("Website destination must be a folder: " + destination.path);
    this.destination = destination;
  }
  async buildTemplate() {
    const template = this.webpageTemplate;
    await template.loadLayout();
    if (this.exportOptions.graphViewOptions.enabled) {
      template.insertFeature(await new GraphView().generate(), this.exportOptions.graphViewOptions);
    }
    if (this.exportOptions.themeToggleOptions.enabled) {
      template.insertFeature(await new ThemeToggle().generate(), this.exportOptions.themeToggleOptions);
    }
    if (this.exportOptions.searchOptions.enabled) {
      template.insertFeature(await new SearchInput().generate(), this.exportOptions.searchOptions);
    }
    if (this.exportOptions.fileNavigationOptions.enabled) {
      const fileTreeElContainer = document.body.createDiv();
      fileTreeElContainer.innerHTML = this.fileTreeAsset.getHTML(this.exportOptions);
      const fileTreeEl = fileTreeElContainer.firstElementChild;
      template.insertFeature(fileTreeEl, this.exportOptions.fileNavigationOptions);
      fileTreeElContainer.remove();
    }
    if (this.exportOptions.customHeadOptions.enabled) {
      let string = AssetHandler.customHeadContent.getHTML(this.exportOptions);
      template.insertFeatureString(string, this.exportOptions.customHeadOptions);
    }
  }
  findCommonRootPath(files) {
    var _a3, _b3;
    if (!files || files.length === 0) {
      return "";
    }
    if (files.length === 1) {
      return (_b3 = (_a3 = new Path(files[0].path).parent) == null ? void 0 : _a3.path) != null ? _b3 : "";
    }
    const paths = files.map((file) => new Path(file.path).split());
    let commonPath = [];
    const shortestPathLength = Math.min(...paths.map((p) => p.length));
    for (let i = 0; i < shortestPathLength; i++) {
      const segment = paths[0][i];
      if (paths.every((path) => path[i] === segment)) {
        commonPath.push(segment);
      } else {
        break;
      }
    }
    if (commonPath.length <= 1) {
      return "";
    }
    const lastCommonSegment = commonPath[commonPath.length - 1];
    if (!paths.every((path) => path.length > commonPath.length || path[commonPath.length - 1] !== lastCommonSegment)) {
      commonPath.pop();
    }
    return commonPath.length > 0 ? new Path(commonPath.join("/")).path : "";
  }
  async load(files) {
    var _a3, _b3, _c2, _d, _e;
    ExportLog.resetProgress();
    ExportLog.addToProgressCap((_a3 = files == null ? void 0 : files.length) != null ? _a3 : 0);
    ExportLog.addToProgressCap(((_b3 = files == null ? void 0 : files.length) != null ? _b3 : 0) * 0.1);
    this.sourceFiles = (_c2 = files == null ? void 0 : files.filter((file) => file)) != null ? _c2 : [];
    let rootPath = this.findCommonRootPath(this.sourceFiles);
    this.exportOptions.exportRoot = rootPath;
    console.log("Root path: " + rootPath);
    await AssetHandler.reloadAssets(this.exportOptions);
    this.index = new Index();
    try {
      await this.index.load(this, this.exportOptions);
    } catch (error) {
      ExportLog.error(error, "Problem loading index");
    }
    try {
      this.webpageTemplate = new WebpageTemplate(this.exportOptions, this.index.rssURL.path);
    } catch (error) {
      ExportLog.error(error, "Problem creating webpage template");
    }
    for (const file of this.sourceFiles) {
      try {
        const isConvertable = MarkdownRendererAPI.isConvertable(file.extension);
        if (!isConvertable || MarkdownRendererAPI.viewableMediaExtensions.contains(file.extension)) {
          const data = Buffer.from(await app.vault.readBinary(file));
          const path = this.getTargetPathForFile(file);
          let attachment = new Attachment(data, path, file, this.exportOptions);
          attachment.showInTree = true;
          await this.index.addFile(attachment);
        }
        if (isConvertable) {
          let webpage = new Webpage(file, file.name, this, this.exportOptions);
          webpage.showInTree = true;
          await this.index.addFile(webpage);
        }
        ExportLog.progress(0.1, "Initializing Document", file.path, "var(--color-yellow)");
        await Utils.delay(0);
      } catch (error) {
        ExportLog.error(error, "Problem initializing document: " + file.path);
        continue;
      }
    }
    try {
      if (this.exportOptions.fileNavigationOptions.enabled) {
        const paths = this.index.attachmentsShownInTree.map((file) => {
          var _a4;
          return new Path((_a4 = file.sourcePathRootRelative) != null ? _a4 : "");
        });
        this.fileTree = new FileTree(paths, false, true);
        this.fileTree.makeLinksWebStyle = (_d = this.exportOptions.slugifyPaths) != null ? _d : true;
        this.fileTree.showNestingIndicator = true;
        this.fileTree.generateWithItemsClosed = true;
        this.fileTree.showFileExtentionTags = true;
        this.fileTree.hideFileExtentionTags = ["md"];
        this.fileTree.title = (_e = this.exportOptions.siteName) != null ? _e : app.vault.getName();
        this.fileTree.id = "file-explorer";
        const tempContainer = document.createElement("div");
        await this.fileTree.generate(tempContainer);
        const data = tempContainer.innerHTML;
        this.index.attachmentsShownInTree.forEach((file) => {
          var _a4, _b4;
          if (!file.sourcePathRootRelative)
            return;
          const fileTreeItem = (_a4 = this.fileTree) == null ? void 0 : _a4.getItemBySourcePath(file.sourcePathRootRelative);
          file.treeOrder = (_b4 = fileTreeItem == null ? void 0 : fileTreeItem.treeOrder) != null ? _b4 : 0;
          console.log("File tree order for " + file.sourcePathRootRelative + ": " + file.treeOrder);
        });
        tempContainer.remove();
        this.fileTreeAsset = new AssetLoader("file-tree.html", data, null, "html" /* HTML */, "auto" /* Auto */, true, "temporary" /* Temporary */);
      }
    } catch (error) {
      ExportLog.error(error, "Problem creating file tree");
    }
    return this;
  }
  async build(files) {
    if (files)
      await this.load(files);
    console.log("Creating website with files:\n" + this.sourceFiles.map((f) => f.path).join("\n"));
    await this.buildTemplate();
    await MarkdownRendererAPI.beginBatch(this.exportOptions);
    this.validateSettings();
    let webpages = this.index.webpages;
    webpages = webpages.filter((webpage) => {
      return this.index.updatedFiles.includes(webpage) || this.index.newFiles.includes(webpage);
    });
    const downloads = AssetHandler.getDownloads(this.destination, this.exportOptions);
    this.index.addFiles(downloads);
    let progress = 0;
    for (const webpage of webpages) {
      if (ExportLog.isCancelled())
        return;
      ExportLog.progress(1, "Building Webpages", webpage.source.path);
      const rendered = await webpage.renderDocument();
      if (!rendered)
        continue;
      await Utils.delay(0);
      const attachments = await webpage.getAttachments();
      await Utils.delay(0);
      this.index.addFiles(attachments);
      await Utils.delay(0);
      const built = await webpage.build();
      await Utils.delay(0);
      if (built)
        await this.index.addFile(webpage);
      else
        await this.index.removeFile(webpage);
      if (!this.exportOptions.combineAsSingleFile)
        await webpage.download();
      if (this.exportOptions.autoDisposeWebpages)
        webpage.dispose();
      progress += 1;
      await Utils.delay(0);
    }
    if (this.exportOptions.rssOptions.enabled) {
      try {
        this.index.createRSSFeed();
      } catch (error) {
        ExportLog.error(error, "Problem creating RSS feed");
      }
    }
    try {
      await this.index.finalize();
    } catch (error) {
      ExportLog.error(error, "Problem finalizing index");
    }
    console.log(this);
    this.validateSite();
    return this;
  }
  refreshUpdatedFilesList() {
    try {
      let updatedNames = this.index.updatedFiles.map((file) => file.filename);
      updatedNames.concat(this.index.newFiles.map((file) => file.filename));
      if (updatedNames.length == 0)
        updatedNames = ["None Updated"];
      ExportLog.setFileList(updatedNames, {
        icons: "file",
        renderAsMarkdown: false,
        title: "Updated & New"
      });
    } catch (error) {
      ExportLog.warning(error, "Problem updating changed files display list on render window");
    }
  }
  validateSettings() {
    var _a3, _b3, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
    if ((_b3 = (_a3 = app.plugins) == null ? void 0 : _a3.enabledPlugins) == null ? void 0 : _b3.has("obsidian-icon-folder")) {
      const fileToIconName = (_e = (_d = (_c2 = app.plugins) == null ? void 0 : _c2.plugins) == null ? void 0 : _d["obsidian-icon-folder"]) == null ? void 0 : _e.data;
      const noteIconsEnabled = (_g = (_f = fileToIconName == null ? void 0 : fileToIconName.settings) == null ? void 0 : _f.iconsInNotesEnabled) != null ? _g : false;
      if (!noteIconsEnabled) {
        ExportLog.warning('For Iconize plugin support, enable "Toggle icons while editing notes" in the Iconize plugin settings.');
      }
    }
    if ((_i = (_h = app.plugins) == null ? void 0 : _h.enabledPlugins) == null ? void 0 : _i.has("obsidian-excalidraw-plugin")) {
      const embedMode = (_n = (_m = (_l = (_k = (_j = app.plugins) == null ? void 0 : _j.plugins) == null ? void 0 : _k["obsidian-excalidraw-plugin"]) == null ? void 0 : _l.settings) == null ? void 0 : _m["previewImageType"]) != null ? _n : "";
      if (embedMode != "SVG") {
        ExportLog.warning('For Excalidraw embed support, set the embed mode to "Native SVG" in the Excalidraw plugin settings.');
      }
    }
    if ((_p = (_o = app.plugins) == null ? void 0 : _o.enabledPlugins) == null ? void 0 : _p.has("obsidian-banners")) {
      const bannerPlugin = (_r = (_q = app.plugins) == null ? void 0 : _q.plugins) == null ? void 0 : _r["obsidian-banners"];
      let version = (_t = (_s = bannerPlugin == null ? void 0 : bannerPlugin.manifest) == null ? void 0 : _s.version) != null ? _t : "0.0.0";
      version = version == null ? void 0 : version.substring(0, 5);
      if (version < "2.0.5") {
        ExportLog.warning("The Banner plugin version 2.0.5 or higher is required for full support. You have version " + version + ".");
      }
    }
    if (this.exportOptions.rssOptions.enabled && (this.exportOptions.rssOptions.siteUrl == "" || this.exportOptions.rssOptions.siteUrl == void 0)) {
      ExportLog.warning("Creating an RSS feed requires a site url to be set in the export settings.");
    }
  }
  validateSite() {
    this.index.webpages.forEach(async (webpage) => {
      var _a3;
      const titles = (_a3 = webpage.pageDocument) == null ? void 0 : _a3.querySelectorAll(".feature-title");
      if (!titles)
        return;
      titles.forEach(async (title) => {
        if (!title.closest(".feature-header")) {
          ExportLog.warning(title, `Feature title not inside a feature header in ${webpage.source.path}`);
        }
      });
      await Utils.delay(0);
    });
  }
  getTargetPathForFile(file, filename) {
    var _a3;
    const targetPath = new Path(file.path);
    if (filename)
      targetPath.fullName = filename;
    targetPath.setWorkingDirectory(((_a3 = this.destination) != null ? _a3 : Path.vaultPath.joinString("Web Export")).path);
    targetPath.slugify(this.exportOptions.slugifyPaths);
    return targetPath;
  }
  async createAttachmentFromSrc(src, sourceFile) {
    var _a3;
    const attachedFile = this.getFilePathFromSrc(src, sourceFile.path);
    if (attachedFile.isDirectory)
      return;
    const file = app.vault.getFileByPath(attachedFile.pathname);
    let path = (_a3 = file == null ? void 0 : file.path) != null ? _a3 : "";
    if (!file)
      path = AssetHandler.mediaPath.joinString(attachedFile.fullName).path;
    const data = await attachedFile.readAsBuffer();
    if (!data)
      return;
    const target = new Path(path, this.destination.path).slugify(this.exportOptions.slugifyPaths);
    const attachment = new Attachment(data, target, file, this.exportOptions);
    if (!attachment.sourcePath)
      attachment.sourcePath = attachedFile.pathname;
    return attachment;
  }
  getFilePathFromSrc(src, exportingFilePath) {
    var _a3, _b3, _c2, _d, _e;
    let pathString = "";
    if (src.startsWith("app://")) {
      let fail = false;
      try {
        pathString = (_b3 = (_a3 = app.vault.resolveFileUrl(src)) == null ? void 0 : _a3.path) != null ? _b3 : "";
        if (pathString == "")
          fail = true;
      } catch (e) {
        fail = true;
      }
      if (fail) {
        pathString = src.replaceAll("app://", "").replaceAll("\\", "/");
        pathString = pathString.replaceAll(pathString.split("/")[0] + "/", "");
        pathString = Path.getRelativePathFromVault(new Path(pathString), true).path;
        ExportLog.log(pathString, "Fallback path parsing:");
      }
    } else {
      const split = src.split("#");
      const hash = (_c2 = split[1]) == null ? void 0 : _c2.trim();
      const path = split[0];
      pathString = (_e = (_d = app.metadataCache.getFirstLinkpathDest(path, exportingFilePath)) == null ? void 0 : _d.path) != null ? _e : "";
      if (hash) {
        pathString += "#" + hash;
      }
    }
    pathString = pathString != null ? pathString : "";
    return new Path(pathString);
  }
  async getCombinedHTML() {
    let index = this.index.webpages.find((file) => file.filename == "index.html");
    if (!(index == null ? void 0 : index.data) && this.index.webpages.length > 0) {
      ExportLog.warning("No index.html found, using the first webpage");
      index = this.index.webpages[0];
    }
    if (!(index == null ? void 0 : index.data)) {
      ExportLog.error("No index.html found, website creation failed");
      return "";
    }
    let html = new DOMParser().parseFromString(index.data, "text/html");
    html.head.innerHTML += AssetHandler.getHeadReferences(this.exportOptions);
    let metadataScript = html.head.createEl("data");
    metadataScript.id = "website-metadata";
    const fileInfo = this.index.websiteData.fileInfo;
    const webpages = this.index.websiteData.webpages;
    delete this.index.websiteData.fileInfo;
    delete this.index.websiteData.webpages;
    metadataScript.setAttribute("value", btoa(encodeURI(JSON.stringify(this.index.websiteData))));
    for (const [path, data] of Object.entries(webpages)) {
      const dataElement = html.head.createEl("data");
      dataElement.id = btoa(encodeURI(path));
      dataElement.setAttribute("value", btoa(encodeURI(JSON.stringify(data))));
    }
    for (const [path, data] of Object.entries(fileInfo)) {
      if (html.getElementById(btoa(encodeURI(path))))
        continue;
      const dataElement = html.head.createEl("data");
      dataElement.id = btoa(encodeURI(path));
      dataElement.setAttribute("value", btoa(encodeURI(JSON.stringify(data))));
    }
    return `<!DOCTYPE html>
${html.documentElement.outerHTML}`;
  }
  async saveAsCombinedHTML() {
    const html = await this.getCombinedHTML();
    const path = this.destination.joinString(this.exportOptions.siteName + ".html");
    await path.write(html);
  }
};

// src/plugin/settings/export-modal.ts
var import_obsidian10 = require("obsidian");

// src/plugin/features/file-picker.ts
var FilePickerTree = class extends FileTree {
  constructor(files, keepOriginalExtensions = false, sort = true) {
    super(files, keepOriginalExtensions, sort);
    this.children = [];
    this.renderMarkdownTitles = false;
    this.addCollapseAllButton = false;
  }
  async populateTree() {
    this.regexBlacklist = this.regexBlacklist.filter((pattern) => pattern.trim() != "");
    let filteredFiles = this.files.filter((file) => this.regexBlacklist.every((pattern) => !file.path.match(new RegExp(pattern))));
    filteredFiles = filteredFiles.filter((file) => this.regexWhitelist.every((pattern) => file.path.match(new RegExp(pattern))));
    for (const file of filteredFiles) {
      const pathSections = [];
      let parentFile = file.copy;
      while (parentFile != void 0) {
        pathSections.push(parentFile);
        parentFile = parentFile.parent;
      }
      pathSections.reverse();
      let parent = this;
      for (let i = 0; i < pathSections.length; i++) {
        const section = pathSections[i];
        const depth = i + 1;
        const isFolder = section.isDirectory;
        let child = parent.children.find((sibling) => sibling.title == section.fullName && sibling.isFolder == isFolder && sibling.depth == depth);
        if (child == void 0) {
          child = new FilePickerTreeItem(this, parent, depth);
          child.title = section.fullName;
          child.isFolder = isFolder;
          if (child.isFolder) {
            child.dataRef = section.path;
          } else {
            const tfile = app.vault.getFileByPath(section.path);
            if (tfile)
              child.file = tfile;
          }
          parent.children.push(child);
        }
        parent = child;
      }
      if (parent instanceof FilePickerTreeItem) {
        const path = file.copy;
        const tfile = app.vault.getAbstractFileByPath(path.path);
        if (file.isDirectory)
          path.folderize();
        else {
          parent.originalExtension = path.extensionName;
          if (!this.keepOriginalExtensions && MarkdownRendererAPI.isConvertable(path.extensionName))
            path.setExtension("html");
        }
        parent.dataRef = path.path;
        if (tfile) {
          parent.title = (await _MarkdownRendererInternal.getTitleForFile(tfile)).title;
        }
      }
    }
    if (this.sort) {
      this.sortAlphabetically();
      this.sortByIsFolder();
    }
  }
  async generateTree(container) {
    await super.generateTree(container);
    const selectAllButton = new FilePickerTreeItem(this, this, 0);
    selectAllButton.title = i18n.exportModal.filePicker.selectAll;
    let selectAllEl = await selectAllButton.insert(container);
    const oldItemEl = selectAllEl;
    selectAllEl = selectAllEl.cloneNode(true);
    selectAllButton.checkbox = selectAllEl.querySelector("input");
    selectAllButton.itemEl = selectAllEl;
    selectAllButton.childContainer = selectAllEl.querySelector(".tree-item-children");
    selectAllEl.classList.add("select-all");
    const treeHeader = container.querySelector(".feature-header");
    treeHeader == null ? void 0 : treeHeader.append(selectAllEl);
    oldItemEl.remove();
    const localThis = this;
    function selectAll() {
      const checked = selectAllButton.checkbox.checked;
      selectAllButton.check(!checked);
      localThis.forAllChildren((child) => child.check(!checked));
    }
    selectAllButton.checkbox.addEventListener("click", (event) => {
      selectAllButton.checkbox.checked = !selectAllButton.checkbox.checked;
      selectAll();
      event.stopPropagation();
    });
    selectAllButton.itemEl.addEventListener("click", () => {
      selectAll();
    });
    this.selectAllItem = selectAllButton;
  }
  getSelectedFiles() {
    const selectedFiles = [];
    this.forAllChildren((child) => {
      if (child.checked && !child.isFolder)
        selectedFiles.push(child.file);
    });
    return selectedFiles;
  }
  getSelectedFilesSavePaths() {
    var _a3;
    let selectedFiles = [];
    if ((_a3 = this.selectAllItem) == null ? void 0 : _a3.checked) {
      selectedFiles = ["all"];
      return selectedFiles;
    }
    this.forAllChildren((child) => {
      selectedFiles.push(...child.getSelectedFilesSavePaths());
    }, false);
    return selectedFiles;
  }
  setSelectedFiles(files) {
    var _a3;
    if (files.includes("all")) {
      (_a3 = this.selectAllItem) == null ? void 0 : _a3.check(true, false, true);
      this.forAllChildren((child) => child.check(true));
      return;
    }
    this.forAllChildren((child) => {
      var _a4;
      if (files.includes((_a4 = child.dataRef) != null ? _a4 : "")) {
        child.check(true);
      }
    });
    this.evaluateFolderChecks();
  }
  forAllChildren(func, recursive) {
    super.forAllChildren(func, recursive);
  }
  evaluateFolderChecks() {
    var _a3, _b3;
    this.forAllChildren((child) => {
      var _a4, _b4;
      if (child.isFolder) {
        const uncheckedChildren = (_a4 = child == null ? void 0 : child.itemEl) == null ? void 0 : _a4.querySelectorAll(".nav-file .file-checkbox:not(.checked)");
        if (!child.checked && (uncheckedChildren == null ? void 0 : uncheckedChildren.length) == 0) {
          child.check(true, false, true);
        } else if ((_b4 = uncheckedChildren == null ? void 0 : uncheckedChildren.length) != null ? _b4 : 0 > 0) {
          child.check(false, false, true);
        }
      }
    });
    if (this.children.reduce((acc, child) => acc && child.checked, true)) {
      (_a3 = this.selectAllItem) == null ? void 0 : _a3.check(true, false, true);
    } else {
      (_b3 = this.selectAllItem) == null ? void 0 : _b3.check(false, false, true);
    }
  }
};
var FilePickerTreeItem = class extends FileTreeItem {
  constructor() {
    super(...arguments);
    this.checked = false;
  }
  async insertSelf(container) {
    const self2 = await super.insertSelf(container);
    this.checkbox = self2.createEl("input");
    self2.prepend(this.checkbox);
    this.checkbox.classList.add("file-checkbox");
    this.checkbox.setAttribute("type", "checkbox");
    this.checkbox.addEventListener("click", (event) => {
      event.stopPropagation();
      this.check(this.checkbox.checked, false);
      this.tree.evaluateFolderChecks();
    });
    const localThis = this;
    self2 == null ? void 0 : self2.addEventListener("click", function(event) {
      if (localThis.isFolder)
        localThis.toggleCollapse();
      else
        localThis.toggle(true);
    });
    return self2;
  }
  check(checked, evaluate = false, skipChildren = false) {
    this.checked = checked;
    this.checkbox.checked = checked;
    this.checkbox.classList.toggle("checked", checked);
    if (!skipChildren)
      this.checkAllChildren(checked);
    if (evaluate)
      this.tree.evaluateFolderChecks();
  }
  toggle(evaluate = false) {
    this.check(!this.checked, evaluate);
  }
  checkAllChildren(checked) {
    this.forAllChildren((child) => child.check(checked));
  }
  forAllChildren(func, recursive) {
    super.forAllChildren(func, recursive);
  }
  getSelectedFilesSavePaths() {
    var _a3;
    const selectedFiles = [];
    if (this.checked) {
      selectedFiles.push((_a3 = this.dataRef) != null ? _a3 : "");
    } else if (this.isFolder) {
      this.forAllChildren((child) => {
        selectedFiles.push(...child.getSelectedFilesSavePaths());
      }, false);
    }
    return selectedFiles;
  }
};

// src/plugin/settings/export-modal.ts
var _ExportModal = class extends import_obsidian10.Modal {
  constructor() {
    super(app);
    this.isClosed = true;
    this.canceled = true;
    this.pickedFiles = void 0;
    this.validPath = true;
  }
  overridePickedFiles(files) {
    this.pickedFiles = files;
  }
  async open() {
    var _a3, _b3, _c2, _d;
    this.isClosed = false;
    this.canceled = true;
    const lang = i18n.exportModal;
    super.open();
    if (!this.filePickerModalEl) {
      this.filePickerModalEl = this.containerEl.createDiv({ cls: "modal" });
      this.containerEl.insertBefore(this.filePickerModalEl, this.modalEl);
      this.filePickerModalEl.style.position = "relative";
      this.filePickerModalEl.style.zIndex = "1";
      this.filePickerModalEl.style.width = "25em";
      this.filePickerModalEl.style.padding = "0";
      this.filePickerModalEl.style.margin = "10px";
      this.filePickerModalEl.style.maxHeight = "80%";
      this.filePickerModalEl.style.boxShadow = "0 0 7px 1px inset #00000060";
      const scrollArea = this.filePickerModalEl.createDiv({ cls: "tree-scroll-area" });
      scrollArea.style.height = "100%";
      scrollArea.style.width = "100%";
      scrollArea.style.overflowY = "auto";
      scrollArea.style.overflowX = "hidden";
      scrollArea.style.padding = "1em";
      scrollArea.style.boxShadow = "0 0 7px 1px inset #00000060";
      const paths = app.vault.getFiles().map((file) => new Path(file.path));
      this.filePicker = new FilePickerTree(paths, true, true);
      this.filePicker.regexBlacklist.push(...Settings.filePickerBlacklist);
      this.filePicker.regexBlacklist.push(...[Settings.exportOptions.customHeadOptions.sourcePath, Settings.exportOptions.faviconPath]);
      this.filePicker.regexWhitelist.push(...Settings.filePickerWhitelist);
      this.filePicker.generateWithItemsClosed = true;
      this.filePicker.showFileExtentionTags = true;
      this.filePicker.hideFileExtentionTags = ["md"];
      this.filePicker.title = lang.filePicker.title;
      this.filePicker.class = "file-picker";
      await this.filePicker.generate(scrollArea);
      if (((_b3 = (_a3 = this.pickedFiles) == null ? void 0 : _a3.length) != null ? _b3 : 0 > 0) || Settings.exportOptions.filesToExport.length > 0) {
        const filesToPick = (_d = (_c2 = this.pickedFiles) == null ? void 0 : _c2.map((file) => file.path)) != null ? _d : Settings.exportOptions.filesToExport;
        this.filePicker.setSelectedFiles(filesToPick);
      }
      const saveFiles = new import_obsidian10.Setting(this.filePickerModalEl).addButton((button) => {
        button.setButtonText(lang.filePicker.save).onClick(async () => {
          Settings.exportOptions.filesToExport = this.filePicker.getSelectedFilesSavePaths();
          await SettingsPage.saveSettings();
        });
      });
      saveFiles.settingEl.style.border = "none";
      saveFiles.settingEl.style.marginRight = "1em";
    }
    const { contentEl } = this;
    contentEl.empty();
    this.titleEl.setText(_ExportModal.title);
    if (HTMLExportPlugin.updateInfo.updateAvailable) {
      const updateNotice = contentEl.createEl("strong", { text: `${i18n.updateAvailable}: ${HTMLExportPlugin.updateInfo.currentVersion} \u27F6 ${HTMLExportPlugin.updateInfo.latestVersion}` });
      updateNotice.setAttribute("style", `margin-block-start: calc(var(--h3-size)/2);
			background-color: var(--interactive-normal);
			padding: 4px;
			padding-left: 1em;
			padding-right: 1em;
			color: var(--color-red);
			border-radius: 5px;
			display: block;
			width: fit-content;`);
      const updateNotes = contentEl.createEl("div", { text: HTMLExportPlugin.updateInfo.updateNote });
      updateNotes.setAttribute("style", `margin-block-start: calc(var(--h3-size)/2);
			background-color: var(--background-secondary-alt);
			padding: 4px;
			padding-left: 1em;
			padding-right: 1em;
			color: var(--text-normal);
			font-size: var(--font-ui-smaller);
			border-radius: 5px;
			display: block;
			width: fit-content;
			white-space: pre-wrap;`);
    }
    const modeDescriptions = {
      "online": lang.exportMode.online,
      "local": lang.exportMode.local,
      "raw-documents": lang.exportMode.rawDocuments
    };
    const exportModeSetting = new import_obsidian10.Setting(contentEl).setName(lang.exportMode.title).setDesc(modeDescriptions[Settings.exportPreset]).setHeading().addDropdown((dropdown) => dropdown.addOption("online", "Online Website").addOption("local", "Local Website").addOption("raw-documents", "Raw HTML Documents").setValue(["online", "local", "raw-documents"].contains(Settings.exportPreset) ? Settings.exportPreset : "website").onChange(async (value) => {
      Settings.exportPreset = value;
      switch (value) {
        case "online":
          await Settings.onlinePreset();
          break;
        case "local":
          await Settings.localPreset();
          break;
        case "raw-documents":
          await Settings.rawDocumentsPreset();
          break;
      }
      this.open();
    }));
    exportModeSetting.descEl.style.whiteSpace = "pre-wrap";
    exportModeSetting.settingEl.style.paddingRight = "1em";
    new import_obsidian10.Setting(contentEl).addButton((button) => button.setButtonText(lang.purgeExport.clearCache).onClick(async () => {
      const confirmModal = new import_obsidian10.Modal(app);
      confirmModal.titleEl.setText(lang.purgeExport.confirmation);
      let warning = confirmModal.contentEl.createEl("p", { text: lang.purgeExport.clearWarning });
      warning.style.whiteSpace = "pre-wrap";
      confirmModal.open();
      new import_obsidian10.Setting(confirmModal.contentEl).addButton((button2) => button2.setButtonText(i18n.cancel).onClick(() => confirmModal.close())).addButton((button2) => button2.setButtonText(lang.purgeExport.clearCache).onClick(async () => {
        const path = new Path(exportPathInput.textInput.getValue());
        const website = await new Website(path).load();
        await website.index.clearCache();
        onChanged(path);
        confirmModal.close();
      }));
    })).setDesc(lang.purgeExport.description);
    createToggle(contentEl, lang.openAfterExport, () => Settings.openAfterExport, (value) => Settings.openAfterExport = value);
    let exportButton = void 0;
    function setExportDisabled(disabled) {
      if (exportButton) {
        exportButton.setDisabled(disabled);
        if (exportButton.disabled)
          exportButton.buttonEl.style.opacity = "0.5";
        else
          exportButton.buttonEl.style.opacity = "1";
      }
    }
    const validatePath = (path) => path.validate({
      allowEmpty: false,
      allowRelative: false,
      allowAbsolute: true,
      allowDirectories: true,
      allowTildeHomeDirectory: true,
      requireExists: true
    });
    const onChangedValidate = (path) => !validatePath(path).valid ? setExportDisabled(true) : setExportDisabled(false);
    const onChanged = async (path) => {
      var _a4;
      onChangedValidate(path);
      const valid = validatePath(path);
      this.validPath = valid.valid;
      if (!valid) {
        exportDescription.setText("");
        return;
      }
      const website = new Website(path);
      const index = new Index();
      await index.load(website, website.exportOptions);
      if (!index.oldWebsiteData) {
        exportDescription.setText(lang.currentSite.noSite);
        return;
      }
      if (index.oldWebsiteData.pluginVersion != HTMLExportPlugin.pluginVersion) {
        exportDescription.setText(lang.currentSite.oldSite);
        return;
      }
      const lastExportDate = new Date(index.oldWebsiteData.modifiedTime).toLocaleString();
      const lastExportFiles = (_a4 = index.oldWebsiteData.allFiles) == null ? void 0 : _a4.length;
      const lastExportName = index.oldWebsiteData.siteName;
      exportDescription.setText(`${lang.currentSite.pathContainsSite}: "${lastExportName}"
${lang.currentSite.fileCount}: ${lastExportFiles}
${lang.currentSite.lastExported}: ${lastExportDate}`);
      exportDescription.style.whiteSpace = "pre-wrap";
    };
    const exportPathInput = createFileInput(contentEl, () => Settings.exportOptions.exportPath, (value) => Settings.exportOptions.exportPath = value, {
      name: "",
      description: "",
      placeholder: i18n.pathInputPlaceholder,
      defaultPath: FileDialogs.idealDefaultPath(),
      pickFolder: true,
      validation: validatePath,
      onChanged
    });
    const { fileInput } = exportPathInput;
    fileInput.addButton((button) => {
      exportButton = button;
      setExportDisabled(!this.validPath);
      button.setButtonText(lang.exportButton).onClick(async () => {
        this.canceled = false;
        this.close();
      });
    });
    const exportDescription = contentEl.createEl("div", { text: "Loading site at path...", cls: "setting-item-description" });
    exportDescription.style.marginBottom = "1em";
    onChanged(new Path(exportPathInput.textInput.getValue()));
    this.filePickerModalEl.style.height = this.modalEl.clientHeight * 2 + "px";
    new import_obsidian10.Setting(contentEl).setDesc(lang.moreOptions).addExtraButton((button) => button.setTooltip("Open plugin settings").onClick(() => {
      app.setting.open();
      app.setting.openTabById("webpage-html-export");
    }));
    await Utils.waitUntil(() => this.isClosed, 60 * 60 * 1e3, 10);
    this.pickedFiles = this.filePicker.getSelectedFiles();
    this.filePickerModalEl.remove();
    this.exportInfo = { canceled: this.canceled, pickedFiles: this.pickedFiles, exportPath: new Path(Settings.exportOptions.exportPath), validPath: this.validPath };
    return this.exportInfo;
  }
  onClose() {
    const { contentEl } = this;
    contentEl.empty();
    this.isClosed = true;
    _ExportModal.title = i18n.exportModal.title;
  }
};
var ExportModal = _ExportModal;
ExportModal.title = i18n.exportModal.title;

// src/plugin/exporter.ts
var HTMLExporter = class {
  static async updateSettings(usePreviousSettings = false, overrideFiles = void 0, overrideExportPath = void 0) {
    if (!usePreviousSettings) {
      const modal = new ExportModal();
      if (overrideFiles)
        modal.overridePickedFiles(overrideFiles);
      return await modal.open();
    }
    const files = Settings.exportOptions.filesToExport[0];
    const path = overrideExportPath != null ? overrideExportPath : new Path(Settings.exportOptions.exportPath);
    if (files.length == 0 && overrideFiles == void 0 || !path.exists || !path.isAbsolute || !path.isDirectory) {
      new import_obsidian11.Notice("Please set the export path and files to export in the settings first.", 5e3);
      const modal = new ExportModal();
      if (overrideFiles)
        modal.overridePickedFiles(overrideFiles);
      return await modal.open();
    }
    return void 0;
  }
  static async export(usePreviousSettings = true, overrideFiles = void 0, overrideExportPath = void 0) {
    var _a3, _b3, _c2;
    const info = await this.updateSettings(usePreviousSettings, overrideFiles, overrideExportPath);
    if (!info && !usePreviousSettings || info && info.canceled)
      return;
    const files = (_b3 = (_a3 = info == null ? void 0 : info.pickedFiles) != null ? _a3 : overrideFiles) != null ? _b3 : Settings.getFilesToExport();
    const exportPath = (_c2 = overrideExportPath != null ? overrideExportPath : info == null ? void 0 : info.exportPath) != null ? _c2 : new Path(Settings.exportOptions.exportPath);
    const website = await HTMLExporter.exportFiles(files, exportPath, true, Settings.deleteOldFiles);
    if (!website)
      return;
    if (Settings.openAfterExport)
      Utils.openPath(exportPath);
    new import_obsidian11.Notice("\u2705 Finished HTML Export:\n\n" + exportPath, 5e3);
  }
  static async exportFiles(files, destination, saveFiles, deleteOld) {
    MarkdownRendererAPI.beginBatch();
    let website = void 0;
    try {
      website = await (await new Website(destination).load(files)).build();
      if (!website) {
        new import_obsidian11.Notice("\u274C Export Cancelled", 5e3);
        return;
      }
      if (deleteOld) {
        let i = 0;
        ExportLog.addToProgressCap(website.index.deletedFiles.length / 2);
        for (const dFile of website.index.deletedFiles) {
          const path = new Path(dFile, destination.path);
          if (path.extension == "woff" || path.extension == "woff2" || path.extension == "ttf" || path.extension == "otf") {
            ExportLog.progress(0.5, "Deleting Old Files", "Skipping: " + path.path, "var(--color-yellow)");
            continue;
          }
          await path.delete();
          ExportLog.progress(0.5, "Deleting Old Files", "Deleting: " + path.path, "var(--color-red)");
          i++;
        }
        ;
        await Path.removeEmptyDirectories(destination.path);
      }
      if (saveFiles) {
        if (Settings.exportOptions.combineAsSingleFile) {
          await website.saveAsCombinedHTML();
        } else {
          await Utils.downloadAttachments(website.index.newFiles.filter((f) => !(f instanceof Webpage)));
          await Utils.downloadAttachments(website.index.updatedFiles.filter((f) => !(f instanceof Webpage)));
          if (Settings.exportPreset != "raw-documents" /* RawDocuments */) {
            await Utils.downloadAttachments([website.index.websiteDataAttachment()]);
            await Utils.downloadAttachments([website.index.indexDataAttachment()]);
          }
        }
      }
    } catch (e) {
      new import_obsidian11.Notice("\u274C Export Failed: " + e, 5e3);
      ExportLog.error(e, "Export Failed", true);
    }
    MarkdownRendererAPI.endBatch();
    return website;
  }
  static async exportFolder(folder, rootExportPath, saveFiles, clearDirectory) {
    const folderPath = new Path(folder.path);
    const allFiles = app.vault.getFiles();
    const files = allFiles.filter((file) => new Path(file.path).directory.path.startsWith(folderPath.path));
    return await this.exportFiles(files, rootExportPath, saveFiles, clearDirectory);
  }
  static async exportVault(rootExportPath, saveFiles, clearDirectory) {
    const files = app.vault.getFiles();
    return await this.exportFiles(files, rootExportPath, saveFiles, clearDirectory);
  }
};

// src/plugin/main.ts
var _HTMLExportPlugin = class extends import_obsidian12.Plugin {
  constructor() {
    super(...arguments);
    this.api = MarkdownRendererAPI;
    this.internalAPI = _MarkdownRendererInternal;
    this.settings = Settings;
    this.assetHandler = AssetHandler;
    this.Path = Path;
    this.dv = DataviewRenderer;
    this.Website = Website;
  }
  async exportDocker() {
    await HTMLExporter.export(true, void 0, new Path("/output"));
  }
  async onload() {
    console.log("Loading webpage-html-export plugin");
    this.checkForUpdates();
    _HTMLExportPlugin.pluginVersion = this.manifest.version;
    window.WebpageHTMLExport = this;
    this.addSettingTab(new SettingsPage(this));
    await SettingsPage.loadSettings();
    await AssetHandler.initialize();
    this.addRibbonIcon("folder-up", i18n.exportAsHTML, () => {
      HTMLExporter.export(false);
    });
    this.registerEvent(this.app.vault.on("rename", SettingsPage.renameFile));
    this.addCommand({
      id: "export-html-vault",
      name: "Export using previous settings",
      callback: () => {
        HTMLExporter.export(true);
      }
    });
    this.addCommand({
      id: "export-html-current",
      name: "Export only current file using previous settings",
      callback: () => {
        const file = this.app.workspace.getActiveFile();
        if (!file) {
          new import_obsidian12.Notice("No file is currently open!", 5e3);
          return;
        }
        HTMLExporter.export(true, [file]);
      }
    });
    this.addCommand({
      id: "export-html-setting",
      name: "Set html export settings",
      callback: () => {
        HTMLExporter.export(false);
      }
    });
    this.registerEvent(this.app.workspace.on("file-menu", (menu, file) => {
      menu.addItem((item) => {
        item.setTitle(i18n.exportAsHTML).setIcon("download").setSection("export").onClick(() => {
          ExportModal.title = i18n.exportModal.exportAsTitle.format(file.name);
          if (file instanceof import_obsidian12.TFile) {
            HTMLExporter.export(false, [file]);
          } else if (file instanceof import_obsidian12.TFolder) {
            const filesInFolder = this.app.vault.getFiles().filter((f) => new Path(f.path).directory.path.startsWith(file.path));
            HTMLExporter.export(false, filesInFolder);
          } else {
            ExportLog.error("File is not a TFile or TFolder! Invalid type: " + typeof file);
            new import_obsidian12.Notice("File is not a File or Folder! Invalid type: " + typeof file, 5e3);
          }
        });
      });
    }));
  }
  async checkForUpdates() {
    var _a3, _b3;
    const currentVersion = this.manifest.version;
    try {
      let url = "https://raw.githubusercontent.com/KosmosisDire/obsidian-webpage-export/master/manifest.json?cache=" + Date.now();
      if (this.manifest.version.endsWith("b"))
        url = "https://raw.githubusercontent.com/KosmosisDire/obsidian-webpage-export/master/manifest-beta.json?cache=" + Date.now();
      const manifestResp = await (0, import_obsidian12.requestUrl)(url);
      if (manifestResp.status != 200)
        throw new Error("Could not fetch manifest");
      const manifest = manifestResp.json;
      const latestVersion = (_a3 = manifest.version) != null ? _a3 : currentVersion;
      const updateAvailable = currentVersion < latestVersion;
      const updateNote = (_b3 = manifest.updateNote) != null ? _b3 : "";
      _HTMLExportPlugin.updateInfo = {
        updateAvailable,
        latestVersion,
        currentVersion,
        updateNote
      };
      if (updateAvailable)
        ExportLog.log(`${i18n.updateAvailable}: ${currentVersion} \u27F6 ${latestVersion}`);
      return _HTMLExportPlugin.updateInfo;
    } catch (e) {
      ExportLog.log("Could not check for update");
      _HTMLExportPlugin.updateInfo = {
        updateAvailable: false,
        latestVersion: currentVersion,
        currentVersion,
        updateNote: ""
      };
      return _HTMLExportPlugin.updateInfo;
    }
  }
  onunload() {
    ExportLog.log("unloading webpage-html-export plugin");
  }
};
var HTMLExportPlugin = _HTMLExportPlugin;
HTMLExportPlugin.updateInfo = {
  updateAvailable: false,
  latestVersion: "0",
  currentVersion: "0",
  updateNote: ""
};
HTMLExportPlugin.pluginVersion = "0.0.0";
/*!
 * HTML Parser By John Resig (ejohn.org)
 * Modified by Juriy "kangax" Zaytsev
 * Original code by Erik Arvidsson, Mozilla Public License
 * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
 */
/*!
 * mime-db
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */
/*!
 * mime-types
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */

/* nosourcemap */