{"version":3,"file":"index.cjs","sources":["../node_modules/ids/dist/index.esm.js","../node_modules/min-dash/dist/index.esm.js","../node_modules/big.js/big.mjs","../node_modules/classnames/index.js","../node_modules/preact/dist/preact.module.js","../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/preact/hooks/dist/hooks.module.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/eq.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/isArray.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/isLength.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/keys.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/isEqual.js","../node_modules/flatpickr/dist/esm/types/options.js","../node_modules/flatpickr/dist/esm/l10n/default.js","../node_modules/flatpickr/dist/esm/utils/index.js","../node_modules/flatpickr/dist/esm/utils/dom.js","../node_modules/flatpickr/dist/esm/utils/formatting.js","../node_modules/flatpickr/dist/esm/utils/dates.js","../node_modules/flatpickr/dist/esm/utils/polyfills.js","../node_modules/flatpickr/dist/esm/index.js","../node_modules/preact/compat/dist/compat.module.js","../node_modules/dompurify/dist/purify.js","../node_modules/lodash/lodash.js","../node_modules/didi/dist/index.js","../node_modules/luxon/src/errors.js","../node_modules/luxon/src/impl/formats.js","../node_modules/luxon/src/zone.js","../node_modules/luxon/src/zones/systemZone.js","../node_modules/luxon/src/zones/IANAZone.js","../node_modules/luxon/src/impl/locale.js","../node_modules/luxon/src/impl/english.js","../node_modules/luxon/src/zones/fixedOffsetZone.js","../node_modules/luxon/src/zones/invalidZone.js","../node_modules/luxon/src/impl/zoneUtil.js","../node_modules/luxon/src/impl/util.js","../node_modules/luxon/src/settings.js","../node_modules/luxon/src/impl/invalid.js","../node_modules/luxon/src/impl/conversions.js","../node_modules/luxon/src/impl/formatter.js","../node_modules/luxon/src/impl/regexParser.js","../node_modules/luxon/src/duration.js","../node_modules/luxon/src/interval.js","../node_modules/luxon/src/info.js","../node_modules/luxon/src/impl/diff.js","../node_modules/luxon/src/impl/digits.js","../node_modules/luxon/src/impl/tokenParser.js","../node_modules/luxon/src/datetime.js","../node_modules/@lezer/common/dist/index.js","../node_modules/@lezer/lr/dist/index.js","../node_modules/@lezer/highlight/dist/index.js","../node_modules/lezer-feel/dist/index.js","../node_modules/feelin/dist/index.esm.js","../node_modules/@codemirror/state/dist/index.js","../node_modules/style-mod/src/style-mod.js","../node_modules/w3c-keyname/index.js","../node_modules/@codemirror/view/dist/index.js","../node_modules/@codemirror/language/dist/index.js","../node_modules/@codemirror/autocomplete/dist/index.js","../node_modules/@codemirror/commands/dist/index.js","../node_modules/crelt/index.js","../node_modules/@codemirror/lint/dist/index.js","../node_modules/@lezer/markdown/dist/index.js","../node_modules/@bpmn-io/feel-lint/dist/index.esm.js","../node_modules/@bpmn-io/cm-theme/dist/index.es.js","../node_modules/feelers/dist/index.mjs","../node_modules/marked/lib/marked.esm.js","../node_modules/@bpmn-io/form-js-viewer/dist/index.es.js","../node_modules/@bpmn-io/draggle/dist/draggle.js","../node_modules/min-dom/dist/index.esm.js","../node_modules/array-move/index.js","../node_modules/lang-feel/dist/index.js","../node_modules/@bpmn-io/feel-editor/dist/index.es.js","../node_modules/tabbable/dist/index.esm.js","../node_modules/focus-trap/dist/focus-trap.esm.js","../node_modules/@bpmn-io/form-js-editor/dist/index.es.js","../node_modules/htm/dist/htm.module.js","../node_modules/htm/preact/index.module.js","../src/custom/components/range/index.js","../src/assets/js/bundle.js","../src/custom/components/plotter/index.js","../src/custom/components/index.js","../node_modules/@bpmn-io/properties-panel/dist/index.esm.js","../src/custom/properties-panel/range/index.js","../src/custom/properties-panel/plotter/index.js","../src/custom/properties-panel/dictionary-attributes/index.js","../src/custom/properties-panel/index.js","../src/form-js/base-form.js","../src/form-js/form-editor.js","../src/form-js/form-viewer.js"],"sourcesContent":["function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar hat_1 = createCommonjsModule(function (module) {\nvar hat = module.exports = function (bits, base) {\n    if (!base) base = 16;\n    if (bits === undefined) bits = 128;\n    if (bits <= 0) return '0';\n    \n    var digits = Math.log(Math.pow(2, bits)) / Math.log(base);\n    for (var i = 2; digits === Infinity; i *= 2) {\n        digits = Math.log(Math.pow(2, bits / i)) / Math.log(base) * i;\n    }\n    \n    var rem = digits - Math.floor(digits);\n    \n    var res = '';\n    \n    for (var i = 0; i < Math.floor(digits); i++) {\n        var x = Math.floor(Math.random() * base).toString(base);\n        res = x + res;\n    }\n    \n    if (rem) {\n        var b = Math.pow(base, rem);\n        var x = Math.floor(Math.random() * b).toString(base);\n        res = x + res;\n    }\n    \n    var parsed = parseInt(res, base);\n    if (parsed !== Infinity && parsed >= Math.pow(2, bits)) {\n        return hat(bits, base)\n    }\n    else return res;\n};\n\nhat.rack = function (bits, base, expandBy) {\n    var fn = function (data) {\n        var iters = 0;\n        do {\n            if (iters ++ > 10) {\n                if (expandBy) bits += expandBy;\n                else throw new Error('too many ID collisions, use more bits')\n            }\n            \n            var id = hat(bits, base);\n        } while (Object.hasOwnProperty.call(hats, id));\n        \n        hats[id] = data;\n        return id;\n    };\n    var hats = fn.hats = {};\n    \n    fn.get = function (id) {\n        return fn.hats[id];\n    };\n    \n    fn.set = function (id, value) {\n        fn.hats[id] = value;\n        return fn;\n    };\n    \n    fn.bits = bits || 128;\n    fn.base = base || 16;\n    return fn;\n};\n});\n\n/**\n * Create a new id generator / cache instance.\n *\n * You may optionally provide a seed that is used internally.\n *\n * @param {Seed} seed\n */\nfunction Ids(seed) {\n  if (!(this instanceof Ids)) {\n    return new Ids(seed);\n  }\n  seed = seed || [128, 36, 1];\n  this._seed = seed.length ? hat_1.rack(seed[0], seed[1], seed[2]) : seed;\n}\n\n/**\n * Generate a next id.\n *\n * @param {Object} [element] element to bind the id to\n *\n * @return {String} id\n */\nIds.prototype.next = function (element) {\n  return this._seed(element || true);\n};\n\n/**\n * Generate a next id with a given prefix.\n *\n * @param {Object} [element] element to bind the id to\n *\n * @return {String} id\n */\nIds.prototype.nextPrefixed = function (prefix, element) {\n  var id;\n  do {\n    id = prefix + this.next(true);\n  } while (this.assigned(id));\n\n  // claim {prefix}{random}\n  this.claim(id, element);\n\n  // return\n  return id;\n};\n\n/**\n * Manually claim an existing id.\n *\n * @param {String} id\n * @param {String} [element] element the id is claimed by\n */\nIds.prototype.claim = function (id, element) {\n  this._seed.set(id, element || true);\n};\n\n/**\n * Returns true if the given id has already been assigned.\n *\n * @param  {String} id\n * @return {Boolean}\n */\nIds.prototype.assigned = function (id) {\n  return this._seed.get(id) || false;\n};\n\n/**\n * Unclaim an id.\n *\n * @param  {String} id the id to unclaim\n */\nIds.prototype.unclaim = function (id) {\n  delete this._seed.hats[id];\n};\n\n/**\n * Clear all claimed ids.\n */\nIds.prototype.clear = function () {\n  var hats = this._seed.hats,\n    id;\n  for (id in hats) {\n    this.unclaim(id);\n  }\n};\n\nexport default Ids;\n//# sourceMappingURL=index.esm.js.map\n","/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\nfunction flatten(arr) {\n  return Array.prototype.concat.apply([], arr);\n}\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n  return obj === undefined;\n}\n\nfunction isDefined(obj) {\n  return obj !== undefined;\n}\n\nfunction isNil(obj) {\n  return obj == null;\n}\n\nfunction isArray(obj) {\n  return nativeToString.call(obj) === '[object Array]';\n}\n\nfunction isObject(obj) {\n  return nativeToString.call(obj) === '[object Object]';\n}\n\nfunction isNumber(obj) {\n  return nativeToString.call(obj) === '[object Number]';\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isFunction(obj) {\n  const tag = nativeToString.call(obj);\n\n  return (\n    tag === '[object Function]' ||\n    tag === '[object AsyncFunction]' ||\n    tag === '[object GeneratorFunction]' ||\n    tag === '[object AsyncGeneratorFunction]' ||\n    tag === '[object Proxy]'\n  );\n}\n\nfunction isString(obj) {\n  return nativeToString.call(obj) === '[object String]';\n}\n\n\n/**\n * Ensure collection is an array.\n *\n * @param {Object} obj\n */\nfunction ensureArray(obj) {\n\n  if (isArray(obj)) {\n    return;\n  }\n\n  throw new Error('must supply array');\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n  return nativeHasOwnProperty.call(target, key);\n}\n\n/**\n * @template T\n * @typedef { (\n *   ((e: T) => boolean) |\n *   ((e: T, idx: number) => boolean) |\n *   ((e: T, key: string) => boolean) |\n *   string |\n *   number\n * ) } Matcher\n */\n\n/**\n * @template T\n * @template U\n *\n * @typedef { (\n *   ((e: T) => U) | string | number\n * ) } Extractor\n */\n\n\n/**\n * @template T\n * @typedef { (val: T, key: any) => boolean } MatchFn\n */\n\n/**\n * @template T\n * @typedef { T[] } ArrayCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: string]: T } } StringKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: number]: T } } NumberKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { StringKeyValueCollection<T> | NumberKeyValueCollection<T> } KeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { KeyValueCollection<T> | ArrayCollection<T> } Collection\n */\n\n/**\n * Find element in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {Object}\n */\nfunction find(collection, matcher) {\n\n  const matchFn = toMatcher(matcher);\n\n  let match;\n\n  forEach(collection, function(val, key) {\n    if (matchFn(val, key)) {\n      match = val;\n\n      return false;\n    }\n  });\n\n  return match;\n\n}\n\n\n/**\n * Find element index in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {number}\n */\nfunction findIndex(collection, matcher) {\n\n  const matchFn = toMatcher(matcher);\n\n  let idx = isArray(collection) ? -1 : undefined;\n\n  forEach(collection, function(val, key) {\n    if (matchFn(val, key)) {\n      idx = key;\n\n      return false;\n    }\n  });\n\n  return idx;\n}\n\n\n/**\n * Filter elements in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {T[]} result\n */\nfunction filter(collection, matcher) {\n\n  const matchFn = toMatcher(matcher);\n\n  let result = [];\n\n  forEach(collection, function(val, key) {\n    if (matchFn(val, key)) {\n      result.push(val);\n    }\n  });\n\n  return result;\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n  let val,\n      result;\n\n  if (isUndefined(collection)) {\n    return;\n  }\n\n  const convertKey = isArray(collection) ? toNum : identity;\n\n  for (let key in collection) {\n\n    if (has(collection, key)) {\n      val = collection[key];\n\n      result = iterator(val, convertKey(key));\n\n      if (result === false) {\n        return val;\n      }\n    }\n  }\n}\n\n/**\n * Return collection without element.\n *\n * @template T\n * @param {ArrayCollection<T>} arr\n * @param {Matcher<T>} matcher\n *\n * @return {T[]}\n */\nfunction without(arr, matcher) {\n\n  if (isUndefined(arr)) {\n    return [];\n  }\n\n  ensureArray(arr);\n\n  const matchFn = toMatcher(matcher);\n\n  return arr.filter(function(el, idx) {\n    return !matchFn(el, idx);\n  });\n\n}\n\n\n/**\n * Reduce collection, returning a single result.\n *\n * @template T\n * @template V\n *\n * @param {Collection<T>} collection\n * @param {(result: V, entry: T, index: any) => V} iterator\n * @param {V} result\n *\n * @return {V} result returned from last iterator\n */\nfunction reduce(collection, iterator, result) {\n\n  forEach(collection, function(value, idx) {\n    result = iterator(result, value, idx);\n  });\n\n  return result;\n}\n\n\n/**\n * Return true if every element in the collection\n * matches the criteria.\n *\n * @param  {Object|Array} collection\n * @param  {Function} matcher\n *\n * @return {Boolean}\n */\nfunction every(collection, matcher) {\n\n  return !!reduce(collection, function(matches, val, key) {\n    return matches && matcher(val, key);\n  }, true);\n}\n\n\n/**\n * Return true if some elements in the collection\n * match the criteria.\n *\n * @param  {Object|Array} collection\n * @param  {Function} matcher\n *\n * @return {Boolean}\n */\nfunction some(collection, matcher) {\n\n  return !!find(collection, matcher);\n}\n\n\n/**\n * Transform a collection into another collection\n * by piping each member through the given fn.\n *\n * @param  {Object|Array}   collection\n * @param  {Function} fn\n *\n * @return {Array} transformed collection\n */\nfunction map(collection, fn) {\n\n  let result = [];\n\n  forEach(collection, function(val, key) {\n    result.push(fn(val, key));\n  });\n\n  return result;\n}\n\n\n/**\n * Get the collections keys.\n *\n * @param  {Object|Array} collection\n *\n * @return {Array}\n */\nfunction keys(collection) {\n  return collection && Object.keys(collection) || [];\n}\n\n\n/**\n * Shorthand for `keys(o).length`.\n *\n * @param  {Object|Array} collection\n *\n * @return {Number}\n */\nfunction size(collection) {\n  return keys(collection).length;\n}\n\n\n/**\n * Get the values in the collection.\n *\n * @param  {Object|Array} collection\n *\n * @return {Array}\n */\nfunction values(collection) {\n  return map(collection, (val) => val);\n}\n\n\n/**\n * Group collection members by attribute.\n *\n * @param {Object|Array} collection\n * @param {Extractor} extractor\n *\n * @return {Object} map with { attrValue => [ a, b, c ] }\n */\nfunction groupBy(collection, extractor, grouped = {}) {\n\n  extractor = toExtractor(extractor);\n\n  forEach(collection, function(val) {\n    let discriminator = extractor(val) || '_';\n\n    let group = grouped[discriminator];\n\n    if (!group) {\n      group = grouped[discriminator] = [];\n    }\n\n    group.push(val);\n  });\n\n  return grouped;\n}\n\n\nfunction uniqueBy(extractor, ...collections) {\n\n  extractor = toExtractor(extractor);\n\n  let grouped = {};\n\n  forEach(collections, (c) => groupBy(c, extractor, grouped));\n\n  let result = map(grouped, function(val, key) {\n    return val[0];\n  });\n\n  return result;\n}\n\n\nconst unionBy = uniqueBy;\n\n\n\n/**\n * Sort collection by criteria.\n *\n * @template T\n *\n * @param {Collection<T>} collection\n * @param {Extractor<T, number | string>} extractor\n *\n * @return {Array}\n */\nfunction sortBy(collection, extractor) {\n\n  extractor = toExtractor(extractor);\n\n  let sorted = [];\n\n  forEach(collection, function(value, key) {\n    let disc = extractor(value, key);\n\n    let entry = {\n      d: disc,\n      v: value\n    };\n\n    for (var idx = 0; idx < sorted.length; idx++) {\n      let { d } = sorted[idx];\n\n      if (disc < d) {\n        sorted.splice(idx, 0, entry);\n        return;\n      }\n    }\n\n    // not inserted, append (!)\n    sorted.push(entry);\n  });\n\n  return map(sorted, (e) => e.v);\n}\n\n\n/**\n * Create an object pattern matcher.\n *\n * @example\n *\n * ```javascript\n * const matcher = matchPattern({ id: 1 });\n *\n * let element = find(elements, matcher);\n * ```\n *\n * @template T\n *\n * @param {T} pattern\n *\n * @return { (el: any) =>  boolean } matcherFn\n */\nfunction matchPattern(pattern) {\n\n  return function(el) {\n\n    return every(pattern, function(val, key) {\n      return el[key] === val;\n    });\n\n  };\n}\n\n\n/**\n * @param {string | ((e: any) => any) } extractor\n *\n * @return { (e: any) => any }\n */\nfunction toExtractor(extractor) {\n\n  /**\n   * @satisfies { (e: any) => any }\n   */\n  return isFunction(extractor) ? extractor : (e) => {\n\n    // @ts-ignore: just works\n    return e[extractor];\n  };\n}\n\n\n/**\n * @template T\n * @param {Matcher<T>} matcher\n *\n * @return {MatchFn<T>}\n */\nfunction toMatcher(matcher) {\n  return isFunction(matcher) ? matcher : (e) => {\n    return e === matcher;\n  };\n}\n\n\nfunction identity(arg) {\n  return arg;\n}\n\nfunction toNum(arg) {\n  return Number(arg);\n}\n\n/* global setTimeout clearTimeout */\n\n/**\n * @typedef { {\n *   (...args: any[]): any;\n *   flush: () => void;\n *   cancel: () => void;\n * } } DebouncedFunction\n */\n\n/**\n * Debounce fn, calling it only once if the given time\n * elapsed between calls.\n *\n * Lodash-style the function exposes methods to `#clear`\n * and `#flush` to control internal behavior.\n *\n * @param  {Function} fn\n * @param  {Number} timeout\n *\n * @return {DebouncedFunction} debounced function\n */\nfunction debounce(fn, timeout) {\n\n  let timer;\n\n  let lastArgs;\n  let lastThis;\n\n  let lastNow;\n\n  function fire(force) {\n\n    let now = Date.now();\n\n    let scheduledDiff = force ? 0 : (lastNow + timeout) - now;\n\n    if (scheduledDiff > 0) {\n      return schedule(scheduledDiff);\n    }\n\n    fn.apply(lastThis, lastArgs);\n\n    clear();\n  }\n\n  function schedule(timeout) {\n    timer = setTimeout(fire, timeout);\n  }\n\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n    }\n\n    timer = lastNow = lastArgs = lastThis = undefined;\n  }\n\n  function flush() {\n    if (timer) {\n      fire(true);\n    }\n\n    clear();\n  }\n\n  /**\n   * @type { DebouncedFunction }\n   */\n  function callback(...args) {\n    lastNow = Date.now();\n\n    lastArgs = args;\n    lastThis = this;\n\n    // ensure an execution is scheduled\n    if (!timer) {\n      schedule(timeout);\n    }\n  }\n\n  callback.flush = flush;\n  callback.cancel = clear;\n\n  return callback;\n}\n\n/**\n * Throttle fn, calling at most once\n * in the given interval.\n *\n * @param  {Function} fn\n * @param  {Number} interval\n *\n * @return {Function} throttled function\n */\nfunction throttle(fn, interval) {\n  let throttling = false;\n\n  return function(...args) {\n\n    if (throttling) {\n      return;\n    }\n\n    fn(...args);\n    throttling = true;\n\n    setTimeout(() => {\n      throttling = false;\n    }, interval);\n  };\n}\n\n/**\n * Bind function against target <this>.\n *\n * @param  {Function} fn\n * @param  {Object}   target\n *\n * @return {Function} bound function\n */\nfunction bind(fn, target) {\n  return fn.bind(target);\n}\n\n/**\n * Convenience wrapper for `Object.assign`.\n *\n * @param {Object} target\n * @param {...Object} others\n *\n * @return {Object} the target\n */\nfunction assign(target, ...others) {\n  return Object.assign(target, ...others);\n}\n\n/**\n * Sets a nested property of a given object to the specified value.\n *\n * This mutates the object and returns it.\n *\n * @template T\n *\n * @param {T} target The target of the set operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} value The value to set.\n *\n * @return {T}\n */\nfunction set(target, path, value) {\n\n  let currentTarget = target;\n\n  forEach(path, function(key, idx) {\n\n    if (typeof key !== 'number' && typeof key !== 'string') {\n      throw new Error('illegal key type: ' + typeof key + '. Key should be of type number or string.');\n    }\n\n    if (key === 'constructor') {\n      throw new Error('illegal key: constructor');\n    }\n\n    if (key === '__proto__') {\n      throw new Error('illegal key: __proto__');\n    }\n\n    let nextKey = path[idx + 1];\n    let nextTarget = currentTarget[key];\n\n    if (isDefined(nextKey) && isNil(nextTarget)) {\n      nextTarget = currentTarget[key] = isNaN(+nextKey) ? {} : [];\n    }\n\n    if (isUndefined(nextKey)) {\n      if (isUndefined(value)) {\n        delete currentTarget[key];\n      } else {\n        currentTarget[key] = value;\n      }\n    } else {\n      currentTarget = nextTarget;\n    }\n  });\n\n  return target;\n}\n\n\n/**\n * Gets a nested property of a given object.\n *\n * @param {Object} target The target of the get operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} [defaultValue] The value to return if no value exists.\n *\n * @return {any}\n */\nfunction get(target, path, defaultValue) {\n\n  let currentTarget = target;\n\n  forEach(path, function(key) {\n\n    // accessing nil property yields <undefined>\n    if (isNil(currentTarget)) {\n      currentTarget = undefined;\n\n      return false;\n    }\n\n    currentTarget = currentTarget[key];\n  });\n\n  return isUndefined(currentTarget) ? defaultValue : currentTarget;\n}\n\n/**\n * Pick properties from the given target.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return Pick<T, V>\n */\nfunction pick(target, properties) {\n\n  let result = {};\n\n  let obj = Object(target);\n\n  forEach(properties, function(prop) {\n\n    if (prop in obj) {\n      result[prop] = target[prop];\n    }\n  });\n\n  return result;\n}\n\n/**\n * Pick all target properties, excluding the given ones.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return {Omit<T, V>} target\n */\nfunction omit(target, properties) {\n\n  let result = {};\n\n  let obj = Object(target);\n\n  forEach(obj, function(prop, key) {\n\n    if (properties.indexOf(key) === -1) {\n      result[key] = prop;\n    }\n  });\n\n  return result;\n}\n\n/**\n * Recursively merge `...sources` into given target.\n *\n * Does support merging objects; does not support merging arrays.\n *\n * @param {Object} target\n * @param {...Object} sources\n *\n * @return {Object} the target\n */\nfunction merge(target, ...sources) {\n\n  if (!sources.length) {\n    return target;\n  }\n\n  forEach(sources, function(source) {\n\n    // skip non-obj sources, i.e. null\n    if (!source || !isObject(source)) {\n      return;\n    }\n\n    forEach(source, function(sourceVal, key) {\n\n      if (key === '__proto__') {\n        return;\n      }\n\n      let targetVal = target[key];\n\n      if (isObject(sourceVal)) {\n\n        if (!isObject(targetVal)) {\n\n          // override target[key] with object\n          targetVal = {};\n        }\n\n        target[key] = merge(targetVal, sourceVal);\n      } else {\n        target[key] = sourceVal;\n      }\n\n    });\n  });\n\n  return target;\n}\n\nexport { assign, bind, debounce, ensureArray, every, filter, find, findIndex, flatten, forEach, get, groupBy, has, isArray, isDefined, isFunction, isNil, isNumber, isObject, isString, isUndefined, keys, map, matchPattern, merge, omit, pick, reduce, set, size, some, sortBy, throttle, unionBy, uniqueBy, values, without };\n","/*\r\n *  big.js v6.2.1\r\n *  A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n *  Copyright (c) 2022 Michael Mclaughlin\r\n *  https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n  // The default values below must be integers within the stated ranges.\r\n\r\n  /*\r\n   * The maximum number of decimal places (DP) of the results of operations involving division:\r\n   * div and sqrt, and pow with negative exponents.\r\n   */\r\nvar DP = 20,          // 0 to MAX_DP\r\n\r\n  /*\r\n   * The rounding mode (RM) used when rounding to the above decimal places.\r\n   *\r\n   *  0  Towards zero (i.e. truncate, no rounding).       (ROUND_DOWN)\r\n   *  1  To nearest neighbour. If equidistant, round up.  (ROUND_HALF_UP)\r\n   *  2  To nearest neighbour. If equidistant, to even.   (ROUND_HALF_EVEN)\r\n   *  3  Away from zero.                                  (ROUND_UP)\r\n   */\r\n  RM = 1,             // 0, 1, 2 or 3\r\n\r\n  // The maximum value of DP and Big.DP.\r\n  MAX_DP = 1E6,       // 0 to 1000000\r\n\r\n  // The maximum magnitude of the exponent argument to the pow method.\r\n  MAX_POWER = 1E6,    // 1 to 1000000\r\n\r\n  /*\r\n   * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n   * (JavaScript numbers: -7)\r\n   * -1000000 is the minimum recommended exponent value of a Big.\r\n   */\r\n  NE = -7,            // 0 to -1000000\r\n\r\n  /*\r\n   * The positive exponent (PE) at and above which toString returns exponential notation.\r\n   * (JavaScript numbers: 21)\r\n   * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n   */\r\n  PE = 21,            // 0 to 1000000\r\n\r\n  /*\r\n   * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n   * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n   * primitive number without a loss of precision.\r\n   */\r\n  STRICT = false,     // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n  // Error messages.\r\n  NAME = '[big.js] ',\r\n  INVALID = NAME + 'Invalid ',\r\n  INVALID_DP = INVALID + 'decimal places',\r\n  INVALID_RM = INVALID + 'rounding mode',\r\n  DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n  // The shared prototype object.\r\n  P = {},\r\n  UNDEFINED = void 0,\r\n  NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n  /*\r\n   * The Big constructor and exported function.\r\n   * Create and return a new instance of a Big number object.\r\n   *\r\n   * n {number|string|Big} A numeric value.\r\n   */\r\n  function Big(n) {\r\n    var x = this;\r\n\r\n    // Enable constructor usage without new.\r\n    if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n    // Duplicate.\r\n    if (n instanceof Big) {\r\n      x.s = n.s;\r\n      x.e = n.e;\r\n      x.c = n.c.slice();\r\n    } else {\r\n      if (typeof n !== 'string') {\r\n        if (Big.strict === true && typeof n !== 'bigint') {\r\n          throw TypeError(INVALID + 'value');\r\n        }\r\n\r\n        // Minus zero?\r\n        n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n      }\r\n\r\n      parse(x, n);\r\n    }\r\n\r\n    // Retain a reference to this Big constructor.\r\n    // Shadow Big.prototype.constructor which points to Object.\r\n    x.constructor = Big;\r\n  }\r\n\r\n  Big.prototype = P;\r\n  Big.DP = DP;\r\n  Big.RM = RM;\r\n  Big.NE = NE;\r\n  Big.PE = PE;\r\n  Big.strict = STRICT;\r\n  Big.roundDown = 0;\r\n  Big.roundHalfUp = 1;\r\n  Big.roundHalfEven = 2;\r\n  Big.roundUp = 3;\r\n\r\n  return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n  var e, i, nl;\r\n\r\n  if (!NUMERIC.test(n)) {\r\n    throw Error(INVALID + 'number');\r\n  }\r\n\r\n  // Determine sign.\r\n  x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n  // Decimal point?\r\n  if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = n.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +n.slice(i + 1);\r\n    n = n.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = n.length;\r\n  }\r\n\r\n  nl = n.length;\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n  if (i == nl) {\r\n\r\n    // Zero.\r\n    x.c = [x.e = 0];\r\n  } else {\r\n\r\n    // Determine trailing zeros.\r\n    for (; nl > 0 && n.charAt(--nl) == '0';);\r\n    x.e = e - i - 1;\r\n    x.c = [];\r\n\r\n    // Convert string to array of digits without leading/trailing zeros.\r\n    for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n  var xc = x.c;\r\n\r\n  if (rm === UNDEFINED) rm = x.constructor.RM;\r\n  if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n    throw Error(INVALID_RM);\r\n  }\r\n\r\n  if (sd < 1) {\r\n    more =\r\n      rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n      rm === 1 && xc[0] >= 5 ||\r\n      rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n    );\r\n\r\n    xc.length = 1;\r\n\r\n    if (more) {\r\n\r\n      // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n      x.e = x.e - sd + 1;\r\n      xc[0] = 1;\r\n    } else {\r\n\r\n      // Zero.\r\n      xc[0] = x.e = 0;\r\n    }\r\n  } else if (sd < xc.length) {\r\n\r\n    // xc[sd] is the digit after the digit that may be rounded up.\r\n    more =\r\n      rm === 1 && xc[sd] >= 5 ||\r\n      rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n        (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n      rm === 3 && (more || !!xc[0]);\r\n\r\n    // Remove any digits after the required precision.\r\n    xc.length = sd;\r\n\r\n    // Round up?\r\n    if (more) {\r\n\r\n      // Rounding up may mean the previous digit has to be rounded up.\r\n      for (; ++xc[--sd] > 9;) {\r\n        xc[sd] = 0;\r\n        if (sd === 0) {\r\n          ++x.e;\r\n          xc.unshift(1);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (sd = xc.length; !xc[--sd];) xc.pop();\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n  var e = x.e,\r\n    s = x.c.join(''),\r\n    n = s.length;\r\n\r\n  // Exponential notation?\r\n  if (doExponential) {\r\n    s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n  // Normal notation.\r\n  } else if (e < 0) {\r\n    for (; ++e;) s = '0' + s;\r\n    s = '0.' + s;\r\n  } else if (e > 0) {\r\n    if (++e > n) {\r\n      for (e -= n; e--;) s += '0';\r\n    } else if (e < n) {\r\n      s = s.slice(0, e) + '.' + s.slice(e);\r\n    }\r\n  } else if (n > 1) {\r\n    s = s.charAt(0) + '.' + s.slice(1);\r\n  }\r\n\r\n  return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = 1;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n *       -1 if the value of this Big is less than the value of Big y, or\r\n *        0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n  var isneg,\r\n    x = this,\r\n    xc = x.c,\r\n    yc = (y = new x.constructor(y)).c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either zero?\r\n  if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  isneg = i < 0;\r\n\r\n  // Compare exponents.\r\n  if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = -1; ++i < j;) {\r\n    if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n  var x = this,\r\n    Big = x.constructor,\r\n    a = x.c,                  // dividend\r\n    b = (y = new Big(y)).c,   // divisor\r\n    k = x.s == y.s ? 1 : -1,\r\n    dp = Big.DP;\r\n\r\n  if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n    throw Error(INVALID_DP);\r\n  }\r\n\r\n  // Divisor is zero?\r\n  if (!b[0]) {\r\n    throw Error(DIV_BY_ZERO);\r\n  }\r\n\r\n  // Dividend is 0? Return +-0.\r\n  if (!a[0]) {\r\n    y.s = k;\r\n    y.c = [y.e = 0];\r\n    return y;\r\n  }\r\n\r\n  var bl, bt, n, cmp, ri,\r\n    bz = b.slice(),\r\n    ai = bl = b.length,\r\n    al = a.length,\r\n    r = a.slice(0, bl),   // remainder\r\n    rl = r.length,\r\n    q = y,                // quotient\r\n    qc = q.c = [],\r\n    qi = 0,\r\n    p = dp + (q.e = x.e - y.e) + 1;    // precision of the result\r\n\r\n  q.s = k;\r\n  k = p < 0 ? 0 : p;\r\n\r\n  // Create version of divisor with leading zero.\r\n  bz.unshift(0);\r\n\r\n  // Add zeros to make remainder as long as divisor.\r\n  for (; rl++ < bl;) r.push(0);\r\n\r\n  do {\r\n\r\n    // n is how many times the divisor goes into current remainder.\r\n    for (n = 0; n < 10; n++) {\r\n\r\n      // Compare divisor and remainder.\r\n      if (bl != (rl = r.length)) {\r\n        cmp = bl > rl ? 1 : -1;\r\n      } else {\r\n        for (ri = -1, cmp = 0; ++ri < bl;) {\r\n          if (b[ri] != r[ri]) {\r\n            cmp = b[ri] > r[ri] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // If divisor < remainder, subtract divisor from remainder.\r\n      if (cmp < 0) {\r\n\r\n        // Remainder can't be more than 1 digit longer than divisor.\r\n        // Equalise lengths using divisor with extra leading zero?\r\n        for (bt = rl == bl ? b : bz; rl;) {\r\n          if (r[--rl] < bt[rl]) {\r\n            ri = rl;\r\n            for (; ri && !r[--ri];) r[ri] = 9;\r\n            --r[ri];\r\n            r[rl] += 10;\r\n          }\r\n          r[rl] -= bt[rl];\r\n        }\r\n\r\n        for (; !r[0];) r.shift();\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    // Add the digit n to the result array.\r\n    qc[qi++] = cmp ? n : ++n;\r\n\r\n    // Update the remainder.\r\n    if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n    else r = [a[ai]];\r\n\r\n  } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n  // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n  if (!qc[0] && qi != 1) {\r\n\r\n    // There can't be more than one zero.\r\n    qc.shift();\r\n    q.e--;\r\n    p--;\r\n  }\r\n\r\n  // Round?\r\n  if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n  return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n  return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n  return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var i, j, t, xlty,\r\n    x = this,\r\n    Big = x.constructor,\r\n    a = x.s,\r\n    b = (y = new Big(y)).s;\r\n\r\n  // Signs differ?\r\n  if (a != b) {\r\n    y.s = -b;\r\n    return x.plus(y);\r\n  }\r\n\r\n  var xc = x.c.slice(),\r\n    xe = x.e,\r\n    yc = y.c,\r\n    ye = y.e;\r\n\r\n  // Either zero?\r\n  if (!xc[0] || !yc[0]) {\r\n    if (yc[0]) {\r\n      y.s = -b;\r\n    } else if (xc[0]) {\r\n      y = new Big(x);\r\n    } else {\r\n      y.s = 1;\r\n    }\r\n    return y;\r\n  }\r\n\r\n  // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n  if (a = xe - ye) {\r\n\r\n    if (xlty = a < 0) {\r\n      a = -a;\r\n      t = xc;\r\n    } else {\r\n      ye = xe;\r\n      t = yc;\r\n    }\r\n\r\n    t.reverse();\r\n    for (b = a; b--;) t.push(0);\r\n    t.reverse();\r\n  } else {\r\n\r\n    // Exponents equal. Check digit by digit.\r\n    j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n    for (a = b = 0; b < j; b++) {\r\n      if (xc[b] != yc[b]) {\r\n        xlty = xc[b] < yc[b];\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  // x < y? Point xc to the array of the bigger number.\r\n  if (xlty) {\r\n    t = xc;\r\n    xc = yc;\r\n    yc = t;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  /*\r\n   * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n   * needs to start at yc.length.\r\n   */\r\n  if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n  // Subtract yc from xc.\r\n  for (b = i; j > a;) {\r\n    if (xc[--j] < yc[j]) {\r\n      for (i = j; i && !xc[--i];) xc[i] = 9;\r\n      --xc[i];\r\n      xc[j] += 10;\r\n    }\r\n\r\n    xc[j] -= yc[j];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xc[--b] === 0;) xc.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xc[0] === 0;) {\r\n    xc.shift();\r\n    --ye;\r\n  }\r\n\r\n  if (!xc[0]) {\r\n\r\n    // n - n = +0\r\n    y.s = 1;\r\n\r\n    // Result must be zero.\r\n    xc = [ye = 0];\r\n  }\r\n\r\n  y.c = xc;\r\n  y.e = ye;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n  var ygtx,\r\n    x = this,\r\n    Big = x.constructor,\r\n    a = x.s,\r\n    b = (y = new Big(y)).s;\r\n\r\n  if (!y.c[0]) {\r\n    throw Error(DIV_BY_ZERO);\r\n  }\r\n\r\n  x.s = y.s = 1;\r\n  ygtx = y.cmp(x) == 1;\r\n  x.s = a;\r\n  y.s = b;\r\n\r\n  if (ygtx) return new Big(x);\r\n\r\n  a = Big.DP;\r\n  b = Big.RM;\r\n  Big.DP = Big.RM = 0;\r\n  x = x.div(y);\r\n  Big.DP = a;\r\n  Big.RM = b;\r\n\r\n  return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n  var e, k, t,\r\n    x = this,\r\n    Big = x.constructor;\r\n\r\n  y = new Big(y);\r\n\r\n  // Signs differ?\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.minus(y);\r\n  }\r\n\r\n  var xe = x.e,\r\n    xc = x.c,\r\n    ye = y.e,\r\n    yc = y.c;\r\n\r\n  // Either zero?\r\n  if (!xc[0] || !yc[0]) {\r\n    if (!yc[0]) {\r\n      if (xc[0]) {\r\n        y = new Big(x);\r\n      } else {\r\n        y.s = x.s;\r\n      }\r\n    }\r\n    return y;\r\n  }\r\n\r\n  xc = xc.slice();\r\n\r\n  // Prepend zeros to equalise exponents.\r\n  // Note: reverse faster than unshifts.\r\n  if (e = xe - ye) {\r\n    if (e > 0) {\r\n      ye = xe;\r\n      t = yc;\r\n    } else {\r\n      e = -e;\r\n      t = xc;\r\n    }\r\n\r\n    t.reverse();\r\n    for (; e--;) t.push(0);\r\n    t.reverse();\r\n  }\r\n\r\n  // Point xc to the longer array.\r\n  if (xc.length - yc.length < 0) {\r\n    t = yc;\r\n    yc = xc;\r\n    xc = t;\r\n  }\r\n\r\n  e = yc.length;\r\n\r\n  // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n  for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n  if (k) {\r\n    xc.unshift(k);\r\n    ++ye;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n  y.c = xc;\r\n  y.e = ye;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n  var x = this,\r\n    one = new x.constructor('1'),\r\n    y = one,\r\n    isneg = n < 0;\r\n\r\n  if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n    throw Error(INVALID + 'exponent');\r\n  }\r\n\r\n  if (isneg) n = -n;\r\n\r\n  for (;;) {\r\n    if (n & 1) y = y.times(x);\r\n    n >>= 1;\r\n    if (!n) break;\r\n    x = x.times(x);\r\n  }\r\n\r\n  return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n  if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n    throw Error(INVALID + 'precision');\r\n  }\r\n  return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n  if (dp === UNDEFINED) dp = 0;\r\n  else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n    throw Error(INVALID_DP);\r\n  }\r\n  return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n  var r, c, t,\r\n    x = this,\r\n    Big = x.constructor,\r\n    s = x.s,\r\n    e = x.e,\r\n    half = new Big('0.5');\r\n\r\n  // Zero?\r\n  if (!x.c[0]) return new Big(x);\r\n\r\n  // Negative?\r\n  if (s < 0) {\r\n    throw Error(NAME + 'No square root');\r\n  }\r\n\r\n  // Estimate.\r\n  s = Math.sqrt(x + '');\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n  if (s === 0 || s === 1 / 0) {\r\n    c = x.c.join('');\r\n    if (!(c.length + e & 1)) c += '0';\r\n    s = Math.sqrt(c);\r\n    e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n    r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n  } else {\r\n    r = new Big(s + '');\r\n  }\r\n\r\n  e = r.e + (Big.DP += 4);\r\n\r\n  // Newton-Raphson iteration.\r\n  do {\r\n    t = r;\r\n    r = half.times(t.plus(x.div(t)));\r\n  } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n  return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n  var c,\r\n    x = this,\r\n    Big = x.constructor,\r\n    xc = x.c,\r\n    yc = (y = new Big(y)).c,\r\n    a = xc.length,\r\n    b = yc.length,\r\n    i = x.e,\r\n    j = y.e;\r\n\r\n  // Determine sign of result.\r\n  y.s = x.s == y.s ? 1 : -1;\r\n\r\n  // Return signed 0 if either 0.\r\n  if (!xc[0] || !yc[0]) {\r\n    y.c = [y.e = 0];\r\n    return y;\r\n  }\r\n\r\n  // Initialise exponent of result as x.e + y.e.\r\n  y.e = i + j;\r\n\r\n  // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n  if (a < b) {\r\n    c = xc;\r\n    xc = yc;\r\n    yc = c;\r\n    j = a;\r\n    a = b;\r\n    b = j;\r\n  }\r\n\r\n  // Initialise coefficient array of result with zeros.\r\n  for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n  // Multiply.\r\n\r\n  // i is initially xc.length.\r\n  for (i = b; i--;) {\r\n    b = 0;\r\n\r\n    // a is yc.length.\r\n    for (j = a + i; j > i;) {\r\n\r\n      // Current sum of products at this digit position, plus carry.\r\n      b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n      c[j--] = b % 10;\r\n\r\n      // carry\r\n      b = b / 10 | 0;\r\n    }\r\n\r\n    c[j] = b;\r\n  }\r\n\r\n  // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n  if (b) ++y.e;\r\n  else c.shift();\r\n\r\n  // Remove trailing zeros.\r\n  for (i = c.length; !c[--i];) c.pop();\r\n  y.c = c;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var x = this,\r\n    n = x.c[0];\r\n\r\n  if (dp !== UNDEFINED) {\r\n    if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n      throw Error(INVALID_DP);\r\n    }\r\n    x = round(new x.constructor(x), ++dp, rm);\r\n    for (; x.c.length < dp;) x.c.push(0);\r\n  }\r\n\r\n  return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var x = this,\r\n    n = x.c[0];\r\n\r\n  if (dp !== UNDEFINED) {\r\n    if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n      throw Error(INVALID_DP);\r\n    }\r\n    x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n    // x.e may have changed if the value is rounded up.\r\n    for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n  }\r\n\r\n  return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n  var x = this,\r\n    Big = x.constructor;\r\n  return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n  var n = Number(stringify(this, true, true));\r\n  if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n    throw Error(NAME + 'Imprecise conversion');\r\n  }\r\n  return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var x = this,\r\n    Big = x.constructor,\r\n    n = x.c[0];\r\n\r\n  if (sd !== UNDEFINED) {\r\n    if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n      throw Error(INVALID + 'precision');\r\n    }\r\n    x = round(new Big(x), sd, rm);\r\n    for (; x.c.length < sd;) x.c.push(0);\r\n  }\r\n\r\n  return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n  var x = this,\r\n    Big = x.constructor;\r\n  if (Big.strict === true) {\r\n    throw Error(NAME + 'valueOf disallowed');\r\n  }\r\n  return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","var n,l,u,t,i,o,r,f,e,c,s,a,h={},v=[],p=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function _(n){var l=n.parentNode;l&&l.removeChild(n)}function g(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return b(l,f,i,o,null)}function b(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function m(){return{current:null}}function w(n){return n.children}function k(n,l){this.props=n,this.context=l}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?x(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function P(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!S.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(S)}function S(){var n,u,t,o,r,e,c,s;for(i.sort(f);n=i.shift();)n.__d&&(u=i.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l.vnode&&l.vnode(o),O(t.__P,o,r,t.__n,void 0!==t.__P.ownerSVGElement,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j(c,o,s),o.__e!=e&&C(o)),i.length>u&&i.sort(f));S.__r=0}function $(n,l,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,g=t&&t.__k||v,b=l.length;for(u.__d=e,I(u,l,g),e=u.__d,a=0;a<b;a++)null!=(y=u.__k[a])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?h:g[y.__i]||h,y.__i=a,O(n,y,p,i,o,r,f,e,c,s),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&N(p.ref,null,y),s.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?(e&&!e.isConnected&&(e=x(p)),e=H(y,e,n)):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_}function I(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?b(null,i,null,null,null):y(i)?b(w,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?b(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=A(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r?f==r-1&&(a=f-r):a=0,f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),q(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),q(o,o))}function H(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=H(t[i],l,u));return l}n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8===l.nodeType);return l}function T(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(y(n)?n.some(function(n){T(n,l)}):l.push(n)),l}function A(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function F(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||p.test(l)?u:u+\"px\"}function L(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||F(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||F(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,\"$1\")),l=l.toLowerCase()in n||\"onFocusOut\"===l||\"onFocusIn\"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e,n.addEventListener(l,o?s:c,o)):n.removeEventListener(l,o?s:c,o);else{if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function M(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,o,r,f,e,c,s){var a,h,v,p,_,g,b,m,x,C,P,S,I,H,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof A)try{if(m=u.props,x=(a=A.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?b=(h=u.__c=t.__c).__=h.__E:(\"prototype\"in A&&A.prototype.render?u.__c=h=new A(m,C):(u.__c=h=new k(m,C),h.constructor=A,h.render=B),x&&x.sub(h),h.props=m,h.state||(h.state={}),h.context=C,h.__n=i,v=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=A.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,A.getDerivedStateFromProps(m,h.__s))),p=h.props,_=h.state,h.__v=u,v)null==A.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==A.getDerivedStateFromProps&&m!==p&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,C),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,C)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,C),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(p,_,g)})}if(h.context=C,h.props=m,h.__P=n,h.__e=!1,S=l.__r,I=0,\"prototype\"in A&&A.prototype.render){for(h.state=h.__s,h.__d=!1,S&&S(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,S&&S(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(g=h.getSnapshotBeforeUpdate(p,_)),$(n,y(T=null!=a&&a.type===w&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),b&&(h.__E=h.__=null)}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function j(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function z(l,u,t,i,o,r,f,e,c){var s,a,v,p,d,g,b,m=t.props,w=u.props,k=u.type;if(\"svg\"===k&&(o=!0),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&\"setAttribute\"in d==!!k&&(k?d.localName===k:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===k)return document.createTextNode(w);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",k):document.createElement(k,w.is&&w),r=null,e=!1}if(null===k)m===w||e&&l.data===w||(l.data=w);else{if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)d=m[s],\"children\"==s||(\"dangerouslySetInnerHTML\"==s?v=d:\"key\"===s||s in w||L(l,s,null,d,o));for(s in w)d=w[s],\"children\"==s?p=d:\"dangerouslySetInnerHTML\"==s?a=d:\"value\"==s?g=d:\"checked\"==s?b=d:\"key\"===s||e&&\"function\"!=typeof d||m[s]===d||L(l,s,d,m[s],o);if(a)e||v&&(a.__html===v.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(v&&(l.innerHTML=\"\"),$(l,y(p)?p:[p],u,t,i,o&&\"foreignObject\"!==k,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&_(r[s]);e||(s=\"value\",void 0!==g&&(g!==l[s]||\"progress\"===k&&!g||\"option\"===k&&g!==m[s])&&L(l,s,g,m[s],!1),s=\"checked\",void 0!==b&&b!==l[s]&&L(l,s,b,m[s],!1))}return l}function N(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function q(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&q(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||_(n.__e),n.__c=n.__=n.__e=n.__d=void 0}function B(n,l,u){return this.constructor(n,u)}function D(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O(t,u=(!o&&i||t).__k=g(w,null,[u]),r||h,h,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j(f,u,e)}function E(n,l){D(n,l,E)}function G(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),b(l.type,e,i||l.key,o||l.ref,null)}function J(n,l){var u={__c:l=\"__cC\"+a++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,P(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=v.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},k.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),\"function\"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),P(this))},k.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),P(this))},k.prototype.render=w,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},S.__r=0,e=0,c=M(!1),s=M(!0),a=0;export{k as Component,w as Fragment,G as cloneElement,J as createContext,g as createElement,m as createRef,g as h,E as hydrate,t as isValidElement,l as options,D as render,T as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){var a,c,p={};for(c in t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),_=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(_=\"px;\"),i=i+l+\":\"+a+_}}return e+'=\"'+i+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(t)+'\"'}function _(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=_(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,_ as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n,a=e.__b,v=e.__r,l=e.diffed,m=e.__c,s=e.unmount,d=e.__;function h(n,t){e.__h&&e.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({__V:c}),u.__[n]}function p(n){return o=1,y(D,n)}function y(n,u,i){var o=h(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function _(n,u){var i=h(t++,3);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__H.__h.push(i))}function A(n,u){var i=h(t++,4);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__h.push(i))}function F(n){return o=5,q(function(){return{current:n}},[])}function T(n,t,r){o=6,A(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function q(n,r){var u=h(t++,7);return C(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function x(n,t){return o=8,q(function(){return n},t)}function P(n){var u=r.context[n.__c],i=h(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function V(n,t){e.useDebugValue&&e.useDebugValue(t?t(n):n)}function b(n){var u=h(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=h(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],e.__e(t,n.__v)}}e.__b=function(n){r=null,a&&a(n)},e.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),d&&d(n,t)},e.__r=function(n){v&&v(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},e.diffed=function(n){l&&l(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===e.requestAnimationFrame||((i=e.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},e.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],e.__e(r,n.__v)}}),m&&m(n,t)},e.unmount=function(n){s&&s(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&e.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{x as useCallback,P as useContext,V as useDebugValue,_ as useEffect,b as useErrorBoundary,g as useId,T as useImperativeHandle,A as useLayoutEffect,q as useMemo,y as useReducer,F as useRef,p as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","export var HOOKS = [\n    \"onChange\",\n    \"onClose\",\n    \"onDayCreate\",\n    \"onDestroy\",\n    \"onKeyDown\",\n    \"onMonthChange\",\n    \"onOpen\",\n    \"onParseConfig\",\n    \"onReady\",\n    \"onValueUpdate\",\n    \"onYearChange\",\n    \"onPreCalendarPosition\",\n];\nexport var defaults = {\n    _disable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" &&\n        window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: function (err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n    },\n    getWeek: function (givenDate) {\n        var date = new Date(givenDate.getTime());\n        date.setHours(0, 0, 0, 0);\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n        var week1 = new Date(date.getFullYear(), 0, 4);\n        return (1 +\n            Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                3 +\n                ((week1.getDay() + 6) % 7)) /\n                7));\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false,\n};\n","export var english = {\n    weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\",\n        ],\n    },\n    months: {\n        shorthand: [\n            \"Jan\",\n            \"Feb\",\n            \"Mar\",\n            \"Apr\",\n            \"May\",\n            \"Jun\",\n            \"Jul\",\n            \"Aug\",\n            \"Sep\",\n            \"Oct\",\n            \"Nov\",\n            \"Dec\",\n        ],\n        longhand: [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ],\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: function (nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21)\n            return \"th\";\n        switch (s % 10) {\n            case 1:\n                return \"st\";\n            case 2:\n                return \"nd\";\n            case 3:\n                return \"rd\";\n            default:\n                return \"th\";\n        }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n    if (length === void 0) { length = 2; }\n    return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n    var t;\n    return function () {\n        var _this = this;\n        var args = arguments;\n        clearTimeout(t);\n        t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n    };\n}\nexport var arrayify = function (obj) {\n    return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n    if (bool === true)\n        return elem.classList.add(className);\n    elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n    var e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined)\n        e.textContent = content;\n    return e;\n}\nexport function clearNode(node) {\n    while (node.firstChild)\n        node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n    if (condition(node))\n        return node;\n    else if (node.parentNode)\n        return findParent(node.parentNode, condition);\n    return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n    var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n        numInput.type = \"number\";\n    }\n    else {\n        numInput.type = \"text\";\n        numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined)\n        for (var key in opts)\n            numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n}\nexport function getEventTarget(event) {\n    try {\n        if (typeof event.composedPath === \"function\") {\n            var path = event.composedPath();\n            return path[0];\n        }\n        return event.target;\n    }\n    catch (error) {\n        return event.target;\n    }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    H: function (dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n    },\n    J: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    K: function (dateObj, amPM, locale) {\n        dateObj.setHours((dateObj.getHours() % 12) +\n            12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n    W: function (dateObj, weekNum, locale) {\n        var weekNumber = parseInt(weekNum);\n        var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n        date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n        return date;\n    },\n    Y: function (dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n    },\n    Z: function (_, ISODate) { return new Date(ISODate); },\n    d: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    h: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    i: function (dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: function (_, unixMillSeconds) {\n        return new Date(parseFloat(unixMillSeconds));\n    },\n    w: doNothing,\n    y: function (dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n    },\n};\nexport var tokenRegex = {\n    D: \"\",\n    F: \"\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\",\n};\nexport var formats = {\n    Z: function (date) { return date.toISOString(); },\n    D: function (date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    F: function (date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    G: function (date, locale, options) {\n        return pad(formats.h(date, locale, options));\n    },\n    H: function (date) { return pad(date.getHours()); },\n    J: function (date, locale) {\n        return locale.ordinal !== undefined\n            ? date.getDate() + locale.ordinal(date.getDate())\n            : date.getDate();\n    },\n    K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n    M: function (date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n    },\n    S: function (date) { return pad(date.getSeconds()); },\n    U: function (date) { return date.getTime() / 1000; },\n    W: function (date, _, options) {\n        return options.getWeek(date);\n    },\n    Y: function (date) { return pad(date.getFullYear(), 4); },\n    d: function (date) { return pad(date.getDate()); },\n    h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n    i: function (date) { return pad(date.getMinutes()); },\n    j: function (date) { return date.getDate(); },\n    l: function (date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n    },\n    m: function (date) { return pad(date.getMonth() + 1); },\n    n: function (date) { return date.getMonth() + 1; },\n    s: function (date) { return date.getSeconds(); },\n    u: function (date) { return date.getTime(); },\n    w: function (date) { return date.getDay(); },\n    y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n    return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n        if (config.formatDate !== undefined && !isMobile) {\n            return config.formatDate(dateObj, frmt, locale);\n        }\n        return frmt\n            .split(\"\")\n            .map(function (c, i, arr) {\n            return formats[c] && arr[i - 1] !== \"\\\\\"\n                ? formats[c](dateObj, locale, config)\n                : c !== \"\\\\\"\n                    ? c\n                    : \"\";\n        })\n            .join(\"\");\n    };\n};\nexport var createDateParser = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n    return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date)\n            return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var dateOrig = date;\n        if (date instanceof Date)\n            parsedDate = new Date(date.getTime());\n        else if (typeof date !== \"string\" &&\n            date.toFixed !== undefined)\n            parsedDate = new Date(date);\n        else if (typeof date === \"string\") {\n            var format = givenFormat || (config || defaults).dateFormat;\n            var datestr = String(date).trim();\n            if (datestr === \"today\") {\n                parsedDate = new Date();\n                timeless = true;\n            }\n            else if (config && config.parseDate) {\n                parsedDate = config.parseDate(date, format);\n            }\n            else if (/Z$/.test(datestr) ||\n                /GMT$/.test(datestr)) {\n                parsedDate = new Date(date);\n            }\n            else {\n                var matched = void 0, ops = [];\n                for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                    var token = format[i];\n                    var isBackSlash = token === \"\\\\\";\n                    var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                    if (tokenRegex[token] && !escaped) {\n                        regexStr += tokenRegex[token];\n                        var match = new RegExp(regexStr).exec(date);\n                        if (match && (matched = true)) {\n                            ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                                fn: revFormat[token],\n                                val: match[++matchIndex],\n                            });\n                        }\n                    }\n                    else if (!isBackSlash)\n                        regexStr += \".\";\n                }\n                parsedDate =\n                    !config || !config.noCalendar\n                        ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                        : new Date(new Date().setHours(0, 0, 0, 0));\n                ops.forEach(function (_a) {\n                    var fn = _a.fn, val = _a.val;\n                    return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                });\n                parsedDate = matched ? parsedDate : undefined;\n            }\n        }\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n            config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n            return undefined;\n        }\n        if (timeless === true)\n            parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n    };\n};\nexport function compareDates(date1, date2, timeless) {\n    if (timeless === void 0) { timeless = true; }\n    if (timeless !== false) {\n        return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n            new Date(date2.getTime()).setHours(0, 0, 0, 0));\n    }\n    return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n    return (3600 * (date1.getHours() - date2.getHours()) +\n        60 * (date1.getMinutes() - date2.getMinutes()) +\n        date1.getSeconds() -\n        date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n    return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n    var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n    return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n    DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n    var hours = config.defaultHour;\n    var minutes = config.defaultMinute;\n    var seconds = config.defaultSeconds;\n    if (config.minDate !== undefined) {\n        var minHour = config.minDate.getHours();\n        var minMinutes = config.minDate.getMinutes();\n        var minSeconds = config.minDate.getSeconds();\n        if (hours < minHour) {\n            hours = minHour;\n        }\n        if (hours === minHour && minutes < minMinutes) {\n            minutes = minMinutes;\n        }\n        if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n            seconds = config.minDate.getSeconds();\n    }\n    if (config.maxDate !== undefined) {\n        var maxHr = config.maxDate.getHours();\n        var maxMinutes = config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr)\n            minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes)\n            seconds = config.maxDate.getSeconds();\n    }\n    return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n    Object.assign = function (target) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (!target) {\n            throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var _loop_1 = function (source) {\n            if (source) {\n                Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n            }\n        };\n        for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n            var source = args_1[_a];\n            _loop_1(source);\n        }\n        return target;\n    };\n}\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n    var self = {\n        config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n        l10n: English,\n    };\n    self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self.onMouseOver = onMouseOver;\n    self._createElement = createElement;\n    self.createDay = createDay;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.updateValue = updateValue;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n        self.utils = {\n            getDaysInMonth: function (month, yr) {\n                if (month === void 0) { month = self.currentMonth; }\n                if (yr === void 0) { yr = self.currentYear; }\n                if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                    return 29;\n                return self.l10n.daysInMonth[month];\n            },\n        };\n    }\n    function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile)\n            build();\n        bindEvents();\n        if (self.selectedDates.length || self.config.noCalendar) {\n            if (self.config.enableTime) {\n                setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n            }\n            updateValue(false);\n        }\n        setCalendarWidth();\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n        if (!self.isMobile && isSafari) {\n            positionCalendar();\n        }\n        triggerEvent(\"onReady\");\n    }\n    function getClosestActiveElement() {\n        var _a;\n        return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n            .activeElement || document.activeElement);\n    }\n    function bindToInstance(fn) {\n        return fn.bind(self);\n    }\n    function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) {\n            return;\n        }\n        else if (config.noCalendar !== true) {\n            window.requestAnimationFrame(function () {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.style.visibility = \"hidden\";\n                    self.calendarContainer.style.display = \"block\";\n                }\n                if (self.daysContainer !== undefined) {\n                    var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                    self.daysContainer.style.width = daysWidth + \"px\";\n                    self.calendarContainer.style.width =\n                        daysWidth +\n                            (self.weekWrapper !== undefined\n                                ? self.weekWrapper.offsetWidth\n                                : 0) +\n                            \"px\";\n                    self.calendarContainer.style.removeProperty(\"visibility\");\n                    self.calendarContainer.style.removeProperty(\"display\");\n                }\n            });\n        }\n    }\n    function updateTime(e) {\n        if (self.selectedDates.length === 0) {\n            var defaultDate = self.config.minDate === undefined ||\n                compareDates(new Date(), self.config.minDate) >= 0\n                ? new Date()\n                : new Date(self.config.minDate.getTime());\n            var defaults = getDefaultHours(self.config);\n            defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n            self.selectedDates = [defaultDate];\n            self.latestSelectedDateObj = defaultDate;\n        }\n        if (e !== undefined && e.type !== \"blur\") {\n            timeWrapper(e);\n        }\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n        if (self._input.value !== prevValue) {\n            self._debouncedChange();\n        }\n    }\n    function ampm2military(hour, amPM) {\n        return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n        switch (hour % 24) {\n            case 0:\n            case 12:\n                return 12;\n            default:\n                return hour % 12;\n        }\n    }\n    function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined)\n            return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n            ? (parseInt(self.secondElement.value, 10) || 0) % 60\n            : 0;\n        if (self.amPM !== undefined) {\n            hours = ampm2military(hours, self.amPM.textContent);\n        }\n        var limitMinHours = self.config.minTime !== undefined ||\n            (self.config.minDate &&\n                self.minDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                    0);\n        var limitMaxHours = self.config.maxTime !== undefined ||\n            (self.config.maxDate &&\n                self.maxDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                    0);\n        if (self.config.maxTime !== undefined &&\n            self.config.minTime !== undefined &&\n            self.config.minTime > self.config.maxTime) {\n            var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n            var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n            var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n            if (currentTime > maxBound && currentTime < minBound) {\n                var result = parseSeconds(minBound);\n                hours = result[0];\n                minutes = result[1];\n                seconds = result[2];\n            }\n        }\n        else {\n            if (limitMaxHours) {\n                var maxTime = self.config.maxTime !== undefined\n                    ? self.config.maxTime\n                    : self.config.maxDate;\n                hours = Math.min(hours, maxTime.getHours());\n                if (hours === maxTime.getHours())\n                    minutes = Math.min(minutes, maxTime.getMinutes());\n                if (minutes === maxTime.getMinutes())\n                    seconds = Math.min(seconds, maxTime.getSeconds());\n            }\n            if (limitMinHours) {\n                var minTime = self.config.minTime !== undefined\n                    ? self.config.minTime\n                    : self.config.minDate;\n                hours = Math.max(hours, minTime.getHours());\n                if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                    minutes = minTime.getMinutes();\n                if (minutes === minTime.getMinutes())\n                    seconds = Math.max(seconds, minTime.getSeconds());\n            }\n        }\n        setHours(hours, minutes, seconds);\n    }\n    function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date && date instanceof Date) {\n            setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n        }\n    }\n    function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n            self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n        if (!self.hourElement || !self.minuteElement || self.isMobile)\n            return;\n        self.hourElement.value = pad(!self.config.time_24hr\n            ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n            : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined)\n            self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined)\n            self.secondElement.value = pad(seconds);\n    }\n    function onYearInput(event) {\n        var eventTarget = getEventTarget(event);\n        var year = parseInt(eventTarget.value) + (event.delta || 0);\n        if (year / 1000 > 1 ||\n            (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n            changeYear(year);\n        }\n    }\n    function bind(element, event, handler, options) {\n        if (event instanceof Array)\n            return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n        if (element instanceof Array)\n            return element.forEach(function (el) { return bind(el, event, handler, options); });\n        element.addEventListener(event, handler, options);\n        self._handlers.push({\n            remove: function () { return element.removeEventListener(event, handler, options); },\n        });\n    }\n    function triggerChange() {\n        triggerEvent(\"onChange\");\n    }\n    function bindEvents() {\n        if (self.config.wrap) {\n            [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                    return bind(el, \"click\", self[evt]);\n                });\n            });\n        }\n        if (self.isMobile) {\n            setupMobile();\n            return;\n        }\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n            bind(self.daysContainer, \"mouseover\", function (e) {\n                if (self.config.mode === \"range\")\n                    onMouseOver(getEventTarget(e));\n            });\n        bind(self._input, \"keydown\", onKeyDown);\n        if (self.calendarContainer !== undefined) {\n            bind(self.calendarContainer, \"keydown\", onKeyDown);\n        }\n        if (!self.config.inline && !self.config.static)\n            bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined)\n            bind(window.document, \"touchstart\", documentClick);\n        else\n            bind(window.document, \"mousedown\", documentClick);\n        bind(window.document, \"focus\", documentClick, { capture: true });\n        if (self.config.clickOpens === true) {\n            bind(self._input, \"focus\", self.open);\n            bind(self._input, \"click\", self.open);\n        }\n        if (self.daysContainer !== undefined) {\n            bind(self.monthNav, \"click\", onMonthNavClick);\n            bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n            bind(self.daysContainer, \"click\", selectDate);\n        }\n        if (self.timeContainer !== undefined &&\n            self.minuteElement !== undefined &&\n            self.hourElement !== undefined) {\n            var selText = function (e) {\n                return getEventTarget(e).select();\n            };\n            bind(self.timeContainer, [\"increment\"], updateTime);\n            bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n            bind(self.timeContainer, \"click\", timeIncrement);\n            bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n            if (self.secondElement !== undefined)\n                bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n            if (self.amPM !== undefined) {\n                bind(self.amPM, \"click\", function (e) {\n                    updateTime(e);\n                });\n            }\n        }\n        if (self.config.allowInput) {\n            bind(self._input, \"blur\", onBlur);\n        }\n    }\n    function jumpToDate(jumpDate, triggerChange) {\n        var jumpTo = jumpDate !== undefined\n            ? self.parseDate(jumpDate)\n            : self.latestSelectedDateObj ||\n                (self.config.minDate && self.config.minDate > self.now\n                    ? self.config.minDate\n                    : self.config.maxDate && self.config.maxDate < self.now\n                        ? self.config.maxDate\n                        : self.now);\n        var oldYear = self.currentYear;\n        var oldMonth = self.currentMonth;\n        try {\n            if (jumpTo !== undefined) {\n                self.currentYear = jumpTo.getFullYear();\n                self.currentMonth = jumpTo.getMonth();\n            }\n        }\n        catch (e) {\n            e.message = \"Invalid date supplied: \" + jumpTo;\n            self.config.errorHandler(e);\n        }\n        if (triggerChange && self.currentYear !== oldYear) {\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        if (triggerChange &&\n            (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n            triggerEvent(\"onMonthChange\");\n        }\n        self.redraw();\n    }\n    function timeIncrement(e) {\n        var eventTarget = getEventTarget(e);\n        if (~eventTarget.className.indexOf(\"arrow\"))\n            incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    function incrementNumInput(e, delta, inputElem) {\n        var target = e && getEventTarget(e);\n        var input = inputElem ||\n            (target && target.parentNode && target.parentNode.firstChild);\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n    }\n    function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n        if (!self.config.noCalendar) {\n            fragment.appendChild(buildMonthNav());\n            self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n            if (self.config.weekNumbers) {\n                var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                self.innerContainer.appendChild(weekWrapper);\n                self.weekNumbers = weekNumbers;\n                self.weekWrapper = weekWrapper;\n            }\n            self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n            self.rContainer.appendChild(buildWeekdays());\n            if (!self.daysContainer) {\n                self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                self.daysContainer.tabIndex = -1;\n            }\n            buildDays();\n            self.rContainer.appendChild(self.daysContainer);\n            self.innerContainer.appendChild(self.rContainer);\n            fragment.appendChild(self.innerContainer);\n        }\n        if (self.config.enableTime) {\n            fragment.appendChild(buildTime());\n        }\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined &&\n            self.config.appendTo.nodeType !== undefined;\n        if (self.config.inline || self.config.static) {\n            self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n            if (self.config.inline) {\n                if (!customAppend && self.element.parentNode)\n                    self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                else if (self.config.appendTo !== undefined)\n                    self.config.appendTo.appendChild(self.calendarContainer);\n            }\n            if (self.config.static) {\n                var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                if (self.element.parentNode)\n                    self.element.parentNode.insertBefore(wrapper, self.element);\n                wrapper.appendChild(self.element);\n                if (self.altInput)\n                    wrapper.appendChild(self.altInput);\n                wrapper.appendChild(self.calendarContainer);\n            }\n        }\n        if (!self.config.static && !self.config.inline)\n            (self.config.appendTo !== undefined\n                ? self.config.appendTo\n                : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, _dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n        if (className.indexOf(\"hidden\") === -1 &&\n            compareDates(date, self.now) === 0) {\n            self.todayDateElem = dayElement;\n            dayElement.classList.add(\"today\");\n            dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n        if (dateIsEnabled) {\n            dayElement.tabIndex = -1;\n            if (isDateSelected(date)) {\n                dayElement.classList.add(\"selected\");\n                self.selectedDateElem = dayElement;\n                if (self.config.mode === \"range\") {\n                    toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                        compareDates(date, self.selectedDates[0], true) === 0);\n                    toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                        compareDates(date, self.selectedDates[1], true) === 0);\n                    if (className === \"nextMonthDay\")\n                        dayElement.classList.add(\"inRange\");\n                }\n            }\n        }\n        else {\n            dayElement.classList.add(\"flatpickr-disabled\");\n        }\n        if (self.config.mode === \"range\") {\n            if (isDateInRange(date) && !isDateSelected(date))\n                dayElement.classList.add(\"inRange\");\n        }\n        if (self.weekNumbers &&\n            self.config.showMonths === 1 &&\n            className !== \"prevMonthDay\" &&\n            i % 7 === 6) {\n            self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\")\n            onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        for (var m = startMonth; m != endMonth; m += delta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = delta > 0 ? 0 : month.children.length - 1;\n            var endIndex = delta > 0 ? month.children.length : -1;\n            for (var i = startIndex; i != endIndex; i += delta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                    return c;\n            }\n        }\n        return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1\n            ? current.dateObj.getMonth()\n            : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = givenMonth - self.currentMonth === m\n                ? current.$i + delta\n                : delta < 0\n                    ? month.children.length - 1\n                    : 0;\n            var numMonthDays = month.children.length;\n            for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 &&\n                    isEnabled(c.dateObj) &&\n                    Math.abs(current.$i - i) >= Math.abs(delta))\n                    return focusOnDayElem(c);\n            }\n        }\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n    }\n    function focusOnDay(current, offset) {\n        var activeElement = getClosestActiveElement();\n        var dayFocused = isInView(activeElement || document.body);\n        var startElem = current !== undefined\n            ? current\n            : dayFocused\n                ? activeElement\n                : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                    ? self.selectedDateElem\n                    : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                        ? self.todayDateElem\n                        : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) {\n            self._input.focus();\n        }\n        else if (!dayFocused) {\n            focusOnDayElem(startElem);\n        }\n        else {\n            getNextAvailableDay(startElem, offset);\n        }\n    }\n    function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n        var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n            (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n    }\n    function buildDays() {\n        if (self.daysContainer === undefined) {\n            return;\n        }\n        clearNode(self.daysContainer);\n        if (self.weekNumbers)\n            clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n        for (var i = 0; i < self.config.showMonths; i++) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            onMouseOver();\n        }\n    }\n    function buildMonthSwitch() {\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType !== \"dropdown\")\n            return;\n        var shouldBuildMonth = function (month) {\n            if (self.config.minDate !== undefined &&\n                self.currentYear === self.config.minDate.getFullYear() &&\n                month < self.config.minDate.getMonth()) {\n                return false;\n            }\n            return !(self.config.maxDate !== undefined &&\n                self.currentYear === self.config.maxDate.getFullYear() &&\n                month > self.config.maxDate.getMonth());\n        };\n        self.monthsDropdownContainer.tabIndex = -1;\n        self.monthsDropdownContainer.innerHTML = \"\";\n        for (var i = 0; i < 12; i++) {\n            if (!shouldBuildMonth(i))\n                continue;\n            var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n            month.value = new Date(self.currentYear, i).getMonth().toString();\n            month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n            month.tabIndex = -1;\n            if (self.currentMonth === i) {\n                month.selected = true;\n            }\n            self.monthsDropdownContainer.appendChild(month);\n        }\n    }\n    function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement;\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType === \"static\") {\n            monthElement = createElement(\"span\", \"cur-month\");\n        }\n        else {\n            self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n            self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n            bind(self.monthsDropdownContainer, \"change\", function (e) {\n                var target = getEventTarget(e);\n                var selectedMonth = parseInt(target.value, 10);\n                self.changeMonth(selectedMonth - self.currentMonth);\n                triggerEvent(\"onMonthChange\");\n            });\n            buildMonthSwitch();\n            monthElement = self.monthsDropdownContainer;\n        }\n        var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) {\n            yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n        }\n        if (self.config.maxDate) {\n            yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n            yearElement.disabled =\n                !!self.config.minDate &&\n                    self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n            container: container,\n            yearElement: yearElement,\n            monthElement: monthElement,\n        };\n    }\n    function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n        if (self.config.showMonths) {\n            self.yearElements = [];\n            self.monthElements = [];\n        }\n        for (var m = self.config.showMonths; m--;) {\n            var month = buildMonth();\n            self.yearElements.push(month.yearElement);\n            self.monthElements.push(month.monthElement);\n            self.monthNav.appendChild(month.container);\n        }\n        self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n            get: function () { return self.__hidePrevMonthArrow; },\n            set: function (bool) {\n                if (self.__hidePrevMonthArrow !== bool) {\n                    toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hidePrevMonthArrow = bool;\n                }\n            },\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n            get: function () { return self.__hideNextMonthArrow; },\n            set: function (bool) {\n                if (self.__hideNextMonthArrow !== bool) {\n                    toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hideNextMonthArrow = bool;\n                }\n            },\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n    }\n    function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar)\n            self.calendarContainer.classList.add(\"noCalendar\");\n        var defaults = getDefaultHours(self.config);\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\", {\n            \"aria-label\": self.l10n.hourAriaLabel,\n        });\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\", {\n            \"aria-label\": self.l10n.minuteAriaLabel,\n        });\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getHours()\n            : self.config.time_24hr\n                ? defaults.hours\n                : military2ampm(defaults.hours));\n        self.minuteElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getMinutes()\n            : defaults.minutes);\n        self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.hourElement.setAttribute(\"maxlength\", \"2\");\n        self.minuteElement.setAttribute(\"min\", \"0\");\n        self.minuteElement.setAttribute(\"max\", \"59\");\n        self.minuteElement.setAttribute(\"maxlength\", \"2\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr)\n            self.timeContainer.classList.add(\"time24hr\");\n        if (self.config.enableSeconds) {\n            self.timeContainer.classList.add(\"hasSeconds\");\n            var secondInput = createNumberInput(\"flatpickr-second\");\n            self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n            self.secondElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getSeconds()\n                : defaults.seconds);\n            self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n            self.secondElement.setAttribute(\"min\", \"0\");\n            self.secondElement.setAttribute(\"max\", \"59\");\n            self.secondElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n            self.timeContainer.appendChild(secondInput);\n        }\n        if (!self.config.time_24hr) {\n            self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                ? self.hourElement.value\n                : self.config.defaultHour) > 11)]);\n            self.amPM.title = self.l10n.toggleTitle;\n            self.amPM.tabIndex = -1;\n            self.timeContainer.appendChild(self.amPM);\n        }\n        return self.timeContainer;\n    }\n    function buildWeekdays() {\n        if (!self.weekdayContainer)\n            self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n        else\n            clearNode(self.weekdayContainer);\n        for (var i = self.config.showMonths; i--;) {\n            var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n            self.weekdayContainer.appendChild(container);\n        }\n        updateWeekdays();\n        return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n        if (!self.weekdayContainer) {\n            return;\n        }\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n            weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n        }\n        for (var i = self.config.showMonths; i--;) {\n            self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n        }\n    }\n    function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n            weekWrapper: weekWrapper,\n            weekNumbers: weekNumbers,\n        };\n    }\n    function changeMonth(value, isOffset) {\n        if (isOffset === void 0) { isOffset = true; }\n        var delta = isOffset ? value : value - self.currentMonth;\n        if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n            (delta > 0 && self._hideNextMonthArrow === true))\n            return;\n        self.currentMonth += delta;\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n            self.currentYear += self.currentMonth > 11 ? 1 : -1;\n            self.currentMonth = (self.currentMonth + 12) % 12;\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent, toInitial) {\n        if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n        if (toInitial === void 0) { toInitial = true; }\n        self.input.value = \"\";\n        if (self.altInput !== undefined)\n            self.altInput.value = \"\";\n        if (self.mobileInput !== undefined)\n            self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        if (toInitial === true) {\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n        }\n        if (self.config.enableTime === true) {\n            var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n            setHours(hours, minutes, seconds);\n        }\n        self.redraw();\n        if (triggerChangeEvent)\n            triggerEvent(\"onChange\");\n    }\n    function close() {\n        self.isOpen = false;\n        if (!self.isMobile) {\n            if (self.calendarContainer !== undefined) {\n                self.calendarContainer.classList.remove(\"open\");\n            }\n            if (self._input !== undefined) {\n                self._input.classList.remove(\"active\");\n            }\n        }\n        triggerEvent(\"onClose\");\n    }\n    function destroy() {\n        if (self.config !== undefined)\n            triggerEvent(\"onDestroy\");\n        for (var i = self._handlers.length; i--;) {\n            self._handlers[i].remove();\n        }\n        self._handlers = [];\n        if (self.mobileInput) {\n            if (self.mobileInput.parentNode)\n                self.mobileInput.parentNode.removeChild(self.mobileInput);\n            self.mobileInput = undefined;\n        }\n        else if (self.calendarContainer && self.calendarContainer.parentNode) {\n            if (self.config.static && self.calendarContainer.parentNode) {\n                var wrapper = self.calendarContainer.parentNode;\n                wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                if (wrapper.parentNode) {\n                    while (wrapper.firstChild)\n                        wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                }\n            }\n            else\n                self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n        if (self.altInput) {\n            self.input.type = \"text\";\n            if (self.altInput.parentNode)\n                self.altInput.parentNode.removeChild(self.altInput);\n            delete self.altInput;\n        }\n        if (self.input) {\n            self.input.type = self.input._type;\n            self.input.classList.remove(\"flatpickr-input\");\n            self.input.removeAttribute(\"readonly\");\n        }\n        [\n            \"_showTimeInput\",\n            \"latestSelectedDateObj\",\n            \"_hideNextMonthArrow\",\n            \"_hidePrevMonthArrow\",\n            \"__hideNextMonthArrow\",\n            \"__hidePrevMonthArrow\",\n            \"isMobile\",\n            \"isOpen\",\n            \"selectedDateElem\",\n            \"minDateHasTime\",\n            \"maxDateHasTime\",\n            \"days\",\n            \"daysContainer\",\n            \"_input\",\n            \"_positionElement\",\n            \"innerContainer\",\n            \"rContainer\",\n            \"monthNav\",\n            \"todayDateElem\",\n            \"calendarContainer\",\n            \"weekdayContainer\",\n            \"prevMonthNav\",\n            \"nextMonthNav\",\n            \"monthsDropdownContainer\",\n            \"currentMonthElement\",\n            \"currentYearElement\",\n            \"navigationCurrentMonth\",\n            \"selectedDateElem\",\n            \"config\",\n        ].forEach(function (k) {\n            try {\n                delete self[k];\n            }\n            catch (_) { }\n        });\n    }\n    function isCalendarElem(elem) {\n        return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n            var eventTarget_1 = getEventTarget(e);\n            var isCalendarElement = isCalendarElem(eventTarget_1);\n            var isInput = eventTarget_1 === self.input ||\n                eventTarget_1 === self.altInput ||\n                self.element.contains(eventTarget_1) ||\n                (e.path &&\n                    e.path.indexOf &&\n                    (~e.path.indexOf(self.input) ||\n                        ~e.path.indexOf(self.altInput)));\n            var lostFocus = !isInput &&\n                !isCalendarElement &&\n                !isCalendarElem(e.relatedTarget);\n            var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                return elem.contains(eventTarget_1);\n            });\n            if (lostFocus && isIgnored) {\n                if (self.config.allowInput) {\n                    self.setDate(self._input.value, false, self.config.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                }\n                if (self.timeContainer !== undefined &&\n                    self.minuteElement !== undefined &&\n                    self.hourElement !== undefined &&\n                    self.input.value !== \"\" &&\n                    self.input.value !== undefined) {\n                    updateTime();\n                }\n                self.close();\n                if (self.config &&\n                    self.config.mode === \"range\" &&\n                    self.selectedDates.length === 1)\n                    self.clear(false);\n            }\n        }\n    }\n    function changeYear(newYear) {\n        if (!newYear ||\n            (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n            (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n            return;\n        var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n        if (self.config.maxDate &&\n            self.currentYear === self.config.maxDate.getFullYear()) {\n            self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        }\n        else if (self.config.minDate &&\n            self.currentYear === self.config.minDate.getFullYear()) {\n            self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n        if (isNewYear) {\n            self.redraw();\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n    }\n    function isEnabled(date, timeless) {\n        var _a;\n        if (timeless === void 0) { timeless = true; }\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if ((self.config.minDate &&\n            dateToCheck &&\n            compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n            (self.config.maxDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n            return false;\n        if (!self.config.enable && self.config.disable.length === 0)\n            return true;\n        if (dateToCheck === undefined)\n            return false;\n        var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n        for (var i = 0, d = void 0; i < array.length; i++) {\n            d = array[i];\n            if (typeof d === \"function\" &&\n                d(dateToCheck))\n                return bool;\n            else if (d instanceof Date &&\n                dateToCheck !== undefined &&\n                d.getTime() === dateToCheck.getTime())\n                return bool;\n            else if (typeof d === \"string\") {\n                var parsed = self.parseDate(d, undefined, true);\n                return parsed && parsed.getTime() === dateToCheck.getTime()\n                    ? bool\n                    : !bool;\n            }\n            else if (typeof d === \"object\" &&\n                dateToCheck !== undefined &&\n                d.from &&\n                d.to &&\n                dateToCheck.getTime() >= d.from.getTime() &&\n                dateToCheck.getTime() <= d.to.getTime())\n                return bool;\n        }\n        return !bool;\n    }\n    function isInView(elem) {\n        if (self.daysContainer !== undefined)\n            return (elem.className.indexOf(\"hidden\") === -1 &&\n                elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                self.daysContainer.contains(elem));\n        return false;\n    }\n    function onBlur(e) {\n        var isInput = e.target === self._input;\n        var valueChanged = self._input.value.trimEnd() !== getDateStr();\n        if (isInput &&\n            valueChanged &&\n            !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n            self.setDate(self._input.value, true, e.target === self.altInput\n                ? self.config.altFormat\n                : self.config.dateFormat);\n        }\n    }\n    function onKeyDown(e) {\n        var eventTarget = getEventTarget(e);\n        var isInput = self.config.wrap\n            ? element.contains(eventTarget)\n            : eventTarget === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n        if (e.keyCode === 13 && isInput) {\n            if (allowInput) {\n                self.setDate(self._input.value, true, eventTarget === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n                self.close();\n                return eventTarget.blur();\n            }\n            else {\n                self.open();\n            }\n        }\n        else if (isCalendarElem(eventTarget) ||\n            allowKeydown ||\n            allowInlineKeydown) {\n            var isTimeObj = !!self.timeContainer &&\n                self.timeContainer.contains(eventTarget);\n            switch (e.keyCode) {\n                case 13:\n                    if (isTimeObj) {\n                        e.preventDefault();\n                        updateTime();\n                        focusAndClose();\n                    }\n                    else\n                        selectDate(e);\n                    break;\n                case 27:\n                    e.preventDefault();\n                    focusAndClose();\n                    break;\n                case 8:\n                case 46:\n                    if (isInput && !self.config.allowInput) {\n                        e.preventDefault();\n                        self.clear();\n                    }\n                    break;\n                case 37:\n                case 39:\n                    if (!isTimeObj && !isInput) {\n                        e.preventDefault();\n                        var activeElement = getClosestActiveElement();\n                        if (self.daysContainer !== undefined &&\n                            (allowInput === false ||\n                                (activeElement && isInView(activeElement)))) {\n                            var delta_1 = e.keyCode === 39 ? 1 : -1;\n                            if (!e.ctrlKey)\n                                focusOnDay(undefined, delta_1);\n                            else {\n                                e.stopPropagation();\n                                changeMonth(delta_1);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                        }\n                    }\n                    else if (self.hourElement)\n                        self.hourElement.focus();\n                    break;\n                case 38:\n                case 40:\n                    e.preventDefault();\n                    var delta = e.keyCode === 40 ? 1 : -1;\n                    if ((self.daysContainer &&\n                        eventTarget.$i !== undefined) ||\n                        eventTarget === self.input ||\n                        eventTarget === self.altInput) {\n                        if (e.ctrlKey) {\n                            e.stopPropagation();\n                            changeYear(self.currentYear - delta);\n                            focusOnDay(getFirstAvailableDay(1), 0);\n                        }\n                        else if (!isTimeObj)\n                            focusOnDay(undefined, delta * 7);\n                    }\n                    else if (eventTarget === self.currentYearElement) {\n                        changeYear(self.currentYear - delta);\n                    }\n                    else if (self.config.enableTime) {\n                        if (!isTimeObj && self.hourElement)\n                            self.hourElement.focus();\n                        updateTime(e);\n                        self._debouncedChange();\n                    }\n                    break;\n                case 9:\n                    if (isTimeObj) {\n                        var elems = [\n                            self.hourElement,\n                            self.minuteElement,\n                            self.secondElement,\n                            self.amPM,\n                        ]\n                            .concat(self.pluginElements)\n                            .filter(function (x) { return x; });\n                        var i = elems.indexOf(eventTarget);\n                        if (i !== -1) {\n                            var target = elems[i + (e.shiftKey ? -1 : 1)];\n                            e.preventDefault();\n                            (target || self._input).focus();\n                        }\n                    }\n                    else if (!self.config.noCalendar &&\n                        self.daysContainer &&\n                        self.daysContainer.contains(eventTarget) &&\n                        e.shiftKey) {\n                        e.preventDefault();\n                        self._input.focus();\n                    }\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            switch (e.key) {\n                case self.l10n.amPM[0].charAt(0):\n                case self.l10n.amPM[0].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[0];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n                case self.l10n.amPM[1].charAt(0):\n                case self.l10n.amPM[1].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[1];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n            }\n        }\n        if (isInput || isCalendarElem(eventTarget)) {\n            triggerEvent(\"onKeyDown\", e);\n        }\n    }\n    function onMouseOver(elem, cellClass) {\n        if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n        if (self.selectedDates.length !== 1 ||\n            (elem &&\n                (!elem.classList.contains(cellClass) ||\n                    elem.classList.contains(\"flatpickr-disabled\"))))\n            return;\n        var hoverDate = elem\n            ? elem.dateObj.getTime()\n            : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n        var containsDisabled = false;\n        var minRange = 0, maxRange = 0;\n        for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n            if (!isEnabled(new Date(t), true)) {\n                containsDisabled =\n                    containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                if (t < initialDate && (!minRange || t > minRange))\n                    minRange = t;\n                else if (t > initialDate && (!maxRange || t < maxRange))\n                    maxRange = t;\n            }\n        }\n        var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n        hoverableCells.forEach(function (dayElem) {\n            var date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                (maxRange > 0 && timestamp > maxRange);\n            if (outOfRange) {\n                dayElem.classList.add(\"notAllowed\");\n                [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                    dayElem.classList.remove(c);\n                });\n                return;\n            }\n            else if (containsDisabled && !outOfRange)\n                return;\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n            });\n            if (elem !== undefined) {\n                elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                    ? \"startRange\"\n                    : \"endRange\");\n                if (initialDate < hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"startRange\");\n                else if (initialDate > hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange &&\n                    (maxRange === 0 || timestamp <= maxRange) &&\n                    isBetween(timestamp, initialDate, hoverDate))\n                    dayElem.classList.add(\"inRange\");\n            }\n        });\n    }\n    function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline)\n            positionCalendar();\n    }\n    function open(e, positionElement) {\n        if (positionElement === void 0) { positionElement = self._positionElement; }\n        if (self.isMobile === true) {\n            if (e) {\n                e.preventDefault();\n                var eventTarget = getEventTarget(e);\n                if (eventTarget) {\n                    eventTarget.blur();\n                }\n            }\n            if (self.mobileInput !== undefined) {\n                self.mobileInput.focus();\n                self.mobileInput.click();\n            }\n            triggerEvent(\"onOpen\");\n            return;\n        }\n        else if (self._input.disabled || self.config.inline) {\n            return;\n        }\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n        if (!wasOpen) {\n            self.calendarContainer.classList.add(\"open\");\n            self._input.classList.add(\"active\");\n            triggerEvent(\"onOpen\");\n            positionCalendar(positionElement);\n        }\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n            if (self.config.allowInput === false &&\n                (e === undefined ||\n                    !self.timeContainer.contains(e.relatedTarget))) {\n                setTimeout(function () { return self.hourElement.select(); }, 50);\n            }\n        }\n    }\n    function minMaxDateSetter(type) {\n        return function (date) {\n            var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n            var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n            if (dateObj !== undefined) {\n                self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                    dateObj.getHours() > 0 ||\n                        dateObj.getMinutes() > 0 ||\n                        dateObj.getSeconds() > 0;\n            }\n            if (self.selectedDates) {\n                self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                if (!self.selectedDates.length && type === \"min\")\n                    setHoursFromDate(dateObj);\n                updateValue();\n            }\n            if (self.daysContainer) {\n                redraw();\n                if (dateObj !== undefined)\n                    self.currentYearElement[type] = dateObj.getFullYear().toString();\n                else\n                    self.currentYearElement.removeAttribute(type);\n                self.currentYearElement.disabled =\n                    !!inverseDateObj &&\n                        dateObj !== undefined &&\n                        inverseDateObj.getFullYear() === dateObj.getFullYear();\n            }\n        };\n    }\n    function parseConfig() {\n        var boolOpts = [\n            \"wrap\",\n            \"weekNumbers\",\n            \"allowInput\",\n            \"allowInvalidPreload\",\n            \"clickOpens\",\n            \"time_24hr\",\n            \"enableTime\",\n            \"noCalendar\",\n            \"altInput\",\n            \"shorthandCurrentMonth\",\n            \"inline\",\n            \"static\",\n            \"enableSeconds\",\n            \"disableMobile\",\n        ];\n        var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n        var formats = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n            get: function () { return self.config._enable; },\n            set: function (dates) {\n                self.config._enable = parseDateRules(dates);\n            },\n        });\n        Object.defineProperty(self.config, \"disable\", {\n            get: function () { return self.config._disable; },\n            set: function (dates) {\n                self.config._disable = parseDateRules(dates);\n            },\n        });\n        var timeMode = userConfig.mode === \"time\";\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n            var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n            formats.dateFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                    : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n        if (userConfig.altInput &&\n            (userConfig.enableTime || timeMode) &&\n            !userConfig.altFormat) {\n            var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n            formats.altFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                    : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n        Object.defineProperty(self.config, \"minDate\", {\n            get: function () { return self.config._minDate; },\n            set: minMaxDateSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n            get: function () { return self.config._maxDate; },\n            set: minMaxDateSetter(\"max\"),\n        });\n        var minMaxTimeSetter = function (type) { return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        }; };\n        Object.defineProperty(self.config, \"minTime\", {\n            get: function () { return self.config._minTime; },\n            set: minMaxTimeSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n            get: function () { return self.config._maxTime; },\n            set: minMaxTimeSetter(\"max\"),\n        });\n        if (userConfig.mode === \"time\") {\n            self.config.noCalendar = true;\n            self.config.enableTime = true;\n        }\n        Object.assign(self.config, formats, userConfig);\n        for (var i = 0; i < boolOpts.length; i++)\n            self.config[boolOpts[i]] =\n                self.config[boolOpts[i]] === true ||\n                    self.config[boolOpts[i]] === \"true\";\n        HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n            self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile =\n            !self.config.disableMobile &&\n                !self.config.inline &&\n                self.config.mode === \"single\" &&\n                !self.config.disable.length &&\n                !self.config.enable &&\n                !self.config.weekNumbers &&\n                /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        for (var i = 0; i < self.config.plugins.length; i++) {\n            var pluginConf = self.config.plugins[i](self) || {};\n            for (var key in pluginConf) {\n                if (HOOKS.indexOf(key) > -1) {\n                    self.config[key] = arrayify(pluginConf[key])\n                        .map(bindToInstance)\n                        .concat(self.config[key]);\n                }\n                else if (typeof userConfig[key] === \"undefined\")\n                    self.config[key] = pluginConf[key];\n            }\n        }\n        if (!userConfig.altInputClass) {\n            self.config.altInputClass =\n                getInputElem().className + \" \" + self.config.altInputClass;\n        }\n        triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n        return self.config.wrap\n            ? element.querySelector(\"[data-input]\")\n            : element;\n    }\n    function setupLocale() {\n        if (typeof self.config.locale !== \"object\" &&\n            typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n            self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n            ? self.config.locale\n            : self.config.locale !== \"default\"\n                ? flatpickr.l10ns[self.config.locale]\n                : undefined));\n        tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n        tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n        tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n        tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n        if (userConfig.time_24hr === undefined &&\n            flatpickr.defaultConfig.time_24hr === undefined) {\n            self.config.time_24hr = self.l10n.time_24hr;\n        }\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    }\n    function positionCalendar(customPositionElement) {\n        if (typeof self.config.position === \"function\") {\n            return void self.config.position(self, customPositionElement);\n        }\n        if (self.calendarContainer === undefined)\n            return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n            (configPosVertical !== \"below\" &&\n                distanceFromBottom < calendarHeight &&\n                inputBounds.top > calendarHeight);\n        var top = window.pageYOffset +\n            inputBounds.top +\n            (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline)\n            return;\n        var left = window.pageXOffset + inputBounds.left;\n        var isCenter = false;\n        var isRight = false;\n        if (configPosHorizontal === \"center\") {\n            left -= (calendarWidth - inputBounds.width) / 2;\n            isCenter = true;\n        }\n        else if (configPosHorizontal === \"right\") {\n            left -= calendarWidth - inputBounds.width;\n            isRight = true;\n        }\n        toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n        toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n        toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n        var right = window.document.body.offsetWidth -\n            (window.pageXOffset + inputBounds.right);\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static)\n            return;\n        self.calendarContainer.style.top = top + \"px\";\n        if (!rightMost) {\n            self.calendarContainer.style.left = left + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n        else if (!centerMost) {\n            self.calendarContainer.style.left = \"auto\";\n            self.calendarContainer.style.right = right + \"px\";\n        }\n        else {\n            var doc = getDocumentStyleSheet();\n            if (doc === undefined)\n                return;\n            var bodyWidth = window.document.body.offsetWidth;\n            var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n            var centerBefore = \".flatpickr-calendar.centerMost:before\";\n            var centerAfter = \".flatpickr-calendar.centerMost:after\";\n            var centerIndex = doc.cssRules.length;\n            var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n            toggleClass(self.calendarContainer, \"rightMost\", false);\n            toggleClass(self.calendarContainer, \"centerMost\", true);\n            doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n            self.calendarContainer.style.left = centerLeft + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n    }\n    function getDocumentStyleSheet() {\n        var editableSheet = null;\n        for (var i = 0; i < document.styleSheets.length; i++) {\n            var sheet = document.styleSheets[i];\n            if (!sheet.cssRules)\n                continue;\n            try {\n                sheet.cssRules;\n            }\n            catch (err) {\n                continue;\n            }\n            editableSheet = sheet;\n            break;\n        }\n        return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n        var style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        return style.sheet;\n    }\n    function redraw() {\n        if (self.config.noCalendar || self.isMobile)\n            return;\n        buildMonthSwitch();\n        updateNavigationCurrentMonth();\n        buildDays();\n    }\n    function focusAndClose() {\n        self._input.focus();\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n            navigator.msMaxTouchPoints !== undefined) {\n            setTimeout(self.close, 0);\n        }\n        else {\n            self.close();\n        }\n    }\n    function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        var isSelectable = function (day) {\n            return day.classList &&\n                day.classList.contains(\"flatpickr-day\") &&\n                !day.classList.contains(\"flatpickr-disabled\") &&\n                !day.classList.contains(\"notAllowed\");\n        };\n        var t = findParent(getEventTarget(e), isSelectable);\n        if (t === undefined)\n            return;\n        var target = t;\n        var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n            selectedDate.getMonth() >\n                self.currentMonth + self.config.showMonths - 1) &&\n            self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\")\n            self.selectedDates = [selectedDate];\n        else if (self.config.mode === \"multiple\") {\n            var selectedIndex = isDateSelected(selectedDate);\n            if (selectedIndex)\n                self.selectedDates.splice(parseInt(selectedIndex), 1);\n            else\n                self.selectedDates.push(selectedDate);\n        }\n        else if (self.config.mode === \"range\") {\n            if (self.selectedDates.length === 2) {\n                self.clear(false, false);\n            }\n            self.latestSelectedDateObj = selectedDate;\n            self.selectedDates.push(selectedDate);\n            if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        setHoursFromInputs();\n        if (shouldChangeMonth) {\n            var isNewYear = self.currentYear !== selectedDate.getFullYear();\n            self.currentYear = selectedDate.getFullYear();\n            self.currentMonth = selectedDate.getMonth();\n            if (isNewYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            triggerEvent(\"onMonthChange\");\n        }\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (!shouldChangeMonth &&\n            self.config.mode !== \"range\" &&\n            self.config.showMonths === 1)\n            focusOnDayElem(target);\n        else if (self.selectedDateElem !== undefined &&\n            self.hourElement === undefined) {\n            self.selectedDateElem && self.selectedDateElem.focus();\n        }\n        if (self.hourElement !== undefined)\n            self.hourElement !== undefined && self.hourElement.focus();\n        if (self.config.closeOnSelect) {\n            var single = self.config.mode === \"single\" && !self.config.enableTime;\n            var range = self.config.mode === \"range\" &&\n                self.selectedDates.length === 2 &&\n                !self.config.enableTime;\n            if (single || range) {\n                focusAndClose();\n            }\n        }\n        triggerChange();\n    }\n    var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n        minDate: [jumpToDate],\n        maxDate: [jumpToDate],\n        positionElement: [updatePositionElement],\n        clickOpens: [\n            function () {\n                if (self.config.clickOpens === true) {\n                    bind(self._input, \"focus\", self.open);\n                    bind(self._input, \"click\", self.open);\n                }\n                else {\n                    self._input.removeEventListener(\"focus\", self.open);\n                    self._input.removeEventListener(\"click\", self.open);\n                }\n            },\n        ],\n    };\n    function set(option, value) {\n        if (option !== null && typeof option === \"object\") {\n            Object.assign(self.config, option);\n            for (var key in option) {\n                if (CALLBACKS[key] !== undefined)\n                    CALLBACKS[key].forEach(function (x) { return x(); });\n            }\n        }\n        else {\n            self.config[option] = value;\n            if (CALLBACKS[option] !== undefined)\n                CALLBACKS[option].forEach(function (x) { return x(); });\n            else if (HOOKS.indexOf(option) > -1)\n                self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array)\n            dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n        else if (inputDate instanceof Date || typeof inputDate === \"number\")\n            dates = [self.parseDate(inputDate, format)];\n        else if (typeof inputDate === \"string\") {\n            switch (self.config.mode) {\n                case \"single\":\n                case \"time\":\n                    dates = [self.parseDate(inputDate, format)];\n                    break;\n                case \"multiple\":\n                    dates = inputDate\n                        .split(self.config.conjunction)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                case \"range\":\n                    dates = inputDate\n                        .split(self.l10n.rangeSeparator)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                default:\n                    break;\n            }\n        }\n        else\n            self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = (self.config.allowInvalidPreload\n            ? dates\n            : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n        if (self.config.mode === \"range\")\n            self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n    }\n    function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) { triggerChange = false; }\n        if (format === void 0) { format = self.config.dateFormat; }\n        if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n            return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.latestSelectedDateObj =\n            self.selectedDates[self.selectedDates.length - 1];\n        self.redraw();\n        jumpToDate(undefined, triggerChange);\n        setHoursFromDate();\n        if (self.selectedDates.length === 0) {\n            self.clear(false);\n        }\n        updateValue(triggerChange);\n        if (triggerChange)\n            triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n        return arr\n            .slice()\n            .map(function (rule) {\n            if (typeof rule === \"string\" ||\n                typeof rule === \"number\" ||\n                rule instanceof Date) {\n                return self.parseDate(rule, undefined, true);\n            }\n            else if (rule &&\n                typeof rule === \"object\" &&\n                rule.from &&\n                rule.to)\n                return {\n                    from: self.parseDate(rule.from, undefined),\n                    to: self.parseDate(rule.to, undefined),\n                };\n            return rule;\n        })\n            .filter(function (x) { return x; });\n    }\n    function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate ||\n            ((self.input.nodeName === \"INPUT\" ||\n                self.input.nodeName === \"TEXTAREA\") &&\n                self.input.placeholder &&\n                self.input.value === self.input.placeholder\n                ? null\n                : self.input.value);\n        if (preloadedDate)\n            setSelectedDate(preloadedDate, self.config.dateFormat);\n        self._initialDate =\n            self.selectedDates.length > 0\n                ? self.selectedDates[0]\n                : self.config.minDate &&\n                    self.config.minDate.getTime() > self.now.getTime()\n                    ? self.config.minDate\n                    : self.config.maxDate &&\n                        self.config.maxDate.getTime() < self.now.getTime()\n                        ? self.config.maxDate\n                        : self.now;\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n        if (self.selectedDates.length > 0)\n            self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined)\n            self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined)\n            self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime =\n            !!self.config.minDate &&\n                (self.config.minDate.getHours() > 0 ||\n                    self.config.minDate.getMinutes() > 0 ||\n                    self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime =\n            !!self.config.maxDate &&\n                (self.config.maxDate.getHours() > 0 ||\n                    self.config.maxDate.getMinutes() > 0 ||\n                    self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n        self.input = getInputElem();\n        if (!self.input) {\n            self.config.errorHandler(new Error(\"Invalid input element specified\"));\n            return;\n        }\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n        if (self.config.altInput) {\n            self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n            self._input = self.altInput;\n            self.altInput.placeholder = self.input.placeholder;\n            self.altInput.disabled = self.input.disabled;\n            self.altInput.required = self.input.required;\n            self.altInput.tabIndex = self.input.tabIndex;\n            self.altInput.type = \"text\";\n            self.input.setAttribute(\"type\", \"hidden\");\n            if (!self.config.static && self.input.parentNode)\n                self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n        if (!self.config.allowInput)\n            self._input.setAttribute(\"readonly\", \"readonly\");\n        updatePositionElement();\n    }\n    function updatePositionElement() {\n        self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n        var inputType = self.config.enableTime\n            ? self.config.noCalendar\n                ? \"time\"\n                : \"datetime-local\"\n            : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr =\n            inputType === \"datetime-local\"\n                ? \"Y-m-d\\\\TH:i:S\"\n                : inputType === \"date\"\n                    ? \"Y-m-d\"\n                    : \"H:i:S\";\n        if (self.selectedDates.length > 0) {\n            self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n        if (self.config.minDate)\n            self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate)\n            self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        if (self.input.getAttribute(\"step\"))\n            self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined)\n            self.altInput.type = \"hidden\";\n        try {\n            if (self.input.parentNode)\n                self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        }\n        catch (_a) { }\n        bind(self.mobileInput, \"change\", function (e) {\n            self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n            triggerEvent(\"onChange\");\n            triggerEvent(\"onClose\");\n        });\n    }\n    function toggle(e) {\n        if (self.isOpen === true)\n            return self.close();\n        self.open(e);\n    }\n    function triggerEvent(event, data) {\n        if (self.config === undefined)\n            return;\n        var hooks = self.config[event];\n        if (hooks !== undefined && hooks.length > 0) {\n            for (var i = 0; hooks[i] && i < hooks.length; i++)\n                hooks[i](self.selectedDates, self.input.value, self, data);\n        }\n        if (event === \"onChange\") {\n            self.input.dispatchEvent(createEvent(\"change\"));\n            self.input.dispatchEvent(createEvent(\"input\"));\n        }\n    }\n    function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n    }\n    function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n            var selectedDate = self.selectedDates[i];\n            if (selectedDate instanceof Date &&\n                compareDates(selectedDate, date) === 0)\n                return \"\" + i;\n        }\n        return false;\n    }\n    function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n            return false;\n        return (compareDates(date, self.selectedDates[0]) >= 0 &&\n            compareDates(date, self.selectedDates[1]) <= 0);\n    }\n    function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav)\n            return;\n        self.yearElements.forEach(function (yearElement, i) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                self.monthElements[i].textContent =\n                    monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n            }\n            else {\n                self.monthsDropdownContainer.value = d.getMonth().toString();\n            }\n            yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow =\n            self.config.minDate !== undefined &&\n                (self.currentYear === self.config.minDate.getFullYear()\n                    ? self.currentMonth <= self.config.minDate.getMonth()\n                    : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow =\n            self.config.maxDate !== undefined &&\n                (self.currentYear === self.config.maxDate.getFullYear()\n                    ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                    : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(specificFormat) {\n        var format = specificFormat ||\n            (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n        return self.selectedDates\n            .map(function (dObj) { return self.formatDate(dObj, format); })\n            .filter(function (d, i, arr) {\n            return self.config.mode !== \"range\" ||\n                self.config.enableTime ||\n                arr.indexOf(d) === i;\n        })\n            .join(self.config.mode !== \"range\"\n            ? self.config.conjunction\n            : self.l10n.rangeSeparator);\n    }\n    function updateValue(triggerChange) {\n        if (triggerChange === void 0) { triggerChange = true; }\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n            self.mobileInput.value =\n                self.latestSelectedDateObj !== undefined\n                    ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                    : \"\";\n        }\n        self.input.value = getDateStr(self.config.dateFormat);\n        if (self.altInput !== undefined) {\n            self.altInput.value = getDateStr(self.config.altFormat);\n        }\n        if (triggerChange !== false)\n            triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n        var eventTarget = getEventTarget(e);\n        var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n        var isNextMonth = self.nextMonthNav.contains(eventTarget);\n        if (isPrevMonth || isNextMonth) {\n            changeMonth(isPrevMonth ? -1 : 1);\n        }\n        else if (self.yearElements.indexOf(eventTarget) >= 0) {\n            eventTarget.select();\n        }\n        else if (eventTarget.classList.contains(\"arrowUp\")) {\n            self.changeYear(self.currentYear + 1);\n        }\n        else if (eventTarget.classList.contains(\"arrowDown\")) {\n            self.changeYear(self.currentYear - 1);\n        }\n    }\n    function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            self.amPM.textContent =\n                self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n            (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n        var newValue = curValue + step * delta;\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n            var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n            if (newValue < min) {\n                newValue =\n                    max +\n                        newValue +\n                        int(!isHourElem) +\n                        (int(isHourElem) && int(!self.amPM));\n                if (isMinuteElem)\n                    incrementNumInput(undefined, -1, self.hourElement);\n            }\n            else if (newValue > max) {\n                newValue =\n                    input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                if (isMinuteElem)\n                    incrementNumInput(undefined, 1, self.hourElement);\n            }\n            if (self.amPM &&\n                isHourElem &&\n                (step === 1\n                    ? newValue + curValue === 23\n                    : Math.abs(newValue - curValue) > step)) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            input.value = pad(newValue);\n        }\n    }\n    init();\n    return self;\n}\nfunction _flatpickr(nodeList, config) {\n    var nodes = Array.prototype.slice\n        .call(nodeList)\n        .filter(function (x) { return x instanceof HTMLElement; });\n    var instances = [];\n    for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        try {\n            if (node.getAttribute(\"data-fp-omit\") !== null)\n                continue;\n            if (node._flatpickr !== undefined) {\n                node._flatpickr.destroy();\n                node._flatpickr = undefined;\n            }\n            node._flatpickr = FlatpickrInstance(node, config || {});\n            instances.push(node._flatpickr);\n        }\n        catch (e) {\n            console.error(e);\n        }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n    typeof HTMLCollection !== \"undefined\" &&\n    typeof NodeList !== \"undefined\") {\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n    };\n}\nvar flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n        return _flatpickr(window.document.querySelectorAll(selector), config);\n    }\n    else if (selector instanceof Node) {\n        return _flatpickr([selector], config);\n    }\n    else {\n        return _flatpickr(selector, config);\n    }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n    en: __assign({}, English),\n    default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n    flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n    flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n}\nDate.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useId as s,useReducer as h,useEffect as v,useLayoutEffect as d,useRef as p,useImperativeHandle as m,useMemo as y,useCallback as _,useContext as b,useDebugValue as g}from\"preact/hooks\";export*from\"preact/hooks\";function S(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n,t){this.props=n,this.context=t}function w(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:C(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(E.prototype=new n).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function N(n){function t(t){var e=S({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var k=function(n,t){return null==n?null:r(r(n).map(t))},A={map:k,forEach:k,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},M=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r)};var O=e.unmount;function T(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=S({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return T(n,t,e)})),n}function F(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return F(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function I(){this.__u=0,this.t=null,this.__b=null}function L(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return t(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function D(){this.u=null,this.o=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),O&&O(n)},(I.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=L(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=F(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},I.prototype.componentWillUnmount=function(){this.t=[]},I.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=T(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){o(null,e.l),e.l=null,e.i=null},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n)},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n)}}),o(t(W,{context:e.context},n.__v),e.l)}function j(n,e){var r=t(P,{__v:n,i:e});return r.containerInfo=e,r}(D.prototype=new n).__a=function(n){var t=this,e=L(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u()};e?e(o):o()}},D.prototype.render=function(n){this.u=null,this.o=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},D.prototype.componentDidUpdate=D.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t)})};var z=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y=\"undefined\"!=typeof document,$=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function q(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function G(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var J=e.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}e.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var nn,tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!(\"value\"===o&&\"defaultValue\"in t&&null==i||Y&&\"children\"===o&&\"noscript\"===e||\"class\"===o||\"className\"===o)){var l=o.toLowerCase();\"defaultValue\"===o&&\"value\"in t&&null==t.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":\"translate\"===l&&\"no\"===i?i=!1:\"ondoubleclick\"===l?o=\"ondblclick\":\"onchange\"!==l||\"input\"!==e&&\"textarea\"!==e||$(t.type)?\"onfocus\"===l?o=\"onfocusin\":\"onblur\"===l?o=\"onfocusout\":H.test(o)?o=l:-1===e.indexOf(\"-\")&&B.test(o)?o=o.replace(Z,\"-$&\").toLowerCase():null===i&&(i=void 0):l=o=\"oninput\",\"oninput\"===l&&u[o=l]&&(o=\"oninputCapture\"),u[o]=i}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=z,en&&en(n)};var rn=e.__r;e.__r=function(n){rn&&rn(n),nn=n.__c};var un=e.diffed;e.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),nn=null};var on={ReactCurrentDispatcher:{current:{readContext:function(n){return nn.__n[n.__c].props.value}}}},ln=\"17.0.2\";function cn(n){return t.bind(null,n)}function fn(n){return!!n&&n.$$typeof===z}function an(n){return fn(n)&&n.type===u}function sn(n){return!!n&&!!n.displayName&&(\"string\"==typeof n.displayName||n.displayName instanceof String)&&n.displayName.startsWith(\"Memo(\")}function hn(n){return fn(n)?f.apply(null,arguments):n}function vn(n){return!!n.__k&&(o(null,n),!0)}function dn(n){return n&&(n.base||1===n.nodeType&&n)||null}var pn=function(n,t){return n(t)},mn=function(n,t){return n(t)},yn=u;function _n(n){n()}function bn(n){return n}function gn(){return[!1,_n]}var Sn=d,Cn=fn;function En(n,t){var e=t(),r=a({h:{__:e,v:t}}),u=r[0].h,o=r[1];return d(function(){u.__=e,u.v=t,wn(u)&&o({h:u})},[n,e,t]),v(function(){return wn(u)&&o({h:u}),n(function(){wn(u)&&o({h:u})})},[n]),e}function wn(n){var t,e,r=n.v,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}var xn={useState:a,useId:s,useReducer:h,useEffect:v,useLayoutEffect:d,useInsertionEffect:Sn,useTransition:gn,useDeferredValue:bn,useSyncExternalStore:En,startTransition:_n,useRef:p,useImperativeHandle:m,useMemo:y,useCallback:_,useContext:b,useDebugValue:g,version:\"17.0.2\",Children:A,render:q,hydrate:G,unmountComponentAtNode:vn,createPortal:j,createElement:t,createContext:l,createFactory:cn,cloneElement:hn,createRef:c,Fragment:u,isValidElement:fn,isElement:Cn,isFragment:an,isMemo:sn,findDOMNode:dn,Component:n,PureComponent:E,memo:w,forwardRef:N,flushSync:mn,unstable_batchedUpdates:pn,StrictMode:yn,Suspense:I,SuspenseList:D,lazy:U,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:on};export{A as Children,E as PureComponent,yn as StrictMode,I as Suspense,D as SuspenseList,on as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,hn as cloneElement,cn as createFactory,j as createPortal,xn as default,dn as findDOMNode,mn as flushSync,N as forwardRef,G as hydrate,Cn as isElement,an as isFragment,sn as isMemo,fn as isValidElement,U as lazy,w as memo,q as render,_n as startTransition,vn as unmountComponentAtNode,pn as unstable_batchedUpdates,bn as useDeferredValue,Sn as useInsertionEffect,En as useSyncExternalStore,gn as useTransition,ln as version};\n//# sourceMappingURL=compat.module.js.map\n","/*! @license DOMPurify 3.1.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.5/LICENSE */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n  const {\n    entries,\n    setPrototypeOf,\n    isFrozen,\n    getPrototypeOf,\n    getOwnPropertyDescriptor\n  } = Object;\n  let {\n    freeze,\n    seal,\n    create\n  } = Object; // eslint-disable-line import/no-mutable-exports\n  let {\n    apply,\n    construct\n  } = typeof Reflect !== 'undefined' && Reflect;\n  if (!freeze) {\n    freeze = function freeze(x) {\n      return x;\n    };\n  }\n  if (!seal) {\n    seal = function seal(x) {\n      return x;\n    };\n  }\n  if (!apply) {\n    apply = function apply(fun, thisValue, args) {\n      return fun.apply(thisValue, args);\n    };\n  }\n  if (!construct) {\n    construct = function construct(Func, args) {\n      return new Func(...args);\n    };\n  }\n  const arrayForEach = unapply(Array.prototype.forEach);\n  const arrayPop = unapply(Array.prototype.pop);\n  const arrayPush = unapply(Array.prototype.push);\n  const stringToLowerCase = unapply(String.prototype.toLowerCase);\n  const stringToString = unapply(String.prototype.toString);\n  const stringMatch = unapply(String.prototype.match);\n  const stringReplace = unapply(String.prototype.replace);\n  const stringIndexOf = unapply(String.prototype.indexOf);\n  const stringTrim = unapply(String.prototype.trim);\n  const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n  const regExpTest = unapply(RegExp.prototype.test);\n  const typeErrorCreate = unconstruct(TypeError);\n\n  /**\n   * Creates a new function that calls the given function with a specified thisArg and arguments.\n   *\n   * @param {Function} func - The function to be wrapped and called.\n   * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n   */\n  function unapply(func) {\n    return function (thisArg) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      return apply(func, thisArg, args);\n    };\n  }\n\n  /**\n   * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n   *\n   * @param {Function} func - The constructor function to be wrapped and called.\n   * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n   */\n  function unconstruct(func) {\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      return construct(func, args);\n    };\n  }\n\n  /**\n   * Add properties to a lookup table\n   *\n   * @param {Object} set - The set to which elements will be added.\n   * @param {Array} array - The array containing elements to be added to the set.\n   * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n   * @returns {Object} The modified set with added elements.\n   */\n  function addToSet(set, array) {\n    let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n    if (setPrototypeOf) {\n      // Make 'in' and truthy checks like Boolean(set.constructor)\n      // independent of any properties defined on Object.prototype.\n      // Prevent prototype setters from intercepting set as a this value.\n      setPrototypeOf(set, null);\n    }\n    let l = array.length;\n    while (l--) {\n      let element = array[l];\n      if (typeof element === 'string') {\n        const lcElement = transformCaseFunc(element);\n        if (lcElement !== element) {\n          // Config presets (e.g. tags.js, attrs.js) are immutable.\n          if (!isFrozen(array)) {\n            array[l] = lcElement;\n          }\n          element = lcElement;\n        }\n      }\n      set[element] = true;\n    }\n    return set;\n  }\n\n  /**\n   * Clean up an array to harden against CSPP\n   *\n   * @param {Array} array - The array to be cleaned.\n   * @returns {Array} The cleaned version of the array\n   */\n  function cleanArray(array) {\n    for (let index = 0; index < array.length; index++) {\n      const isPropertyExist = objectHasOwnProperty(array, index);\n      if (!isPropertyExist) {\n        array[index] = null;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * Shallow clone an object\n   *\n   * @param {Object} object - The object to be cloned.\n   * @returns {Object} A new object that copies the original.\n   */\n  function clone(object) {\n    const newObject = create(null);\n    for (const [property, value] of entries(object)) {\n      const isPropertyExist = objectHasOwnProperty(object, property);\n      if (isPropertyExist) {\n        if (Array.isArray(value)) {\n          newObject[property] = cleanArray(value);\n        } else if (value && typeof value === 'object' && value.constructor === Object) {\n          newObject[property] = clone(value);\n        } else {\n          newObject[property] = value;\n        }\n      }\n    }\n    return newObject;\n  }\n\n  /**\n   * This method automatically checks if the prop is function or getter and behaves accordingly.\n   *\n   * @param {Object} object - The object to look up the getter function in its prototype chain.\n   * @param {String} prop - The property name for which to find the getter function.\n   * @returns {Function} The getter function found in the prototype chain or a fallback function.\n   */\n  function lookupGetter(object, prop) {\n    while (object !== null) {\n      const desc = getOwnPropertyDescriptor(object, prop);\n      if (desc) {\n        if (desc.get) {\n          return unapply(desc.get);\n        }\n        if (typeof desc.value === 'function') {\n          return unapply(desc.value);\n        }\n      }\n      object = getPrototypeOf(object);\n    }\n    function fallbackValue() {\n      return null;\n    }\n    return fallbackValue;\n  }\n\n  const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n  // SVG\n  const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n  const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n  // List of SVG elements that are disallowed by default.\n  // We still need to know them so that we can do namespace\n  // checks properly in case one wants to add them to\n  // allow-list.\n  const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n  const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n  // Similarly to SVG, we want to know all MathML elements,\n  // even those that we disallow by default.\n  const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n  const text = freeze(['#text']);\n\n  const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n  const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n  const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n  const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n  // eslint-disable-next-line unicorn/better-regex\n  const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n  const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n  const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n  const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n  const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n  const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n  );\n\n  const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n  const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n  );\n\n  const DOCTYPE_NAME = seal(/^html$/i);\n  const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n  var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    MUSTACHE_EXPR: MUSTACHE_EXPR,\n    ERB_EXPR: ERB_EXPR,\n    TMPLIT_EXPR: TMPLIT_EXPR,\n    DATA_ATTR: DATA_ATTR,\n    ARIA_ATTR: ARIA_ATTR,\n    IS_ALLOWED_URI: IS_ALLOWED_URI,\n    IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE: ATTR_WHITESPACE,\n    DOCTYPE_NAME: DOCTYPE_NAME,\n    CUSTOM_ELEMENT: CUSTOM_ELEMENT\n  });\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n  const NODE_TYPE = {\n    element: 1,\n    attribute: 2,\n    text: 3,\n    cdataSection: 4,\n    entityReference: 5,\n    // Deprecated\n    entityNode: 6,\n    // Deprecated\n    progressingInstruction: 7,\n    comment: 8,\n    document: 9,\n    documentType: 10,\n    documentFragment: 11,\n    notation: 12 // Deprecated\n  };\n\n  const getGlobal = function getGlobal() {\n    return typeof window === 'undefined' ? null : window;\n  };\n\n  /**\n   * Creates a no-op policy for internal use only.\n   * Don't export this function outside this module!\n   * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n   * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n   * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n   * are not supported or creating the policy failed).\n   */\n  const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n    if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n      return null;\n    }\n\n    // Allow the callers to control the unique policy name\n    // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n    // Policy creation with duplicate names throws in Trusted Types.\n    let suffix = null;\n    const ATTR_NAME = 'data-tt-policy-suffix';\n    if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n      suffix = purifyHostElement.getAttribute(ATTR_NAME);\n    }\n    const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n    try {\n      return trustedTypes.createPolicy(policyName, {\n        createHTML(html) {\n          return html;\n        },\n        createScriptURL(scriptUrl) {\n          return scriptUrl;\n        }\n      });\n    } catch (_) {\n      // Policy creation failed (most likely another DOMPurify script has\n      // already run). Skip creating the policy, as this will only cause errors\n      // if TT are enforced.\n      console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n      return null;\n    }\n  };\n  function createDOMPurify() {\n    let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n    const DOMPurify = root => createDOMPurify(root);\n\n    /**\n     * Version label, exposed for easier checks\n     * if DOMPurify is up to date or not\n     */\n    DOMPurify.version = '3.1.5';\n\n    /**\n     * Array of elements that DOMPurify removed during sanitation.\n     * Empty if nothing was removed.\n     */\n    DOMPurify.removed = [];\n    if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n      // Not running in a browser, provide a factory function\n      // so that you can pass your own Window\n      DOMPurify.isSupported = false;\n      return DOMPurify;\n    }\n    let {\n      document\n    } = window;\n    const originalDocument = document;\n    const currentScript = originalDocument.currentScript;\n    const {\n      DocumentFragment,\n      HTMLTemplateElement,\n      Node,\n      Element,\n      NodeFilter,\n      NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n      HTMLFormElement,\n      DOMParser,\n      trustedTypes\n    } = window;\n    const ElementPrototype = Element.prototype;\n    const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n    const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n    const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n    const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n    // As per issue #47, the web-components registry is inherited by a\n    // new document created via createHTMLDocument. As per the spec\n    // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n    // a new empty registry is used when creating a template contents owner\n    // document, so we use that as our parent document to ensure nothing\n    // is inherited.\n    if (typeof HTMLTemplateElement === 'function') {\n      const template = document.createElement('template');\n      if (template.content && template.content.ownerDocument) {\n        document = template.content.ownerDocument;\n      }\n    }\n    let trustedTypesPolicy;\n    let emptyHTML = '';\n    const {\n      implementation,\n      createNodeIterator,\n      createDocumentFragment,\n      getElementsByTagName\n    } = document;\n    const {\n      importNode\n    } = originalDocument;\n    let hooks = {};\n\n    /**\n     * Expose whether this browser supports running the full DOMPurify.\n     */\n    DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n    const {\n      MUSTACHE_EXPR,\n      ERB_EXPR,\n      TMPLIT_EXPR,\n      DATA_ATTR,\n      ARIA_ATTR,\n      IS_SCRIPT_OR_DATA,\n      ATTR_WHITESPACE,\n      CUSTOM_ELEMENT\n    } = EXPRESSIONS;\n    let {\n      IS_ALLOWED_URI: IS_ALLOWED_URI$1\n    } = EXPRESSIONS;\n\n    /**\n     * We consider the elements and attributes below to be safe. Ideally\n     * don't add any new ones but feel free to remove unwanted ones.\n     */\n\n    /* allowed element names */\n    let ALLOWED_TAGS = null;\n    const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n    /* Allowed attribute names */\n    let ALLOWED_ATTR = null;\n    const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n    /*\n     * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n     * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n     * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n     * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n     */\n    let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false\n      }\n    }));\n\n    /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n    let FORBID_TAGS = null;\n\n    /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n    let FORBID_ATTR = null;\n\n    /* Decide if ARIA attributes are okay */\n    let ALLOW_ARIA_ATTR = true;\n\n    /* Decide if custom data attributes are okay */\n    let ALLOW_DATA_ATTR = true;\n\n    /* Decide if unknown protocols are okay */\n    let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n    /* Decide if self-closing tags in attributes are allowed.\n     * Usually removed due to a mXSS issue in jQuery 3.0 */\n    let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n    /* Output should be safe for common template engines.\n     * This means, DOMPurify removes data attributes, mustaches and ERB\n     */\n    let SAFE_FOR_TEMPLATES = false;\n\n    /* Output should be safe even for XML used within HTML and alike.\n     * This means, DOMPurify removes comments when containing risky content.\n     */\n    let SAFE_FOR_XML = true;\n\n    /* Decide if document with <html>... should be returned */\n    let WHOLE_DOCUMENT = false;\n\n    /* Track whether config is already set on this instance of DOMPurify. */\n    let SET_CONFIG = false;\n\n    /* Decide if all elements (e.g. style, script) must be children of\n     * document.body. By default, browsers might move them to document.head */\n    let FORCE_BODY = false;\n\n    /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n     * string (or a TrustedHTML object if Trusted Types are supported).\n     * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n     */\n    let RETURN_DOM = false;\n\n    /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n     * string  (or a TrustedHTML object if Trusted Types are supported) */\n    let RETURN_DOM_FRAGMENT = false;\n\n    /* Try to return a Trusted Type object instead of a string, return a string in\n     * case Trusted Types are not supported  */\n    let RETURN_TRUSTED_TYPE = false;\n\n    /* Output should be free from DOM clobbering attacks?\n     * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n     */\n    let SANITIZE_DOM = true;\n\n    /* Achieve full DOM Clobbering protection by isolating the namespace of named\n     * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n     *\n     * HTML/DOM spec rules that enable DOM Clobbering:\n     *   - Named Access on Window (§7.3.3)\n     *   - DOM Tree Accessors (§3.1.5)\n     *   - Form Element Parent-Child Relations (§4.10.3)\n     *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n     *   - HTMLCollection (§4.2.10.2)\n     *\n     * Namespace isolation is implemented by prefixing `id` and `name` attributes\n     * with a constant string, i.e., `user-content-`\n     */\n    let SANITIZE_NAMED_PROPS = false;\n    const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n    /* Keep element content when removing element? */\n    let KEEP_CONTENT = true;\n\n    /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n     * of importing it into a new Document and returning a sanitized copy */\n    let IN_PLACE = false;\n\n    /* Allow usage of profiles like html, svg and mathMl */\n    let USE_PROFILES = {};\n\n    /* Tags to ignore content of when KEEP_CONTENT is true */\n    let FORBID_CONTENTS = null;\n    const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n    /* Tags that are safe for data: URIs */\n    let DATA_URI_TAGS = null;\n    const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n    /* Attributes safe for values like \"javascript:\" */\n    let URI_SAFE_ATTRIBUTES = null;\n    const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n    const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n    const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n    const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n    /* Document namespace */\n    let NAMESPACE = HTML_NAMESPACE;\n    let IS_EMPTY_INPUT = false;\n\n    /* Allowed XHTML+XML namespaces */\n    let ALLOWED_NAMESPACES = null;\n    const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n    /* Parsing of strict XHTML documents */\n    let PARSER_MEDIA_TYPE = null;\n    const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n    const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n    let transformCaseFunc = null;\n\n    /* Keep a reference to config to pass to hooks */\n    let CONFIG = null;\n\n    /* Ideally, do not touch anything below this line */\n    /* ______________________________________________ */\n\n    const formElement = document.createElement('form');\n    const isRegexOrFunction = function isRegexOrFunction(testValue) {\n      return testValue instanceof RegExp || testValue instanceof Function;\n    };\n\n    /**\n     * _parseConfig\n     *\n     * @param  {Object} cfg optional config literal\n     */\n    // eslint-disable-next-line complexity\n    const _parseConfig = function _parseConfig() {\n      let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (CONFIG && CONFIG === cfg) {\n        return;\n      }\n\n      /* Shield configuration object from tampering */\n      if (!cfg || typeof cfg !== 'object') {\n        cfg = {};\n      }\n\n      /* Shield configuration object from prototype pollution */\n      cfg = clone(cfg);\n      PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n      // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n      transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n      /* Set configuration parameters */\n      ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n      ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n      ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n      URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n      // eslint-disable-line indent\n      cfg.ADD_URI_SAFE_ATTR,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n      DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n      // eslint-disable-line indent\n      cfg.ADD_DATA_URI_TAGS,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_DATA_URI_TAGS;\n      FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n      FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n      FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n      USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n      ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n      ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n      ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n      ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n      SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n      SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n      WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n      RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n      RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n      RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n      FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n      SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n      SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n      KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n      IN_PLACE = cfg.IN_PLACE || false; // Default false\n      IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n      NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n      CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n      }\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n      }\n      if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n        CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n      }\n      if (SAFE_FOR_TEMPLATES) {\n        ALLOW_DATA_ATTR = false;\n      }\n      if (RETURN_DOM_FRAGMENT) {\n        RETURN_DOM = true;\n      }\n\n      /* Parse profile info */\n      if (USE_PROFILES) {\n        ALLOWED_TAGS = addToSet({}, text);\n        ALLOWED_ATTR = [];\n        if (USE_PROFILES.html === true) {\n          addToSet(ALLOWED_TAGS, html$1);\n          addToSet(ALLOWED_ATTR, html);\n        }\n        if (USE_PROFILES.svg === true) {\n          addToSet(ALLOWED_TAGS, svg$1);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n        if (USE_PROFILES.svgFilters === true) {\n          addToSet(ALLOWED_TAGS, svgFilters);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n        if (USE_PROFILES.mathMl === true) {\n          addToSet(ALLOWED_TAGS, mathMl$1);\n          addToSet(ALLOWED_ATTR, mathMl);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n      }\n\n      /* Merge configuration parameters */\n      if (cfg.ADD_TAGS) {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n      if (cfg.ADD_ATTR) {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n      if (cfg.ADD_URI_SAFE_ATTR) {\n        addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n      }\n      if (cfg.FORBID_CONTENTS) {\n        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n          FORBID_CONTENTS = clone(FORBID_CONTENTS);\n        }\n        addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n      }\n\n      /* Add #text in case KEEP_CONTENT is set to true */\n      if (KEEP_CONTENT) {\n        ALLOWED_TAGS['#text'] = true;\n      }\n\n      /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n      if (WHOLE_DOCUMENT) {\n        addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n      }\n\n      /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n      if (ALLOWED_TAGS.table) {\n        addToSet(ALLOWED_TAGS, ['tbody']);\n        delete FORBID_TAGS.tbody;\n      }\n      if (cfg.TRUSTED_TYPES_POLICY) {\n        if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n          throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n        }\n        if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n          throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n        }\n\n        // Overwrite existing TrustedTypes policy.\n        trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n        // Sign local variables required by `sanitize`.\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      } else {\n        // Uninitialized policy, attempt to initialize the internal dompurify policy.\n        if (trustedTypesPolicy === undefined) {\n          trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n        }\n\n        // If creating the internal policy succeeded sign internal variables.\n        if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n          emptyHTML = trustedTypesPolicy.createHTML('');\n        }\n      }\n\n      // Prevent further manipulation of configuration.\n      // Not available in IE8, Safari 5, etc.\n      if (freeze) {\n        freeze(cfg);\n      }\n      CONFIG = cfg;\n    };\n    const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n    const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);\n\n    // Certain elements are allowed in both SVG and HTML\n    // namespace. We need to specify them explicitly\n    // so that they don't get erroneously deleted from\n    // HTML namespace.\n    const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n    /* Keep track of all possible SVG and MathML tags\n     * so that we can perform the namespace checks\n     * correctly. */\n    const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n    const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n    /**\n     * @param  {Element} element a DOM element whose namespace is being checked\n     * @returns {boolean} Return false if the element has a\n     *  namespace that a spec-compliant parser would never\n     *  return. Return true otherwise.\n     */\n    const _checkValidNamespace = function _checkValidNamespace(element) {\n      let parent = getParentNode(element);\n\n      // In JSDOM, if we're inside shadow DOM, then parentNode\n      // can be null. We just simulate parent in this case.\n      if (!parent || !parent.tagName) {\n        parent = {\n          namespaceURI: NAMESPACE,\n          tagName: 'template'\n        };\n      }\n      const tagName = stringToLowerCase(element.tagName);\n      const parentTagName = stringToLowerCase(parent.tagName);\n      if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return false;\n      }\n      if (element.namespaceURI === SVG_NAMESPACE) {\n        // The only way to switch from HTML namespace to SVG\n        // is via <svg>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'svg';\n        }\n\n        // The only way to switch from MathML to SVG is via`\n        // svg if parent is either <annotation-xml> or MathML\n        // text integration points.\n        if (parent.namespaceURI === MATHML_NAMESPACE) {\n          return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n        }\n\n        // We only allow elements that are defined in SVG\n        // spec. All others are disallowed in SVG namespace.\n        return Boolean(ALL_SVG_TAGS[tagName]);\n      }\n      if (element.namespaceURI === MATHML_NAMESPACE) {\n        // The only way to switch from HTML namespace to MathML\n        // is via <math>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'math';\n        }\n\n        // The only way to switch from SVG to MathML is via\n        // <math> and HTML integration points\n        if (parent.namespaceURI === SVG_NAMESPACE) {\n          return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n        }\n\n        // We only allow elements that are defined in MathML\n        // spec. All others are disallowed in MathML namespace.\n        return Boolean(ALL_MATHML_TAGS[tagName]);\n      }\n      if (element.namespaceURI === HTML_NAMESPACE) {\n        // The only way to switch from SVG to HTML is via\n        // HTML integration points, and from MathML to HTML\n        // is via MathML text integration points\n        if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n        if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n\n        // We disallow tags that are specific for MathML\n        // or SVG and should never appear in HTML namespace\n        return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n      }\n\n      // For XHTML and XML documents that support custom namespaces\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return true;\n      }\n\n      // The code should never reach this place (this means\n      // that the element somehow got namespace that is not\n      // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n      // Return false just in case.\n      return false;\n    };\n\n    /**\n     * _forceRemove\n     *\n     * @param  {Node} node a DOM node\n     */\n    const _forceRemove = function _forceRemove(node) {\n      arrayPush(DOMPurify.removed, {\n        element: node\n      });\n      try {\n        // eslint-disable-next-line unicorn/prefer-dom-node-remove\n        node.parentNode.removeChild(node);\n      } catch (_) {\n        node.remove();\n      }\n    };\n\n    /**\n     * _removeAttribute\n     *\n     * @param  {String} name an Attribute name\n     * @param  {Node} node a DOM node\n     */\n    const _removeAttribute = function _removeAttribute(name, node) {\n      try {\n        arrayPush(DOMPurify.removed, {\n          attribute: node.getAttributeNode(name),\n          from: node\n        });\n      } catch (_) {\n        arrayPush(DOMPurify.removed, {\n          attribute: null,\n          from: node\n        });\n      }\n      node.removeAttribute(name);\n\n      // We void attribute values for unremovable \"is\"\" attributes\n      if (name === 'is' && !ALLOWED_ATTR[name]) {\n        if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n          try {\n            _forceRemove(node);\n          } catch (_) {}\n        } else {\n          try {\n            node.setAttribute(name, '');\n          } catch (_) {}\n        }\n      }\n    };\n\n    /**\n     * _initDocument\n     *\n     * @param  {String} dirty a string of dirty markup\n     * @return {Document} a DOM, filled with the dirty markup\n     */\n    const _initDocument = function _initDocument(dirty) {\n      /* Create a HTML document */\n      let doc = null;\n      let leadingWhitespace = null;\n      if (FORCE_BODY) {\n        dirty = '<remove></remove>' + dirty;\n      } else {\n        /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n        const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n        leadingWhitespace = matches && matches[0];\n      }\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n        // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n        dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n      }\n      const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      /*\n       * Use the DOMParser API by default, fallback later if needs be\n       * DOMParser not work for svg when has multiple root element.\n       */\n      if (NAMESPACE === HTML_NAMESPACE) {\n        try {\n          doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n        } catch (_) {}\n      }\n\n      /* Use createHTMLDocument in case DOMParser is not available */\n      if (!doc || !doc.documentElement) {\n        doc = implementation.createDocument(NAMESPACE, 'template', null);\n        try {\n          doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n        } catch (_) {\n          // Syntax error if dirtyPayload is invalid xml\n        }\n      }\n      const body = doc.body || doc.documentElement;\n      if (dirty && leadingWhitespace) {\n        body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n      }\n\n      /* Work on whole document or just its body */\n      if (NAMESPACE === HTML_NAMESPACE) {\n        return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n      }\n      return WHOLE_DOCUMENT ? doc.documentElement : body;\n    };\n\n    /**\n     * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n     *\n     * @param  {Node} root The root element or node to start traversing on.\n     * @return {NodeIterator} The created NodeIterator\n     */\n    const _createNodeIterator = function _createNodeIterator(root) {\n      return createNodeIterator.call(root.ownerDocument || root, root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n    };\n\n    /**\n     * _isClobbered\n     *\n     * @param  {Node} elm element to check for clobbering attacks\n     * @return {Boolean} true if clobbered, false if safe\n     */\n    const _isClobbered = function _isClobbered(elm) {\n      return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n    };\n\n    /**\n     * Checks whether the given object is a DOM node.\n     *\n     * @param  {Node} object object to check whether it's a DOM node\n     * @return {Boolean} true is object is a DOM node\n     */\n    const _isNode = function _isNode(object) {\n      return typeof Node === 'function' && object instanceof Node;\n    };\n\n    /**\n     * _executeHook\n     * Execute user configurable hooks\n     *\n     * @param  {String} entryPoint  Name of the hook's entry point\n     * @param  {Node} currentNode node to work on with the hook\n     * @param  {Object} data additional hook parameters\n     */\n    const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n      if (!hooks[entryPoint]) {\n        return;\n      }\n      arrayForEach(hooks[entryPoint], hook => {\n        hook.call(DOMPurify, currentNode, data, CONFIG);\n      });\n    };\n\n    /**\n     * _sanitizeElements\n     *\n     * @protect nodeName\n     * @protect textContent\n     * @protect removeChild\n     *\n     * @param   {Node} currentNode to check for permission to exist\n     * @return  {Boolean} true if node was killed, false if left alive\n     */\n    const _sanitizeElements = function _sanitizeElements(currentNode) {\n      let content = null;\n\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeElements', currentNode, null);\n\n      /* Check if element is clobbered or can clobber */\n      if (_isClobbered(currentNode)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Now let's check the element's type and name */\n      const tagName = transformCaseFunc(currentNode.nodeName);\n\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeElement', currentNode, {\n        tagName,\n        allowedTags: ALLOWED_TAGS\n      });\n\n      /* Detect mXSS attempts abusing namespace confusion */\n      if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove any ocurrence of processing instructions */\n      if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove any kind of possibly harmful comments */\n      if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove element if anything forbids its presence */\n      if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n        /* Check if we have a custom element to handle */\n        if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n            return false;\n          }\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n            return false;\n          }\n        }\n\n        /* Keep content except for bad-listed elements */\n        if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n          const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n          const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n          if (childNodes && parentNode) {\n            const childCount = childNodes.length;\n            for (let i = childCount - 1; i >= 0; --i) {\n              const childClone = cloneNode(childNodes[i], true);\n              childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n              parentNode.insertBefore(childClone, getNextSibling(currentNode));\n            }\n          }\n        }\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Check whether element has a valid namespace */\n      if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Make sure that older browsers don't get fallback-tag mXSS */\n      if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Sanitize element content to be template-safe */\n      if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n        /* Get the element's text content */\n        content = currentNode.textContent;\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          content = stringReplace(content, expr, ' ');\n        });\n        if (currentNode.textContent !== content) {\n          arrayPush(DOMPurify.removed, {\n            element: currentNode.cloneNode()\n          });\n          currentNode.textContent = content;\n        }\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeElements', currentNode, null);\n      return false;\n    };\n\n    /**\n     * _isValidAttribute\n     *\n     * @param  {string} lcTag Lowercase tag name of containing element.\n     * @param  {string} lcName Lowercase attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid, otherwise false.\n     */\n    // eslint-disable-next-line complexity\n    const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n      /* Make sure attribute cannot clobber */\n      if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n        return false;\n      }\n\n      /* Allow valid data-* attributes: At least one character after \"-\"\n          (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n          XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n          We don't need to check the value; it's always URI safe. */\n      if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n        if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n          return false;\n        }\n        /* Check value is safe. First, is attr inert? If so, is safe */\n      } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n        return false;\n      } else ;\n      return true;\n    };\n\n    /**\n     * _isBasicCustomElement\n     * checks if at least one dash is included in tagName, and it's not the first char\n     * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n     *\n     * @param {string} tagName name of the tag of the node to sanitize\n     * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n     */\n    const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n      return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n    };\n\n    /**\n     * _sanitizeAttributes\n     *\n     * @protect attributes\n     * @protect nodeName\n     * @protect removeAttribute\n     * @protect setAttribute\n     *\n     * @param  {Node} currentNode to sanitize\n     */\n    const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeAttributes', currentNode, null);\n      const {\n        attributes\n      } = currentNode;\n\n      /* Check if we have attributes; if not we might have a text node */\n      if (!attributes) {\n        return;\n      }\n      const hookEvent = {\n        attrName: '',\n        attrValue: '',\n        keepAttr: true,\n        allowedAttributes: ALLOWED_ATTR\n      };\n      let l = attributes.length;\n\n      /* Go backwards over all attributes; safely remove bad ones */\n      while (l--) {\n        const attr = attributes[l];\n        const {\n          name,\n          namespaceURI,\n          value: attrValue\n        } = attr;\n        const lcName = transformCaseFunc(name);\n        let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n        /* Execute a hook if present */\n        hookEvent.attrName = lcName;\n        hookEvent.attrValue = value;\n        hookEvent.keepAttr = true;\n        hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n        _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n        value = hookEvent.attrValue;\n        /* Did the hooks approve of the attribute? */\n        if (hookEvent.forceKeepAttr) {\n          continue;\n        }\n\n        /* Remove attribute */\n        _removeAttribute(name, currentNode);\n\n        /* Did the hooks approve of the attribute? */\n        if (!hookEvent.keepAttr) {\n          continue;\n        }\n\n        /* Work around a security issue in jQuery 3.0 */\n        if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n          _removeAttribute(name, currentNode);\n          continue;\n        }\n\n        /* Work around a security issue with comments inside attributes */\n        if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n          _removeAttribute(name, currentNode);\n          continue;\n        }\n\n        /* Sanitize attribute content to be template-safe */\n        if (SAFE_FOR_TEMPLATES) {\n          arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n            value = stringReplace(value, expr, ' ');\n          });\n        }\n\n        /* Is `value` valid for this attribute? */\n        const lcTag = transformCaseFunc(currentNode.nodeName);\n        if (!_isValidAttribute(lcTag, lcName, value)) {\n          continue;\n        }\n\n        /* Full DOM Clobbering protection via namespace isolation,\n         * Prefix id and name attributes with `user-content-`\n         */\n        if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n          // Remove the attribute with this value\n          _removeAttribute(name, currentNode);\n\n          // Prefix the value and later re-create the attribute with the sanitized value\n          value = SANITIZE_NAMED_PROPS_PREFIX + value;\n        }\n\n        /* Handle attributes that require Trusted Types */\n        if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n          if (namespaceURI) ; else {\n            switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n              case 'TrustedHTML':\n                {\n                  value = trustedTypesPolicy.createHTML(value);\n                  break;\n                }\n              case 'TrustedScriptURL':\n                {\n                  value = trustedTypesPolicy.createScriptURL(value);\n                  break;\n                }\n            }\n          }\n        }\n\n        /* Handle invalid data-* attribute set by try-catching it */\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {}\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeAttributes', currentNode, null);\n    };\n\n    /**\n     * _sanitizeShadowDOM\n     *\n     * @param  {DocumentFragment} fragment to iterate over recursively\n     */\n    const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n      let shadowNode = null;\n      const shadowIterator = _createNodeIterator(fragment);\n\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeShadowDOM', fragment, null);\n      while (shadowNode = shadowIterator.nextNode()) {\n        /* Execute a hook if present */\n        _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n        /* Sanitize tags and elements */\n        if (_sanitizeElements(shadowNode)) {\n          continue;\n        }\n\n        /* Deep shadow DOM detected */\n        if (shadowNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(shadowNode.content);\n        }\n\n        /* Check attributes, sanitize if necessary */\n        _sanitizeAttributes(shadowNode);\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeShadowDOM', fragment, null);\n    };\n\n    /**\n     * Sanitize\n     * Public method providing core sanitation functionality\n     *\n     * @param {String|Node} dirty string or DOM node\n     * @param {Object} cfg object\n     */\n    // eslint-disable-next-line complexity\n    DOMPurify.sanitize = function (dirty) {\n      let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let body = null;\n      let importedNode = null;\n      let currentNode = null;\n      let returnNode = null;\n      /* Make sure we have a string to sanitize.\n        DO NOT return early, as this will return the wrong type if\n        the user has requested a DOM object rather than a string */\n      IS_EMPTY_INPUT = !dirty;\n      if (IS_EMPTY_INPUT) {\n        dirty = '<!-->';\n      }\n\n      /* Stringify, in case dirty is an object */\n      if (typeof dirty !== 'string' && !_isNode(dirty)) {\n        if (typeof dirty.toString === 'function') {\n          dirty = dirty.toString();\n          if (typeof dirty !== 'string') {\n            throw typeErrorCreate('dirty is not a string, aborting');\n          }\n        } else {\n          throw typeErrorCreate('toString is not a function');\n        }\n      }\n\n      /* Return dirty HTML if DOMPurify cannot run */\n      if (!DOMPurify.isSupported) {\n        return dirty;\n      }\n\n      /* Assign config vars */\n      if (!SET_CONFIG) {\n        _parseConfig(cfg);\n      }\n\n      /* Clean up removed elements */\n      DOMPurify.removed = [];\n\n      /* Check if dirty is correctly typed for IN_PLACE */\n      if (typeof dirty === 'string') {\n        IN_PLACE = false;\n      }\n      if (IN_PLACE) {\n        /* Do some early pre-sanitization to avoid unsafe root nodes */\n        if (dirty.nodeName) {\n          const tagName = transformCaseFunc(dirty.nodeName);\n          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n            throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n          }\n        }\n      } else if (dirty instanceof Node) {\n        /* If dirty is a DOM element, append to an empty document to avoid\n           elements being stripped by the parser */\n        body = _initDocument('<!---->');\n        importedNode = body.ownerDocument.importNode(dirty, true);\n        if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n          /* Node is already a body, use as is */\n          body = importedNode;\n        } else if (importedNode.nodeName === 'HTML') {\n          body = importedNode;\n        } else {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          body.appendChild(importedNode);\n        }\n      } else {\n        /* Exit directly if we have nothing to do */\n        if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1) {\n          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        }\n\n        /* Initialize the document to work on */\n        body = _initDocument(dirty);\n\n        /* Check we have a DOM node from the data */\n        if (!body) {\n          return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n        }\n      }\n\n      /* Remove first element node (ours) if FORCE_BODY is set */\n      if (body && FORCE_BODY) {\n        _forceRemove(body.firstChild);\n      }\n\n      /* Get node iterator */\n      const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n      /* Now start iterating over the created document */\n      while (currentNode = nodeIterator.nextNode()) {\n        /* Sanitize tags and elements */\n        if (_sanitizeElements(currentNode)) {\n          continue;\n        }\n\n        /* Shadow DOM detected, sanitize it */\n        if (currentNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(currentNode.content);\n        }\n\n        /* Check attributes, sanitize if necessary */\n        _sanitizeAttributes(currentNode);\n      }\n\n      /* If we sanitized `dirty` in-place, return it. */\n      if (IN_PLACE) {\n        return dirty;\n      }\n\n      /* Return sanitized string or DOM */\n      if (RETURN_DOM) {\n        if (RETURN_DOM_FRAGMENT) {\n          returnNode = createDocumentFragment.call(body.ownerDocument);\n          while (body.firstChild) {\n            // eslint-disable-next-line unicorn/prefer-dom-node-append\n            returnNode.appendChild(body.firstChild);\n          }\n        } else {\n          returnNode = body;\n        }\n        if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n          /*\n            AdoptNode() is not used because internal state is not reset\n            (e.g. the past names map of a HTMLFormElement), this is safe\n            in theory but we would rather not risk another attack vector.\n            The state that is cloned by importNode() is explicitly defined\n            by the specs.\n          */\n          returnNode = importNode.call(originalDocument, returnNode, true);\n        }\n        return returnNode;\n      }\n      let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n      /* Serialize doctype if allowed */\n      if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n        serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n      }\n\n      /* Sanitize final string template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          serializedHTML = stringReplace(serializedHTML, expr, ' ');\n        });\n      }\n      return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n    };\n\n    /**\n     * Public method to set the configuration once\n     * setConfig\n     *\n     * @param {Object} cfg configuration object\n     */\n    DOMPurify.setConfig = function () {\n      let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      _parseConfig(cfg);\n      SET_CONFIG = true;\n    };\n\n    /**\n     * Public method to remove the configuration\n     * clearConfig\n     *\n     */\n    DOMPurify.clearConfig = function () {\n      CONFIG = null;\n      SET_CONFIG = false;\n    };\n\n    /**\n     * Public method to check if an attribute value is valid.\n     * Uses last set config, if any. Otherwise, uses config defaults.\n     * isValidAttribute\n     *\n     * @param  {String} tag Tag name of containing element.\n     * @param  {String} attr Attribute name.\n     * @param  {String} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n     */\n    DOMPurify.isValidAttribute = function (tag, attr, value) {\n      /* Initialize shared config vars if necessary. */\n      if (!CONFIG) {\n        _parseConfig({});\n      }\n      const lcTag = transformCaseFunc(tag);\n      const lcName = transformCaseFunc(attr);\n      return _isValidAttribute(lcTag, lcName, value);\n    };\n\n    /**\n     * AddHook\n     * Public method to add DOMPurify hooks\n     *\n     * @param {String} entryPoint entry point for the hook to add\n     * @param {Function} hookFunction function to execute\n     */\n    DOMPurify.addHook = function (entryPoint, hookFunction) {\n      if (typeof hookFunction !== 'function') {\n        return;\n      }\n      hooks[entryPoint] = hooks[entryPoint] || [];\n      arrayPush(hooks[entryPoint], hookFunction);\n    };\n\n    /**\n     * RemoveHook\n     * Public method to remove a DOMPurify hook at a given entryPoint\n     * (pops it from the stack of hooks if more are present)\n     *\n     * @param {String} entryPoint entry point for the hook to remove\n     * @return {Function} removed(popped) hook\n     */\n    DOMPurify.removeHook = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        return arrayPop(hooks[entryPoint]);\n      }\n    };\n\n    /**\n     * RemoveHooks\n     * Public method to remove all DOMPurify hooks at a given entryPoint\n     *\n     * @param  {String} entryPoint entry point for the hooks to remove\n     */\n    DOMPurify.removeHooks = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        hooks[entryPoint] = [];\n      }\n    };\n\n    /**\n     * RemoveAllHooks\n     * Public method to remove all DOMPurify hooks\n     */\n    DOMPurify.removeAllHooks = function () {\n      hooks = {};\n    };\n    return DOMPurify;\n  }\n  var purify = createDOMPurify();\n\n  return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","const CLASS_PATTERN = /^class[ {]/;\n\n\n/**\n * @param {function} fn\n *\n * @return {boolean}\n */\nfunction isClass(fn) {\n  return CLASS_PATTERN.test(fn.toString());\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isArray(obj) {\n  return Array.isArray(obj);\n}\n\n/**\n * @param {any} obj\n * @param {string} prop\n *\n * @return {boolean}\n */\nfunction hasOwnProp(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n/**\n * @typedef {import('./index.js').InjectAnnotated } InjectAnnotated\n */\n\n/**\n * @template T\n *\n * @params {[...string[], T] | ...string[], T} args\n *\n * @return {T & InjectAnnotated}\n */\nfunction annotate(...args) {\n\n  if (args.length === 1 && isArray(args[0])) {\n    args = args[0];\n  }\n\n  args = [ ...args ];\n\n  const fn = args.pop();\n\n  fn.$inject = args;\n\n  return fn;\n}\n\n\n// Current limitations:\n// - can't put into \"function arg\" comments\n// function /* (no parenthesis like this) */ (){}\n// function abc( /* xx (no parenthesis like this) */ a, b) {}\n//\n// Just put the comment before function or inside:\n// /* (((this is fine))) */ function(a, b) {}\n// function abc(a) { /* (((this is fine))) */}\n//\n// - can't reliably auto-annotate constructor; we'll match the\n// first constructor(...) pattern found which may be the one\n// of a nested class, too.\n\nconst CONSTRUCTOR_ARGS = /constructor\\s*[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARGS = /^(?:async\\s+)?(?:function\\s*[^(]*)?(?:\\(\\s*([^)]*)\\)|(\\w+))/m;\nconst FN_ARG = /\\/\\*([^*]*)\\*\\//m;\n\n/**\n * @param {unknown} fn\n *\n * @return {string[]}\n */\nfunction parseAnnotations(fn) {\n\n  if (typeof fn !== 'function') {\n    throw new Error(`Cannot annotate \"${fn}\". Expected a function!`);\n  }\n\n  const match = fn.toString().match(isClass(fn) ? CONSTRUCTOR_ARGS : FN_ARGS);\n\n  // may parse class without constructor\n  if (!match) {\n    return [];\n  }\n\n  const args = match[1] || match[2];\n\n  return args && args.split(',').map(arg => {\n    const argMatch = arg.match(FN_ARG);\n    return (argMatch && argMatch[1] || arg).trim();\n  }) || [];\n}\n\n/**\n * @typedef { import('./index.js').ModuleDeclaration } ModuleDeclaration\n * @typedef { import('./index.js').ModuleDefinition } ModuleDefinition\n * @typedef { import('./index.js').InjectorContext } InjectorContext\n *\n * @typedef { import('./index.js').TypedDeclaration<any, any> } TypedDeclaration\n */\n\n/**\n * Create a new injector with the given modules.\n *\n * @param {ModuleDefinition[]} modules\n * @param {InjectorContext} [_parent]\n */\nfunction Injector(modules, _parent) {\n\n  const parent = _parent || /** @type InjectorContext */ ({\n    get: function(name, strict) {\n      currentlyResolving.push(name);\n\n      if (strict === false) {\n        return null;\n      } else {\n        throw error(`No provider for \"${ name }\"!`);\n      }\n    }\n  });\n\n  const currentlyResolving = [];\n  const providers = this._providers = Object.create(parent._providers || null);\n  const instances = this._instances = Object.create(null);\n\n  const self = instances.injector = this;\n\n  const error = function(msg) {\n    const stack = currentlyResolving.join(' -> ');\n    currentlyResolving.length = 0;\n    return new Error(stack ? `${ msg } (Resolving: ${ stack })` : msg);\n  };\n\n  /**\n   * Return a named service.\n   *\n   * @param {string} name\n   * @param {boolean} [strict=true] if false, resolve missing services to null\n   *\n   * @return {any}\n   */\n  function get(name, strict) {\n    if (!providers[name] && name.includes('.')) {\n\n      const parts = name.split('.');\n      let pivot = get(/** @type { string } */ (parts.shift()));\n\n      while (parts.length) {\n        pivot = pivot[/** @type { string } */ (parts.shift())];\n      }\n\n      return pivot;\n    }\n\n    if (hasOwnProp(instances, name)) {\n      return instances[name];\n    }\n\n    if (hasOwnProp(providers, name)) {\n      if (currentlyResolving.indexOf(name) !== -1) {\n        currentlyResolving.push(name);\n        throw error('Cannot resolve circular dependency!');\n      }\n\n      currentlyResolving.push(name);\n      instances[name] = providers[name][0](providers[name][1]);\n      currentlyResolving.pop();\n\n      return instances[name];\n    }\n\n    return parent.get(name, strict);\n  }\n\n  function fnDef(fn, locals) {\n\n    if (typeof locals === 'undefined') {\n      locals = {};\n    }\n\n    if (typeof fn !== 'function') {\n      if (isArray(fn)) {\n        fn = annotate(fn.slice());\n      } else {\n        throw error(`Cannot invoke \"${ fn }\". Expected a function!`);\n      }\n    }\n\n    /**\n     * @type {string[]}\n     */\n    const inject = fn.$inject || parseAnnotations(fn);\n    const dependencies = inject.map(dep => {\n      if (hasOwnProp(locals, dep)) {\n        return locals[dep];\n      } else {\n        return get(dep);\n      }\n    });\n\n    return {\n      fn: fn,\n      dependencies\n    };\n  }\n\n  /**\n   * Instantiate the given type, injecting dependencies.\n   *\n   * @template T\n   *\n   * @param { Function | [...string[], Function ]} type\n   *\n   * @return T\n   */\n  function instantiate(type) {\n    const {\n      fn,\n      dependencies\n    } = fnDef(type);\n\n    // instantiate var args constructor\n    const Constructor = Function.prototype.bind.call(fn, null, ...dependencies);\n\n    return new Constructor();\n  }\n\n  /**\n   * Invoke the given function, injecting dependencies. Return the result.\n   *\n   * @template T\n   *\n   * @param { Function | [...string[], Function ]} func\n   * @param { Object } [context]\n   * @param { Object } [locals]\n   *\n   * @return {T} invocation result\n   */\n  function invoke(func, context, locals) {\n    const {\n      fn,\n      dependencies\n    } = fnDef(func, locals);\n\n    return fn.apply(context, dependencies);\n  }\n\n  /**\n   * @param {Injector} childInjector\n   *\n   * @return {Function}\n   */\n  function createPrivateInjectorFactory(childInjector) {\n    return annotate(key => childInjector.get(key));\n  }\n\n  /**\n   * @param {ModuleDefinition[]} modules\n   * @param {string[]} [forceNewInstances]\n   *\n   * @return {Injector}\n   */\n  function createChild(modules, forceNewInstances) {\n    if (forceNewInstances && forceNewInstances.length) {\n      const fromParentModule = Object.create(null);\n      const matchedScopes = Object.create(null);\n\n      const privateInjectorsCache = [];\n      const privateChildInjectors = [];\n      const privateChildFactories = [];\n\n      let provider;\n      let cacheIdx;\n      let privateChildInjector;\n      let privateChildInjectorFactory;\n\n      for (let name in providers) {\n        provider = providers[name];\n\n        if (forceNewInstances.indexOf(name) !== -1) {\n          if (provider[2] === 'private') {\n            cacheIdx = privateInjectorsCache.indexOf(provider[3]);\n            if (cacheIdx === -1) {\n              privateChildInjector = provider[3].createChild([], forceNewInstances);\n              privateChildInjectorFactory = createPrivateInjectorFactory(privateChildInjector);\n              privateInjectorsCache.push(provider[3]);\n              privateChildInjectors.push(privateChildInjector);\n              privateChildFactories.push(privateChildInjectorFactory);\n              fromParentModule[name] = [ privateChildInjectorFactory, name, 'private', privateChildInjector ];\n            } else {\n              fromParentModule[name] = [ privateChildFactories[cacheIdx], name, 'private', privateChildInjectors[cacheIdx] ];\n            }\n          } else {\n            fromParentModule[name] = [ provider[2], provider[1] ];\n          }\n          matchedScopes[name] = true;\n        }\n\n        if ((provider[2] === 'factory' || provider[2] === 'type') && provider[1].$scope) {\n          /* jshint -W083 */\n          forceNewInstances.forEach(scope => {\n            if (provider[1].$scope.indexOf(scope) !== -1) {\n              fromParentModule[name] = [ provider[2], provider[1] ];\n              matchedScopes[scope] = true;\n            }\n          });\n        }\n      }\n\n      forceNewInstances.forEach(scope => {\n        if (!matchedScopes[scope]) {\n          throw new Error('No provider for \"' + scope + '\". Cannot use provider from the parent!');\n        }\n      });\n\n      modules.unshift(fromParentModule);\n    }\n\n    return new Injector(modules, self);\n  }\n\n  const factoryMap = {\n    factory: invoke,\n    type: instantiate,\n    value: function(value) {\n      return value;\n    }\n  };\n\n  /**\n   * @param {ModuleDefinition} moduleDefinition\n   * @param {Injector} injector\n   */\n  function createInitializer(moduleDefinition, injector) {\n\n    const initializers = moduleDefinition.__init__ || [];\n\n    return function() {\n      initializers.forEach(initializer => {\n\n        // eagerly resolve component (fn or string)\n        if (typeof initializer === 'string') {\n          injector.get(initializer);\n        } else {\n          injector.invoke(initializer);\n        }\n      });\n    };\n  }\n\n  /**\n   * @param {ModuleDefinition} moduleDefinition\n   */\n  function loadModule(moduleDefinition) {\n\n    const moduleExports = moduleDefinition.__exports__;\n\n    // private module\n    if (moduleExports) {\n      const nestedModules = moduleDefinition.__modules__;\n\n      const clonedModule = Object.keys(moduleDefinition).reduce((clonedModule, key) => {\n\n        if (key !== '__exports__' && key !== '__modules__' && key !== '__init__' && key !== '__depends__') {\n          clonedModule[key] = moduleDefinition[key];\n        }\n\n        return clonedModule;\n      }, Object.create(null));\n\n      const childModules = (nestedModules || []).concat(clonedModule);\n\n      const privateInjector = createChild(childModules);\n      const getFromPrivateInjector = annotate(function(key) {\n        return privateInjector.get(key);\n      });\n\n      moduleExports.forEach(function(key) {\n        providers[key] = [ getFromPrivateInjector, key, 'private', privateInjector ];\n      });\n\n      // ensure child injector initializes\n      const initializers = (moduleDefinition.__init__ || []).slice();\n\n      initializers.unshift(function() {\n        privateInjector.init();\n      });\n\n      moduleDefinition = Object.assign({}, moduleDefinition, {\n        __init__: initializers\n      });\n\n      return createInitializer(moduleDefinition, privateInjector);\n    }\n\n    // normal module\n    Object.keys(moduleDefinition).forEach(function(key) {\n\n      if (key === '__init__' || key === '__depends__') {\n        return;\n      }\n\n      const typeDeclaration = /** @type { TypedDeclaration } */ (\n        moduleDefinition[key]\n      );\n\n      if (typeDeclaration[2] === 'private') {\n        providers[key] = typeDeclaration;\n        return;\n      }\n\n      const type = typeDeclaration[0];\n      const value = typeDeclaration[1];\n\n      providers[key] = [ factoryMap[type], arrayUnwrap(type, value), type ];\n    });\n\n    return createInitializer(moduleDefinition, self);\n  }\n\n  /**\n   * @param {ModuleDefinition[]} moduleDefinitions\n   * @param {ModuleDefinition} moduleDefinition\n   *\n   * @return {ModuleDefinition[]}\n   */\n  function resolveDependencies(moduleDefinitions, moduleDefinition) {\n\n    if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n      return moduleDefinitions;\n    }\n\n    moduleDefinitions = (moduleDefinition.__depends__ || []).reduce(resolveDependencies, moduleDefinitions);\n\n    if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n      return moduleDefinitions;\n    }\n\n    return moduleDefinitions.concat(moduleDefinition);\n  }\n\n  /**\n   * @param {ModuleDefinition[]} moduleDefinitions\n   *\n   * @return { () => void } initializerFn\n   */\n  function bootstrap(moduleDefinitions) {\n\n    const initializers = moduleDefinitions\n      .reduce(resolveDependencies, [])\n      .map(loadModule);\n\n    let initialized = false;\n\n    return function() {\n\n      if (initialized) {\n        return;\n      }\n\n      initialized = true;\n\n      initializers.forEach(initializer => initializer());\n    };\n  }\n\n  // public API\n  this.get = get;\n  this.invoke = invoke;\n  this.instantiate = instantiate;\n  this.createChild = createChild;\n\n  // setup\n  this.init = bootstrap(modules);\n}\n\n\n// helpers ///////////////\n\nfunction arrayUnwrap(type, value) {\n  if (type !== 'value' && isArray(value)) {\n    value = annotate(value.slice());\n  }\n\n  return value;\n}\n\nexport { Injector, annotate, parseAnnotations };\n//# sourceMappingURL=index.js.map\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n,\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  get ianaName() {\n    return this.name;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get isUniversal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new SystemZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"system\";\n  }\n\n  /** @override **/\n  get name() {\n    return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"system\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n  if (!dtfCache[zone]) {\n    dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zone,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      era: \"short\",\n    });\n  }\n  return dtfCache[zone];\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  era: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (type === \"era\") {\n      filled[pos] = value;\n    } else if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    if (!ianaZoneCache[name]) {\n      ianaZoneCache[name] = new IANAZone(name);\n    }\n    return ianaZoneCache[name];\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache = {};\n    dtfCache = {};\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return this.isValidZone(s);\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    if (!zone) {\n      return false;\n    }\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /** @override **/\n  get type() {\n    return \"iana\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n      ? partsOffset(dtf, date)\n      : hackyOffset(dtf, date);\n\n    if (adOrBc === \"BC\") {\n      year = -Math.abs(year) + 1;\n    }\n\n    // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n    const adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0,\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /** @override **/\n  get isValid() {\n    return this.valid;\n  }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlLFCache[key];\n  if (!dtf) {\n    dtf = new Intl.ListFormat(locString, opts);\n    intlLFCache[key] = dtf;\n  }\n  return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache[key];\n  if (!dtf) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache[key] = dtf;\n  }\n  return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache[key];\n  if (!inf) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache[key] = inf;\n  }\n  return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache[key];\n  if (!inf) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache[key] = inf;\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n    return sysLocaleCache;\n  }\n}\n\nlet weekInfoCache = {};\nfunction getCachedWeekInfo(locString) {\n  let data = weekInfoCache[locString];\n  if (!data) {\n    const locale = new Intl.Locale(locString);\n    // browsers currently implement this as a property, but spec says it should be a getter function\n    data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n    weekInfoCache[locString] = data;\n  }\n  return data;\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  // private subtags and unicode subtags have ordering requirements,\n  // and we're not properly parsing this, so just strip out the\n  // private ones if they exist.\n  const xIndex = localeStr.indexOf(\"-x-\");\n  if (xIndex !== -1) {\n    localeStr = localeStr.substring(0, xIndex);\n  }\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    let selectedStr;\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n      selectedStr = localeStr;\n    } catch (e) {\n      const smaller = localeStr.substring(0, uIndex);\n      options = getCachedDTF(smaller).resolvedOptions();\n      selectedStr = smaller;\n    }\n\n    const { numberingSystem, calendar } = options;\n    return [selectedStr, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    if (!localeStr.includes(\"-u-\")) {\n      localeStr += \"-u\";\n    }\n\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2009, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n  const mode = loc.listingMode();\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    const { padTo, floor, ...otherOpts } = opts;\n\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = { useGrouping: false, ...opts };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n    this.originalZone = undefined;\n\n    let z = undefined;\n    if (this.opts.timeZone) {\n      // Don't apply any workarounds if a timeZone is explicitly provided in opts\n      this.dt = dt;\n    } else if (dt.zone.type === \"fixed\") {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n        // we manually apply the offset and substitute the zone as needed.\n        z = \"UTC\";\n        this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n        this.originalZone = dt.zone;\n      }\n    } else if (dt.zone.type === \"system\") {\n      this.dt = dt;\n    } else if (dt.zone.type === \"iana\") {\n      this.dt = dt;\n      z = dt.zone.name;\n    } else {\n      // Custom zones can have any offset / offsetName so we just manually\n      // apply the offset and substitute the zone as needed.\n      z = \"UTC\";\n      this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n      this.originalZone = dt.zone;\n    }\n\n    const intlOpts = { ...this.opts };\n    intlOpts.timeZone = intlOpts.timeZone || z;\n    this.dtf = getCachedDTF(intl, intlOpts);\n  }\n\n  format() {\n    if (this.originalZone) {\n      // If we have to substitute in the actual zone name, we have to use\n      // formatToParts so that the timezone can be replaced.\n      return this.formatToParts()\n        .map(({ value }) => value)\n        .join(\"\");\n    }\n    return this.dtf.format(this.dt.toJSDate());\n  }\n\n  formatToParts() {\n    const parts = this.dtf.formatToParts(this.dt.toJSDate());\n    if (this.originalZone) {\n      return parts.map((part) => {\n        if (part.type === \"timeZoneName\") {\n          const offsetName = this.originalZone.offsetName(this.dt.ts, {\n            locale: this.dt.locale,\n            format: this.opts.timeZoneName,\n          });\n          return {\n            ...part,\n            value: offsetName,\n          };\n        } else {\n          return part;\n        }\n      });\n    }\n    return parts;\n  }\n\n  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = { style: \"long\", ...opts };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\nconst fallbackWeekSettings = {\n  firstDay: 1,\n  minimalDays: 4,\n  weekend: [6, 7],\n};\n\n/**\n * @private\n */\n\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(\n      opts.locale,\n      opts.numberingSystem,\n      opts.outputCalendar,\n      opts.weekSettings,\n      opts.defaultToEN\n    );\n  }\n\n  static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale;\n    // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n    const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n    const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n    const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache = {};\n    intlNumCache = {};\n    intlRelCache = {};\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n  }\n\n  constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.weekSettings = weekSettings;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness =\n      (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n      (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        validateWeekSettings(alts.weekSettings) || this.weekSettings,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: true });\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: false });\n  }\n\n  months(length, format = false) {\n    return listStuff(this, length, English.months, () => {\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false) {\n    return listStuff(this, length, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems() {\n    return listStuff(\n      this,\n      undefined,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            (dt) => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length) {\n    return listStuff(this, length, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find((m) => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n    );\n  }\n\n  getWeekSettings() {\n    if (this.weekSettings) {\n      return this.weekSettings;\n    } else if (!hasLocaleWeekInfo()) {\n      return fallbackWeekSettings;\n    } else {\n      return getCachedWeekInfo(this.locale);\n    }\n  }\n\n  getStartOfWeek() {\n    return this.getWeekSettings().firstDay;\n  }\n\n  getMinDaysInFirstWeek() {\n    return this.getWeekSettings().minimalDays;\n  }\n\n  getWeekendDays() {\n    return this.getWeekSettings().weekend;\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nexport const monthsShort = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"],\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n      ? units[unit][0]\n      : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hourCycle\",\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /** @override **/\n  get type() {\n    return \"fixed\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  get ianaName() {\n    if (this.fixed === 0) {\n      return \"Etc/UTC\";\n    } else {\n      return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n    }\n  }\n\n  /** @override **/\n  offsetName() {\n    return this.name;\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return true;\n  }\n\n  /** @override **/\n  offset() {\n    return this.fixed;\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"default\") return defaultZone;\n    else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n","/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport function hasLocaleWeekInfo() {\n  try {\n    return (\n      typeof Intl !== \"undefined\" &&\n      !!Intl.Locale &&\n      (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n    );\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n  if (settings == null) {\n    return null;\n  } else if (typeof settings !== \"object\") {\n    throw new InvalidArgumentError(\"Week settings must be an object\");\n  } else {\n    if (\n      !integerBetween(settings.firstDay, 1, 7) ||\n      !integerBetween(settings.minimalDays, 1, 7) ||\n      !Array.isArray(settings.weekend) ||\n      settings.weekend.some((v) => !integerBetween(v, 1, 7))\n    ) {\n      throw new InvalidArgumentError(\"Invalid week settings\");\n    }\n    return {\n      firstDay: settings.firstDay,\n      minimalDays: settings.minimalDays,\n      weekend: Array.from(settings.weekend),\n    };\n  }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const isNeg = input < 0;\n  let padded;\n  if (isNeg) {\n    padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n  } else {\n    padded = (\"\" + input).padStart(n, \"0\");\n  }\n  return padded;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n  const factor = 10 ** digits,\n    rounder = towardZero ? Math.trunc : Math.round;\n  return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n    // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n    // the calculations done by Date.UTC are using year 2000 - which is incorrect\n    d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n  }\n  return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n  const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n  return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n  const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n  return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hourCycle: \"h23\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n  const parsed = new Intl.DateTimeFormat(locale, modified)\n    .formatToParts(date)\n    .find((m) => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\n\nlet now = () => Date.now(),\n  defaultZone = \"system\",\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  twoDigitCutoffYear = 60,\n  throwOnInvalid,\n  defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * Use the value \"system\" to reset this value to the system's time zone.\n   * @type {string}\n   */\n  static set defaultZone(zone) {\n    defaultZone = zone;\n  }\n\n  /**\n   * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n   * The default value is the system's time zone (the one set on the machine that runs this code).\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return normalizeZone(defaultZone, SystemZone.instance);\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * @typedef {Object} WeekSettings\n   * @property {number} firstDay\n   * @property {number} minimalDays\n   * @property {number[]} weekend\n   */\n\n  /**\n   * @return {WeekSettings|null}\n   */\n  static get defaultWeekSettings() {\n    return defaultWeekSettings;\n  }\n\n  /**\n   * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n   * how many days are required in the first week of a year.\n   * Does not affect existing instances.\n   *\n   * @param {WeekSettings|null} weekSettings\n   */\n  static set defaultWeekSettings(weekSettings) {\n    defaultWeekSettings = validateWeekSettings(weekSettings);\n  }\n\n  /**\n   * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n   * @type {number}\n   */\n  static get twoDigitCutoffYear() {\n    return twoDigitCutoffYear;\n  }\n\n  /**\n   * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n   * @type {number}\n   * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpreted as current century\n   * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050\n   * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n   * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n   */\n  static set twoDigitCutoffYear(cutoffYear) {\n    twoDigitCutoffYear = cutoffYear % 100;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n  }\n}\n","export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n","import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger,\n  isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nexport function dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  const js = d.getUTCDay();\n\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex((i) => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n  return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n  let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n  } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData;\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n  const hasLocaleWeekData =\n    !isUndefined(obj.localWeekday) ||\n    !isUndefined(obj.localWeekNumber) ||\n    !isUndefined(obj.localWeekYear);\n  if (hasLocaleWeekData) {\n    const hasIsoWeekData =\n      !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n    if (hasIsoWeekData) {\n      throw new ConflictingSpecificationError(\n        \"Cannot mix locale-based week fields with ISO-based week fields\"\n      );\n    }\n    if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n    if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n    if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n    delete obj.localWeekday;\n    delete obj.localWeekNumber;\n    delete obj.localWeekYear;\n    return {\n      minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n      startOfWeek: loc.getStartOfWeek(),\n    };\n  } else {\n    return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n  }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(\n      obj.weekNumber,\n      1,\n      weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n    ),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.weekNumber);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    // white-space is always considered a literal in user-provided formats\n    // the \" \" token has a special meaning (see unitForToken)\n\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        if (currentFull.length > 0) {\n          splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  dtFormatter(dt, opts = {}) {\n    return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n  }\n\n  formatDateTime(dt, opts) {\n    return this.dtFormatter(dt, opts).format();\n  }\n\n  formatDateTimeParts(dt, opts) {\n    return this.dtFormatter(dt, opts).formatToParts();\n  }\n\n  formatInterval(interval, opts) {\n    const df = this.dtFormatter(interval.start, opts);\n    return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n  }\n\n  resolvedOptions(dt, opts) {\n    return this.dtFormatter(dt, opts).resolvedOptions();\n  }\n\n  num(n, p = 0) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = { ...this.opts };\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = (opts) => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = (token) => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = (length) =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = (token) => {\n        // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // fractional seconds\n          case \"uu\":\n            return this.num(Math.floor(dt.millisecond / 10), 2);\n          case \"uuu\":\n            return this.num(Math.floor(dt.millisecond / 100));\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"n\":\n            return this.num(dt.localWeekNumber);\n          case \"nn\":\n            return this.num(dt.localWeekNumber, 2);\n          case \"ii\":\n            return this.num(dt.localWeekYear.toString().slice(-2), 2);\n          case \"iiii\":\n            return this.num(dt.localWeekYear, 4);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const tokenToField = (token) => {\n        switch (token[0]) {\n          case \"S\":\n            return \"millisecond\";\n          case \"s\":\n            return \"second\";\n          case \"m\":\n            return \"minute\";\n          case \"h\":\n            return \"hour\";\n          case \"d\":\n            return \"day\";\n          case \"w\":\n            return \"week\";\n          case \"M\":\n            return \"month\";\n          case \"y\":\n            return \"year\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur) => (token) => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          return this.num(lildur.get(mapped), token.length);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n    return stringifyTokens(tokens, tokenToString(collapsed));\n  }\n}\n","import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  isUndefined,\n  parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return (m) =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n  `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1),\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3]),\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n  /^-?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)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n    match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseFloating(yearStr)),\n      months: maybeNegate(parseFloating(monthStr)),\n      weeks: maybeNegate(parseFloating(weekStr)),\n      days: maybeNegate(parseFloating(dayStr)),\n      hours: maybeNegate(parseFloating(hourStr)),\n      minutes: maybeNegate(parseFloating(minuteStr)),\n      seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n    },\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr),\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n  /^(?:(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)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr,\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 =\n    /^(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$/,\n  rfc850 =\n    /^(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$/,\n  ascii =\n    /^(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})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000,\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000,\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 },\n  },\n  casualMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000,\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000,\n    },\n\n    ...lowOrderMatrix,\n  },\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: (daysInYearAccurate * 24) / 4,\n      minutes: (daysInYearAccurate * 24 * 60) / 4,\n      seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n      milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n    },\n    ...lowOrderMatrix,\n  };\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n    matrix: alts.matrix || dur.matrix,\n  };\n  return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n  let sum = vals.milliseconds ?? 0;\n  for (const unit of reverseUnits.slice(1)) {\n    if (vals[unit]) {\n      sum += vals[unit] * matrix[unit][\"milliseconds\"];\n    }\n  }\n  return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  // the logic below assumes the overall value of the duration is positive\n  // if this is not the case, factor is used to make it so\n  const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n  orderedUnits.reduceRight((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const previousVal = vals[previous] * factor;\n        const conv = matrix[current][previous];\n\n        // if (previousVal < 0):\n        // lower order unit is negative (e.g. { years: 2, days: -2 })\n        // normalize this by reducing the higher order unit by the appropriate amount\n        // and increasing the lower order unit\n        // this can never make the higher order unit negative, because this function only operates\n        // on positive durations, so the amount of time represented by the lower order unit cannot\n        // be larger than the higher order unit\n        // else:\n        // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n        // in this case we attempt to convert as much as possible from the lower order unit into\n        // the higher order one\n        //\n        // Math.floor takes care of both of these cases, rounding away from 0\n        // if previousVal < 0 it makes the absolute value larger\n        // if previousVal >= it makes the absolute value smaller\n        const rollUp = Math.floor(previousVal / conv);\n        vals[current] += rollUp * factor;\n        vals[previous] -= rollUp * conv * factor;\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n\n  // try to convert any decimals into smaller units if possible\n  // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n  orderedUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const fraction = vals[previous] % 1;\n        vals[previous] -= fraction;\n        vals[current] += fraction * matrix[previous][current];\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n  const newVals = {};\n  for (const [key, value] of Object.entries(vals)) {\n    if (value !== 0) {\n      newVals[key] = value;\n    }\n  }\n  return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See  {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    let matrix = accurate ? accurateMatrix : casualMatrix;\n\n    if (config.matrix) {\n      matrix = config.matrix;\n    }\n\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = matrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject({ milliseconds: count }, opts);\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {Object} [opts=[]] - options for creating this Duration\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the custom conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj, opts = {}) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit),\n      loc: Locale.fromObject(opts),\n      conversionAccuracy: opts.conversionAccuracy,\n      matrix: opts.matrix,\n    });\n  }\n\n  /**\n   * Create a Duration from DurationLike.\n   *\n   * @param {Object | number | Duration} durationLike\n   * One of:\n   * - object with keys like 'years' and 'hours'.\n   * - number representing milliseconds\n   * - Duration instance\n   * @return {Duration}\n   */\n  static fromDurationLike(durationLike) {\n    if (isNumber(durationLike)) {\n      return Duration.fromMillis(durationLike);\n    } else if (Duration.isDuration(durationLike)) {\n      return durationLike;\n    } else if (typeof durationLike === \"object\") {\n      return Duration.fromObject(durationLike);\n    } else {\n      throw new InvalidArgumentError(\n        `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n      );\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the preset conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\",\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `w` for weeks\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * Tokens can be escaped by wrapping with single quotes.\n   * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = {\n      ...opts,\n      floor: opts.round !== false && opts.floor !== false,\n    };\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a string representation of a Duration with all units included.\n   * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n   * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n   * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n   * ```\n   */\n  toHuman(opts = {}) {\n    if (!this.isValid) return INVALID;\n\n    const l = orderedUnits\n      .map((unit) => {\n        const val = this.values[unit];\n        if (isUndefined(val)) {\n          return null;\n        }\n        return this.loc\n          .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n          .format(val);\n      })\n      .filter((n) => n);\n\n    return this.loc\n      .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n      .format(l);\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject() {\n    if (!this.isValid) return {};\n    return { ...this.values };\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n      includeOffset: false,\n    };\n\n    const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n    return dateTime.toISOTime(opts);\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a string representation of this Duration appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Duration { values: ${JSON.stringify(this.values)} }`;\n    } else {\n      return `Duration { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    if (!this.isValid) return NaN;\n\n    return durationToMillis(this.matrix, this.values);\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem });\n    const opts = { loc, matrix, conversionAccuracy };\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * Assuming the overall value of the Duration is positive, this means:\n   * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n   * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n   *   the overall value would be negative, see third example)\n   * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n   *\n   * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Rescale units to its largest representation\n   * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n   * @return {Duration}\n   */\n  rescale() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map((u) => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        // only keep the integer part for now in the hopes of putting any decimal part\n        // into a smaller unit later\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    normalizeValues(this.matrix, built);\n    return clone(this, { values: built }, true);\n  }\n\n  /**\n   * Shift this Duration to all available units.\n   * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n   * @return {Duration}\n   */\n  shiftToAll() {\n    if (!this.isValid) return this;\n    return this.shiftTo(\n      \"years\",\n      \"months\",\n      \"weeks\",\n      \"days\",\n      \"hours\",\n      \"minutes\",\n      \"seconds\",\n      \"milliseconds\"\n    );\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd,\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n   * @return {number}\n   */\n  count(unit = \"milliseconds\", opts) {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit, opts);\n    let end;\n    if (opts?.useLocaleWeeks) {\n      end = this.end.reconfigure({ locale: start.locale });\n    } else {\n      end = this.end;\n    }\n    end = end.startOf(unit, opts);\n    return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...DateTime} dateTimes - the unit of time to count.\n   * @return {Array}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter((d) => this.contains(d))\n        .sort((a, b) => a.toMillis() - b.toMillis()),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {Array}\n   */\n  splitBy(duration) {\n    const dur = Duration.fromDurationLike(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits((x) => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {Array}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Return whether this Interval engulfs the start and end of the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into a equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals\n      .sort((a, b) => a.s - b.s)\n      .reduce(\n        ([sofar, current], item) => {\n          if (!current) {\n            return [sofar, item];\n          } else if (current.overlaps(item) || current.abutsStart(item)) {\n            return [sofar, current.union(item)];\n          } else {\n            return [sofar.concat([current]), item];\n          }\n        },\n        [[], null]\n      );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map((i) => [\n        { time: i.s, type: \"s\" },\n        { time: i.e, type: \"e\" },\n      ]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {Array}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map((i) => this.intersection(i))\n      .filter((i) => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n    } else {\n      return `Interval { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns a localized string representing this Interval. Accepts the same options as the\n   * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n   * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n   * is browser-specific, but in general it will return an appropriate representation of the\n   * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n   * specified.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n   * Intl.DateTimeFormat constructor options.\n   * @param {Object} opts - Options to override the configuration of the start DateTime.\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format\n   * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n   * formatting tool.\n   * @param {string} dateFormat - The format string. This string formats the start and end time.\n   * See {@link DateTime#toFormat} for details.\n   * @param {Object} opts - Options.\n   * @param {string} [opts.separator =  ' – '] - A separator to place between the start and end\n   * representations.\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n    return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone#isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Get the weekday on which the week starts according to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n   */\n  static getStartOfWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getStartOfWeek();\n  }\n\n  /**\n   * Get the minimum number of days necessary in a week before it is considered part of the next year according\n   * to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number}\n   */\n  static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n  }\n\n  /**\n   * Get the weekdays, which are considered the weekend according to the given locale\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n   */\n  static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n    // copy the array, because we cache it internally\n    return (locObj || Locale.create(locale)).getWeekendDays().slice();\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {Array}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link Info#months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {Array}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {Array}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link Info#weekdays}\n   * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {Array}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {Array}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {Array}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `relative`: whether this environment supports relative time formatting\n   * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n   * @example Info.features() //=> { relative: false, localeWeek: true }\n   * @return {Object}\n   */\n  static features() {\n    return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n  }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      },\n    ],\n    [\"days\", dayDiff],\n  ];\n\n  const results = {};\n  const earlier = cursor;\n  let lowestOrder, highWater;\n\n  /* This loop tries to diff using larger units first.\n     If we overshoot, we backtrack and try the next smaller unit.\n     \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n     as we use smaller and smaller units.\n     highWater keeps track of where we would be if we added one more of the smallest unit,\n     this is used later to potentially convert any difference smaller than the smallest higher order unit\n     into a fraction of that smallest higher order unit\n  */\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      results[unit] = differ(cursor, later);\n      highWater = earlier.plus(results);\n\n      if (highWater > later) {\n        // we overshot the end point, backtrack cursor by 1\n        results[unit]--;\n        cursor = earlier.plus(results);\n\n        // if we are still overshooting now, we need to backtrack again\n        // this happens in certain situations when diffing times in different zones,\n        // because this calculation ignores time zones\n        if (cursor > later) {\n          // keep the \"overshot by 1\" around as highWater\n          highWater = cursor;\n          // backtrack cursor by 1\n          results[unit]--;\n          cursor = earlier.plus(results);\n        }\n      } else {\n        cursor = highWater;\n      }\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(results, opts);\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n","const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = (t) => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\"), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\"), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        case \"uu\":\n          return simple(oneOrTwo);\n        case \"uuu\":\n          return intUnit(one);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n        // in this case we accept any non-newline white-space\n        case \" \":\n          return simple(/[^\\S\\n\\r]/);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP,\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\",\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\",\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\",\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\",\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour12: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\",\n  },\n  hour24: {\n    numeric: \"H\",\n    \"2-digit\": \"HH\",\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\",\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\",\n  },\n  timeZoneName: {\n    long: \"ZZZZZ\",\n    short: \"ZZZ\",\n  },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    const isSpace = /^\\s+$/.test(value);\n    return {\n      literal: !isSpace,\n      val: isSpace ? \" \" : value,\n    };\n  }\n\n  const style = formatOpts[type];\n\n  // The user might have explicitly specified hour12 or hourCycle\n  // if so, respect their decision\n  // if not, refer back to the resolvedOpts, which are based on the locale\n  let actualType = type;\n  if (type === \"hour\") {\n    if (formatOpts.hour12 != null) {\n      actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n    } else if (formatOpts.hourCycle != null) {\n      if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n        actualType = \"hour12\";\n      } else {\n        actualType = \"hour24\";\n      }\n    } else {\n      // tokens only differentiate between 24 hours or not,\n      // so we do not need to check hourCycle here, which is less supported anyways\n      actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n    }\n  }\n  let val = partTypeStyleToTokenVal[actualType];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val,\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = (token) => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n  const tokens = formatOptsToTokens(formatOpts, locale);\n\n  if (tokens == null || tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n  const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n    units = tokens.map((t) => unitForToken(t, locale)),\n    disqualifyingUnit = units.find((t) => t.invalidReason);\n\n  if (disqualifyingUnit) {\n    return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n  } else {\n    const [regexString, handlers] = buildRegex(units),\n      regex = RegExp(regexString, \"i\"),\n      [rawMatches, matches] = match(input, regex, handlers),\n      [result, zone, specificOffset] = matches\n        ? dateTimeFromMatches(matches)\n        : [null, null, undefined];\n    if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n      throw new ConflictingSpecificationError(\n        \"Can't include meridiem when specifying 24-hour format\"\n      );\n    }\n    return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };\n  }\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n  if (!formatOpts) {\n    return null;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const df = formatter.dtFormatter(getDummyDateTime());\n  const parts = df.formatToParts();\n  const resolvedOpts = df.resolvedOptions();\n  return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS,\n  padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n  parseFromTokens,\n  explainFromTokens,\n  formatOptsToTokens,\n  expandMacroTokens,\n} from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData,\n  usesLocalWeekValues,\n  isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n  if (dt.localWeekData === null) {\n    dt.localWeekData = gregorianToWeek(\n      dt.c,\n      dt.loc.getMinDaysInFirstWeek(),\n      dt.loc.getStartOfWeek()\n    );\n  }\n  return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid,\n  };\n  return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds(),\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = {\n      ...inst.c,\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7,\n    },\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds,\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n  const { setZone, zone } = opts;\n  if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(parsed, {\n        ...opts,\n        zone: interpretationZone,\n        specificOffset,\n      });\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true,\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\nfunction toISODate(o, extended) {\n  const longFormat = o.c.year > 9999 || o.c.year < 0;\n  let c = \"\";\n  if (longFormat && o.c.year >= 0) c += \"+\";\n  c += padStart(o.c.year, longFormat ? 6 : 4);\n\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    c += \"-\";\n    c += padStart(o.c.day);\n  } else {\n    c += padStart(o.c.month);\n    c += padStart(o.c.day);\n  }\n  return c;\n}\n\nfunction toISOTime(\n  o,\n  extended,\n  suppressSeconds,\n  suppressMilliseconds,\n  includeOffset,\n  extendedZone\n) {\n  let c = padStart(o.c.hour);\n  if (extended) {\n    c += \":\";\n    c += padStart(o.c.minute);\n    if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n      c += \":\";\n    }\n  } else {\n    c += padStart(o.c.minute);\n  }\n\n  if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n    c += padStart(o.c.second);\n\n    if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n      c += \".\";\n      c += padStart(o.c.millisecond, 3);\n    }\n  }\n\n  if (includeOffset) {\n    if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n      c += \"Z\";\n    } else if (o.o < 0) {\n      c += \"-\";\n      c += padStart(Math.trunc(-o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(-o.o % 60));\n    } else {\n      c += \"+\";\n      c += padStart(Math.trunc(o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(o.o % 60));\n    }\n  }\n\n  if (extendedZone) {\n    c += \"[\" + o.zone.ianaName + \"]\";\n  }\n  return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\",\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\",\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n  switch (unit.toLowerCase()) {\n    case \"localweekday\":\n    case \"localweekdays\":\n      return \"localWeekday\";\n    case \"localweeknumber\":\n    case \"localweeknumbers\":\n      return \"localWeekNumber\";\n    case \"localweekyear\":\n    case \"localweekyears\":\n      return \"localWeekYear\";\n    default:\n      return normalizeUnit(unit);\n  }\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n  const zone = normalizeZone(opts.zone, Settings.defaultZone),\n    loc = Locale.fromObject(opts),\n    tsNow = Settings.now();\n\n  let ts, o;\n\n  // assume we have the higher-order units\n  if (!isUndefined(obj.year)) {\n    for (const u of orderedUnits) {\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    const offsetProvis = zone.offset(tsNow);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = tsNow;\n  }\n\n  return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = (unit) => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n  let opts = {},\n    args;\n  if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n    opts = argList[argList.length - 1];\n    args = Array.from(argList).slice(0, argList.length - 1);\n  } else {\n    args = Array.from(argList);\n  }\n  return [opts, args];\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        const ot = zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.localWeekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                                  //~> now\n   * @example DateTime.local({ zone: \"America/New_York\" })      //~> now, in US east coast time\n   * @example DateTime.local(2017)                              //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                           //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12, { locale: \"fr\" })     //~> 2017-03-12T00:00:00, with a French locale\n   * @example DateTime.local(2017, 3, 12, 5)                    //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" })   //~> 2017-03-12T05:00:00, in UTC\n   * @example DateTime.local(2017, 3, 12, 5, 45)                //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)            //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765)       //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.utc()                                              //~> now\n   * @example DateTime.utc(2017)                                          //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                                       //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                                   //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)                                //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)                            //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" })          //~> 2017-03-12T05:45:00Z with a French locale\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)                        //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n   * @return {DateTime}\n   */\n  static utc() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n\n    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options),\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.localWeekYear - a week year, according to the locale\n   * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n   * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {Object} opts - options for creating this DateTime\n   * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n   * @return {DateTime}\n   */\n  static fromObject(obj, opts = {}) {\n    obj = obj || {};\n    const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const loc = Locale.fromObject(opts);\n    const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset)\n        ? opts.specificOffset\n        : zoneToUse.offset(tsNow),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? hasInvalidOrdinalData(normalized)\n        : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? ordinalToGregorian(normalized)\n        : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc,\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      }),\n      [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is an instance of DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  /**\n   * Produce the format string for a set of options\n   * @param formatOpts\n   * @param localeOpts\n   * @returns {string}\n   */\n  static parseFormatForOpts(formatOpts, localeOpts = {}) {\n    const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n    return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n  }\n\n  /**\n   * Produce the the fully expanded format token for the locale\n   * Does NOT quote characters, so quoted tokens will not round trip correctly\n   * @param fmt\n   * @param localeOpts\n   * @returns {string}\n   */\n  static expandFormat(fmt, localeOpts = {}) {\n    const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n    return expanded.map((t) => t.val).join(\"\");\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Returns true if this date is on a weekend according to the locale, false otherwise\n   * @returns {boolean}\n   */\n  get isWeekend() {\n    return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n  }\n\n  /**\n   * Get the day of the week according to the locale.\n   * 1 is the first day of the week and 7 is the last day of the week.\n   * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n   * @returns {number}\n   */\n  get localWeekday() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n   * because the week can start on different days of the week (see localWeekday) and because a different number of days\n   * is required for a week to count as the first week of a year.\n   * @returns {number}\n   */\n  get localWeekNumber() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n   * differently, see localWeekNumber.\n   * @returns {number}\n   */\n  get localWeekYear() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.isUniversal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1, day: 1 }).offset ||\n        this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n   * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n   * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n   * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n   * @returns {DateTime[]}\n   */\n  getPossibleOffsets() {\n    if (!this.isValid || this.isOffsetFixed) {\n      return [this];\n    }\n    const dayMs = 86400000;\n    const minuteMs = 60000;\n    const localTS = objToLocalTS(this.c);\n    const oEarlier = this.zone.offset(localTS - dayMs);\n    const oLater = this.zone.offset(localTS + dayMs);\n\n    const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n    const o2 = this.zone.offset(localTS - oLater * minuteMs);\n    if (o1 === o2) {\n      return [this];\n    }\n    const ts1 = localTS - o1 * minuteMs;\n    const ts2 = localTS - o2 * minuteMs;\n    const c1 = tsToObj(ts1, o1);\n    const c2 = tsToObj(ts2, o2);\n    if (\n      c1.hour === c2.hour &&\n      c1.minute === c2.minute &&\n      c1.second === c2.second &&\n      c1.millisecond === c2.millisecond\n    ) {\n      return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n    }\n    return [this];\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's local week year\n   * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n   * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n   * @type {number}\n   */\n  get weeksInLocalWeekYear() {\n    return this.isValid\n      ? weeksInWeekYear(\n          this.localWeekYear,\n          this.loc.getMinDaysInFirstWeek(),\n          this.loc.getStartOfWeek()\n        )\n      : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOptions(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link DateTime#setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n   *\n   * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n   * They cannot be mixed with ISO-week units like `weekday`.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n    const settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(\n        { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n        minDaysInFirstWeek,\n        startOfWeek\n      );\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n    } else {\n      mixed = { ...this.toObject(), ...normalized };\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link DateTime#plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit, { useLocaleWeeks = false } = {}) {\n    if (!this.isValid) return this;\n\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      if (useLocaleWeeks) {\n        const startOfWeek = this.loc.getStartOfWeek();\n        const { weekday } = this;\n        if (weekday < startOfWeek) {\n          o.weekNumber = this.weekNumber - 1;\n        }\n        o.weekday = startOfWeek;\n      } else {\n        o.weekday = 1;\n      }\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit, opts) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit, opts)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @return {string}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    const ext = format === \"extended\";\n\n    let c = toISODate(this, ext);\n    c += \"T\";\n    c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n    return c;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @return {string}\n   */\n  toISODate({ format = \"extended\" } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return toISODate(this, format === \"extended\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    extendedZone = false,\n    format = \"extended\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    let c = includePrefix ? \"T\" : \"\";\n    return (\n      c +\n      toISOTime(\n        this,\n        format === \"extended\",\n        suppressSeconds,\n        suppressMilliseconds,\n        includeOffset,\n        extendedZone\n      )\n    );\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string}\n   */\n  toSQLDate() {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\n\n    if (includeZone || includeOffset) {\n      if (includeOffsetSpace) {\n        fmt += \" \";\n      }\n      if (includeZone) {\n        fmt += \"z\";\n      } else if (includeOffset) {\n        fmt += \"ZZ\";\n      }\n    }\n\n    return toTechFormat(this, fmt, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n    } else {\n      return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (as a whole number) of this DateTime.\n   * @return {number}\n   */\n  toUnixInteger() {\n    return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = { ...this.c };\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\"created by diffing an invalid DateTime\");\n    }\n\n    const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link DateTime#diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit, opts) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return (\n      adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n    );\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(base, this.plus(padding), {\n      ...options,\n      numeric: \"always\",\n      units,\n      unit,\n    });\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n      ...options,\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true,\n    });\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link DateTime#toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n","/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    newProps[add[0].id] = add[1];\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n                }\n            }\n            if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 ? from <= rPos : from < rPos) &&\n                    (side < 0 ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node.parent; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        if (mode & IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, \n    /**\n    @internal\n    */\n    mode = 0) {\n        this.mode = mode;\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traveral. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (this.nextSibling())\n                    break;\n                if (!depth)\n                    return;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context—a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this.node, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead;\n        while (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead = 0, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree)\n                    materialize(cursor);\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to)\n                    overlay.ranges.push(range);\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n","import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parse that this stack is part of @internal\n    */\n    p, \n    /**\n    Holds state, input pos, buffer index triplets for all but the\n    top state @internal\n    */\n    stack, \n    /**\n    The current parse state @internal\n    */\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /**\n    @internal\n    */\n    reducePos, \n    /**\n    The input position up to which this stack has parsed.\n    */\n    pos, \n    /**\n    The dynamic score of the stack, including dynamic precedence\n    and error-recovery penalties\n    @internal\n    */\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /**\n    @internal\n    */\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /**\n    @internal\n    */\n    bufferBase, \n    /**\n    @internal\n    */\n    curContext, \n    /**\n    @internal\n    */\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /**\n    @internal\n    */\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /**\n    @internal\n    */\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /**\n    The stack's current [context](#lr.ContextTracker) value, if\n    any. Its type will depend on the context tracker's type\n    parameter, or it will be `null` if there is no context\n    tracker.\n    */\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /**\n    @internal\n    */\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /**\n    @internal\n    */\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        if (this.reducePos < this.pos - 25 /* Lookahead.Margin */)\n            this.setLookAhead(this.pos);\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case—they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /**\n    @internal\n    */\n    storeNode(term, start, end, size = 4, isReduce = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!isReduce || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n                while (index > 0 && this.buffer[index - 2] > end) {\n                    // Move this record forward\n                    this.buffer[index] = this.buffer[index - 4];\n                    this.buffer[index + 1] = this.buffer[index - 3];\n                    this.buffer[index + 2] = this.buffer[index - 2];\n                    this.buffer[index + 3] = this.buffer[index - 1];\n                    index -= 4;\n                    if (size > 4)\n                        size -= 4;\n                }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /**\n    @internal\n    */\n    shift(action, type, start, end) {\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (end > this.pos || type <= parser.maxNode) {\n                this.pos = end;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = end;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(type, start);\n            if (type <= parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = end;\n            this.shiftContext(type, start);\n            if (type <= this.p.parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n    }\n    // Apply an action\n    /**\n    @internal\n    */\n    apply(action, next, nextStart, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextStart, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /**\n    @internal\n    */\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /**\n    @internal\n    */\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /**\n    @internal\n    */\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /**\n    Check if the given term would be able to be shifted (optionally\n    after some reductions) on this stack. This can be useful for\n    external tokenizers that want to make sure they only provide a\n    given token when it applies.\n    */\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /**\n    @internal\n    */\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.reducePos = this.pos;\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /**\n    @internal\n    */\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /**\n    Try to scan through the automaton to find some kind of reduction\n    that can be applied. Used when the regular ForcedReduce field\n    isn't a valid action. @internal\n    */\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /**\n    @internal\n    */\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /**\n    Check whether this state has no further actions (assumed to be a direct descendant of the\n    top state, since any other states must be able to continue\n    somehow). @internal\n    */\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /**\n    Restart the stack (put it back in its start state). Only safe\n    when this.stack.length == 3 (state is directly below the top\n    state). @internal\n    */\n    restart() {\n        this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /**\n    @internal\n    */\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /**\n    Get the parser used by this stack.\n    */\n    get parser() { return this.p.parser; }\n    /**\n    Test whether a given dialect (by numeric ID, as exported from\n    the terms file) is enabled.\n    */\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /**\n    @internal\n    */\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /**\n    @internal\n    */\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /**\n    @internal\n    */\n    setLookAhead(lookAhead) {\n        if (lookAhead > this.lookAhead) {\n            this.emitLookAhead();\n            this.lookAhead = lookAhead;\n        }\n    }\n    /**\n    @internal\n    */\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    input, \n    /**\n    @internal\n    */\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /**\n        @internal\n        */\n        this.chunk = \"\";\n        /**\n        @internal\n        */\n        this.chunkOff = 0;\n        /**\n        Backup chunk\n        */\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /**\n        The character code of the next code unit in the input, or -1\n        when the stream is at the end of the input.\n        */\n        this.next = -1;\n        /**\n        @internal\n        */\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /**\n    @internal\n    */\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /**\n    @internal\n    */\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /**\n    Look at a code unit near the stream position. `.peek(0)` equals\n    `.next`, `.peek(-1)` gives you the previous character, and so\n    on.\n    \n    Note that looking around during tokenizing creates dependencies\n    on potentially far-away content, which may reduce the\n    effectiveness incremental parsing—when looking forward—or even\n    cause invalid reparses when looking backward more than 25 code\n    units, since the library does not track lookbehind.\n    */\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /**\n    Accept a token. By default, the end of the token is set to the\n    current stream position, but you can pass an offset (relative to\n    the stream position) to change that.\n    */\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    /**\n    Accept a token ending at a specific given position.\n    */\n    acceptTokenTo(token, endPos) {\n        this.token.value = token;\n        this.token.end = endPos;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /**\n    Move the stream forward N (defaults to 1) code units. Returns\n    the new value of [`next`](#lr.InputStream.next).\n    */\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /**\n    @internal\n    */\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /**\n    @internal\n    */\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (!atEof)\n                skipped++;\n            if (nextPos == null)\n                break;\n            input.reset(nextPos, input.token);\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n    /**\n    Create a tokenizer. The first argument is the function that,\n    given an input stream, scans for the types of tokens it\n    recognizes at the stream's position, and calls\n    [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    one.\n    */\n    constructor(\n    /**\n    @internal\n    */\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Finish with \" + this.stackID(finished));\n                return this.stackToTree(finished);\n            }\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Force-finish \" + this.stackID(finished));\n                return this.stackToTree(finished.forceAll());\n            }\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */)\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n            while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            let main = this.tokens.mainToken;\n            localStack.apply(action, term, main ? main.start : localStack.pos, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n    /**\n    Define a context tracker.\n    */\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n    /**\n    @internal\n    */\n    constructor(spec) {\n        super();\n        /**\n        @internal\n        */\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /**\n    Get a goto table entry @internal\n    */\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /**\n    Check if this state has an action for a given terminal @internal\n    */\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /**\n    @internal\n    */\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /**\n    @internal\n    */\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /**\n    @internal\n    */\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /**\n    @internal\n    */\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /**\n    Get the states that can follow this one through shift actions or\n    goto jumps. @internal\n    */\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /**\n    Configure the parser. Returns a new parser instance that has the\n    given settings modified. Settings not provided in `config` are\n    kept from the original parser.\n    */\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /**\n    Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    are registered for this parser.\n    */\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /**\n    Returns the name associated with a given term. This will only\n    work for all terms when the parser was generated with the\n    `--names` option. By default, only the names of tagged terms are\n    stored.\n    */\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /**\n    The eof term id is always allocated directly after the node\n    types. @internal\n    */\n    get eofTerm() { return this.maxNode + 1; }\n    /**\n    The type of top node produced by the parser.\n    */\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /**\n    @internal\n    */\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /**\n    @internal\n    */\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /**\n    Used by the output of the parser generator. Not available to\n    user code. @hide\n    */\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n","import { NodeProp } from '@lezer/common';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    /**\n    Define a new tag. If `parent` is given, the tag is treated as a\n    sub-tag of that parent, and\n    [highlighters](#highlight.tagHighlighter) that don't mention\n    this tag will try to fall back to the parent tag (or grandparent\n    tag, etc).\n    */\n    static define(parent) {\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag([], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier() {\n        let mod = new Modifier;\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor() {\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n)\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Mode.Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Mode.Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Mode.Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp();\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Mode.Opaque */; }\n    get inherit() { return this.mode == 1 /* Mode.Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Mode.Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter). Often, the higher-level\n[`highlightCode`](#highlight.highlightCode) function is easier to\nuse.\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\n/**\nHighlight the given tree with the given highlighter, calling\n`putText` for every piece of text, either with a set of classes or\nwith the empty string when unstyled, and `putBreak` for every line\nbreak.\n*/\nfunction highlightCode(code, tree, highlighter, putText, putBreak, from = 0, to = code.length) {\n    let pos = from;\n    function writeTo(p, classes) {\n        if (p <= pos)\n            return;\n        for (let text = code.slice(pos, p), i = 0;;) {\n            let nextBreak = text.indexOf(\"\\n\", i);\n            let upto = nextBreak < 0 ? text.length : nextBreak;\n            if (upto > i)\n                putText(text.slice(i, upto), classes);\n            if (nextBreak < 0)\n                break;\n            putBreak();\n            i = nextBreak + 1;\n        }\n        pos = p;\n    }\n    highlightTree(tree, highlighter, (from, to, classes) => {\n        writeTo(from, \"\");\n        writeTo(to, classes);\n    }, from, to);\n    writeTo(to, \"\");\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Mode.Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier()\n};\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexport { Tag, classHighlighter, getStyleTags, highlightCode, highlightTree, styleTags, tagHighlighter, tags };\n","import { ExternalTokenizer, ContextTracker, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst propertyIdentifier = 120,\n  identifier = 121,\n  nameIdentifier = 122,\n  insertSemi = 123,\n  expression0 = 127,\n  ForExpression = 4,\n  forExpressionStart = 130,\n  ForInExpression = 7,\n  Name = 8,\n  Identifier = 9,\n  AdditionalIdentifier = 10,\n  forExpressionBodyStart = 138,\n  IfExpression = 19,\n  ifExpressionStart = 139,\n  QuantifiedExpression = 23,\n  quantifiedExpressionStart = 140,\n  QuantifiedInExpression = 27,\n  PositiveUnaryTest = 37,\n  ArithmeticExpression = 41,\n  arithmeticPlusStart = 144,\n  arithmeticTimesStart = 145,\n  arithmeticExpStart = 146,\n  arithmeticUnaryStart = 147,\n  VariableName = 47,\n  PathExpression = 67,\n  pathExpressionStart = 152,\n  FilterExpression = 69,\n  filterExpressionStart = 153,\n  FunctionInvocation = 71,\n  functionInvocationStart = 154,\n  ParameterName = 75,\n  nil = 159,\n  NumericLiteral = 78,\n  StringLiteral = 79,\n  BooleanLiteral = 80,\n  listStart = 165,\n  List = 88,\n  FunctionDefinition = 89,\n  functionDefinitionStart = 167,\n  Context = 96,\n  contextStart = 169,\n  ContextEntry = 97,\n  PropertyName = 99,\n  PropertyIdentifier = 100;\n\n/* global console,process */\n\n\n// @ts-expect-error env access\nconst LOG_PARSE = typeof process != 'undefined' && process.env && /\\bfparse(:dbg)?\\b/.test(process.env.LOG);\n\n// @ts-expect-error env access\nconst LOG_PARSE_DEBUG = typeof process != 'undefined' && process.env && /\\bfparse:dbg\\b/.test(process.env.LOG);\n\n// @ts-expect-error env access\nconst LOG_VARS = typeof process != 'undefined' && process.env && /\\bcontext\\b/.test(process.env.LOG);\n\nconst spaceChars = [\n  9, 11, 12, 32, 133, 160,\n  5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198,\n  8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288\n];\n\nconst newlineChars = chars('\\n\\r');\n\nconst asterix = '*'.charCodeAt(0);\n\nconst additionalNameChars = chars(\"'./-+*^\");\n\n/**\n * @typedef { VariableContext | any } ContextValue\n */\n\n/**\n * @param { string } str\n * @return { number[] }\n */\nfunction chars(str) {\n  return Array.from(str).map(s => s.charCodeAt(0));\n}\n\n/**\n * @param { number } ch\n * @return { boolean }\n */\nfunction isStartChar(ch) {\n  return (\n    ch === 63 // ?\n  ) || (\n    ch >= 65 && ch <= 90 // A-Z\n  ) || (\n    ch === 95 // _\n  ) || (\n    ch >= 97 && ch <= 122 // a-z\n  ) || (\n    ch >= 0xC0 && ch <= 0xD6\n  ) || (\n    ch >= 0xD8 && ch <= 0xF6\n  ) || (\n    ch >= 0xF8 && ch <= 0x2FF\n  ) || (\n    ch >= 0x370 && ch <= 0x37D\n  ) || (\n    ch >= 0x37F && ch <= 0x1FFF\n  ) || (\n    ch >= 0x200C && ch <= 0x200D\n  ) || (\n    ch >= 0x2070 && ch <= 0x218F\n  ) || (\n    ch >= 0x2C00 && ch <= 0x2FEF\n  ) || (\n    ch >= 0x3001 && ch <= 0xD7FF\n  ) || (\n    ch >= 0xF900 && ch <= 0xFDCF\n  ) || (\n    ch >= 0xFDF0 && ch <= 0xFFFD\n  ) || (\n    ch >= 0xD800 && ch <= 0xDBFF // upper surrogate\n  ) || (\n    ch >= 0xDC00 && ch <= 0xDFFF // lower surrogate\n  );\n}\n\n/**\n * @param { number } ch\n * @return { boolean }\n */\nfunction isAdditional(ch) {\n  return additionalNameChars.includes(ch);\n}\n\n/**\n * @param { number } ch\n * @return { boolean }\n */\nfunction isPartChar(ch) {\n  return (\n    ch >= 48 && ch <= 57 // 0-9\n  ) || (\n    ch === 0xB7\n  ) || (\n    ch >= 0x0300 && ch <= 0x036F\n  ) || (\n    ch >= 0x203F && ch <= 0x2040\n  );\n}\n\n/**\n * @param { number } ch\n * @return { boolean }\n */\nfunction isSpace(ch) {\n  return spaceChars.includes(ch);\n}\n\n// eslint-disable-next-line\nfunction indent(str, spaces) {\n  return spaces.concat(\n    str.split(/\\n/g).join('\\n' + spaces)\n  );\n}\n\n/**\n * @param { import('@lezer/lr').InputStream } input\n * @param  { number } [offset]\n *\n * @return { { token: string, offset: number } | null }\n */\nfunction parseAdditionalSymbol(input, offset = 0) {\n\n  const next = input.peek(offset);\n\n  if (next === asterix && input.peek(offset + 1) === asterix) {\n\n    return {\n      offset: 2,\n      token: '**'\n    };\n  }\n\n  if (isAdditional(next)) {\n    return {\n      offset: 1,\n      token: String.fromCharCode(next)\n    };\n  }\n\n  return null;\n}\n\n/**\n * @param { import('@lezer/lr').InputStream } input\n * @param { number } [offset]\n * @param { boolean } [namePart]\n *\n * @return { { token: string, offset: number } | null }\n */\nfunction parseIdentifier(input, offset = 0, namePart = false) {\n  for (let inside = false, chars = [], i = 0;; i++) {\n    const next = input.peek(offset + i);\n\n    if (isStartChar(next) || ((inside || namePart) && isPartChar(next))) {\n      if (!inside) {\n        inside = true;\n      }\n\n      chars.push(next);\n    } else {\n\n      if (chars.length) {\n        return {\n          token: String.fromCharCode(...chars),\n          offset: i\n        };\n      }\n\n      return null;\n    }\n  }\n}\n\n/**\n * @param { import('@lezer/lr').InputStream } input\n * @param  { number } offset\n *\n * @return { { token: string, offset: number } | null }\n */\nfunction parseSpaces(input, offset) {\n\n  for (let inside = false, i = 0;; i++) {\n    let next = input.peek(offset + i);\n\n    if (isSpace(next)) {\n      if (!inside) {\n        inside = true;\n      }\n    } else {\n      if (inside) {\n        return {\n          token: ' ',\n          offset: i\n        };\n      }\n\n      return null;\n    }\n  }\n}\n\n/**\n * Parse a name from the input and return the first match, if any.\n *\n * @param { import('@lezer/lr').InputStream } input\n * @param { Variables } variables\n *\n * @return { { token: string, offset: number, term: number } | null }\n */\nfunction parseName(input, variables) {\n  const contextKeys = variables.contextKeys();\n\n  const start = variables.tokens;\n\n  for (let i = 0, tokens = [], nextMatch = null;;) {\n\n    const namePart = (start.length + tokens.length) > 0;\n    const maybeSpace = tokens.length > 0;\n\n    const match = (\n      parseIdentifier(input, i, namePart) ||\n      namePart && parseAdditionalSymbol(input, i) ||\n      maybeSpace && parseSpaces(input, i)\n    );\n\n    // match is required\n    if (!match) {\n      return nextMatch;\n    }\n\n    const {\n      token,\n      offset\n    } = match;\n\n    i += offset;\n\n    if (token === ' ') {\n      continue;\n    }\n\n    tokens = [ ...tokens, token ];\n\n    const name = [ ...start, ...tokens ].join(' ');\n\n    if (contextKeys.some(el => el === name)) {\n      const token = tokens[0];\n\n      nextMatch = {\n        token,\n        offset: token.length,\n        term: nameIdentifier\n      };\n    }\n\n    if (contextKeys.some(el => el.startsWith(name))) {\n      continue;\n    }\n\n    if (dateTimeIdentifiers.some(el => el === name)) {\n      const token = tokens[0];\n\n      // parse date time identifiers as normal\n      // identifiers to allow specialization to kick in\n      //\n      // cf. https://github.com/nikku/lezer-feel/issues/8\n      nextMatch = {\n        token,\n        offset: token.length,\n        term: identifier\n      };\n    }\n\n    if (dateTimeIdentifiers.some(el => el.startsWith(name))) {\n      continue;\n    }\n\n    return nextMatch;\n  }\n\n}\n\nconst identifiersMap = {\n  [ identifier ]: 'identifier',\n  [ nameIdentifier ]: 'nameIdentifier'\n};\n\nconst identifiers = new ExternalTokenizer((input, stack) => {\n\n  LOG_PARSE_DEBUG && console.log('%s: T <identifier | nameIdentifier>', input.pos);\n\n  const nameMatch = parseName(input, stack.context);\n\n  const start = stack.context.tokens;\n\n  const match = nameMatch || parseIdentifier(input, 0, start.length > 0);\n\n  if (match) {\n    input.advance(match.offset);\n    input.acceptToken(nameMatch ? nameMatch.term : identifier);\n\n    LOG_PARSE && console.log('%s: MATCH <%s> <%s>', input.pos, nameMatch ? identifiersMap[nameMatch.term] : 'identifier', match.token);\n  }\n}, { contextual: true });\n\n\nconst propertyIdentifiers = new ExternalTokenizer((input, stack) => {\n\n  LOG_PARSE_DEBUG && console.log('%s: T <propertyIdentifier>', input.pos);\n\n  const start = stack.context.tokens;\n\n  const match = parseIdentifier(input, 0, start.length > 0);\n\n  if (match) {\n    input.advance(match.offset);\n    input.acceptToken(propertyIdentifier);\n\n    LOG_PARSE && console.log('%s: MATCH <propertyIdentifier> <%s>', input.pos, match.token);\n  }\n});\n\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n\n  LOG_PARSE_DEBUG && console.log('%s: T <insertSemi>', input.pos);\n\n  let offset;\n  let insert = false;\n\n  for (offset = 0;; offset++) {\n    const char = input.peek(offset);\n\n    if (spaceChars.includes(char)) {\n      continue;\n    }\n\n    if (newlineChars.includes(char)) {\n      insert = true;\n    }\n\n    break;\n  }\n\n  if (insert) {\n\n    const identifier = parseIdentifier(input, offset + 1);\n    const spaces = parseSpaces(input, offset + 1);\n\n    if (spaces || identifier && /^(then|else|return|satisfies)$/.test(identifier.token)) {\n      return;\n    }\n\n    LOG_PARSE && console.log('%s: MATCH <insertSemi>', input.pos);\n    input.acceptToken(insertSemi);\n  }\n});\n\nconst prefixedContextStarts = {\n  [ functionInvocationStart ]: 'FunctionInvocation',\n  [ filterExpressionStart ]: 'FilterExpression',\n  [ pathExpressionStart ]: 'PathExpression'\n};\n\nconst contextStarts = {\n  [ contextStart ]: 'Context',\n  [ functionDefinitionStart ]: 'FunctionDefinition',\n  [ forExpressionStart ]: 'ForExpression',\n  [ listStart ]: 'List',\n  [ ifExpressionStart ]: 'IfExpression',\n  [ quantifiedExpressionStart ]: 'QuantifiedExpression'\n};\n\nconst contextEnds = {\n  [ Context ]: 'Context',\n  [ FunctionDefinition ]: 'FunctionDefinition',\n  [ ForExpression ]: 'ForExpression',\n  [ List ]: 'List',\n  [ IfExpression ]: 'IfExpression',\n  [ QuantifiedExpression ]: 'QuantifiedExpression',\n  [ PathExpression ]: 'PathExpression',\n  [ FunctionInvocation ]: 'FunctionInvocation',\n  [ FilterExpression ]: 'FilterExpression',\n  [ ArithmeticExpression ]: 'ArithmeticExpression'\n};\n\nclass ValueProducer {\n\n  /**\n   * @param { Function } fn\n   */\n  constructor(fn) {\n    this.fn = fn;\n  }\n\n  get(variables) {\n    return this.fn(variables);\n  }\n\n  /**\n   * @param { Function } fn\n   *\n   * @return { ValueProducer }\n   */\n  static of(fn) {\n    return new ValueProducer(fn);\n  }\n\n}\n\nconst dateTimeLiterals = {\n  'date and time': 1,\n  'date': 1,\n  'time': 1,\n  'duration': 1\n};\n\nconst dateTimeIdentifiers = Object.keys(dateTimeLiterals);\n\n\n/**\n * A basic key-value store to hold context values.\n */\nclass VariableContext {\n\n  /**\n   * Creates a new context from a JavaScript object.\n   *\n   * @param {any} value\n   */\n  constructor(value = {}) {\n\n    /**\n     * @protected\n     */\n    this.value = value;\n  }\n\n  /**\n   * Return all defined keys of the context.\n   *\n   * @returns {Array<string>} the keys of the context\n   */\n  getKeys() {\n    return Object.keys(this.value);\n  }\n\n  /**\n   * Returns the value of the given key.\n   *\n   * If the value represents a context itself, it should be wrapped in a\n   * context class.\n   *\n   * @param {String} key\n   * @returns {VariableContext|ValueProducer|null}\n   */\n  get(key) {\n    const result = this.value[key];\n\n    const constructor = /** @type { typeof VariableContext } */ (this.constructor);\n\n    if (constructor.isAtomic(result)) {\n      return result;\n    }\n\n    return constructor.of(result);\n  }\n\n  /**\n   * Creates a new context with the given key added.\n   *\n   * @param {String} key\n   * @param {any} value\n   *\n   * @returns {VariableContext} new context with the given key added\n   */\n  set(key, value) {\n\n    const constructor = /** @type { typeof VariableContext } */ (this.constructor);\n\n    return constructor.of({\n      ...this.value,\n      [key]: value\n    });\n  }\n\n  /**\n   * Wether the given value is atomic. Non-atomic values need to be wrapped in a\n   * context Class.\n   *\n   * @param {any} value\n   * @returns {Boolean}\n   */\n  static isAtomic(value) {\n    return !value ||\n          value instanceof this ||\n          value instanceof ValueProducer ||\n          typeof value !== 'object';\n  }\n\n  /**\n   * Takes any number of Contexts and merges them into a single Context.\n   *\n   * @param  {...Context} contexts\n   * @returns {VariableContext}\n   */\n  static of(...contexts) {\n    const unwrap = (context) => {\n      if (!context || typeof context !== 'object') {\n        return {};\n      }\n\n      if (context instanceof this) {\n        return context.value;\n      }\n\n      return { ...context };\n    };\n\n    const merged = contexts.reduce((merged, context) => {\n      return {\n        ...merged,\n        ...unwrap(context)\n      };\n    }, {});\n\n    return new this(merged);\n  }\n\n}\n\nclass Variables {\n\n  constructor({\n    name = 'Expressions',\n    tokens = [],\n    children = [],\n    parent = null,\n    context = null,\n    value = null,\n    raw = null\n  } = {}) {\n    this.name = name;\n    this.tokens = tokens;\n    this.children = children;\n    this.parent = parent;\n    this.context = context;\n    this.value = value;\n    this.raw = raw;\n  }\n\n  enterScope(name) {\n\n    const childScope = this.of({\n      name,\n      parent: this\n    });\n\n    LOG_VARS && console.log('[%s] enter', childScope.path, childScope.context);\n\n    return childScope;\n  }\n\n  exitScope(str) {\n\n    if (!this.parent) {\n      LOG_VARS && console.log('[%s] NO exit %o\\n%s', this.path, this.context, indent(str, '  '));\n\n      return this;\n    }\n\n    LOG_VARS && console.log('[%s] exit %o\\n%s', this.path, this.context, indent(str, '  '));\n\n    return this.parent.pushChild(this);\n  }\n\n  token(part) {\n\n    LOG_VARS && console.log('[%s] token <%s> + <%s>', this.path, this.tokens.join(' '), part);\n\n    return this.assign({\n      tokens: [ ...this.tokens, part ]\n    });\n  }\n\n  literal(value) {\n\n    LOG_VARS && console.log('[%s] literal %o', this.path, value);\n\n    return this.pushChild(this.of({\n      name: 'Literal',\n      value\n    }));\n  }\n\n  /**\n   * Return computed scope value\n   *\n   * @return {any}\n   */\n  computedValue() {\n    for (let scope = this;;scope = last(scope.children)) {\n\n      if (!scope) {\n        return null;\n      }\n\n      if (scope.value) {\n        return scope.value;\n      }\n    }\n  }\n\n  contextKeys() {\n    return this.context.getKeys().map(normalizeContextKey);\n  }\n\n  get path() {\n    return this.parent?.path?.concat(' > ', this.name) || this.name;\n  }\n\n  /**\n   * Return value of variable.\n   *\n   * @param { string } variable\n   * @return { any } value\n   */\n  get(variable) {\n\n    const names = [ variable, variable && normalizeContextKey(variable) ];\n\n    const contextKey = this.context.getKeys().find(\n      key => names.includes(normalizeContextKey(key))\n    );\n\n    if (typeof contextKey === 'undefined') {\n      return undefined;\n    }\n\n    const val = this.context.get(contextKey);\n\n    if (val instanceof ValueProducer) {\n      return val.get(this);\n    } else {\n      return val;\n    }\n  }\n\n  resolveName() {\n\n    const variable = this.tokens.join(' ');\n    const tokens = [];\n\n    const parentScope = this.assign({\n      tokens\n    });\n\n    const variableScope = this.of({\n      name: 'VariableName',\n      parent: parentScope,\n      value: this.get(variable),\n      raw: variable\n    });\n\n    LOG_VARS && console.log('[%s] resolve name <%s=%s>', variableScope.path, variable, this.get(variable));\n\n    return parentScope.pushChild(variableScope);\n  }\n\n  pushChild(child) {\n\n    if (!child) {\n      return this;\n    }\n\n    const parent = this.assign({\n      children: [ ...this.children, child ]\n    });\n\n    child.parent = parent;\n\n    return parent;\n  }\n\n  pushChildren(children) {\n\n    /**\n     * @type {Variables}\n     */\n    let parent = this;\n\n    for (const child of children) {\n      parent = parent.pushChild(child);\n    }\n\n    return parent;\n  }\n\n  declareName() {\n\n    if (this.tokens.length === 0) {\n      throw Error('no tokens to declare name');\n    }\n\n    const variableName = this.tokens.join(' ');\n\n    LOG_VARS && console.log('[%s] declareName <%s>', this.path, variableName);\n\n    return this.assign({\n      tokens: []\n    }).pushChild(\n      this.of({\n        name: 'Name',\n        value: variableName\n      })\n    );\n  }\n\n  define(name, value) {\n\n    if (typeof name !== 'string') {\n      LOG_VARS && console.log('[%s] no define <%s=%s>', this.path, name, value);\n\n      return this;\n    }\n\n    LOG_VARS && console.log('[%s] define <%s=%s>', this.path, name, value);\n\n    const context = this.context.set(name, value);\n\n    return this.assign({\n      context\n    });\n  }\n\n  /**\n   * @param { Record<string, any> } [options]\n   *\n   * @return { Variables }\n   */\n  assign(options = {}) {\n\n    return Variables.of({\n      ...this,\n      ...options\n    });\n  }\n\n  /**\n   * @param { Record<string, any> } [options]\n   *\n   * @return { Variables }\n   */\n  of(options = {}) {\n\n    const defaultOptions = {\n      context: this.context,\n      parent: this.parent\n    };\n\n    return Variables.of({\n      ...defaultOptions,\n      ...options\n    });\n  }\n\n  static of(options) {\n\n    const {\n      name,\n      tokens = [],\n      children = [],\n      parent = null,\n      context,\n      value,\n      raw\n    } = options;\n\n    if (!context) {\n      throw new Error('must provide <context>');\n    }\n\n    return new Variables({\n      name,\n      tokens: [ ...tokens ],\n      children: [ ...children ],\n      context,\n      parent,\n      value,\n      raw\n    });\n  }\n\n}\n\n/**\n * @param { string } name\n *\n * @return { string } normalizedName\n */\nfunction normalizeContextKey(name) {\n  return name.replace(/\\s*([./\\-'+]|\\*\\*?)\\s*/g, ' $1 ').replace(/\\s{2,}/g, ' ').trim();\n}\n\n/**\n * Wrap children of variables under the given named child.\n *\n * @param { Variables } variables\n * @param { string } scopeName\n * @param { string } code\n * @return { Variables }\n */\nfunction wrap(variables, scopeName, code) {\n\n  const parts = variables.children.filter(c => c.name !== scopeName);\n  const children = variables.children.filter(c => c.name === scopeName);\n\n  const namePart = parts[0];\n  const valuePart = parts[Math.max(1, parts.length - 1)];\n\n  const name = namePart?.computedValue();\n  const value = valuePart?.computedValue() || null;\n\n  return variables\n    .assign({\n      children\n    })\n    .enterScope(scopeName)\n    .pushChildren(parts)\n    .exitScope(code)\n    .define(name, value);\n}\n\n/**\n * @param { ContextValue } [context]\n * @param { typeof VariableContext } [Context]\n *\n * @return { ContextTracker<Variables> }\n */\nfunction trackVariables(context = {}, Context = VariableContext) {\n\n  const start = Variables.of({\n    context: Context.of(context)\n  });\n\n  return new ContextTracker({\n    start,\n    reduce(variables, term, stack, input) {\n\n      if (term === IfExpression) {\n        const [ thenPart, elsePart ] = variables.children.slice(-2);\n\n        variables = variables.assign({\n          value: Context.of(\n            thenPart?.computedValue(),\n            elsePart?.computedValue()\n          )\n        });\n      }\n\n      if (term === List) {\n        variables = variables.assign({\n          value: Context.of(\n            ...variables.children.map(\n              c => c?.computedValue()\n            )\n          )\n        });\n      }\n\n      if (term === FilterExpression) {\n        const [ sourcePart, _ ] = variables.children.slice(-2);\n\n        variables = variables.assign({\n          value: sourcePart?.computedValue()\n        });\n      }\n\n      if (term === FunctionInvocation) {\n\n        const [\n          name,\n          ...args\n        ] = variables.children;\n\n        // preserve type information through `get value(context, key)` utility\n        if (name?.raw === 'get value') {\n          variables = getContextValue(variables, args);\n        }\n      }\n\n      const start = contextStarts[term];\n\n      if (start) {\n        return variables.enterScope(start);\n      }\n\n      const prefixedStart = prefixedContextStarts[term];\n\n      // pull <expression> into new <prefixedStart> context\n      if (prefixedStart) {\n\n        const {\n          children: currentChildren,\n          context: currentContext,\n        } = variables;\n\n        const children = currentChildren.slice(0, -1);\n        const lastChild = last(currentChildren);\n\n        let newContext = null;\n\n        if (term === pathExpressionStart) {\n          newContext = Context.of(lastChild?.computedValue());\n        }\n\n        if (term === filterExpressionStart) {\n          newContext = Context.of(\n            currentContext,\n            lastChild?.computedValue()\n          ).set('item', lastChild?.computedValue());\n        }\n\n        return variables\n          .assign({ children })\n          .enterScope(prefixedStart)\n          .pushChild(lastChild)\n          .assign({ context: newContext || currentContext });\n      }\n\n      // @ts-expect-error internal method\n      const code = input.read(input.pos, stack.pos);\n\n      const end = contextEnds[term];\n\n      if (end) {\n        return variables.exitScope(code);\n      }\n\n      if (term === ContextEntry) {\n        const parts = variables.children.filter(c => c.name !== 'ContextEntry');\n\n        const name = parts[0];\n        const value = last(parts);\n\n        return wrap(variables, 'ContextEntry', code).assign(\n          {\n            value: Context\n              .of(variables.value)\n              .set(name?.computedValue(), value?.computedValue())\n          }\n        );\n      }\n\n      if (\n        term === ForInExpression ||\n        term === QuantifiedInExpression\n      ) {\n        return wrap(variables, 'InExpression', code);\n      }\n\n      // define <partial> within ForExpression body\n      if (term === forExpressionBodyStart) {\n\n        return variables.define(\n          'partial',\n          ValueProducer.of(variables => {\n            return last(variables.children)?.computedValue();\n          })\n        );\n      }\n\n      if (\n        term === ParameterName\n      ) {\n        const name = last(variables.children).computedValue();\n\n        // TODO: attach type information\n        return variables.define(name, 1);\n      }\n\n      // pull <expression> into ArithmeticExpression child\n      if (\n        term === arithmeticPlusStart ||\n        term === arithmeticTimesStart ||\n        term === arithmeticExpStart\n      ) {\n        const children = variables.children.slice(0, -1);\n        const lastChild = last(variables.children);\n\n        return variables.assign({\n          children\n        }).enterScope('ArithmeticExpression').pushChild(lastChild);\n      }\n\n      if (term === arithmeticUnaryStart) {\n        return variables.enterScope('ArithmeticExpression');\n      }\n\n      if (\n        term === Identifier ||\n        term === AdditionalIdentifier ||\n        term === PropertyIdentifier\n      ) {\n        return variables.token(code);\n      }\n\n      if (\n        term === StringLiteral\n      ) {\n        return variables.literal(code.replace(/^\"|\"$/g, ''));\n      }\n\n      if (term === BooleanLiteral) {\n        return variables.literal(code === 'true' ? true : false);\n      }\n\n      if (term === NumericLiteral) {\n        return variables.literal(parseFloat(code));\n      }\n\n      if (term === nil) {\n        return variables.literal(null);\n      }\n\n      if (\n        term === VariableName\n      ) {\n        return variables.resolveName();\n      }\n\n      if (\n        term === Name ||\n        term === PropertyName\n      ) {\n        return variables.declareName();\n      }\n\n      if (\n        term === expression0 ||\n        term === PositiveUnaryTest\n      ) {\n        if (variables.tokens.length > 0) {\n          throw new Error('uncleared name');\n        }\n      }\n\n      if (term === expression0) {\n\n        let parent = variables;\n\n        while (parent.parent) {\n          parent = parent.exitScope(code);\n        }\n\n        return parent;\n      }\n\n      return variables;\n    }\n  });\n}\n\nconst variableTracker = trackVariables({});\n\n\n// helpers //////////////\n\nfunction getContextValue(variables, args) {\n\n  if (!args.length) {\n    return variables.assign({\n      value: null\n    });\n  }\n\n  if (args[0].name === 'Name') {\n    args = extractNamedArgs(args, [ 'm', 'key' ]);\n  }\n\n  if (args.length !== 2) {\n    return variables.assign({\n      value: null\n    });\n  }\n\n  const [\n    context,\n    key\n  ] = args;\n\n  const keyValue = key?.computedValue();\n  const contextValue = context?.computedValue();\n\n  if (\n    (!contextValue || typeof contextValue !== 'object') || typeof keyValue !== 'string'\n  ) {\n    return variables.assign({\n      value: null\n    });\n  }\n\n  return variables.assign({\n    value: [ normalizeContextKey(keyValue), keyValue ].reduce((value, keyValue) => {\n      return contextValue.get(keyValue) || value;\n    }, null)\n  });\n}\n\nfunction extractNamedArgs(args, argNames) {\n\n  const context = {};\n\n  for (let i = 0; i < args.length; i += 2) {\n    const [ name, value ] = args.slice(i, i + 2);\n\n    context[name.value] = value;\n  }\n\n  return argNames.map(name => context[name]);\n}\n\nfunction last(arr) {\n  return arr[arr.length - 1];\n}\n\nconst feelHighlighting = styleTags({\n  StringLiteral: tags.string,\n  NumericLiteral: tags.number,\n  BooleanLiteral: tags.bool,\n  'AtLiteral!': tags.special(tags.string),\n  CompareOp: tags.compareOperator,\n  ArithOp: tags.arithmeticOperator,\n  'for if then else some every satisfies between return': tags.controlKeyword,\n  'in instance of and or': tags.operatorKeyword,\n  function: tags.definitionKeyword,\n  as: tags.keyword,\n  'Type/...': tags.typeName,\n  Wildcard: tags.special(tags.variableName),\n  null: tags.null,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  'VariableName! \"?\"': tags.variableName,\n  'DateTimeConstructor! SpecialFunctionName!': tags.function(tags.special(tags.variableName)),\n  'List Interval': tags.list,\n  Context: tags.definition(tags.literal),\n  'Name!': tags.definition(tags.variableName),\n  'Key/Name! ContextEntryType/Name!': tags.definition(tags.propertyName),\n  'PathExpression/VariableName!': tags.function(tags.propertyName),\n  'FormalParameter/ParameterName!': tags.function(tags.definition(tags.variableName)),\n  '( )': tags.paren,\n  '[ ]': tags.squareBracket,\n  '{ }': tags.brace,\n  '.': tags.derefOperator,\n  ', ;': tags.separator,\n  '..': tags.punctuation\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,for:10, in:32, return:36, if:40, then:42, else:44, some:48, every:50, satisfies:56, or:60, and:64, between:72, instance:86, of:89, days:99, time:101, duration:103, years:105, months:107, date:109, list:115, context:121, function:128, null:154, true:326, false:326, \"?\":168, external:184, not:209};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"CpO`QYOOO`QYOOO$gQYOOOOQU'#Ce'#CeO$qQYO'#C`O%zQYO'#FPOOQQ'#Fe'#FeO&UQYO'#FeO`QYO'#DVOOQU'#Em'#EmO'rQ^O'#D]OOQO'#Fl'#FlO)oQWO'#DuOOQQ'#D|'#D|OOQQ'#D}'#D}OOQQ'#EO'#EOO)tOWO'#ERO)oQWO'#EPOOQQ'#EP'#EPOOQQ'#Fr'#FrOOQQ'#Fp'#FpOOQQ'#Fw'#FwOOQQ'#ET'#ETO`QYO'#EVOOQQ'#FR'#FRO)yQ^O'#FRO+pQYO'#EWO+wQWO'#EXOOQP'#F{'#F{O+|QXO'#E`OOQQ'#Fx'#FxOOQQ'#FQ'#FQQOQWOOOOQQ'#FS'#FSOOQQ'#F]'#F]O`QYO'#CoOOQQ'#F^'#F^O$qQYO'#CsO,XQYO'#DvOOQQ'#Fq'#FqO,^QYO'#EQOOQO'#EQ'#EQO`QYO'#EUO`QYO'#ETOOQO'#Fy'#FyQ,fQWOOO,kQYO'#DRO-bQWO'#FaOOQO'#DT'#DTO-mQYO'#FeO-tQWOOO.kQYO'#CdO.xQYO'#FUOOQQ'#Cc'#CcO.}QYO'#FTOOQQ'#Cb'#CbO/VQYO,58zO`QYO,59iOOQQ'#Fb'#FbOOQQ'#Fc'#FcOOQQ'#Fd'#FdO`QYO,59qO`QYO,59qO`QYO,59qOOQQ'#Fj'#FjO$qQYO,5:]OOQQ'#Fk'#FkO`QYO,5:_O`QYO,59eO`QYO,59gO`QYO,59iO0uQYO,59iO0|QYO,59rOOQQ,5:h,5:hO1RQYO,59qOOQU-E8k-E8kO2uQYO'#FmOOQQ,5:a,5:aOOQQ,5:m,5:mOOQQ,5:k,5:kO2|QYO,5:qOOQQ,5;m,5;mO3WQYO,5:pO3eQWO,5:rO3jQYO,5:sOOQP'#Ed'#EdO4aQXO'#EcOOQO'#Eb'#EbO4hQWO'#EaO4mQWO'#F|O4uQWO,5:zO4zQYO,59ZO.xQYO'#F`OOQQ'#Cw'#CwO5RQYO'#F_OOQQ'#Cv'#CvO5ZQYO,59_O5`QYO,5:bO5eQYO,5:lO3PQYO,5:pO5jQYO,5:oO`QYO'#EvQ,fQWOOO`QYO'#ElO6aQWO,5;{O`QYOOOOQR'#Cf'#CfOOQQ'#Ei'#EiO7ZQYO,59OO`QYO,5;pOOQQ'#FX'#FXO$qQYO'#EjO7kQYO,5;oO`QYO1G.fOOQQ'#F['#F[O8bQYO1G/TO;XQYO1G/]O;cQYO1G/]O;mQYO1G/]OOQQ1G/w1G/wO=aQYO1G/yO=hQYO1G/PO>qQYO1G/RO?zQYO1G/TO`QYO1G/TOOQQ1G/T1G/TO@bQYO1G/^O@|Q^O'#CdOB`QYO'#FoOOQO'#Dy'#DyOBjQWO'#DxOBoQWO'#FnOOQO'#Dw'#DwOOQO'#Dz'#DzOBwQWO,5<XOOQQ1G0]1G0]O`QYO1G0[O`QYO'#ErOB|QWO,5<ZOOQQ1G0^1G0^OCXQWO'#EZOCdQWO'#FzOOQO'#EY'#EYOClQWO1G0_OOQP'#Et'#EtOCqQXO,5:}O`QYO,5:{OCxQXO'#EuODQQWO,5<hOOQQ1G0f1G0fO`QYO1G.uO`QYO,5;zO$qQYO'#EkODYQYO,5;yO`QYO1G.yODbQYO1G/|OOQO1G0W1G0WOOQO,5;b,5;bOOQO-E8t-E8tOOQO,5;W,5;WOOQO-E8j-E8jODgQWOOOOQQ-E8g-E8gODlQYO'#CmOOQQ1G1[1G1[OOQQ,5;U,5;UOOQQ-E8h-E8hODyQYO7+$QOOQQ7+%e7+%eO`QYO7+$oOEpQYO,5:qOE}QWO7+$oOFSQYO'#D[OOQQ'#DZ'#DZOGvQYO'#D^OG{QYO'#D^OHQQYO'#D^OHVQ`O'#DfOH[Q`O'#DiOHaQ`O'#DmOOQQ7+$x7+$xO`QYO,5:dO$qQYO'#EqOHfQWO,5<YOOQQ1G1s1G1sOIlQYO7+%vOIyQYO,5;^OOQO-E8p-E8pO@bQYO,5:uO$qQYO'#EsOJWQWO,5<fOJ`QYO7+%yOOQP-E8r-E8rOJgQYO1G0gOOQO,5;a,5;aOOQO-E8s-E8sOJqQYO7+$aOJxQYO1G1fOOQQ,5;V,5;VOOQQ-E8i-E8iOKSQYO7+$eOOQO7+%h7+%hO`QYO,59XOKyQYO<<HZOOQQ<<HZ<<HZO$qQYO'#EnOMSQYO,59vONvQYO,59xON{QYO,59xO! QQYO,59xO! VQYO,5:QO$qQYO,5:TO! qQbO,5:XO! xQYO1G0OOOQO,5;],5;]OOQO-E8o-E8oO!!SQYO<<IbOOQQ<<Ib<<IbOOQO1G0a1G0aOOQO,5;_,5;_OOQO-E8q-E8qO!%OQYO'#E]OOQQ<<Ie<<IeO`QYO<<IeO`QYO<<G{O!%uQYO1G.sOOQQ,5;Y,5;YOOQQ-E8l-E8lO!&PQYO1G/dOOQQ1G/d1G/dO!&UQbO'#D]O!&gQ`O'#D[O!&rQ`O1G/lO!&wQWO'#DlO!&|Q`O'#FfOOQO'#Dk'#DkO!'UQ`O1G/oOOQO'#Dp'#DpO!'ZQ`O'#FhOOQO'#Do'#DoO!'cQ`O1G/sOOQQAN?PAN?PO!'hQYOAN=gOOQQ7+%O7+%OO!(_Q`O,59vOOQQ7+%W7+%WO! VQYO,5:WO$qQYO'#EoO!(jQ`O,5<QOOQQ7+%Z7+%ZO! VQYO'#EpO!(rQ`O,5<SO!(zQ`O7+%_OOQO1G/r1G/rOOQO,5;Z,5;ZOOQO-E8m-E8mOOQO,5;[,5;[OOQO-E8n-E8nO@bQYO<<HyOOQQAN>eAN>eO$qQYO'#EnO! VQYO<<HyO!)PQ`O7+%_O!)UQ`O1G/sO! qQbO,5:XO!)ZQ`O'#Dm\",\n  stateData: \"!)h~O#qOS#rOSPOSQOS~OTqOZVO[UOdrOhtOitOs{OvgO!SyO!TyO!UvO!WxO!b|O!fzO!heO!owO!vhO#RlO#mRO#nRO$g]O$h^O$i_O$j`O~OTqO[UOdrOhtOitOs{OvgO!SyO!TyO!UvO!WxO!b|O!fzO!heO!owO!vhO#RlO#mRO#nRO$g]O$h^O$i_O$j`O~OZ!RO#[!SO~P!|O#mRO#nRO~OZ![O[![O]!]O^!]O_!^O`!iOn!fOp!gOr!ZOs!ZOt!hO{!jO!h!dO#y!bOv$`X~O#k#sX$q#sX~P$yO$g!kOT$XXZ$XX[$XXd$XXh$XXi$XXs$XXv$XX!S$XX!T$XX!U$XX!W$XX!b$XX!f$XX!h$XX!o$XX!v$XX#R$XX#m$XX#n$XX$h$XX$i$XX$j$XX~O#mRO#nROZ!PX[!PX]!PX^!PX_!PX`!PXn!PXp!PXr!PXs!PXt!PXv!PX{!PX!h!PX#k!PX#o!PX#y!PX$q!PX#}!PXx!PX#|!PX!f!PXe!PXb!PX#Q!PXf!PXl!PX~Ov!nO~O$h^O~O#o!sOZ#uX[#uX]#uX^#uX_#uX`#uXn#uXp#uXr#uXs#uXt#uXv#uX{#uX!h#uX#k#uX#y#uX$q#uX#}#uXx#uX#|#uX!f#uXe#uXb#uX#Q#uXf#uXl#uX~O!f$cP~P`Ov!vO~O#l!wO$h^O#Q$pP~Op#TO~Op#UOv!tX~O$q#XO~O#kuX#}uX$quXxuX#|uX!fuXeuXbuX#QuXfuXluX~P$yO#}#ZO#k$TXx$TX~O#k#ZX~P&UOv#]O~OZ#^O[#^O]#^O^#^O_#^O#mRO#nRO#y#^O#z#^O$ZWX~O`WXxWX#}WX~P-yO`#bO~O#}#cOb#wX~Ob#fO~OTqOZVO[UOdrOhtOitOs{O!SyO!TyO!UvO!WxO!b|O!fzO!heO!owO!vhO#RlO#mRO#nRO$g]O$h^O$i_O$j`O~Ov#pO~P/[O|#rO~O{!jO!h!dO#y!bOZya[ya]ya^ya_ya`yanyapyaryasyatyav$`X#kya$qya#}yaxya#|ya!fyaeyabya#Qyafyalya~Ox$cP~P`Ox#{O#|#|O~P$yO#|#|O#}#}O!f$cX~P$yO!f$PO~O#mRO#nROx$nP~OZ#^O[#^O]#^O^#^O_#^O#l!wO#y#^O#z#^O~O$Z#VX~P3uO$Z$WO~O#}$XO#Q$pX~O#Q$ZO~Oe$[O~P$yO#}$^Ol$RX~Ol$`O~O!V$aO~O!S$bO~O#k!wa$q!wa#}!wax!wa#|!wa!f!wae!wab!wa#Q!waf!wal!wa~P$yO#}#ZO#k$Tax$Ta~OZ#^O[#^O]#^O^#^O_#^O#mRO#nRO#y#^O#z#^O~O`Wa$ZWaxWa#}Wa~P6lO#}#cOb#wa~OZ![O[![O]!]O^!]O_!^O{!jO!h!dO#y!bOv$`X~O`qinqipqirqisqitqi#kqi$qqi#}qixqi#|qi!fqieqibqi#Qqifqilqi~P7sO_!^O{!jO!h!dO#y!bOZyi[yi`yinyipyiryisyityiv$`X#kyi$qyi#}yixyi#|yi!fyieyibyi#Qyifyilyi~O]!]O^!]O~P9kO]yi^yi~P9kO{!jO!h!dO#y!bOZyi[yi]yi^yi_yi`yinyipyiryisyityiv$`X#kyi$qyi#}yixyi#|yi!fyieyibyi#Qyifyilyi~O!f$nO~P$yO`!iOp!gOr!ZOs!ZOt!hOnmi#kmi$qmi#}mixmi#|mi!fmiemibmi#Qmifmilmi~P7sO`!iOr!ZOs!ZOt!hOnoipoi#koi$qoi#}oixoi#|oi!foieoiboi#Qoifoiloi~P7sO`!iOn!fOp$oOr!ZOs!ZOt!hO~P7sO!R$tO!U$uO!W$vO!Z$wO!^$xO!b$yO#mRO#nRO~OZ#aX[#aX]#aX^#aX_#aX`#aXn#aXp#aXr#aXs#aXt#aXv#aXx#aX{#aX!h#aX#m#aX#n#aX#o#aX#y#aX#}#aX~P-yO#}#}Ox$cX~P$yO$Z${O~O#}$|Ox$bX~Ox%OO~O#}#}O!f$cax$ca~O$Z%SOx!}X#}!}X~O#}%TOx$nX~Ox%VO~O$Z#Va~P3uO#l!wO$h^O~O#}$XO#Q$pa~O#}$^Ol$Ra~O!T%aO~OxpO~O#|%bObaX#}aX~P$yO#kSq$qSq#}SqxSq#|Sq!fSqeSqbSq#QSqfSqlSq~P$yOx#{O#|#|O#}uX~P$yOx%dO~O#y%eOZ!OX[!OX]!OX^!OX_!OX`!OXn!OXp!OXr!OXs!OXt!OXv!OX{!OX!h!OX#k!OX$q!OX#}!OXx!OX#|!OX!f!OXe!OXb!OX#Q!OXf!OXl!OX~Op%gO~Op%hO~Op%iO~O![%jO~O![%kO~O![%lO~O#}$|Ox$ba~OZ![O[![O]!]O^!]O_!^O`!iOn!fOp!gOr!ZOs!ZOt!hO{!jO#y!bOv$`X~Ox%qO!f%qO!h%pO~PHnO!f#fa#}#fax#fa~P$yO#}%TOx$na~O#O%wO~P`O#Q#Ti#}#Ti~P$yOf%xO~P$yOl$Si#}$Si~P$yO#kgq$qgq#}gqxgq#|gq!fgqegqbgq#Qgqfgqlgq~P$yO`qynqypqyrqysqytqy#kqy$qqy#}qyxqy#|qy!fqyeqybqy#Qqyfqylqy~P7sO#y%eOZ!Oa[!Oa]!Oa^!Oa_!Oa`!Oan!Oap!Oar!Oas!Oat!Oav!Oa{!Oa!h!Oa#k!Oa$q!Oa#}!Oax!Oa#|!Oa!f!Oae!Oab!Oa#Q!Oaf!Oal!Oa~O!S%|O~O!V%|O~O!S%}O~O!R$tO!U$uO!W$vO!Z$wO!^$xO!b&sO#mRO#nRO~O!X$[P~P! VOx!li#}!li~P$yOT$_XZ$_X[$_X]!xy^!xy_!xy`!xyd$_Xh$_Xi$_Xn!xyp!xyr!xys$_Xt!xyv$_X{!xy!S$_X!T$_X!U$_X!W$_X!b$_X!f$_X!h$_X!o$_X!v$_X#R$_X#k!xy#m$_X#n$_X#y!xy$g$_X$h$_X$i$_X$j$_X$q!xy#}!xyx!xy#|!xye!xyb!xy#Q!xyf!xyl!xy~O#k#PX$q#PX#}#PXx#PX#|#PX!f#PXe#PXb#PX#Q#PXf#PXl#PX~P$yObai#}ai~P$yO!T&]O~O#mRO#nRO!X!PX#y!PX#}!PX~O#y&nO!X!OX#}!OX~O!X&_O~O$Z&`O~O#}&aO!X$YX~O!X&cO~O#}&dO!X$[X~O!X&fO~O#kc!R$qc!R#}c!Rxc!R#|c!R!fc!Rec!Rbc!R#Qc!Rfc!Rlc!R~P$yO#y&nO!X!Oa#}!Oa~O#}&aO!X$Ya~O#}&dO!X$[a~O$]&lO~O$]&oO~O!X&pO~O![&rO~OQP_^$g]#y~\",\n  goto: \"Du$qPPPP$rP%k%n%t&W'qPPPPPP'zP$rPPP$rPP'}(QP$rP$rP$rPPP(WP(cP$r$rPP(l)R)^)RPPPPPPP)RPP)RP*k*n)RP*t*z$rP$rP$r+R+z+},T+zP,]-U,],].U.}P$r/v$r0o0o1h1kP1qPP0o1w1}.Q2RPP2ZP2^2e2k2q2w4S4^4d4j4p4w4}5T5ZPPPPPPPP5a5j7q8j9c9fPP9jPP9p9s:l;e;h;l;q<`=O=o>hP>kP>o?b@T@|ASAV$rA]A]PPPPBU7qB}CvCyDr!mhOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR!YSQ!WSR$k#cS!US#cS#Ou$^W#u!n!v$|%TT&R%k&a#WXOPQWYgjsz{!Z!_!`!a!c!e!f!g!h!i#X#Z#]#a#e#p#r#|#}$W$[$]$`$o${%S%V%b%e%j%l%w%x&O&`&d&l&n&o&rb!TSu!v#c$^$|%T%k&aU#_!T#`#sR#s!nU#_!T#`#sT$U!x$VR$j#aR#SuQ#QuR%^$^U!PQ#]#pQ#q!iR$e#ZQpQQ$g#]R$q#pQ$z#rQ%r%SQ&Q%jU&V%l&d&rQ&g&`T&m&l&oc$s#r%S%j%l&`&d&l&o&r!liOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xQ#k!cU$r#r%S&lS%z%e&n]&P%j%l&`&d&o&rR&U%kQ&S%kR&h&aQ&Y%lR&q&rS&W%l&rR&j&d!mZOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR#z!nQ#w!nR%n$|S#v!n$|T$Q!v%T!mcOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!lcOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xQ!p`T!ym$X!maOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mbOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mfOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mnOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR$T!vQ$R!vR%s%TQ%v%VR&Z%wQ!{mR%Y$XT!zm$XS!xm$XT$U!x$VRpQS#`!T#sR$h#`Q#d!WR$l#dQ$_#QR%_$_Q#[!PR$f#[!vYOPQWgjsz{!Z!_!`!a!c!e!f!g!h!i!n#X#Z#]#a#e#p#r#|#}$W$[$]$`$o${%S%V%b%e%w%x&lS!mY&O_&O%j%l&`&d&n&o&rQ%f$rS%{%f&^R&^&PQ&b&SR&i&bQ&e&WR&k&eQ$}#wR%o$}S$O!t#tR%R$OQ%U$RR%t%UQ$V!xR%W$VQ$Y!{R%Z$YQ#Y}R$d#YQpOQ}PR$c#XUTOP#XW!OQ!i#Z#]Q!lWQ!rgQ!tjQ!}sQ#VzQ#W{Q#g!ZQ#h!_Q#i!`Q#j!aQ#l!eQ#m!fQ#n!gQ#o!hQ#t!nQ$i#aQ$m#eQ$p#pQ%P#|Q%Q#}Q%X$WQ%[$[Q%]$]Q%`$`Q%c$oQ%m${S%u%V%wQ%y%bR&[%x!moOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mSOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR!XST!VS#cQ#a!UR$]#OR#e!Y!msOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!muOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR#RuT#Pu$^V!QQ#]#p!X!_T!O!r!t!}#V#W#g#l#m#n#o#t$i$m$p%P%Q%X%[%]%`%c%m%u%y&[!Z!`T!O!r!t!}#V#W#g#h#l#m#n#o#t$i$m$p%P%Q%X%[%]%`%c%m%u%y&[!]!aT!O!r!t!}#V#W#g#h#i#l#m#n#o#t$i$m$p%P%Q%X%[%]%`%c%m%u%y&[!mWOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR&T%kT&X%l&r!a!cT!O!l!r!t!}#V#W#g#h#i#j#l#m#n#o#t$i$m$p%P%Q%X%[%]%`%c%m%u%y&[!a!eT!O!l!r!t!}#V#W#g#h#i#j#l#m#n#o#t$i$m$p%P%Q%X%[%]%`%c%m%u%y&[!m[OPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xQ!o[R!qaR#x!nQ!ujR#y!n!mdOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mjOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%x!mkOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR$S!v!mmOPQWgjsz{!Z!_!`!a!e!f!g!h!i!n#X#Z#]#a#e#p#|#}$W$[$]$`$o${%V%b%w%xR!|m\",\n  nodeNames: \"⚠ LineComment BlockComment Expression ForExpression for InExpressions InExpression Name Identifier Identifier ArithOp ArithOp ArithOp ArithOp ArithOp in IterationContext return IfExpression if then else QuantifiedExpression some every InExpressions InExpression satisfies Disjunction or Conjunction and Comparison CompareOp CompareOp between PositiveUnaryTest ( PositiveUnaryTests ) ArithmeticExpression InstanceOfExpression instance of Type QualifiedName VariableName SpecialType days time duration years months date > ListType list < ContextType context ContextEntryTypes ContextEntryType FunctionType function ArgumentTypes ArgumentType PathExpression ] FilterExpression [ FunctionInvocation SpecialFunctionName NamedParameters NamedParameter ParameterName PositionalParameters null NumericLiteral StringLiteral BooleanLiteral DateTimeLiteral DateTimeConstructor AtLiteral ? SimplePositiveUnaryTest Interval ParenthesizedExpression List FunctionDefinition FormalParameters FormalParameter external FunctionBody } { Context ContextEntry Key Name Identifier Expressions UnaryTests Wildcard not\",\n  maxTerm: 171,\n  context: variableTracker,\n  nodeProps: [\n    [\"closedBy\", 38,\")\",70,\"]\",95,\"}\"],\n    [\"openedBy\", 40,\"(\",68,\"[\",94,\"{\"],\n    [\"group\", -5,77,78,79,80,81,\"Literal\"]\n  ],\n  propSources: [feelHighlighting],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 14,\n  tokenData: \"+l~RuXY#fYZ$ZZ[#f]^$Zpq#fqr$`rs$kwx&cxy&hyz&mz{&r{|'P|}'U}!O'Z!O!P'h!P!Q(Q!Q![){![!]*^!]!^*c!^!_*h!_!`$f!`!a*w!b!c+R!}#O+W#P#Q+]#Q#R&z#o#p+b#q#r+g$f$g#f#BY#BZ#f$IS$I_#f$I|$I}$Z$I}$JO$Z$JT$JU#f$KV$KW#f&FU&FV#f?HT?HU#f~#kY#q~XY#fZ[#fpq#f$f$g#f#BY#BZ#f$IS$I_#f$JT$JU#f$KV$KW#f&FU&FV#f?HT?HU#f~$`O#r~~$cP!_!`$f~$kOr~~$pW$h~OY$kZr$krs%Ys#O$k#O#P%_#P;'S$k;'S;=`&]<%lO$k~%_O$h~~%bRO;'S$k;'S;=`%k;=`O$k~%pX$h~OY$kZr$krs%Ys#O$k#O#P%_#P;'S$k;'S;=`&];=`<%l$k<%lO$k~&`P;=`<%l$k~&hO#z~~&mOv~~&rOx~~&wP^~z{&z~'PO_~~'UO[~~'ZO#}~R'`PZP!`!a'cQ'hO$]Q~'mQ#y~!O!P's!Q!['x~'xO#|~~'}P$g~!Q!['x~(VQ]~z{(]!P!Q)d~(`TOz(]z{(o{;'S(];'S;=`)^<%lO(]~(rVOz(]z{(o{!P(]!P!Q)X!Q;'S(];'S;=`)^<%lO(]~)^OQ~~)aP;=`<%l(]~)iSP~OY)dZ;'S)d;'S;=`)u<%lO)d~)xP;=`<%l)d~*QQ$g~!O!P*W!Q![){~*ZP!Q!['x~*cO$Z~~*hO$q~R*oP![QsP!_!`*rP*wOsPR+OP!XQsP!_!`*r~+WO$j~~+]O!h~~+bO!f~~+gO#R~~+lO#Q~\",\n  tokenizers: [propertyIdentifiers, identifiers, insertSemicolon, 0, 1],\n  topRules: {\"Expression\":[0,3],\"Expressions\":[1,101],\"UnaryTests\":[2,102]},\n  dynamicPrecedences: {\"31\":-1,\"71\":-1,\"73\":-1},\n  specialized: [{term: 121, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 2500\n});\n\nexport { VariableContext, normalizeContextKey, parser, trackVariables };\n//# sourceMappingURL=index.js.map\n","import { DateTime, FixedOffsetZone, Duration, SystemZone, Info } from 'luxon';\nimport { normalizeContextKey, parser, trackVariables } from 'lezer-feel';\n\nfunction isContext(e) {\n    return Object.getPrototypeOf(e) === Object.prototype;\n}\nfunction isDateTime(obj) {\n    return DateTime.isDateTime(obj);\n}\nfunction isDuration(obj) {\n    return Duration.isDuration(obj);\n}\nfunction isArray(e) {\n    return Array.isArray(e);\n}\nfunction isBoolean(e) {\n    return typeof e === 'boolean';\n}\nfunction getType(e) {\n    if (e === null || e === undefined) {\n        return 'nil';\n    }\n    if (isBoolean(e)) {\n        return 'boolean';\n    }\n    if (isNumber(e)) {\n        return 'number';\n    }\n    if (isString(e)) {\n        return 'string';\n    }\n    if (isContext(e)) {\n        return 'context';\n    }\n    if (isArray(e)) {\n        return 'list';\n    }\n    if (isDuration(e)) {\n        return 'duration';\n    }\n    if (isDateTime(e)) {\n        if (e.year === 1900 &&\n            e.month === 1 &&\n            e.day === 1) {\n            return 'time';\n        }\n        if (e.hour === 0 &&\n            e.minute === 0 &&\n            e.second === 0 &&\n            e.millisecond === 0 &&\n            e.zone === FixedOffsetZone.utcInstance) {\n            return 'date';\n        }\n        return 'date time';\n    }\n    if (e instanceof Range) {\n        return 'range';\n    }\n    if (e instanceof FunctionWrapper) {\n        return 'function';\n    }\n    return 'literal';\n}\nfunction isType(el, type) {\n    return getType(el) === type;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction typeCast(obj, type) {\n    if (isDateTime(obj)) {\n        if (type === 'time') {\n            return obj.set({\n                year: 1900,\n                month: 1,\n                day: 1\n            });\n        }\n        if (type === 'date') {\n            return obj.setZone('utc', { keepLocalTime: true }).startOf('day');\n        }\n        if (type === 'date time') {\n            return obj;\n        }\n    }\n    return null;\n}\nclass Range {\n    constructor(props) {\n        Object.assign(this, props);\n    }\n}\nfunction isNumber(obj) {\n    return typeof obj === 'number';\n}\nfunction isString(obj) {\n    return typeof obj === 'string';\n}\nfunction equals(a, b, strict = false) {\n    if (a === null && b !== null ||\n        a !== null && b === null) {\n        return false;\n    }\n    if (isArray(a) && a.length < 2) {\n        a = a[0];\n    }\n    if (isArray(b) && b.length < 2) {\n        b = b[0];\n    }\n    const aType = getType(a);\n    const bType = getType(b);\n    const temporalTypes = ['date time', 'time', 'date'];\n    if (temporalTypes.includes(aType)) {\n        if (!temporalTypes.includes(bType)) {\n            return null;\n        }\n        if (aType === 'time' && bType !== 'time') {\n            return null;\n        }\n        if (bType === 'time' && aType !== 'time') {\n            return null;\n        }\n        if (strict || a.zone === SystemZone.instance || b.zone === SystemZone.instance) {\n            return a.equals(b);\n        }\n        else {\n            return a.toUTC().valueOf() === b.toUTC().valueOf();\n        }\n    }\n    if (aType !== bType) {\n        return null;\n    }\n    if (aType === 'nil') {\n        return true;\n    }\n    if (aType === 'list') {\n        if (a.length !== b.length) {\n            return false;\n        }\n        return a.every((element, idx) => equals(element, b[idx]));\n    }\n    if (aType === 'duration') {\n        // years and months duration -> months\n        if (Math.abs(a.as('days')) > 180) {\n            return Math.trunc(a.minus(b).as('months')) === 0;\n        }\n        // days and time duration -> seconds\n        else {\n            return Math.trunc(a.minus(b).as('seconds')) === 0;\n        }\n    }\n    if (aType === 'context') {\n        const aEntries = Object.entries(a);\n        const bEntries = Object.entries(b);\n        if (aEntries.length !== bEntries.length) {\n            return false;\n        }\n        return aEntries.every(([key, value]) => key in b && equals(value, b[key]));\n    }\n    if (aType === 'range') {\n        return [\n            [a.start, b.start],\n            [a.end, b.end],\n            [a['start included'], b['start included']],\n            [a['end included'], b['end included']]\n        ].every(([a, b]) => a === b);\n    }\n    if (a == b) {\n        return true;\n    }\n    return aType === bType ? false : null;\n}\nclass FunctionWrapper {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    constructor(fn, parameterNames) {\n        this.fn = fn;\n        this.parameterNames = parameterNames;\n    }\n    invoke(contextOrArgs) {\n        let params;\n        if (isArray(contextOrArgs)) {\n            params = contextOrArgs;\n            // reject\n            if (params.length > this.parameterNames.length) {\n                const lastParam = this.parameterNames[this.parameterNames.length - 1];\n                // strictly check for parameter count provided\n                // for non var-args functions\n                if (!lastParam || !lastParam.startsWith('...')) {\n                    return null;\n                }\n            }\n        }\n        else {\n            // strictly check for required parameter names,\n            // and fail on wrong parameter name\n            if (Object.keys(contextOrArgs).some(key => !this.parameterNames.includes(key) && !this.parameterNames.includes(`...${key}`))) {\n                return null;\n            }\n            params = this.parameterNames.reduce((params, name) => {\n                if (name.startsWith('...')) {\n                    name = name.slice(3);\n                    const value = contextOrArgs[name];\n                    if (!value) {\n                        return params;\n                    }\n                    else {\n                        // ensure that single arg provided for var args named\n                        // parameter is wrapped in a list\n                        return [...params, ...(isArray(value) ? value : [value])];\n                    }\n                }\n                return [...params, contextOrArgs[name]];\n            }, []);\n        }\n        return this.fn.call(null, ...params);\n    }\n}\n\nfunction parseParameterNames(fn) {\n    if (Array.isArray(fn.$args)) {\n        return fn.$args;\n    }\n    const code = fn.toString();\n    const match = /^(?:[^(]*\\s*)?\\(([^)]+)?\\)/.exec(code);\n    if (!match) {\n        throw new Error('failed to parse params: ' + code);\n    }\n    const [_, params] = match;\n    if (!params) {\n        return [];\n    }\n    return params.split(',').map(p => p.trim());\n}\nfunction notImplemented(thing) {\n    return new Error(`not implemented: ${thing}`);\n}\n/**\n * Returns a name from context or undefined if it does not exist.\n *\n * @param {string} name\n * @param {Record<string, any>} context\n *\n * @return {any|undefined}\n */\nfunction getFromContext(name, context) {\n    if (['nil', 'boolean', 'number', 'string'].includes(getType(context))) {\n        return undefined;\n    }\n    if (name in context) {\n        return context[name];\n    }\n    const normalizedName = normalizeContextKey(name);\n    if (normalizedName in context) {\n        return context[normalizedName];\n    }\n    const entry = Object.entries(context).find(([key]) => normalizedName === normalizeContextKey(key));\n    if (entry) {\n        return entry[1];\n    }\n    return undefined;\n}\n\nfunction duration(opts) {\n    if (typeof opts === 'number') {\n        return Duration.fromMillis(opts);\n    }\n    return Duration.fromISO(opts);\n}\nfunction date(str = null, time = null, zone = null) {\n    if (time) {\n        if (str) {\n            throw new Error('<str> and <time> provided');\n        }\n        return date(`1900-01-01T${time}`, null);\n    }\n    if (typeof str === 'string') {\n        if (str.startsWith('-')) {\n            throw notImplemented('negative date');\n        }\n        if (!str.includes('T')) {\n            // raw dates are in UTC time zone\n            return date(str + 'T00:00:00', null, zone || FixedOffsetZone.utcInstance);\n        }\n        if (str.includes('@')) {\n            if (zone) {\n                throw new Error('<zone> already provided');\n            }\n            const [datePart, zonePart] = str.split('@');\n            return date(datePart, null, Info.normalizeZone(zonePart));\n        }\n        return DateTime.fromISO(str.toUpperCase(), {\n            setZone: true,\n            zone\n        });\n    }\n    return DateTime.now();\n}\n\n// 10.3.4 Built-in functions\nconst builtins = {\n    // 10.3.4.1 Conversion functions\n    'number': fn(function (from, groupingSeparator, decimalSeparator) {\n        // must always provide three arguments\n        if (arguments.length !== 3) {\n            return null;\n        }\n        if (groupingSeparator) {\n            from = from.split(groupingSeparator).join('');\n        }\n        if (decimalSeparator && decimalSeparator !== '.') {\n            from = from.split('.').join('#').split(decimalSeparator).join('.');\n        }\n        const number = +from;\n        if (isNaN(number)) {\n            return null;\n        }\n        return number;\n    }, ['string', 'string?', 'string?'], ['from', 'grouping separator', 'decimal separator']),\n    'string': fn(function (from) {\n        if (from === null) {\n            return null;\n        }\n        return toString(from);\n    }, ['any']),\n    // date(from) => date string\n    // date(from) => date and time\n    // date(year, month, day)\n    'date': fn(function (year, month, day, from) {\n        if (!from && !isNumber(year)) {\n            from = year;\n            year = null;\n        }\n        let d;\n        if (isString(from)) {\n            d = date(from);\n        }\n        if (isDateTime(from)) {\n            d = from;\n        }\n        if (year) {\n            d = date().setZone('utc').set({\n                year,\n                month,\n                day\n            });\n        }\n        return d && ifValid(d.setZone('utc').startOf('day')) || null;\n    }, ['any?', 'number?', 'number?', 'any?']),\n    // date and time(from) => date time string\n    // date and time(date, time)\n    'date and time': fn(function (d, time, from) {\n        let dt;\n        if (isDateTime(d) && isDateTime(time)) {\n            const dLocal = d.toLocal();\n            dt = time.set({\n                year: dLocal.year,\n                month: dLocal.month,\n                day: dLocal.day\n            });\n        }\n        if (isString(d)) {\n            from = d;\n            d = null;\n        }\n        if (isString(from)) {\n            dt = date(from, null, from.includes('@') ? null : SystemZone.instance);\n        }\n        return dt && ifValid(dt) || null;\n    }, ['any?', 'time?', 'string?'], ['date', 'time', 'from']),\n    // time(from) => time string\n    // time(from) => time, date and time\n    // time(hour, minute, second, offset?) => ...\n    'time': fn(function (hour, minute, second, offset, from) {\n        let t;\n        if (offset) {\n            throw notImplemented('time(..., offset)');\n        }\n        if (isString(hour) || isDateTime(hour)) {\n            from = hour;\n            hour = null;\n        }\n        if (isString(from)) {\n            t = date(null, from);\n        }\n        if (isDateTime(from)) {\n            t = from.set({\n                year: 1900,\n                month: 1,\n                day: 1\n            });\n        }\n        if (isNumber(hour)) {\n            // TODO: support offset = days and time duration\n            t = date().set({\n                hour,\n                minute,\n                second\n            }).set({\n                year: 1900,\n                month: 1,\n                day: 1,\n                millisecond: 0\n            });\n        }\n        return t && ifValid(t) || null;\n    }, ['any?', 'number?', 'number?', 'any?', 'any?']),\n    'duration': fn(function (from) {\n        return ifValid(duration(from));\n    }, ['string']),\n    'years and months duration': fn(function (from, to) {\n        return ifValid(to.diff(from, ['years', 'months']));\n    }, ['date', 'date']),\n    '@': fn(function (string) {\n        let t;\n        if (/^-?P/.test(string)) {\n            t = duration(string);\n        }\n        else if (/^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}/.test(string)) {\n            t = date(null, string);\n        }\n        else {\n            t = date(string);\n        }\n        return t && ifValid(t) || null;\n    }, ['string']),\n    'now': fn(function () {\n        return date();\n    }, []),\n    'today': fn(function () {\n        return date().startOf('day');\n    }, []),\n    // 10.3.4.2 Boolean function\n    'not': fn(function (bool) {\n        return isType(bool, 'boolean') ? !bool : null;\n    }, ['any']),\n    // 10.3.4.3 String functions\n    'substring': fn(function (string, start, length) {\n        const _start = (start < 0 ? string.length + start : start - 1);\n        const arr = Array.from(string);\n        return (typeof length !== 'undefined'\n            ? arr.slice(_start, _start + length)\n            : arr.slice(_start)).join('');\n    }, ['string', 'number', 'number?'], ['string', 'start position', 'length']),\n    'string length': fn(function (string) {\n        return countSymbols(string);\n    }, ['string']),\n    'upper case': fn(function (string) {\n        return string.toUpperCase();\n    }, ['string']),\n    'lower case': fn(function (string) {\n        return string.toLowerCase();\n    }, ['string']),\n    'substring before': fn(function (string, match) {\n        const index = string.indexOf(match);\n        if (index === -1) {\n            return '';\n        }\n        return string.substring(0, index);\n    }, ['string', 'string']),\n    'substring after': fn(function (string, match) {\n        const index = string.indexOf(match);\n        if (index === -1) {\n            return '';\n        }\n        return string.substring(index + match.length);\n    }, ['string', 'string']),\n    'replace': fn(function (input, pattern, replacement, flags) {\n        return input.replace(new RegExp(pattern, 'ug' + (flags || '').replace(/[x]/g, '')), replacement.replace(/\\$0/g, '$$&'));\n    }, ['string', 'string', 'string', 'string?']),\n    'contains': fn(function (string, match) {\n        return string.includes(match);\n    }, ['string', 'string']),\n    // eslint-disable-next-line\n    'matches': fn(function (input, pattern, flags) {\n        throw notImplemented('matches');\n    }, ['string', 'string', 'string?']),\n    'starts with': fn(function (string, match) {\n        return string.startsWith(match);\n    }, ['string', 'string']),\n    'ends with': fn(function (string, match) {\n        return string.endsWith(match);\n    }, ['string', 'string']),\n    'split': fn(function (string, delimiter) {\n        return string.split(new RegExp(delimiter, 'u'));\n    }, ['string', 'string']),\n    'string join': fn(function (list, delimiter) {\n        if (list.some(e => !isString(e) && e !== null)) {\n            return null;\n        }\n        return list.filter(l => l !== null).join(delimiter || '');\n    }, ['list', 'string?']),\n    // 10.3.4.4 List functions\n    'list contains': fn(function (list, element) {\n        return list.some(el => matches(el, element));\n    }, ['list', 'any?']),\n    // list replace(list, position, newItem)\n    // list replace(list, match, newItem)\n    'list replace': fn(function (list, position, newItem, match) {\n        const matcher = position || match;\n        if (!['number', 'function'].includes(getType(matcher))) {\n            return null;\n        }\n        return listReplace(list, position || match, newItem);\n    }, ['list', 'any?', 'any', 'function?']),\n    'count': fn(function (list) {\n        return list.length;\n    }, ['list']),\n    'min': listFn(function (...list) {\n        return list.reduce((min, el) => min === null ? el : Math.min(min, el), null);\n    }, 'number'),\n    'max': listFn(function (...list) {\n        return list.reduce((max, el) => max === null ? el : Math.max(max, el), null);\n    }, 'number'),\n    'sum': listFn(function (...list) {\n        return sum(list);\n    }, 'number'),\n    'mean': listFn(function (...list) {\n        const s = sum(list);\n        return s === null ? s : s / list.length;\n    }, 'number'),\n    'all': listFn(function (...list) {\n        let nonBool = false;\n        for (const o of list) {\n            if (o === false) {\n                return false;\n            }\n            if (typeof o !== 'boolean') {\n                nonBool = true;\n            }\n        }\n        return nonBool ? null : true;\n    }, 'any?'),\n    'any': listFn(function (...list) {\n        let nonBool = false;\n        for (const o of list) {\n            if (o === true) {\n                return true;\n            }\n            if (typeof o !== 'boolean') {\n                nonBool = true;\n            }\n        }\n        return nonBool ? null : false;\n    }, 'any?'),\n    'sublist': fn(function (list, start, length) {\n        const _start = (start < 0 ? list.length + start : start - 1);\n        return (typeof length !== 'undefined'\n            ? list.slice(_start, _start + length)\n            : list.slice(_start));\n    }, ['list', 'number', 'number?']),\n    'append': fn(function (list, ...items) {\n        return list.concat(items);\n    }, ['list', 'any?']),\n    'concatenate': fn(function (...args) {\n        return args.reduce((result, arg) => {\n            return result.concat(arg);\n        }, []);\n    }, ['any']),\n    'insert before': fn(function (list, position, newItem) {\n        return list.slice(0, position - 1).concat([newItem], list.slice(position - 1));\n    }, ['list', 'number', 'any?']),\n    'remove': fn(function (list, position) {\n        return list.slice(0, position - 1).concat(list.slice(position));\n    }, ['list', 'number']),\n    'reverse': fn(function (list) {\n        return list.slice().reverse();\n    }, ['list']),\n    'index of': fn(function (list, match) {\n        return list.reduce(function (result, element, index) {\n            if (matches(element, match)) {\n                result.push(index + 1);\n            }\n            return result;\n        }, []);\n    }, ['list', 'any']),\n    'union': listFn(function (...lists) {\n        return lists.reduce((result, list) => {\n            return list.reduce((result, e) => {\n                if (!result.some(r => equals(e, r))) {\n                    result.push(e);\n                }\n                return result;\n            }, result);\n        }, []);\n    }, 'list'),\n    'distinct values': fn(function (list) {\n        return list.reduce((result, e) => {\n            if (!result.some(r => equals(e, r))) {\n                result.push(e);\n            }\n            return result;\n        }, []);\n    }, ['list']),\n    'flatten': fn(function (list) {\n        return flatten(list);\n    }, ['list']),\n    'product': listFn(function (...list) {\n        if (list.length === 0) {\n            return null;\n        }\n        return list.reduce((result, n) => {\n            return result * n;\n        }, 1);\n    }, 'number'),\n    'median': listFn(function (...list) {\n        if (list.length === 0) {\n            return null;\n        }\n        return median(list);\n    }, 'number'),\n    'stddev': listFn(function (...list) {\n        if (list.length < 2) {\n            return null;\n        }\n        return stddev(list);\n    }, 'number'),\n    'mode': listFn(function (...list) {\n        return mode(list);\n    }, 'number'),\n    // 10.3.4.5 Numeric functions\n    'decimal': fn(function (n, scale) {\n        if (!scale) {\n            return round(n);\n        }\n        const offset = Math.pow(10, scale);\n        return round(n * offset) / (offset);\n    }, ['number', 'number']),\n    'floor': fn(function (n, scale = 0) {\n        if (scale === null) {\n            return null;\n        }\n        const adjust = Math.pow(10, scale);\n        return Math.floor(n * adjust) / adjust;\n    }, ['number', 'number?']),\n    'ceiling': fn(function (n, scale = 0) {\n        if (scale === null) {\n            return null;\n        }\n        const adjust = Math.pow(10, scale);\n        return Math.ceil(n * adjust) / adjust;\n    }, ['number', 'number?']),\n    'abs': fn(function (n) {\n        if (typeof n !== 'number') {\n            return null;\n        }\n        return Math.abs(n);\n    }, ['number']),\n    // eslint-disable-next-line\n    'round up': fn(function (n, scale) {\n        throw notImplemented('round up');\n    }, ['number', 'number']),\n    // eslint-disable-next-line\n    'round down': fn(function (n, scale) {\n        throw notImplemented('round down');\n    }, ['number', 'number']),\n    // eslint-disable-next-line\n    'round half up': fn(function (n, scale) {\n        throw notImplemented('round half up');\n    }, ['number', 'number']),\n    // eslint-disable-next-line\n    'round half down': fn(function (n, scale) {\n        throw notImplemented('round half down');\n    }, ['number', 'number']),\n    'modulo': fn(function (dividend, divisor) {\n        if (!divisor) {\n            return null;\n        }\n        const adjust = 1000000000;\n        // cf. https://dustinpfister.github.io/2017/09/02/js-whats-wrong-with-modulo/\n        //\n        // need to round here as using this custom modulo\n        // variant is prone to rounding errors\n        return Math.round((dividend % divisor + divisor) % divisor * adjust) / adjust;\n    }, ['number', 'number']),\n    'sqrt': fn(function (number) {\n        if (number < 0) {\n            return null;\n        }\n        return Math.sqrt(number);\n    }, ['number']),\n    'log': fn(function (number) {\n        if (number <= 0) {\n            return null;\n        }\n        return Math.log(number);\n    }, ['number']),\n    'exp': fn(function (number) {\n        return Math.exp(number);\n    }, ['number']),\n    'odd': fn(function (number) {\n        return Math.abs(number) % 2 === 1;\n    }, ['number']),\n    'even': fn(function (number) {\n        return Math.abs(number) % 2 === 0;\n    }, ['number']),\n    // 10.3.4.6 Date and time functions\n    'is': fn(function (value1, value2) {\n        if (typeof value1 === 'undefined' || typeof value2 === 'undefined') {\n            return false;\n        }\n        return equals(value1, value2, true);\n    }, ['any?', 'any?']),\n    // 10.3.4.7 Range Functions\n    'before': fn(function (a, b) {\n        return before(a, b);\n    }, ['any', 'any']),\n    'after': fn(function (a, b) {\n        return before(b, a);\n    }, ['any', 'any']),\n    'meets': fn(function (a, b) {\n        return meetsRange(a, b);\n    }, ['range', 'range']),\n    'met by': fn(function (a, b) {\n        return meetsRange(b, a);\n    }, ['range', 'range']),\n    'overlaps': fn(function (range1, range2) {\n        return !before(range1, range2) && !before(range2, range1);\n    }, ['range', 'range']),\n    'overlaps before': fn(function () {\n        throw notImplemented('overlaps before');\n    }, ['any?']),\n    'overlaps after': fn(function () {\n        throw notImplemented('overlaps after');\n    }, ['any?']),\n    'finishes': fn(function () {\n        throw notImplemented('finishes');\n    }, ['any?']),\n    'finished by': fn(function () {\n        throw notImplemented('finished by');\n    }, ['any?']),\n    'includes': fn(function () {\n        throw notImplemented('includes');\n    }, ['any?']),\n    'during': fn(function () {\n        throw notImplemented('during');\n    }, ['any?']),\n    'starts': fn(function () {\n        throw notImplemented('starts');\n    }, ['any?']),\n    'started by': fn(function () {\n        throw notImplemented('started by');\n    }, ['any?']),\n    'coincides': fn(function () {\n        throw notImplemented('coincides');\n    }, ['any?']),\n    // 10.3.4.8 Temporal built-in functions\n    'day of year': fn(function (date) {\n        return date.ordinal;\n    }, ['date time']),\n    'day of week': fn(function (date) {\n        return date.weekdayLong;\n    }, ['date time']),\n    'month of year': fn(function (date) {\n        return date.monthLong;\n    }, ['date time']),\n    'week of year': fn(function (date) {\n        return date.weekNumber;\n    }, ['date time']),\n    // 10.3.4.9 Sort\n    'sort': fn(function (list, precedes) {\n        return Array.from(list).sort((a, b) => precedes.invoke([a, b]) ? -1 : 1);\n    }, ['list', 'function']),\n    // 10.3.4.10 Context function\n    'get value': fn(function (m, key) {\n        return getFromContext(key, m) || null;\n    }, ['context', 'string']),\n    'get entries': fn(function (m) {\n        if (arguments.length !== 1) {\n            return null;\n        }\n        if (Array.isArray(m)) {\n            return null;\n        }\n        return Object.entries(m).map(([key, value]) => ({ key, value }));\n    }, ['context']),\n    'context': listFn(function (...entries) {\n        const context = entries.reduce((context, entry) => {\n            if (context === FALSE || !['key', 'value'].every(e => e in entry)) {\n                return FALSE;\n            }\n            const key = entry.key;\n            if (key === null) {\n                return FALSE;\n            }\n            if (key in context) {\n                return FALSE;\n            }\n            return Object.assign(Object.assign({}, context), { [entry.key]: entry.value });\n        }, {});\n        if (context === FALSE) {\n            return null;\n        }\n        return context;\n    }, 'context'),\n    'context merge': listFn(function (...contexts) {\n        return Object.assign({}, ...contexts);\n    }, 'context'),\n    'context put': fn(function (context, keys, value, key) {\n        if (typeof keys === 'undefined' && typeof key === 'undefined') {\n            return null;\n        }\n        return contextPut(context, keys || [key], value);\n    }, ['context', 'list?', 'any', 'string?'], ['context', 'keys', 'value', 'key'])\n};\n/**\n * @param {Object} context\n * @param {string[]} keys\n * @param {any} value\n */\nfunction contextPut(context, keys, value) {\n    const [key, ...remainingKeys] = keys;\n    if (getType(key) !== 'string') {\n        return null;\n    }\n    if (getType(context) === 'nil') {\n        return null;\n    }\n    if (remainingKeys.length) {\n        value = contextPut(context[key], remainingKeys, value);\n        if (value === null) {\n            return null;\n        }\n    }\n    return Object.assign(Object.assign({}, context), { [key]: value });\n}\nfunction matches(a, b) {\n    return a === b;\n}\nconst FALSE = {};\nfunction createArgTester(arg) {\n    const optional = arg.endsWith('?');\n    const type = optional ? arg.substring(0, arg.length - 1) : arg;\n    return function (obj) {\n        const arr = Array.isArray(obj);\n        if (type === 'list') {\n            if (arr || optional && typeof obj === 'undefined') {\n                return obj;\n            }\n            else {\n                // implicit conversion obj => [ obj ]\n                return obj === null ? FALSE : [obj];\n            }\n        }\n        if (type !== 'any' && arr && obj.length === 1) {\n            // implicit conversion [ obj ] => obj\n            obj = obj[0];\n        }\n        const objType = getType(obj);\n        if (type === 'any' || type === objType) {\n            return optional ? obj : typeof obj !== 'undefined' ? obj : FALSE;\n        }\n        if (objType === 'nil') {\n            return (optional ? obj : FALSE);\n        }\n        return typeCast(obj, type) || FALSE;\n    };\n}\nfunction createArgsValidator(argDefinitions) {\n    const tests = argDefinitions.map(createArgTester);\n    return function (args) {\n        while (args.length < argDefinitions.length) {\n            args.push(undefined);\n        }\n        return args.reduce((result, arg, index) => {\n            if (result === false) {\n                return result;\n            }\n            const test = tests[index];\n            const conversion = test ? test(arg) : arg;\n            if (conversion === FALSE) {\n                return false;\n            }\n            result.push(conversion);\n            return result;\n        }, []);\n    };\n}\n/**\n * @param {Function} fnDefinition\n * @param {string} type\n * @param {string[]} [parameterNames]\n *\n * @return {Function}\n */\nfunction listFn(fnDefinition, type, parameterNames = null) {\n    const tester = createArgTester(type);\n    const wrappedFn = function (...args) {\n        if (args.length === 0) {\n            return null;\n        }\n        // unwrap first arg\n        if (Array.isArray(args[0]) && args.length === 1) {\n            args = args[0];\n        }\n        if (!args.every(arg => tester(arg) !== FALSE)) {\n            return null;\n        }\n        return fnDefinition(...args);\n    };\n    wrappedFn.$args = parameterNames || parseParameterNames(fnDefinition);\n    return wrappedFn;\n}\n/**\n * @param {Function} fnDefinition\n * @param {string[]} argDefinitions\n * @param {string[]} [parameterNames]\n *\n * @return {Function}\n */\nfunction fn(fnDefinition, argDefinitions, parameterNames = null) {\n    const checkArgs = createArgsValidator(argDefinitions);\n    parameterNames = parameterNames || parseParameterNames(fnDefinition);\n    const wrappedFn = function (...args) {\n        const convertedArgs = checkArgs(args);\n        if (!convertedArgs) {\n            return null;\n        }\n        return fnDefinition(...convertedArgs);\n    };\n    wrappedFn.$args = parameterNames;\n    return wrappedFn;\n}\n/**\n * @param {Range} a\n * @param {Range} b\n */\nfunction meetsRange(a, b) {\n    return [\n        (a.end === b.start),\n        (a['end included'] === true),\n        (b['start included'] === true)\n    ].every(v => v);\n}\n/**\n * @param {Range|number} a\n * @param {Range|number} b\n */\nfunction before(a, b) {\n    if (a instanceof Range && b instanceof Range) {\n        return (a.end < b.start || (!a['end included'] || !b['start included']) && a.end == b.start);\n    }\n    if (a instanceof Range) {\n        return (a.end < b || (!a['end included'] && a.end === b));\n    }\n    if (b instanceof Range) {\n        return (b.start > a || (!b['start included'] && b.start === a));\n    }\n    return a < b;\n}\nfunction sum(list) {\n    return list.reduce((sum, el) => sum === null ? el : sum + el, null);\n}\nfunction flatten([x, ...xs]) {\n    return (x !== undefined\n        ? [...Array.isArray(x) ? flatten(x) : [x], ...flatten(xs)]\n        : []);\n}\nfunction toKeyString(key) {\n    if (typeof key === 'string' && /\\W/.test(key)) {\n        return toString(key, true);\n    }\n    return key;\n}\nfunction toDeepString(obj) {\n    return toString(obj, true);\n}\nfunction escapeStr(str) {\n    return str.replace(/(\"|\\\\)/g, '\\\\$1');\n}\nfunction toString(obj, wrap = false) {\n    var _a, _b, _c, _d;\n    const type = getType(obj);\n    if (type === 'nil') {\n        return 'null';\n    }\n    if (type === 'string') {\n        return wrap ? `\"${escapeStr(obj)}\"` : obj;\n    }\n    if (type === 'boolean' || type === 'number') {\n        return String(obj);\n    }\n    if (type === 'list') {\n        return '[' + obj.map(toDeepString).join(', ') + ']';\n    }\n    if (type === 'context') {\n        return '{' + Object.entries(obj).map(([key, value]) => {\n            return toKeyString(key) + ': ' + toDeepString(value);\n        }).join(', ') + '}';\n    }\n    if (type === 'duration') {\n        return obj.shiftTo('years', 'months', 'days', 'hours', 'minutes', 'seconds').normalize().toISO();\n    }\n    if (type === 'date time') {\n        if (obj.zone === SystemZone.instance) {\n            return obj.toISO({ suppressMilliseconds: true, includeOffset: false });\n        }\n        if ((_a = obj.zone) === null || _a === void 0 ? void 0 : _a.zoneName) {\n            return obj.toISO({ suppressMilliseconds: true, includeOffset: false }) + '@' + ((_b = obj.zone) === null || _b === void 0 ? void 0 : _b.zoneName);\n        }\n        return obj.toISO({ suppressMilliseconds: true });\n    }\n    if (type === 'date') {\n        return obj.toISODate();\n    }\n    if (type === 'range') {\n        return '<range>';\n    }\n    if (type === 'time') {\n        if (obj.zone === SystemZone.instance) {\n            return obj.toISOTime({ suppressMilliseconds: true, includeOffset: false });\n        }\n        if ((_c = obj.zone) === null || _c === void 0 ? void 0 : _c.zoneName) {\n            return obj.toISOTime({ suppressMilliseconds: true, includeOffset: false }) + '@' + ((_d = obj.zone) === null || _d === void 0 ? void 0 : _d.zoneName);\n        }\n        return obj.toISOTime({ suppressMilliseconds: true });\n    }\n    if (type === 'function') {\n        return '<function>';\n    }\n    throw notImplemented('string(' + type + ')');\n}\nfunction countSymbols(str) {\n    // cf. https://mathiasbynens.be/notes/javascript-unicode\n    return str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n}\nfunction round(n) {\n    const integral = Math.trunc(n);\n    if (n - integral > .5) {\n        return integral + 1;\n    }\n    else {\n        return integral;\n    }\n}\n// adapted from https://stackoverflow.com/a/53577159\nfunction stddev(array) {\n    const n = array.length;\n    const mean = array.reduce((a, b) => a + b) / n;\n    return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / (n - 1));\n}\nfunction listReplace(list, matcher, newItem) {\n    if (isNumber(matcher)) {\n        return [...list.slice(0, matcher - 1), newItem, ...list.slice(matcher)];\n    }\n    return list.map((item, _idx) => {\n        if (matcher.invoke([item, newItem])) {\n            return newItem;\n        }\n        else {\n            return item;\n        }\n    });\n}\nfunction median(array) {\n    const n = array.length;\n    const sorted = array.slice().sort();\n    const mid = n / 2 - 1;\n    const index = Math.ceil(mid);\n    // even\n    if (mid === index) {\n        return (sorted[index] + sorted[index + 1]) / 2;\n    }\n    // uneven\n    return sorted[index];\n}\nfunction mode(array) {\n    if (array.length < 2) {\n        return array;\n    }\n    const buckets = {};\n    for (const n of array) {\n        buckets[n] = (buckets[n] || 0) + 1;\n    }\n    const sorted = Object.entries(buckets).sort((a, b) => b[1] - a[1]);\n    return sorted.filter(s => s[1] === sorted[0][1]).map(e => +e[0]);\n}\nfunction ifValid(o) {\n    return o.isValid ? o : null;\n}\n\nfunction parseExpression(expression, context = {}) {\n    return parser.configure({\n        top: 'Expression',\n        contextTracker: trackVariables(context)\n    }).parse(expression);\n}\nfunction parseUnaryTests(expression, context = {}) {\n    return parser.configure({\n        top: 'UnaryTests',\n        contextTracker: trackVariables(context)\n    }).parse(expression);\n}\n\nclass SyntaxError extends Error {\n    constructor(message, details) {\n        super(message);\n        Object.assign(this, details);\n    }\n}\nclass Interpreter {\n    _buildExecutionTree(tree, input) {\n        const root = { args: [], nodeInput: input };\n        const stack = [root];\n        tree.iterate({\n            enter(nodeRef) {\n                const { isError, isSkipped } = nodeRef.type;\n                const { from, to } = nodeRef;\n                if (isError) {\n                    const { from, to, message } = lintError(nodeRef);\n                    throw new SyntaxError(message, {\n                        input: input.slice(from, to),\n                        position: {\n                            from,\n                            to\n                        }\n                    });\n                }\n                if (isSkipped) {\n                    return false;\n                }\n                const nodeInput = input.slice(from, to);\n                stack.push({\n                    nodeInput,\n                    args: []\n                });\n            },\n            leave(nodeRef) {\n                if (nodeRef.type.isSkipped) {\n                    return;\n                }\n                const { nodeInput, args } = stack.pop();\n                const parent = stack[stack.length - 1];\n                const expr = evalNode(nodeRef, nodeInput, args);\n                parent.args.push(expr);\n            }\n        });\n        return root.args[root.args.length - 1];\n    }\n    evaluate(expression, context = {}) {\n        const parseTree = parseExpression(expression, context);\n        const root = this._buildExecutionTree(parseTree, expression);\n        return {\n            parseTree,\n            root\n        };\n    }\n    unaryTest(expression, context = {}) {\n        const parseTree = parseUnaryTests(expression, context);\n        const root = this._buildExecutionTree(parseTree, expression);\n        return {\n            parseTree,\n            root\n        };\n    }\n}\nconst interpreter = new Interpreter();\nfunction unaryTest(expression, context = {}) {\n    const value = context['?'] !== undefined ? context['?'] : null;\n    const { root } = interpreter.unaryTest(expression, context);\n    // root = fn(ctx) => test(val)\n    const test = root(context);\n    return test(value);\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction evaluate(expression, context = {}) {\n    const { root } = interpreter.evaluate(expression, context);\n    // root = Expression :: fn(ctx)\n    return root(context);\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction evalNode(node, input, args) {\n    switch (node.name) {\n        case 'ArithOp': return (context) => {\n            const nullable = (op, types = ['number']) => (a, b) => {\n                const left = a(context);\n                const right = b(context);\n                if (isArray(left)) {\n                    return null;\n                }\n                if (isArray(right)) {\n                    return null;\n                }\n                const leftType = getType(left);\n                const rightType = getType(right);\n                const temporal = ['date', 'time', 'date time', 'duration'];\n                if (temporal.includes(leftType)) {\n                    if (!temporal.includes(rightType)) {\n                        return null;\n                    }\n                }\n                else if (leftType !== rightType || !types.includes(leftType)) {\n                    return null;\n                }\n                return op(left, right);\n            };\n            switch (input) {\n                case '+': return nullable((a, b) => {\n                    if (isType(a, 'time') && isDuration(b)) {\n                        return a.plus(b).set({\n                            year: 1900,\n                            month: 1,\n                            day: 1\n                        });\n                    }\n                    else if (isDateTime(a) && isDateTime(b)) {\n                        return null;\n                    }\n                    else if (isDateTime(a) && isDuration(b)) {\n                        return a.plus(b);\n                    }\n                    else if (isDuration(a) && isDuration(b)) {\n                        return a.plus(b);\n                    }\n                    return a + b;\n                }, ['string', 'number', 'date', 'time', 'duration', 'date time']);\n                case '-': return nullable((a, b) => {\n                    if (isType(a, 'time') && isDuration(b)) {\n                        return a.minus(b).set({\n                            year: 1900,\n                            month: 1,\n                            day: 1\n                        });\n                    }\n                    else if (isDateTime(a) && isDateTime(b)) {\n                        return a.diff(b);\n                    }\n                    else if (isDateTime(a) && isDuration(b)) {\n                        return a.minus(b);\n                    }\n                    else if (isDuration(a) && isDuration(b)) {\n                        return a.minus(b);\n                    }\n                    return a - b;\n                }, ['number', 'date', 'time', 'duration', 'date time']);\n                case '*': return nullable((a, b) => a * b);\n                case '/': return nullable((a, b) => !b ? null : a / b);\n                case '**':\n                case '^': return nullable((a, b) => Math.pow(a, b));\n            }\n        };\n        case 'CompareOp': return tag(() => {\n            switch (input) {\n                case '>': return (b) => createRange(b, null, false, false);\n                case '>=': return (b) => createRange(b, null, true, false);\n                case '<': return (b) => createRange(null, b, false, false);\n                case '<=': return (b) => createRange(null, b, false, true);\n                case '=': return (b) => (a) => equals(a, b);\n                case '!=': return (b) => (a) => !equals(a, b);\n            }\n        }, Test('boolean'));\n        case 'Wildcard': return (_context) => true;\n        case 'null': return (_context) => {\n            return null;\n        };\n        case 'Disjunction': return tag((context) => {\n            const left = args[0](context);\n            const right = args[2](context);\n            const matrix = [\n                [true, true, true],\n                [true, false, true],\n                [true, null, true],\n                [false, true, true],\n                [false, false, false],\n                [false, null, null],\n                [null, true, true],\n                [null, false, null],\n                [null, null, null],\n            ];\n            const a = typeof left === 'boolean' ? left : null;\n            const b = typeof right === 'boolean' ? right : null;\n            return matrix.find(el => el[0] === a && el[1] === b)[2];\n        }, Test('boolean'));\n        case 'Conjunction': return tag((context) => {\n            const left = args[0](context);\n            const right = args[2](context);\n            const matrix = [\n                [true, true, true],\n                [true, false, false],\n                [true, null, null],\n                [false, true, false],\n                [false, false, false],\n                [false, null, false],\n                [null, true, null],\n                [null, false, false],\n                [null, null, null],\n            ];\n            const a = typeof left === 'boolean' ? left : null;\n            const b = typeof right === 'boolean' ? right : null;\n            return matrix.find(el => el[0] === a && el[1] === b)[2];\n        }, Test('boolean'));\n        case 'Context': return (context) => {\n            return args.slice(1, -1).reduce((obj, arg) => {\n                const [key, value] = arg(Object.assign(Object.assign({}, context), obj));\n                return Object.assign(Object.assign({}, obj), { [key]: value });\n            }, {});\n        };\n        case 'FunctionBody': return args[0];\n        case 'FormalParameters': return args;\n        case 'FormalParameter': return args[0];\n        case 'ParameterName': return args.join(' ');\n        case 'FunctionDefinition': return (context) => {\n            const parameterNames = args[2];\n            const fnBody = args[4];\n            return wrapFunction((...args) => {\n                const fnContext = parameterNames.reduce((context, name, idx) => {\n                    // support positional parameters\n                    context[name] = args[idx];\n                    return context;\n                }, Object.assign({}, context));\n                return fnBody(fnContext);\n            }, parameterNames);\n        };\n        case 'ContextEntry': return (context) => {\n            const key = typeof args[0] === 'function' ? args[0](context) : args[0];\n            const value = args[1](context);\n            return [key, value];\n        };\n        case 'Key': return args[0];\n        case 'Identifier': return input;\n        case 'SpecialFunctionName': return (context) => getBuiltin(input);\n        // preserve spaces in name, but compact multiple\n        // spaces into one (token)\n        case 'Name': return input.replace(/\\s{2,}/g, ' ');\n        case 'VariableName': return (context) => {\n            const name = args.join(' ');\n            const contextValue = getFromContext(name, context);\n            return (typeof contextValue !== 'undefined'\n                ? contextValue\n                : getBuiltin(name) || null);\n        };\n        case 'QualifiedName': return (context) => {\n            return args.reduce((context, arg) => arg(context), context);\n        };\n        case '?': return (context) => getFromContext('?', context);\n        // expression\n        // expression \"..\" expression\n        case 'IterationContext': return (context) => {\n            const a = args[0](context);\n            const b = args[1] && args[1](context);\n            return b ? createRange(a, b) : a;\n        };\n        case 'Type': return args[0];\n        case 'InExpressions': return (context) => {\n            const iterationContexts = args.map(ctx => ctx(context));\n            if (iterationContexts.some(ctx => getType(ctx) !== 'list')) {\n                return null;\n            }\n            return cartesianProduct(iterationContexts).map(ctx => {\n                if (!isArray(ctx)) {\n                    ctx = [ctx];\n                }\n                return Object.assign({}, context, ...ctx);\n            });\n        };\n        // Name kw<\"in\"> Expr\n        case 'InExpression': return (context) => {\n            return extractValue(context, args[0], args[2]);\n        };\n        case 'SpecialType': throw notImplemented('SpecialType');\n        case 'InstanceOfExpression': return tag((context) => {\n            const a = args[0](context);\n            const b = args[3](context);\n            return a instanceof b;\n        }, Test('boolean'));\n        case 'every': return tag((context) => {\n            return (_contexts, _condition) => {\n                const contexts = _contexts(context);\n                if (getType(contexts) !== 'list') {\n                    return contexts;\n                }\n                return contexts.every(ctx => isTruthy(_condition(ctx)));\n            };\n        }, Test('boolean'));\n        case 'some': return tag((context) => {\n            return (_contexts, _condition) => {\n                const contexts = _contexts(context);\n                if (getType(contexts) !== 'list') {\n                    return contexts;\n                }\n                return contexts.some(ctx => isTruthy(_condition(ctx)));\n            };\n        }, Test('boolean'));\n        case 'NumericLiteral': return tag((_context) => input.includes('.') ? parseFloat(input) : parseInt(input), 'number');\n        case 'BooleanLiteral': return tag((_context) => input === 'true' ? true : false, 'boolean');\n        case 'StringLiteral': return tag((_context) => parseString(input), 'string');\n        case 'PositionalParameters': return (context) => args.map(arg => arg(context));\n        case 'NamedParameter': return (context) => {\n            const name = args[0];\n            const value = args[1](context);\n            return [name, value];\n        };\n        case 'NamedParameters': return (context) => args.reduce((args, arg) => {\n            const [name, value] = arg(context);\n            args[name] = value;\n            return args;\n        }, {});\n        case 'DateTimeConstructor': return (context) => {\n            return getBuiltin(input);\n        };\n        case 'DateTimeLiteral': return (context) => {\n            // AtLiteral\n            if (args.length === 1) {\n                return args[0](context);\n            }\n            // FunctionInvocation\n            else {\n                const wrappedFn = wrapFunction(args[0](context));\n                // TODO(nikku): indicate as error\n                // throw new Error(`Failed to evaluate ${input}: Target is not a function`);\n                if (!wrappedFn) {\n                    return null;\n                }\n                const contextOrArgs = args[2](context);\n                return wrappedFn.invoke(contextOrArgs);\n            }\n        };\n        case 'AtLiteral': return (context) => {\n            const wrappedFn = wrapFunction(getBuiltin('@'));\n            // TODO(nikku): indicate as error\n            // throw new Error(`Failed to evaluate ${input}: Target is not a function`);\n            if (!wrappedFn) {\n                return null;\n            }\n            return wrappedFn.invoke([args[0](context)]);\n        };\n        case 'FunctionInvocation': return (context) => {\n            const wrappedFn = wrapFunction(args[0](context));\n            // TODO(nikku): indicate error at node\n            // throw new Error(`Failed to evaluate ${input}: Target is not a function`);\n            if (!wrappedFn) {\n                return null;\n            }\n            const contextOrArgs = args[2](context);\n            return wrappedFn.invoke(contextOrArgs);\n        };\n        case 'IfExpression': return (function () {\n            const ifCondition = args[1];\n            const thenValue = args[3];\n            const elseValue = args[5];\n            const type = coalecenseTypes(thenValue, elseValue);\n            return tag((context) => {\n                if (isTruthy(ifCondition(context))) {\n                    return thenValue(context);\n                }\n                else {\n                    return elseValue ? elseValue(context) : null;\n                }\n            }, type);\n        })();\n        case 'Parameters': return args.length === 3 ? args[1] : (_context) => [];\n        case 'Comparison': return (context) => {\n            const operator = args[1];\n            // expression !compare kw<\"in\"> PositiveUnaryTest |\n            // expression !compare kw<\"in\"> !unaryTest \"(\" PositiveUnaryTests \")\"\n            if (operator === 'in') {\n                return compareIn(args[0](context), (args[3] || args[2])(context));\n            }\n            // expression !compare kw<\"between\"> expression kw<\"and\"> expression\n            if (operator === 'between') {\n                const start = args[2](context);\n                const end = args[4](context);\n                if (start === null || end === null) {\n                    return null;\n                }\n                return createRange(start, end).includes(args[0](context));\n            }\n            // expression !compare CompareOp<\"=\" | \"!=\"> expression |\n            // expression !compare CompareOp<Gt | Gte | Lt | Lte> expression |\n            const left = args[0](context);\n            const right = args[2](context);\n            const test = operator()(right);\n            return compareValue(test, left);\n        };\n        case 'QuantifiedExpression': return (context) => {\n            const testFn = args[0](context);\n            const contexts = args[1];\n            const condition = args[3];\n            return testFn(contexts, condition);\n        };\n        // DMN 1.2 - 10.3.2.14\n        // kw<\"for\"> commaSep1<InExpression<IterationContext>> kw<\"return\"> expression\n        case 'ForExpression': return (context) => {\n            const extractor = args[args.length - 1];\n            const iterationContexts = args[1](context);\n            if (getType(iterationContexts) !== 'list') {\n                return iterationContexts;\n            }\n            const partial = [];\n            for (const ctx of iterationContexts) {\n                partial.push(extractor(Object.assign(Object.assign({}, ctx), { partial })));\n            }\n            return partial;\n        };\n        case 'ArithmeticExpression': return (function () {\n            // binary expression (a + b)\n            if (args.length === 3) {\n                const [a, op, b] = args;\n                return tag((context) => {\n                    return op(context)(a, b);\n                }, coalecenseTypes(a, b));\n            }\n            // unary expression (-b)\n            if (args.length === 2) {\n                const [op, value] = args;\n                return tag((context) => {\n                    return op(context)(() => 0, value);\n                }, value.type);\n            }\n        })();\n        case 'PositiveUnaryTest': return args[0];\n        case 'ParenthesizedExpression': return args[1];\n        case 'PathExpression': return (context) => {\n            const pathTarget = args[0](context);\n            const pathProp = args[1];\n            if (isArray(pathTarget)) {\n                return pathTarget.map(pathProp);\n            }\n            else {\n                return pathProp(pathTarget);\n            }\n        };\n        // expression !filter \"[\" expression \"]\"\n        case 'FilterExpression': return (context) => {\n            const target = args[0](context);\n            const filterFn = args[2];\n            const filterTarget = isArray(target) ? target : [target];\n            // null[..]\n            if (target === null) {\n                return null;\n            }\n            // a[variable=number]\n            if (typeof filterFn.type === 'undefined') {\n                try {\n                    const value = filterFn(context);\n                    if (isNumber(value)) {\n                        filterFn.type = 'number';\n                    }\n                }\n                catch (err) {\n                    // ignore\n                }\n            }\n            // a[1]\n            if (filterFn.type === 'number') {\n                const idx = filterFn(context);\n                const value = filterTarget[idx < 0 ? filterTarget.length + idx : idx - 1];\n                if (typeof value === 'undefined') {\n                    return null;\n                }\n                else {\n                    return value;\n                }\n            }\n            // a[true]\n            if (filterFn.type === 'boolean') {\n                if (filterFn(context)) {\n                    return filterTarget;\n                }\n                else {\n                    return [];\n                }\n            }\n            if (filterFn.type === 'string') {\n                const value = filterFn(context);\n                return filterTarget.filter(el => el === value);\n            }\n            // a[test]\n            return filterTarget.map(el => {\n                const iterationContext = Object.assign(Object.assign(Object.assign({}, context), { item: el }), el);\n                let result = filterFn(iterationContext);\n                // test is fn(val) => boolean SimpleUnaryTest\n                if (typeof result === 'function') {\n                    result = result(el);\n                }\n                if (result instanceof Range) {\n                    result = result.includes(el);\n                }\n                if (result === true) {\n                    return el;\n                }\n                return result;\n            }).filter(isTruthy);\n        };\n        case 'SimplePositiveUnaryTest': return tag((context) => {\n            // <Interval>\n            if (args.length === 1) {\n                return args[0](context);\n            }\n            // <CompareOp> <Expr>\n            return args[0](context)(args[1](context));\n        }, 'test');\n        case 'List': return (context) => {\n            return args.slice(1, -1).map(arg => arg(context));\n        };\n        case 'Interval': return tag((context) => {\n            const left = args[1](context);\n            const right = args[2](context);\n            const startIncluded = left !== null && args[0] === '[';\n            const endIncluded = right !== null && args[3] === ']';\n            return createRange(left, right, startIncluded, endIncluded);\n        }, Test('boolean'));\n        case 'PositiveUnaryTests':\n        case 'Expressions': return (context) => {\n            return args.map(a => a(context));\n        };\n        case 'Expression': return (context) => {\n            return args[0](context);\n        };\n        case 'UnaryTests': return (context) => {\n            return (value = null) => {\n                const negate = args[0] === 'not';\n                const tests = negate ? args.slice(2, -1) : args;\n                const matches = tests.map(test => test(context)).flat(1).map(test => {\n                    if (isArray(test)) {\n                        return test.includes(value);\n                    }\n                    if (test === null) {\n                        return null;\n                    }\n                    if (typeof test === 'boolean') {\n                        return test;\n                    }\n                    return compareValue(test, value);\n                }).reduce(combineResult, undefined);\n                return matches === null ? null : (negate ? !matches : matches);\n            };\n        };\n        default: return node.name;\n    }\n}\nfunction getBuiltin(name, _context) {\n    return getFromContext(name, builtins);\n}\nfunction extractValue(context, prop, _target) {\n    const target = _target(context);\n    if (['list', 'range'].includes(getType(target))) {\n        return target.map(t => ({ [prop]: t }));\n    }\n    return null;\n}\nfunction compareIn(value, tests) {\n    if (!isArray(tests)) {\n        if (getType(tests) === 'nil') {\n            return null;\n        }\n        tests = [tests];\n    }\n    return tests.some(test => compareValue(test, value));\n}\nfunction compareValue(test, value) {\n    if (typeof test === 'function') {\n        return test(value);\n    }\n    if (test instanceof Range) {\n        return test.includes(value);\n    }\n    return equals(test, value);\n}\nconst chars = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');\nfunction isTyped(type, values) {\n    return (values.some(e => getType(e) === type) &&\n        values.every(e => e === null || getType(e) === type));\n}\nconst nullRange = new Range({\n    start: null,\n    end: null,\n    'start included': false,\n    'end included': false,\n    map() {\n        return [];\n    },\n    includes() {\n        return null;\n    }\n});\nfunction createRange(start, end, startIncluded = true, endIncluded = true) {\n    if (isTyped('string', [start, end])) {\n        return createStringRange(start, end, startIncluded, endIncluded);\n    }\n    if (isTyped('number', [start, end])) {\n        return createNumberRange(start, end, startIncluded, endIncluded);\n    }\n    if (isTyped('duration', [start, end])) {\n        return createDurationRange(start, end, startIncluded, endIncluded);\n    }\n    if (isTyped('time', [start, end])) {\n        return createDateTimeRange(start, end, startIncluded, endIncluded);\n    }\n    if (isTyped('date time', [start, end])) {\n        return createDateTimeRange(start, end, startIncluded, endIncluded);\n    }\n    if (isTyped('date', [start, end])) {\n        return createDateTimeRange(start, end, startIncluded, endIncluded);\n    }\n    if (start === null && end === null) {\n        return nullRange;\n    }\n    throw new Error(`unsupported range: ${start}..${end}`);\n}\nfunction noopMap() {\n    return () => {\n        throw new Error('unsupported range operation: map');\n    };\n}\nfunction valuesMap(values) {\n    return (fn) => values.map(fn);\n}\nfunction valuesIncludes(values) {\n    return (value) => values.includes(value);\n}\nfunction numberMap(start, end, startIncluded, endIncluded) {\n    const direction = start > end ? -1 : 1;\n    return (fn) => {\n        const result = [];\n        for (let i = start;; i += direction) {\n            if (i === 0 && !startIncluded) {\n                continue;\n            }\n            if (i === end && !endIncluded) {\n                break;\n            }\n            result.push(fn(i));\n            if (i === end) {\n                break;\n            }\n        }\n        return result;\n    };\n}\nfunction includesStart(n, inclusive) {\n    if (inclusive) {\n        return (value) => n <= value;\n    }\n    else {\n        return (value) => n < value;\n    }\n}\nfunction includesEnd(n, inclusive) {\n    if (inclusive) {\n        return (value) => n >= value;\n    }\n    else {\n        return (value) => n > value;\n    }\n}\nfunction anyIncludes(start, end, startIncluded, endIncluded, conversion = (v) => v) {\n    let tests = [];\n    if (start === null && end === null) {\n        return () => null;\n    }\n    if (start !== null && end !== null) {\n        if (start > end) {\n            tests = [\n                includesStart(end, endIncluded),\n                includesEnd(start, startIncluded)\n            ];\n        }\n        else {\n            tests = [\n                includesStart(start, startIncluded),\n                includesEnd(end, endIncluded)\n            ];\n        }\n    }\n    else if (end !== null) {\n        tests = [\n            includesEnd(end, endIncluded)\n        ];\n    }\n    else if (start !== null) {\n        tests = [\n            includesStart(start, startIncluded)\n        ];\n    }\n    return (value) => value === null ? null : tests.every(t => t(conversion(value)));\n}\nfunction createStringRange(start, end, startIncluded = true, endIncluded = true) {\n    if (start !== null && !chars.includes(start)) {\n        throw new Error('illegal range start: ' + start);\n    }\n    if (end !== null && !chars.includes(end)) {\n        throw new Error('illegal range end: ' + end);\n    }\n    let values;\n    if (start !== null && end !== null) {\n        let startIdx = chars.indexOf(start);\n        let endIdx = chars.indexOf(end);\n        const direction = startIdx > endIdx ? -1 : 1;\n        if (startIncluded === false) {\n            startIdx += direction;\n        }\n        if (endIncluded === false) {\n            endIdx -= direction;\n        }\n        values = chars.slice(startIdx, endIdx + 1);\n    }\n    const map = values ? valuesMap(values) : noopMap();\n    const includes = values ? valuesIncludes(values) : anyIncludes(start, end, startIncluded, endIncluded);\n    return new Range({\n        start,\n        end,\n        'start included': startIncluded,\n        'end included': endIncluded,\n        map,\n        includes\n    });\n}\nfunction createNumberRange(start, end, startIncluded, endIncluded) {\n    const map = start !== null && end !== null ? numberMap(start, end, startIncluded, endIncluded) : noopMap();\n    const includes = anyIncludes(start, end, startIncluded, endIncluded);\n    return new Range({\n        start,\n        end,\n        'start included': startIncluded,\n        'end included': endIncluded,\n        map,\n        includes\n    });\n}\n/**\n * @param {Duration} start\n * @param {Duration} end\n * @param {boolean} startIncluded\n * @param {boolean} endIncluded\n */\nfunction createDurationRange(start, end, startIncluded, endIncluded) {\n    const toMillis = (d) => d ? Duration.fromDurationLike(d).toMillis() : null;\n    const map = noopMap();\n    const includes = anyIncludes(toMillis(start), toMillis(end), startIncluded, endIncluded, toMillis);\n    return new Range({\n        start,\n        end,\n        'start included': startIncluded,\n        'end included': endIncluded,\n        map,\n        includes\n    });\n}\nfunction createDateTimeRange(start, end, startIncluded, endIncluded) {\n    const map = noopMap();\n    const includes = anyIncludes(start, end, startIncluded, endIncluded);\n    return new Range({\n        start,\n        end,\n        'start included': startIncluded,\n        'end included': endIncluded,\n        map,\n        includes\n    });\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction cartesianProduct(arrays) {\n    if (arrays.some(arr => getType(arr) === 'nil')) {\n        return null;\n    }\n    const f = (a, b) => [].concat(...a.map(d => b.map(e => [].concat(d, e))));\n    const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a || []);\n    return cartesian(...arrays);\n}\nfunction coalecenseTypes(a, b) {\n    if (!b) {\n        return a.type;\n    }\n    if (a.type === b.type) {\n        return a.type;\n    }\n    return 'any';\n}\nfunction tag(fn, type) {\n    return Object.assign(fn, {\n        type,\n        toString() {\n            return `TaggedFunction[${type}] ${Function.prototype.toString.call(fn)}`;\n        }\n    });\n}\nfunction combineResult(result, match) {\n    if (!result) {\n        return match;\n    }\n    return result;\n}\nfunction isTruthy(obj) {\n    return obj !== false && obj !== null;\n}\nfunction Test(type) {\n    return `Test<${type}>`;\n}\n/**\n * @param {Function} fn\n * @param {string[]} [parameterNames]\n *\n * @return {FunctionWrapper}\n */\nfunction wrapFunction(fn, parameterNames = null) {\n    if (!fn) {\n        return null;\n    }\n    if (fn instanceof FunctionWrapper) {\n        return fn;\n    }\n    if (fn instanceof Range) {\n        return new FunctionWrapper((value) => fn.includes(value), ['value']);\n    }\n    if (typeof fn !== 'function') {\n        return null;\n    }\n    return new FunctionWrapper(fn, parameterNames || parseParameterNames(fn));\n}\nfunction parseString(str) {\n    if (str.startsWith('\"')) {\n        str = str.slice(1);\n    }\n    if (str.endsWith('\"')) {\n        str = str.slice(0, -1);\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return str.replace(/(\\\\\")|(\\\\\\\\)|(\\\\u[a-fA-F0-9]{5,6})|((?:\\\\u[a-fA-F0-9]{1,4})+)/ig, function (substring, ...groups) {\n        const [quotes, escape, codePoint, charCodes] = groups;\n        if (quotes) {\n            return '\"';\n        }\n        if (escape) {\n            return '\\\\';\n        }\n        const escapePattern = /\\\\u([a-fA-F0-9]+)/ig;\n        if (codePoint) {\n            const codePointMatch = escapePattern.exec(codePoint);\n            return String.fromCodePoint(parseInt(codePointMatch[1], 16));\n        }\n        if (charCodes) {\n            const chars = [];\n            let charCodeMatch;\n            while ((charCodeMatch = escapePattern.exec(substring)) !== null) {\n                chars.push(parseInt(charCodeMatch[1], 16));\n            }\n            return String.fromCharCode(...chars);\n        }\n        throw new Error('illegal match');\n    });\n}\nfunction lintError(nodeRef) {\n    const node = nodeRef.node;\n    const parent = node.parent;\n    if (node.from !== node.to) {\n        return {\n            from: node.from,\n            to: node.to,\n            message: `Unrecognized token in <${parent.name}>`\n        };\n    }\n    const next = findNext(node);\n    if (next) {\n        return {\n            from: node.from,\n            to: next.to,\n            message: `Unrecognized token <${next.name}> in <${parent.name}>`\n        };\n    }\n    else {\n        const unfinished = parent.enterUnfinishedNodesBefore(nodeRef.to);\n        return {\n            from: node.from,\n            to: node.to,\n            message: `Incomplete <${(unfinished || parent).name}>`\n        };\n    }\n}\nfunction findNext(nodeRef) {\n    const node = nodeRef.node;\n    let next, parent = node;\n    do {\n        next = parent.nextSibling;\n        if (next) {\n            return next;\n        }\n        parent = parent.parent;\n    } while (parent);\n    return null;\n}\n\nexport { SyntaxError, date, duration, evaluate, lintError, parseExpression, parseUnaryTests, unaryTest };\n//# sourceMappingURL=index.esm.js.map\n","/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        [from, to] = clip(this, from, to);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done && this.afterBreak) {\n            this.value = \"\";\n            this.afterBreak = false;\n        }\n        else if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n    from = Math.max(0, Math.min(text.length, from));\n    return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n// Compressed representation of the Grapheme_Cluster_Break=Extend\n// information from\n// http://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n// Each pair of elements represents a range, as an offet from the\n// previous range and a length. Numbers are in base-36, with the empty\n// string being a shorthand for 1.\nlet extend = /*@__PURE__*/\"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1);\n// Convert offsets into absolute values\nfor (let i = 1; i < extend.length; i++)\n    extend[i] += extend[i - 1];\nfunction isExtendingChar(code) {\n    for (let i = 1; i < extend.length; i += 2)\n        if (extend[i] > code)\n            return extend[i - 1] <= code;\n    return false;\n}\nfunction isRegionalIndicator(code) {\n    return code >= 0x1F1E6 && code <= 0x1F1FF;\n}\nconst ZWJ = 0x200d;\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending);\n}\nfunction nextClusterBreak(str, pos, includeExtending) {\n    if (pos == str.length)\n        return pos;\n    // If pos is in the middle of a surrogate pair, move to its start\n    if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1)))\n        pos--;\n    let prev = codePointAt(str, pos);\n    pos += codePointSize(prev);\n    while (pos < str.length) {\n        let next = codePointAt(str, pos);\n        if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n            pos += codePointSize(next);\n            prev = next;\n        }\n        else if (isRegionalIndicator(next)) {\n            let countBefore = 0, i = pos - 2;\n            while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) {\n                countBefore++;\n                i -= 2;\n            }\n            if (countBefore % 2 == 0)\n                break;\n            else\n                pos += 2;\n        }\n        else {\n            break;\n        }\n    }\n    return pos;\n}\nfunction prevClusterBreak(str, pos, includeExtending) {\n    while (pos > 0) {\n        let found = nextClusterBreak(str, pos - 2, includeExtending);\n        if (found < pos)\n            return found;\n        pos--;\n    }\n    return 0;\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `other` happened before the ones in `this`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != MapMode.Simple && endA >= pos &&\n                    (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == MapMode.TrackBefore && posA < pos ||\n                        mode == MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` → `docB` and `other` represents `docB` → `docC`, the\n    returned value will represent the change `docA` → `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n    }\n    /**\n    The anchor of the range—the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    get goalColumn() {\n        let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n        return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other, includeAssoc = false) {\n        return this.anchor == other.anchor && this.head == other.head &&\n            (!includeAssoc || !this.empty || this.assoc == other.assoc);\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags) {\n        return new SelectionRange(from, to, flags);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection. By default, ranges\n    are compared only by position. When `includeAssoc` is true,\n    cursor ranges must also have the same\n    [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n    */\n    eq(other, includeAssoc = false) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n            ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel) {\n        let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n        return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n            : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: /*@__PURE__*/prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: /*@__PURE__*/prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: /*@__PURE__*/prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: /*@__PURE__*/prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return CharCategory.Space;\n        if (hasWordChar(char))\n            return CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return CharCategory.Word;\n        return CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n        new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor—updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1\n                    : cursor.point.startSide < 0 ? active.length\n                        : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n    /**\n    Join an array of range sets into a single set.\n    */\n    static join(sets) {\n        if (!sets.length)\n            return RangeSet.empty;\n        let result = sets[sets.length - 1];\n        for (let i = sets.length - 2; i >= 0; i--) {\n            for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n                result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n        }\n        return result;\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        // Organize active marks by rank first, then by size\n        while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    for (;;) {\n        let diff = (a.to + dPos) - b.to || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        if (a.point || b.point) {\n            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n        }\n        else {\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n        }\n        if (end > endB)\n            break;\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !a[i].eq(b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n","const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n  // :: (Object<Style>, ?{finish: ?(string) → string})\n  // Create a style module from the given spec.\n  //\n  // When `finish` is given, it is called on regular (non-`@`)\n  // selectors (after `&` expansion) to compute the final selector.\n  constructor(spec, options) {\n    this.rules = []\n    let {finish} = options || {}\n\n    function splitSelector(selector) {\n      return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n    }\n\n    function render(selectors, spec, target, isKeyframes) {\n      let local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n      if (isAt && spec == null) return target.push(selectors[0] + \";\")\n      for (let prop in spec) {\n        let value = spec[prop]\n        if (/&/.test(prop)) {\n          render(prop.split(/,\\s*/).map(part => selectors.map(sel => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)),\n                 value, target)\n        } else if (value && typeof value == \"object\") {\n          if (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\")\n          render(splitSelector(prop), value, local, keyframes)\n        } else if (value != null) {\n          local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, l => \"-\" + l.toLowerCase()) + \": \" + value + \";\")\n        }\n      }\n      if (local.length || keyframes) {\n        target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                    \" {\" + local.join(\" \") + \"}\")\n      }\n    }\n\n    for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)\n  }\n\n  // :: () → string\n  // Returns a string containing the module's CSS rules.\n  getRules() { return this.rules.join(\"\\n\") }\n\n  // :: () → string\n  // Generate a new unique CSS class name.\n  static newName() {\n    let id = top[COUNT] || 1\n    top[COUNT] = id + 1\n    return C + id.toString(36)\n  }\n\n  // :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n  //\n  // Mount the given set of modules in the given DOM root, which ensures\n  // that the CSS rules defined by the module are available in that\n  // context.\n  //\n  // Rules are only added to the document once per root.\n  //\n  // Rule order will follow the order of the modules, so that rules from\n  // modules later in the array take precedence of those from earlier\n  // modules. If you call this function multiple times for the same root\n  // in a way that changes the order of already mounted modules, the old\n  // order will be changed.\n  //\n  // If a Content Security Policy nonce is provided, it is added to\n  // the `<style>` tag generated by the library.\n  static mount(root, modules, options) {\n    let set = root[SET], nonce = options && options.nonce\n    if (!set) set = new StyleSet(root, nonce)\n    else if (nonce) set.setNonce(nonce)\n    set.mount(Array.isArray(modules) ? modules : [modules], root)\n  }\n}\n\nlet adoptedSet = new Map //<Document, StyleSet>\n\nclass StyleSet {\n  constructor(root, nonce) {\n    let doc = root.ownerDocument || root, win = doc.defaultView\n    if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n      let adopted = adoptedSet.get(doc)\n      if (adopted) return root[SET] = adopted\n      this.sheet = new win.CSSStyleSheet\n      adoptedSet.set(doc, this)\n    } else {\n      this.styleTag = doc.createElement(\"style\")\n      if (nonce) this.styleTag.setAttribute(\"nonce\", nonce)\n    }\n    this.modules = []\n    root[SET] = this\n  }\n\n  mount(modules, root) {\n    let sheet = this.sheet\n    let pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n    for (let i = 0; i < modules.length; i++) {\n      let mod = modules[i], index = this.modules.indexOf(mod)\n      if (index < j && index > -1) { // Ordering conflict\n        this.modules.splice(index, 1)\n        j--\n        index = -1\n      }\n      if (index == -1) {\n        this.modules.splice(j++, 0, mod)\n        if (sheet) for (let k = 0; k < mod.rules.length; k++)\n          sheet.insertRule(mod.rules[k], pos++)\n      } else {\n        while (j < index) pos += this.modules[j++].rules.length\n        pos += mod.rules.length\n        j++\n      }\n    }\n\n    if (sheet) {\n      if (root.adoptedStyleSheets.indexOf(this.sheet) < 0)\n        root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets]\n    } else {\n      let text = \"\"\n      for (let i = 0; i < this.modules.length; i++)\n        text += this.modules[i].getRules() + \"\\n\"\n      this.styleTag.textContent = text\n      let target = root.head || root\n      if (this.styleTag.parentNode != target)\n        target.insertBefore(this.styleTag, target.firstChild)\n    }\n  }\n\n  setNonce(nonce) {\n    if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n      this.styleTag.setAttribute(\"nonce\", nonce)\n  }\n}\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case—the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n","export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\"\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n","import { Text, RangeSet, MapMode, RangeValue, findClusterBreak, EditorSelection, Facet, StateEffect, ChangeSet, findColumn, CharCategory, Annotation, EditorState, Transaction, Prec, codePointAt, codePointSize, combineConfig, StateField, RangeSetBuilder, countColumn } from '@codemirror/state';\nimport { StyleModule } from 'style-mod';\nimport { keyName, base, shift } from 'w3c-keyname';\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction deepActiveElement(doc) {\n    let elt = doc.activeElement;\n    while (elt && elt.shadowRoot)\n        elt = elt.shadowRoot.activeElement;\n    return elt;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n    let x = left ? rect.left : rect.right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    let vp = win.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction getScale(elt, rect) {\n    let scaleX = rect.width / elt.offsetWidth;\n    let scaleY = rect.height / elt.offsetHeight;\n    if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1)\n        scaleX = 1;\n    if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1)\n        scaleY = 1;\n    return { scaleX, scaleY };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                ({ scaleX, scaleY } = getScale(cur, rect));\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top) {\n                    moveY = -(bounding.top - rect.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + moveY + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = -(bounding.top + moveY - rect.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left) {\n                    moveX = -(bounding.left - rect.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + moveX + xMargin;\n                }\n                else if (rect.right > bounding.right) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = -(bounding.left + moveX - rect.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParent(dom) {\n    let doc = dom.ownerDocument;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (cur.scrollHeight > cur.clientHeight || cur.scrollWidth > cur.clientWidth)\n                return cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return null;\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = [];\n    for (let cur = dom; cur; cur = cur.parentNode) {\n        stack.push(cur, cur.scrollTop, cur.scrollLeft);\n        if (cur == cur.ownerDocument)\n            break;\n    }\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        for (let i = 0; i < stack.length;) {\n            let elt = stack[i++], top = stack[i++], left = stack[i++];\n            if (elt.scrollTop != top)\n                elt.scrollTop = top;\n            if (elt.scrollLeft != left)\n                elt.scrollLeft = left;\n        }\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    if (mods)\n        ({ altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey } = mods);\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction clearAttributes(node) {\n    while (node.attributes.length)\n        node.removeAttributeNode(node.attributes[0]);\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset > 0) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = maxOffset(node);\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\n\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\nconst noChildren = [];\nclass ContentView {\n    constructor() {\n        this.parent = null;\n        this.dom = null;\n        this.flags = 2 /* ViewFlag.NodeDirty */;\n    }\n    get overrideDOMText() { return null; }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(view) {\n        let pos = this.posAtStart;\n        for (let child of this.children) {\n            if (child == view)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(view) {\n        return this.posBefore(view) + view.length;\n    }\n    sync(view, track) {\n        if (this.flags & 2 /* ViewFlag.NodeDirty */) {\n            let parent = this.dom;\n            let prev = null, next;\n            for (let child of this.children) {\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    if (!child.dom && (next = prev ? prev.nextSibling : parent.firstChild)) {\n                        let contentView = ContentView.get(next);\n                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))\n                            child.reuseDOM(next);\n                    }\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n                next = prev ? prev.nextSibling : parent.firstChild;\n                if (track && !track.written && track.node == parent && next != child.dom)\n                    track.written = true;\n                if (child.dom.parentNode == parent) {\n                    while (next && next != child.dom)\n                        next = rm$1(next);\n                }\n                else {\n                    parent.insertBefore(child.dom, next);\n                }\n                prev = child.dom;\n            }\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (next && track && track.node == parent)\n                track.written = true;\n            while (next)\n                next = rm$1(next);\n        }\n        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {\n            for (let child of this.children)\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n        }\n    }\n    reuseDOM(_dom) { }\n    localPosFromDOM(node, offset) {\n        let after;\n        if (node == this.dom) {\n            after = this.dom.childNodes[offset];\n        }\n        else {\n            let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n            for (;;) {\n                let parent = node.parentNode;\n                if (parent == this.dom)\n                    break;\n                if (bias == 0 && parent.firstChild != parent.lastChild) {\n                    if (node == parent.firstChild)\n                        bias = -1;\n                    else\n                        bias = 1;\n                }\n                node = parent;\n            }\n            if (bias < 0)\n                after = node;\n            else\n                after = node.nextSibling;\n        }\n        if (after == this.dom.firstChild)\n            return 0;\n        while (after && !ContentView.get(after))\n            after = after.nextSibling;\n        if (!after)\n            return this.length;\n        for (let i = 0, pos = 0;; i++) {\n            let child = this.children[i];\n            if (child.dom == after)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n    }\n    domBoundsAround(from, to, offset = 0) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return child.domBoundsAround(from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == this.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + this.length : toEnd,\n            startDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,\n            endDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null };\n    }\n    markDirty(andParent = false) {\n        this.flags |= 2 /* ViewFlag.NodeDirty */;\n        this.markParentsDirty(andParent);\n    }\n    markParentsDirty(childList) {\n        for (let parent = this.parent; parent; parent = parent.parent) {\n            if (childList)\n                parent.flags |= 2 /* ViewFlag.NodeDirty */;\n            if (parent.flags & 1 /* ViewFlag.ChildDirty */)\n                return;\n            parent.flags |= 1 /* ViewFlag.ChildDirty */;\n            childList = false;\n        }\n    }\n    setParent(parent) {\n        if (this.parent != parent) {\n            this.parent = parent;\n            if (this.flags & 7 /* ViewFlag.Dirty */)\n                this.markParentsDirty(true);\n        }\n    }\n    setDOM(dom) {\n        if (this.dom == dom)\n            return;\n        if (this.dom)\n            this.dom.cmView = null;\n        this.dom = dom;\n        dom.cmView = this;\n    }\n    get rootView() {\n        for (let v = this;;) {\n            let parent = v.parent;\n            if (!parent)\n                return v;\n            v = parent;\n        }\n    }\n    replaceChildren(from, to, children = noChildren) {\n        this.markDirty();\n        for (let i = from; i < to; i++) {\n            let child = this.children[i];\n            if (child.parent == this && children.indexOf(child) < 0)\n                child.destroy();\n        }\n        this.children.splice(from, to - from, ...children);\n        for (let i = 0; i < children.length; i++)\n            children[i].setParent(this);\n    }\n    ignoreMutation(_rec) { return false; }\n    ignoreEvent(_event) { return false; }\n    childCursor(pos = this.length) {\n        return new ChildCursor(this.children, pos, this.children.length);\n    }\n    childPos(pos, bias = 1) {\n        return this.childCursor().findPos(pos, bias);\n    }\n    toString() {\n        let name = this.constructor.name.replace(\"View\", \"\");\n        return name + (this.children.length ? \"(\" + this.children.join() + \")\" :\n            this.length ? \"[\" + (name == \"Text\" ? this.text : this.length) + \"]\" : \"\") +\n            (this.breakAfter ? \"#\" : \"\");\n    }\n    static get(node) { return node.cmView; }\n    get isEditable() { return true; }\n    get isWidget() { return false; }\n    get isHidden() { return false; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        return false;\n    }\n    become(other) { return false; }\n    canReuseDOM(other) {\n        return other.constructor == this.constructor && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    // When this is a zero-length view with a side, this should return a\n    // number <= 0 to indicate it is before its position, or a\n    // number > 0 when after its position.\n    getSide() { return 0; }\n    destroy() {\n        for (let child of this.children)\n            if (child.parent == this)\n                child.destroy();\n        this.parent = null;\n    }\n}\nContentView.prototype.breakAfter = 0;\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\nclass ChildCursor {\n    constructor(children, pos, i) {\n        this.children = children;\n        this.pos = pos;\n        this.i = i;\n        this.off = 0;\n    }\n    findPos(pos, bias = 1) {\n        for (;;) {\n            if (pos > this.pos || pos == this.pos &&\n                (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter)) {\n                this.off = pos - this.pos;\n                return this;\n            }\n            let next = this.children[--this.i];\n            this.pos -= next.length + next.breakAfter;\n        }\n    }\n}\nfunction replaceRange(parent, fromI, fromOff, toI, toOff, insert, breakAtStart, openStart, openEnd) {\n    let { children } = parent;\n    let before = children.length ? children[fromI] : null;\n    let last = insert.length ? insert[insert.length - 1] : null;\n    let breakAtEnd = last ? last.breakAfter : breakAtStart;\n    // Change within a single child\n    if (fromI == toI && before && !breakAtStart && !breakAtEnd && insert.length < 2 &&\n        before.merge(fromOff, toOff, insert.length ? last : null, fromOff == 0, openStart, openEnd))\n        return;\n    if (toI < children.length) {\n        let after = children[toI];\n        // Make sure the end of the child after the update is preserved in `after`\n        if (after && (toOff < after.length || after.breakAfter && (last === null || last === void 0 ? void 0 : last.breakAfter))) {\n            // If we're splitting a child, separate part of it to avoid that\n            // being mangled when updating the child before the update.\n            if (fromI == toI) {\n                after = after.split(toOff);\n                toOff = 0;\n            }\n            // If the element after the replacement should be merged with\n            // the last replacing element, update `content`\n            if (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) {\n                insert[insert.length - 1] = after;\n            }\n            else {\n                // Remove the start of the after element, if necessary, and\n                // add it to `content`.\n                if (toOff || after.children.length && !after.children[0].length)\n                    after.merge(0, toOff, null, false, 0, openEnd);\n                insert.push(after);\n            }\n        }\n        else if (after === null || after === void 0 ? void 0 : after.breakAfter) {\n            // The element at `toI` is entirely covered by this range.\n            // Preserve its line break, if any.\n            if (last)\n                last.breakAfter = 1;\n            else\n                breakAtStart = 1;\n        }\n        // Since we've handled the next element from the current elements\n        // now, make sure `toI` points after that.\n        toI++;\n    }\n    if (before) {\n        before.breakAfter = breakAtStart;\n        if (fromOff > 0) {\n            if (!breakAtStart && insert.length && before.merge(fromOff, before.length, insert[0], false, openStart, 0)) {\n                before.breakAfter = insert.shift().breakAfter;\n            }\n            else if (fromOff < before.length || before.children.length && before.children[before.children.length - 1].length == 0) {\n                before.merge(fromOff, before.length, null, false, openStart, 0);\n            }\n            fromI++;\n        }\n    }\n    // Try to merge widgets on the boundaries of the replacement\n    while (fromI < toI && insert.length) {\n        if (children[toI - 1].become(insert[insert.length - 1])) {\n            toI--;\n            insert.pop();\n            openEnd = insert.length ? 0 : openStart;\n        }\n        else if (children[fromI].become(insert[0])) {\n            fromI++;\n            insert.shift();\n            openStart = insert.length ? 0 : openEnd;\n        }\n        else {\n            break;\n        }\n    }\n    if (!insert.length && fromI && toI < children.length && !children[fromI - 1].breakAfter &&\n        children[toI].merge(0, 0, children[fromI - 1], false, openStart, openEnd))\n        fromI--;\n    if (fromI < toI || insert.length)\n        parent.replaceChildren(fromI, toI, insert);\n}\nfunction mergeChildrenInto(parent, from, to, insert, openStart, openEnd) {\n    let cur = parent.childCursor();\n    let { i: toI, off: toOff } = cur.findPos(to, 1);\n    let { i: fromI, off: fromOff } = cur.findPos(from, -1);\n    let dLen = from - to;\n    for (let view of insert)\n        dLen += view.length;\n    parent.length += dLen;\n    replaceRange(parent, fromI, fromOff, toI, toOff, insert, 0, openStart, openEnd);\n}\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /*@__PURE__*//Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /*@__PURE__*//MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /*@__PURE__*//Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /*@__PURE__*//gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /*@__PURE__*//Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /*@__PURE__*//Apple Computer/.test(nav.vendor);\nconst ios = safari && (/*@__PURE__*//Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /*@__PURE__*//Mac/.test(nav.platform),\n    windows: /*@__PURE__*//Win/.test(nav.platform),\n    linux: /*@__PURE__*//Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/*@__PURE__*//Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /*@__PURE__*//Android\\b/.test(nav.userAgent),\n    webkit,\n    safari,\n    webkit_version: webkit ? +(/*@__PURE__*//\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nconst MaxJoinLen = 256;\nclass TextView extends ContentView {\n    constructor(text) {\n        super();\n        this.text = text;\n    }\n    get length() { return this.text.length; }\n    createDOM(textDOM) {\n        this.setDOM(textDOM || document.createTextNode(this.text));\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.createDOM();\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    reuseDOM(dom) {\n        if (dom.nodeType == 3)\n            this.createDOM(dom);\n    }\n    merge(from, to, source) {\n        if ((this.flags & 8 /* ViewFlag.Composition */) ||\n            source && (!(source instanceof TextView) ||\n                this.length - (to - from) + source.length > MaxJoinLen ||\n                (source.flags & 8 /* ViewFlag.Composition */)))\n            return false;\n        this.text = this.text.slice(0, from) + (source ? source.text : \"\") + this.text.slice(to);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = new TextView(this.text.slice(from));\n        this.text = this.text.slice(0, from);\n        this.markDirty();\n        result.flags |= this.flags & 8 /* ViewFlag.Composition */;\n        return result;\n    }\n    localPosFromDOM(node, offset) {\n        return node == this.dom ? offset : offset ? this.text.length : 0;\n    }\n    domAtPos(pos) { return new DOMPos(this.dom, pos); }\n    domBoundsAround(_from, _to, offset) {\n        return { from: offset, to: offset + this.length, startDOM: this.dom, endDOM: this.dom.nextSibling };\n    }\n    coordsAt(pos, side) {\n        return textCoords(this.dom, pos, side);\n    }\n}\nclass MarkView extends ContentView {\n    constructor(mark, children = [], length = 0) {\n        super();\n        this.mark = mark;\n        this.children = children;\n        this.length = length;\n        for (let ch of children)\n            ch.setParent(this);\n    }\n    setAttrs(dom) {\n        clearAttributes(dom);\n        if (this.mark.class)\n            dom.className = this.mark.class;\n        if (this.mark.attrs)\n            for (let name in this.mark.attrs)\n                dom.setAttribute(name, this.mark.attrs[name]);\n        return dom;\n    }\n    canReuseDOM(other) {\n        return super.canReuseDOM(other) && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == this.mark.tagName.toUpperCase()) {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.setDOM(this.setAttrs(document.createElement(this.mark.tagName)));\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */)\n            this.setAttrs(this.dom);\n        super.sync(view, track);\n    }\n    merge(from, to, source, _hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) ||\n            (from && openStart <= 0) || (to < this.length && openEnd <= 0)))\n            return false;\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart - 1, openEnd - 1);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = [], off = 0, detachFrom = -1, i = 0;\n        for (let elt of this.children) {\n            let end = off + elt.length;\n            if (end > from)\n                result.push(off < from ? elt.split(from - off) : elt);\n            if (detachFrom < 0 && off >= from)\n                detachFrom = i;\n            off = end;\n            i++;\n        }\n        let length = this.length - from;\n        this.length = from;\n        if (detachFrom > -1) {\n            this.children.length = detachFrom;\n            this.markDirty();\n        }\n        return new MarkView(this.mark, result, length);\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    coordsAt(pos, side) {\n        return coordsInChildren(this, pos, side);\n    }\n}\nfunction textCoords(text, pos, side) {\n    let length = text.nodeValue.length;\n    if (pos > length)\n        pos = length;\n    let from = pos, to = pos, flatten = 0;\n    if (pos == 0 && side < 0 || pos == length && side >= 0) {\n        if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n            if (pos) {\n                from--;\n                flatten = 1;\n            } // FIXME this is wrong in RTL text\n            else if (to < length) {\n                to++;\n                flatten = -1;\n            }\n        }\n    }\n    else {\n        if (side < 0)\n            from--;\n        else if (to < length)\n            to++;\n    }\n    let rects = textRange(text, from, to).getClientRects();\n    if (!rects.length)\n        return null;\n    let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n    if (browser.safari && !flatten && rect.width == 0)\n        rect = Array.prototype.find.call(rects, r => r.width) || rect;\n    return flatten ? flattenRect(rect, flatten < 0) : rect || null;\n}\n// Also used for collapsed ranges that don't have a placeholder widget!\nclass WidgetView extends ContentView {\n    static create(widget, length, side) {\n        return new WidgetView(widget, length, side);\n    }\n    constructor(widget, length, side) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.side = side;\n        this.prevWidget = null;\n    }\n    split(from) {\n        let result = WidgetView.create(this.widget, this.length - from, this.side);\n        this.length -= from;\n        return result;\n    }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    getSide() { return this.side; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    become(other) {\n        if (other instanceof WidgetView && other.side == this.side &&\n            this.widget.constructor == other.widget.constructor) {\n            if (!this.widget.compare(other.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get overrideDOMText() {\n        if (this.length == 0)\n            return Text.empty;\n        let top = this;\n        while (top.parent)\n            top = top.parent;\n        let { view } = top, text = view && view.state.doc, start = this.posAtStart;\n        return text ? text.slice(start, start + this.length) : Text.empty;\n    }\n    domAtPos(pos) {\n        return (this.length ? pos == 0 : this.side > 0)\n            ? DOMPos.before(this.dom)\n            : DOMPos.after(this.dom, pos == this.length);\n    }\n    domBoundsAround() { return null; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        let rects = this.dom.getClientRects(), rect = null;\n        if (!rects.length)\n            return null;\n        let fromBack = this.side ? this.side < 0 : pos > 0;\n        for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n            rect = rects[i];\n            if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                break;\n        }\n        return flattenRect(rect, !fromBack);\n    }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferView extends ContentView {\n    constructor(side) {\n        super();\n        this.side = side;\n    }\n    get length() { return 0; }\n    merge() { return false; }\n    become(other) {\n        return other instanceof WidgetBufferView && other.side == this.side;\n    }\n    split() { return new WidgetBufferView(this.side); }\n    sync() {\n        if (!this.dom) {\n            let dom = document.createElement(\"img\");\n            dom.className = \"cm-widgetBuffer\";\n            dom.setAttribute(\"aria-hidden\", \"true\");\n            this.setDOM(dom);\n        }\n    }\n    getSide() { return this.side; }\n    domAtPos(pos) { return this.side > 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom); }\n    localPosFromDOM() { return 0; }\n    domBoundsAround() { return null; }\n    coordsAt(pos) {\n        return this.dom.getBoundingClientRect();\n    }\n    get overrideDOMText() {\n        return Text.empty;\n    }\n    get isHidden() { return true; }\n}\nTextView.prototype.children = WidgetView.prototype.children = WidgetBufferView.prototype.children = noChildren;\nfunction inlineDOMAtPos(parent, pos) {\n    let dom = parent.dom, { children } = parent, i = 0;\n    for (let off = 0; i < children.length; i++) {\n        let child = children[i], end = off + child.length;\n        if (end == off && child.getSide() <= 0)\n            continue;\n        if (pos > off && pos < end && child.dom.parentNode == dom)\n            return child.domAtPos(pos - off);\n        if (pos <= off)\n            break;\n        off = end;\n    }\n    for (let j = i; j > 0; j--) {\n        let prev = children[j - 1];\n        if (prev.dom.parentNode == dom)\n            return prev.domAtPos(prev.length);\n    }\n    for (let j = i; j < children.length; j++) {\n        let next = children[j];\n        if (next.dom.parentNode == dom)\n            return next.domAtPos(0);\n    }\n    return new DOMPos(dom, 0);\n}\n// Assumes `view`, if a mark view, has precisely 1 child.\nfunction joinInlineInto(parent, view, open) {\n    let last, { children } = parent;\n    if (open > 0 && view instanceof MarkView && children.length &&\n        (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) {\n        joinInlineInto(last, view.children[0], open - 1);\n    }\n    else {\n        children.push(view);\n        view.setParent(parent);\n    }\n    parent.length += view.length;\n}\nfunction coordsInChildren(view, pos, side) {\n    let before = null, beforePos = -1, after = null, afterPos = -1;\n    function scan(view, pos) {\n        for (let i = 0, off = 0; i < view.children.length && off <= pos; i++) {\n            let child = view.children[i], end = off + child.length;\n            if (end >= pos) {\n                if (child.children.length) {\n                    scan(child, pos - off);\n                }\n                else if ((!after || after.isHidden && side > 0) &&\n                    (end > pos || off == end && child.getSide() > 0)) {\n                    after = child;\n                    afterPos = pos - off;\n                }\n                else if (off < pos || (off == end && child.getSide() < 0) && !child.isHidden) {\n                    before = child;\n                    beforePos = pos - off;\n                }\n            }\n            off = end;\n        }\n    }\n    scan(view, pos);\n    let target = (side < 0 ? before : after) || before || after;\n    if (target)\n        return target.coordsAt(Math.max(0, target == before ? beforePos : afterPos), side);\n    return fallbackRect(view);\n}\nfunction fallbackRect(view) {\n    let last = view.dom.lastChild;\n    if (!last)\n        return view.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = /*@__PURE__*/Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\nclass LineView extends ContentView {\n    constructor() {\n        super(...arguments);\n        this.children = [];\n        this.length = 0;\n        this.prevAttrs = undefined;\n        this.attrs = null;\n        this.breakAfter = 0;\n    }\n    // Consumes source\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source) {\n            if (!(source instanceof LineView))\n                return false;\n            if (!this.dom)\n                source.transferDOM(this); // Reuse source.dom when appropriate\n        }\n        if (hasStart)\n            this.setDeco(source ? source.attrs : null);\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);\n        return true;\n    }\n    split(at) {\n        let end = new LineView;\n        end.breakAfter = this.breakAfter;\n        if (this.length == 0)\n            return end;\n        let { i, off } = this.childPos(at);\n        if (off) {\n            end.append(this.children[i].split(off), 0);\n            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);\n            i++;\n        }\n        for (let j = i; j < this.children.length; j++)\n            end.append(this.children[j], 0);\n        while (i > 0 && this.children[i - 1].length == 0)\n            this.children[--i].destroy();\n        this.children.length = i;\n        this.markDirty();\n        this.length = at;\n        return end;\n    }\n    transferDOM(other) {\n        if (!this.dom)\n            return;\n        this.markDirty();\n        other.setDOM(this.dom);\n        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;\n        this.prevAttrs = undefined;\n        this.dom = null;\n    }\n    setDeco(attrs) {\n        if (!attrsEq(this.attrs, attrs)) {\n            if (this.dom) {\n                this.prevAttrs = this.attrs;\n                this.markDirty();\n            }\n            this.attrs = attrs;\n        }\n    }\n    append(child, openStart) {\n        joinInlineInto(this, child, openStart);\n    }\n    // Only called when building a line view in ContentBuilder\n    addLineDeco(deco) {\n        let attrs = deco.spec.attributes, cls = deco.spec.class;\n        if (attrs)\n            this.attrs = combineAttrs(attrs, this.attrs || {});\n        if (cls)\n            this.attrs = combineAttrs({ class: cls }, this.attrs || {});\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == \"DIV\") {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        var _a;\n        if (!this.dom) {\n            this.setDOM(document.createElement(\"div\"));\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {\n            clearAttributes(this.dom);\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        if (this.prevAttrs !== undefined) {\n            updateAttrs(this.dom, this.prevAttrs, this.attrs);\n            this.dom.classList.add(\"cm-line\");\n            this.prevAttrs = undefined;\n        }\n        super.sync(view, track);\n        let last = this.dom.lastChild;\n        while (last && ContentView.get(last) instanceof MarkView)\n            last = last.lastChild;\n        if (!last || !this.length ||\n            last.nodeName != \"BR\" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&\n                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {\n            let hack = document.createElement(\"BR\");\n            hack.cmIgnore = true;\n            this.dom.appendChild(hack);\n        }\n    }\n    measureTextSize() {\n        if (this.children.length == 0 || this.length > 20)\n            return null;\n        let totalWidth = 0, textHeight;\n        for (let child of this.children) {\n            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))\n                return null;\n            let rects = clientRectsFor(child.dom);\n            if (rects.length != 1)\n                return null;\n            totalWidth += rects[0].width;\n            textHeight = rects[0].height;\n        }\n        return !totalWidth ? null : {\n            lineHeight: this.dom.getBoundingClientRect().height,\n            charWidth: totalWidth / this.length,\n            textHeight\n        };\n    }\n    coordsAt(pos, side) {\n        let rect = coordsInChildren(this, pos, side);\n        // Correct rectangle height for empty lines when the returned\n        // height is larger than the text height.\n        if (!this.children.length && rect && this.parent) {\n            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;\n            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {\n                let dist = (height - heightOracle.textHeight) / 2;\n                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };\n            }\n        }\n        return rect;\n    }\n    become(_other) { return false; }\n    covers() { return true; }\n    static find(docView, pos) {\n        for (let i = 0, off = 0; i < docView.children.length; i++) {\n            let block = docView.children[i], end = off + block.length;\n            if (end >= pos) {\n                if (block instanceof LineView)\n                    return block;\n                if (end > pos)\n                    break;\n            }\n            off = end + block.breakAfter;\n        }\n        return null;\n    }\n}\nclass BlockWidgetView extends ContentView {\n    constructor(widget, length, deco) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.deco = deco;\n        this.breakAfter = 0;\n        this.prevWidget = null;\n    }\n    merge(from, to, source, _takeDeco, openStart, openEnd) {\n        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    domAtPos(pos) {\n        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n    }\n    split(at) {\n        let len = this.length - at;\n        this.length = at;\n        let end = new BlockWidgetView(this.widget, len, this.deco);\n        end.breakAfter = this.breakAfter;\n        return end;\n    }\n    get children() { return noChildren; }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    get overrideDOMText() {\n        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;\n    }\n    domBoundsAround() { return null; }\n    become(other) {\n        if (other instanceof BlockWidgetView &&\n            other.widget.constructor == this.widget.constructor) {\n            if (!other.widget.compare(this.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            this.deco = other.deco;\n            this.breakAfter = other.breakAfter;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    coordsAt(pos, side) {\n        return this.widget.coordsAt(this.dom, pos, side);\n    }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n    covers(side) {\n        let { startSide, endSide } = this.deco;\n        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;\n    }\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried—less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    @internal\n    */\n    get editable() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /*@__PURE__*/(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\nreturn BlockType})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.class = spec.class || \"\";\n        this.attrs = spec.attributes || null;\n    }\n    eq(other) {\n        var _a, _b;\n        return this == other ||\n            other instanceof MarkDecoration &&\n                this.tagName == other.tagName &&\n                (this.class || ((_a = this.attrs) === null || _a === void 0 ? void 0 : _a.class)) == (other.class || ((_b = other.attrs) === null || _b === void 0 ? void 0 : _b.class)) &&\n                attrsEq(this.attrs, other.attrs, \"class\");\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? BlockType.WidgetRange\n            : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n\nclass ContentBuilder {\n    constructor(doc, pos, end, disallowBlockEffectsFor) {\n        this.doc = doc;\n        this.pos = pos;\n        this.end = end;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.content = [];\n        this.curLine = null;\n        this.breakAtStart = 0;\n        this.pendingBuffer = 0 /* Buf.No */;\n        this.bufferMarks = [];\n        // Set to false directly after a widget that covers the position after it\n        this.atCursorPos = true;\n        this.openStart = -1;\n        this.openEnd = -1;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n        this.skip = pos;\n    }\n    posCovered() {\n        if (this.content.length == 0)\n            return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;\n        let last = this.content[this.content.length - 1];\n        return !(last.breakAfter || last instanceof BlockWidgetView && last.deco.endSide < 0);\n    }\n    getLine() {\n        if (!this.curLine) {\n            this.content.push(this.curLine = new LineView);\n            this.atCursorPos = true;\n        }\n        return this.curLine;\n    }\n    flushBuffer(active = this.bufferMarks) {\n        if (this.pendingBuffer) {\n            this.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);\n            this.pendingBuffer = 0 /* Buf.No */;\n        }\n    }\n    addBlockWidget(view) {\n        this.flushBuffer();\n        this.curLine = null;\n        this.content.push(view);\n    }\n    finish(openEnd) {\n        if (this.pendingBuffer && openEnd <= this.bufferMarks.length)\n            this.flushBuffer();\n        else\n            this.pendingBuffer = 0 /* Buf.No */;\n        if (!this.posCovered() &&\n            !(openEnd && this.content.length && this.content[this.content.length - 1] instanceof BlockWidgetView))\n            this.getLine();\n    }\n    buildText(length, active, openStart) {\n        while (length > 0) {\n            if (this.textOff == this.text.length) {\n                let { value, lineBreak, done } = this.cursor.next(this.skip);\n                this.skip = 0;\n                if (done)\n                    throw new Error(\"Ran out of text content when drawing inline views\");\n                if (lineBreak) {\n                    if (!this.posCovered())\n                        this.getLine();\n                    if (this.content.length)\n                        this.content[this.content.length - 1].breakAfter = 1;\n                    else\n                        this.breakAtStart = 1;\n                    this.flushBuffer();\n                    this.curLine = null;\n                    this.atCursorPos = true;\n                    length--;\n                    continue;\n                }\n                else {\n                    this.text = value;\n                    this.textOff = 0;\n                }\n            }\n            let take = Math.min(this.text.length - this.textOff, length, 512 /* T.Chunk */);\n            this.flushBuffer(active.slice(active.length - openStart));\n            this.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart);\n            this.atCursorPos = true;\n            this.textOff += take;\n            length -= take;\n            openStart = 0;\n        }\n    }\n    span(from, to, active, openStart) {\n        this.buildText(to - from, active, openStart);\n        this.pos = to;\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    point(from, to, deco, active, openStart, index) {\n        if (this.disallowBlockEffectsFor[index] && deco instanceof PointDecoration) {\n            if (deco.block)\n                throw new RangeError(\"Block decorations may not be specified via plugins\");\n            if (to > this.doc.lineAt(this.pos).to)\n                throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n        }\n        let len = to - from;\n        if (deco instanceof PointDecoration) {\n            if (deco.block) {\n                if (deco.startSide > 0 && !this.posCovered())\n                    this.getLine();\n                this.addBlockWidget(new BlockWidgetView(deco.widget || NullWidget.block, len, deco));\n            }\n            else {\n                let view = WidgetView.create(deco.widget || NullWidget.inline, len, len ? 0 : deco.startSide);\n                let cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length &&\n                    (from < to || deco.startSide > 0);\n                let cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);\n                let line = this.getLine();\n                if (this.pendingBuffer == 2 /* Buf.IfCursor */ && !cursorBefore && !view.isEditable)\n                    this.pendingBuffer = 0 /* Buf.No */;\n                this.flushBuffer(active);\n                if (cursorBefore) {\n                    line.append(wrapMarks(new WidgetBufferView(1), active), openStart);\n                    openStart = active.length + Math.max(0, openStart - active.length);\n                }\n                line.append(wrapMarks(view, active), openStart);\n                this.atCursorPos = cursorAfter;\n                this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to || openStart > active.length ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;\n                if (this.pendingBuffer)\n                    this.bufferMarks = active.slice();\n            }\n        }\n        else if (this.doc.lineAt(this.pos).from == this.pos) { // Line decoration\n            this.getLine().addLineDeco(deco);\n        }\n        if (len) {\n            // Advance the iterator past the replaced content\n            if (this.textOff + len <= this.text.length) {\n                this.textOff += len;\n            }\n            else {\n                this.skip += len - (this.text.length - this.textOff);\n                this.text = \"\";\n                this.textOff = 0;\n            }\n            this.pos = to;\n        }\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    static build(text, from, to, decorations, dynamicDecorationMap) {\n        let builder = new ContentBuilder(text, from, to, dynamicDecorationMap);\n        builder.openEnd = RangeSet.spans(decorations, from, to, builder);\n        if (builder.openStart < 0)\n            builder.openStart = builder.openEnd;\n        builder.finish(builder.openEnd);\n        return builder;\n    }\n}\nfunction wrapMarks(view, active) {\n    for (let mark of active)\n        view = new MarkView(mark, [view], view.length);\n    return view;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\nNullWidget.inline = /*@__PURE__*/new NullWidget(\"span\");\nNullWidget.block = /*@__PURE__*/new NullWidget(\"div\");\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /*@__PURE__*/(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\nreturn Direction})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = /*@__PURE__*/dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = /*@__PURE__*/dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /*@__PURE__*/Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = /*@__PURE__*/p.charCodeAt(0), r = /*@__PURE__*/p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200c ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    forward(forward, dir) { return forward == (this.dir == dir); }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\n// This implementation moves strictly visually, without concern for a\n// traversal visiting every logical position in the string. It will\n// still do so for simple input, but situations like multiple isolates\n// with the same level next to each other, or text going against the\n// main dir at the end of the line, will make some positions\n// unreachable with this motion. Each visible cursor position will\n// correspond to the lower-level bidi span that touches it.\n//\n// The alternative would be to solve an order globally for a given\n// line, making sure that it includes every position, but that would\n// require associating non-canonical (higher bidi span level)\n// positions with a given visual position, which is likely to confuse\n// people. (And would generally be a lot more complicated.)\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from;\n    let spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI], spanEnd = span.side(forward, dir);\n    // End of span\n    if (startIndex == spanEnd) {\n        let nextI = spanI += forward ? 1 : -1;\n        if (nextI < 0 || nextI >= order.length)\n            return null;\n        span = order[spanI = nextI];\n        startIndex = span.side(!forward, dir);\n        spanEnd = span.side(forward, dir);\n    }\n    let nextIndex = findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n    if (nextIndex < span.from || nextIndex > span.to)\n        nextIndex = spanEnd;\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level)\n        return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n    return EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n    for (let i = from; i < to; i++) {\n        let type = charType(text.charCodeAt(i));\n        if (type == 1 /* T.L */)\n            return LTR;\n        if (type == 2 /* T.R */ || type == 4 /* T.AL */)\n            return RTL;\n    }\n    return LTR;\n}\n\nconst clickAddsSelectionRange = /*@__PURE__*/Facet.define();\nconst dragMovesSelection$1 = /*@__PURE__*/Facet.define();\nconst mouseSelectionStyle = /*@__PURE__*/Facet.define();\nconst exceptionSink = /*@__PURE__*/Facet.define();\nconst updateListener = /*@__PURE__*/Facet.define();\nconst inputHandler = /*@__PURE__*/Facet.define();\nconst focusChangeEffect = /*@__PURE__*/Facet.define();\nconst perLineTextDirection = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst scrollHandler = /*@__PURE__*/Facet.define();\nclass ScrollTarget {\n    constructor(range, y = \"nearest\", x = \"nearest\", yMargin = 5, xMargin = 5, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state) {\n        return this.range.to <= state.doc.length ? this :\n            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = /*@__PURE__*/StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror)\n        window.onerror(String(exception), context, undefined, undefined, exception);\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /*@__PURE__*/Facet.define();\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.extension = buildExtensions(this);\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [viewPlugin.of(plugin)];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define(view => new cls(view), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `false`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.create(view);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = /*@__PURE__*/Facet.define();\nconst contentAttributes = /*@__PURE__*/Facet.define();\n// Provide decorations\nconst decorations = /*@__PURE__*/Facet.define();\nconst outerDecorations = /*@__PURE__*/Facet.define();\nconst atomicRanges = /*@__PURE__*/Facet.define();\nconst bidiIsolatedRanges = /*@__PURE__*/Facet.define();\nfunction getIsolatedRanges(view, line) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    RangeSet.spans(sets, line.from, line.to, {\n        point() { },\n        span(fromDoc, toDoc, active, open) {\n            let from = fromDoc - line.from, to = toDoc - line.from;\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let direction = active[i].spec.bidiIsolate, update;\n                if (direction == null)\n                    direction = autoDirection(line.text, from, to);\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == direction) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = /*@__PURE__*/Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = /*@__PURE__*/Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, posA = 0, posB = 0;; dI++) {\n            let next = dI == diff.length ? null : diff[dI], off = posA - posB;\n            let end = next ? next.fromB : 1e9;\n            while (rI < ranges.length && ranges[rI] < end) {\n                let from = ranges[rI], to = ranges[rI + 1];\n                let fromB = Math.max(posB, from), toB = Math.min(end, to);\n                if (fromB <= toB)\n                    new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result);\n                if (to > end)\n                    break;\n                else\n                    rI += 2;\n            }\n            if (!next)\n                return result;\n            new ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result);\n            posA = next.toA;\n            posB = next.toB;\n        }\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\nclass DocView extends ContentView {\n    get length() { return this.view.state.doc.length; }\n    constructor(view) {\n        super();\n        this.view = view;\n        this.decorations = [];\n        this.dynamicDecorationMap = [false];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.markedForComposition = new Set;\n        this.editContextFormatting = Decoration.none;\n        this.lastCompositionAfterCursor = false;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.setDOM(view.contentDOM);\n        this.children = [new LineView];\n        this.children[0].setParent(this);\n        this.updateDeco();\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], 0, null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        this.updateEditContextFormatting(update);\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            this.markedForComposition.clear();\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, deco = this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, deco, update.changes);\n        changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        if (!(this.flags & 7 /* ViewFlag.Dirty */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, update.startState.doc.length, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, oldLength, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        this.updateChildren(changes, oldLength, composition);\n        let { observer } = this.view;\n        observer.ignore(() => {\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.sync(this.view, track);\n            this.flags &= ~7 /* ViewFlag.Dirty */;\n            if (track && (track.written || observer.selectionRange.focusNode != track.node))\n                this.forceSelection = true;\n            this.dom.style.height = \"\";\n        });\n        this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.children)\n                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateChildren(changes, oldLength, composition) {\n        let ranges = composition ? composition.range.addToSet(changes.slice()) : changes;\n        let cursor = this.childCursor(oldLength);\n        for (let i = ranges.length - 1;; i--) {\n            let next = i >= 0 ? ranges[i] : null;\n            if (!next)\n                break;\n            let { fromA, toA, fromB, toB } = next, content, breakAtStart, openStart, openEnd;\n            if (composition && composition.range.fromB < toB && composition.range.toB > fromB) {\n                let before = ContentBuilder.build(this.view.state.doc, fromB, composition.range.fromB, this.decorations, this.dynamicDecorationMap);\n                let after = ContentBuilder.build(this.view.state.doc, composition.range.toB, toB, this.decorations, this.dynamicDecorationMap);\n                breakAtStart = before.breakAtStart;\n                openStart = before.openStart;\n                openEnd = after.openEnd;\n                let compLine = this.compositionView(composition);\n                if (after.breakAtStart) {\n                    compLine.breakAfter = 1;\n                }\n                else if (after.content.length &&\n                    compLine.merge(compLine.length, compLine.length, after.content[0], false, after.openStart, 0)) {\n                    compLine.breakAfter = after.content[0].breakAfter;\n                    after.content.shift();\n                }\n                if (before.content.length &&\n                    compLine.merge(0, 0, before.content[before.content.length - 1], true, 0, before.openEnd)) {\n                    before.content.pop();\n                }\n                content = before.content.concat(compLine).concat(after.content);\n            }\n            else {\n                ({ content, breakAtStart, openStart, openEnd } =\n                    ContentBuilder.build(this.view.state.doc, fromB, toB, this.decorations, this.dynamicDecorationMap));\n            }\n            let { i: toI, off: toOff } = cursor.findPos(toA, 1);\n            let { i: fromI, off: fromOff } = cursor.findPos(fromA, -1);\n            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);\n        }\n        if (composition)\n            this.fixCompositionDOM(composition);\n    }\n    updateEditContextFormatting(update) {\n        this.editContextFormatting = this.editContextFormatting.map(update.changes);\n        for (let tr of update.transactions)\n            for (let effect of tr.effects)\n                if (effect.is(setEditContextFormatting)) {\n                    this.editContextFormatting = effect.value;\n                }\n    }\n    compositionView(composition) {\n        let cur = new TextView(composition.text.nodeValue);\n        cur.flags |= 8 /* ViewFlag.Composition */;\n        for (let { deco } of composition.marks)\n            cur = new MarkView(deco, [cur], cur.length);\n        let line = new LineView;\n        line.append(cur, 0);\n        return line;\n    }\n    fixCompositionDOM(composition) {\n        let fix = (dom, cView) => {\n            cView.flags |= 8 /* ViewFlag.Composition */ | (cView.children.some(c => c.flags & 7 /* ViewFlag.Dirty */) ? 1 /* ViewFlag.ChildDirty */ : 0);\n            this.markedForComposition.add(cView);\n            let prev = ContentView.get(dom);\n            if (prev && prev != cView)\n                prev.dom = null;\n            cView.setDOM(dom);\n        };\n        let pos = this.childPos(composition.range.fromB, 1);\n        let cView = this.children[pos.i];\n        fix(composition.line, cView);\n        for (let i = composition.marks.length - 1; i >= -1; i--) {\n            pos = cView.childPos(pos.off, 1);\n            cView = cView.children[pos.i];\n            fix(i >= 0 ? composition.marks[i].node : composition.text, cView);\n        }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;\n        let selectionNotFocus = !focused &&\n            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main;\n        let anchor = this.moveToLine(this.domAtPos(main.anchor));\n        let head = main.empty ? anchor : this.moveToLine(this.domAtPos(main.head));\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && this.dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, this.dom)) {\n                    this.dom.blur();\n                    this.dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = (nextTo == 1 /* NextTo.Before */ ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == this.dom) {\n                    this.dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    // If a zero-length widget is inserted next to the cursor during\n    // composition, avoid moving it across it and disrupting the\n    // composition.\n    suppressWidgetCursorChange(sel, cursor) {\n        return this.hasComposition && cursor.empty &&\n            isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) &&\n            this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = LineView.find(this, cursor.head);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    // If a position is in/near a block widget, move it to a nearby text\n    // line, since we don't want the cursor inside a block widget.\n    moveToLine(pos) {\n        // Block widgets will return positions before/after them, which\n        // are thus directly in the document DOM element.\n        let dom = this.dom, newPos;\n        if (pos.node != dom)\n            return pos;\n        for (let i = pos.offset; !newPos && i < dom.childNodes.length; i++) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(0);\n        }\n        for (let i = pos.offset - 1; !newPos && i >= 0; i--) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(view.length);\n        }\n        return newPos ? new DOMPos(newPos.node, newPos.offset, true) : pos;\n    }\n    nearest(dom) {\n        for (let cur = dom; cur;) {\n            let domView = ContentView.get(cur);\n            if (domView && domView.rootView == this)\n                return domView;\n            cur = cur.parentNode;\n        }\n        return null;\n    }\n    posFromDOM(node, offset) {\n        let view = this.nearest(node);\n        if (!view)\n            throw new RangeError(\"Trying to find position for a DOM position outside of the document\");\n        return view.localPosFromDOM(node, offset) + view.posAtStart;\n    }\n    domAtPos(pos) {\n        let { i, off } = this.childCursor().findPos(pos, -1);\n        for (; i < this.children.length - 1;) {\n            let child = this.children[i];\n            if (off < child.length || child instanceof LineView)\n                break;\n            i++;\n            off = 0;\n        }\n        return this.children[i].domAtPos(off);\n    }\n    coordsAt(pos, side) {\n        let best = null, bestPos = 0;\n        for (let off = this.length, i = this.children.length - 1; i >= 0; i--) {\n            let child = this.children[i], end = off - child.breakAfter, start = end - child.length;\n            if (end < pos)\n                break;\n            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&\n                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {\n                best = child;\n                bestPos = start;\n            }\n            else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {\n                if (child.deco.startSide < 0)\n                    break;\n                else if (i)\n                    best = null;\n            }\n            off = start;\n        }\n        return best ? best.coordsAt(pos - bestPos, side) : null;\n    }\n    coordsForChar(pos) {\n        let { i, off } = this.childPos(pos, 1), child = this.children[i];\n        if (!(child instanceof LineView))\n            return null;\n        while (child.children.length) {\n            let { i, off: childOff } = child.childPos(off, 1);\n            for (;; i++) {\n                if (i == child.children.length)\n                    return null;\n                if ((child = child.children[i]).length)\n                    break;\n            }\n            off = childOff;\n        }\n        if (!(child instanceof TextView))\n            return null;\n        let end = findClusterBreak(child.text, off);\n        if (end == off)\n            return null;\n        let rects = textRange(child.dom, off, end).getClientRects();\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                return rect;\n        }\n        return null;\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == Direction.LTR;\n        for (let pos = 0, i = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (end > to)\n                break;\n            if (pos >= from) {\n                let childRect = child.dom.getBoundingClientRect();\n                result.push(childRect.height);\n                if (isWider) {\n                    let last = child.dom.lastChild;\n                    let rects = last ? clientRectsFor(last) : [];\n                    if (rects.length) {\n                        let rect = rects[rects.length - 1];\n                        let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                        if (width > widest) {\n                            widest = width;\n                            this.minWidth = contentWidth;\n                            this.minWidthFrom = pos;\n                            this.minWidthTo = end;\n                        }\n                    }\n                }\n            }\n            pos = end + child.breakAfter;\n        }\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { i } = this.childPos(pos, 1);\n        return getComputedStyle(this.children[i].dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n    }\n    measureTextSize() {\n        for (let child of this.children) {\n            if (child instanceof LineView) {\n                let measure = child.measureTextSize();\n                if (measure)\n                    return measure;\n            }\n        }\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect ? rect.width / 27 : 7;\n            textHeight = rect ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    childCursor(pos = this.length) {\n        // Move back to start of last element when possible, so that\n        // `ChildCursor.findPos` doesn't have to deal with the edge case\n        // of being after the last element.\n        let i = this.children.length;\n        if (i)\n            pos -= this.children[--i].length;\n        return new ChildCursor(this.children, pos, i);\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let i = 1;\n        let allDeco = this.view.state.facet(decorations).map(d => {\n            let dynamic = this.dynamicDecorationMap[i++] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n            let dynamic = typeof d == \"function\";\n            if (dynamic)\n                dynamicOuter = true;\n            return dynamic ? d(this.view) : d;\n        });\n        if (outerDeco.length) {\n            this.dynamicDecorationMap[i++] = dynamicOuter;\n            allDeco.push(RangeSet.join(outerDeco));\n        }\n        this.decorations = [\n            this.editContextFormatting,\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n        while (i < this.decorations.length)\n            this.dynamicDecorationMap[i++] = false;\n        return this.decorations;\n    }\n    scrollIntoView(target) {\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        for (let handler of this.view.state.facet(scrollHandler)) {\n            try {\n                if (handler(this.view, target.range, target))\n                    return true;\n            }\n            catch (e) {\n                logException(this.view.state, e, \"scroll handler\");\n            }\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, range.empty ? range.assoc : range.head > range.anchor ? -1 : 1), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-gap\";\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get editable() { return true; }\n    get estimatedHeight() { return this.height; }\n    ignoreEvent() { return false; }\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n    let textNode = textBefore || textAfter;\n    if (textAfter && textBefore && textAfter.node != textBefore.node) {\n        let descAfter = ContentView.get(textAfter.node);\n        if (!descAfter || descAfter instanceof TextView && descAfter.text != textAfter.node.nodeValue) {\n            textNode = textAfter;\n        }\n        else if (view.docView.lastCompositionAfterCursor) {\n            let descBefore = ContentView.get(textBefore.node);\n            if (!(!descBefore || descBefore instanceof TextView && descBefore.text != textBefore.node.nodeValue))\n                textNode = textAfter;\n        }\n    }\n    view.docView.lastCompositionAfterCursor = textNode != textBefore;\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    let range = new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to);\n    let marks = [];\n    for (let parent = textNode.parentNode;; parent = parent.parentNode) {\n        let parentView = ContentView.get(parent);\n        if (parentView instanceof MarkView)\n            marks.push({ node: parent, deco: parentView.mark });\n        else if (parentView instanceof LineView || parent.nodeName == \"DIV\" && parent.parentNode == view.contentDOM)\n            return { range, text: textNode, marks, line: parent };\n        else if (parent != view.contentDOM)\n            marks.push({ node: parent, deco: new MarkDecoration({\n                    inclusive: true,\n                    attributes: getAttrs(parent),\n                    tagName: parent.tagName.toLowerCase()\n                }) });\n        else\n            return null;\n    }\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\n\nfunction groupAt(state, pos, bias = 1) {\n    let categorize = state.charCategorizer(pos);\n    let line = state.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = findClusterBreak(line.text, linePos, false);\n    else\n        to = findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return EditorSelection.range(from + line.from, to + line.from);\n}\n// Search the DOM for the {node, offset} position closest to the given\n// coordinates. Very inefficient and crude, but can usually be avoided\n// by calling caret(Position|Range)FromPoint instead.\nfunction getdx(x, rect) {\n    return rect.left > x ? rect.left - x : Math.max(0, x - rect.right);\n}\nfunction getdy(y, rect) {\n    return rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom);\n}\nfunction yOverlap(a, b) {\n    return a.top < b.bottom - 1 && a.bottom > b.top + 1;\n}\nfunction upTop(rect, top) {\n    return top < rect.top ? { top, left: rect.left, right: rect.right, bottom: rect.bottom } : rect;\n}\nfunction upBot(rect, bottom) {\n    return bottom > rect.bottom ? { top: rect.top, left: rect.left, right: rect.right, bottom } : rect;\n}\nfunction domPosAtCoords(parent, x, y) {\n    let closest, closestRect, closestX, closestY, closestOverlap = false;\n    let above, below, aboveRect, belowRect;\n    for (let child = parent.firstChild; child; child = child.nextSibling) {\n        let rects = clientRectsFor(child);\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (closestRect && yOverlap(closestRect, rect))\n                rect = upTop(upBot(rect, closestRect.bottom), closestRect.top);\n            let dx = getdx(x, rect), dy = getdy(y, rect);\n            if (dx == 0 && dy == 0)\n                return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y);\n            if (!closest || closestY > dy || closestY == dy && closestX > dx) {\n                closest = child;\n                closestRect = rect;\n                closestX = dx;\n                closestY = dy;\n                let side = dy ? (y < rect.top ? -1 : 1) : dx ? (x < rect.left ? -1 : 1) : 0;\n                closestOverlap = !side || (side > 0 ? i < rects.length - 1 : i > 0);\n            }\n            if (dx == 0) {\n                if (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {\n                    above = child;\n                    aboveRect = rect;\n                }\n                else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {\n                    below = child;\n                    belowRect = rect;\n                }\n            }\n            else if (aboveRect && yOverlap(aboveRect, rect)) {\n                aboveRect = upBot(aboveRect, rect.bottom);\n            }\n            else if (belowRect && yOverlap(belowRect, rect)) {\n                belowRect = upTop(belowRect, rect.top);\n            }\n        }\n    }\n    if (aboveRect && aboveRect.bottom >= y) {\n        closest = above;\n        closestRect = aboveRect;\n    }\n    else if (belowRect && belowRect.top <= y) {\n        closest = below;\n        closestRect = belowRect;\n    }\n    if (!closest)\n        return { node: parent, offset: 0 };\n    let clipX = Math.max(closestRect.left, Math.min(closestRect.right, x));\n    if (closest.nodeType == 3)\n        return domPosInText(closest, clipX, y);\n    if (closestOverlap && closest.contentEditable != \"false\")\n        return domPosAtCoords(closest, clipX, y);\n    let offset = Array.prototype.indexOf.call(parent.childNodes, closest) +\n        (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0);\n    return { node: parent, offset };\n}\nfunction domPosInText(node, x, y) {\n    let len = node.nodeValue.length;\n    let closestOffset = -1, closestDY = 1e9, generalSide = 0;\n    for (let i = 0; i < len; i++) {\n        let rects = textRange(node, i, i + 1).getClientRects();\n        for (let j = 0; j < rects.length; j++) {\n            let rect = rects[j];\n            if (rect.top == rect.bottom)\n                continue;\n            if (!generalSide)\n                generalSide = x - rect.left;\n            let dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1;\n            if (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {\n                let right = x >= (rect.left + rect.right) / 2, after = right;\n                if (browser.chrome || browser.gecko) {\n                    // Check for RTL on browsers that support getting client\n                    // rects for empty ranges.\n                    let rectBefore = textRange(node, i).getBoundingClientRect();\n                    if (rectBefore.left == rect.right)\n                        after = !right;\n                }\n                if (dy <= 0)\n                    return { node, offset: i + (after ? 1 : 0) };\n                closestOffset = i + (after ? 1 : 0);\n                closestDY = dy;\n            }\n        }\n    }\n    return { node, offset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0 };\n}\nfunction posAtCoords(view, coords, precise, bias = -1) {\n    var _a, _b;\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let block, { docHeight } = view.viewState;\n    let { x, y } = coords, yOffset = y - docTop;\n    if (yOffset < 0)\n        return 0;\n    if (yOffset > docHeight)\n        return view.state.doc.length;\n    // Scan for a text block near the queried y position\n    for (let halfLine = view.viewState.heightOracle.textHeight / 2, bounced = false;;) {\n        block = view.elementAtHeight(yOffset);\n        if (block.type == BlockType.Text)\n            break;\n        for (;;) {\n            // Move the y position out of this block\n            yOffset = bias > 0 ? block.bottom + halfLine : block.top - halfLine;\n            if (yOffset >= 0 && yOffset <= docHeight)\n                break;\n            // If the document consists entirely of replaced widgets, we\n            // won't find a text block, so return 0\n            if (bounced)\n                return precise ? null : 0;\n            bounced = true;\n            bias = -bias;\n        }\n    }\n    y = docTop + yOffset;\n    let lineStart = block.from;\n    // If this is outside of the rendered viewport, we can't determine a position\n    if (lineStart < view.viewport.from)\n        return view.viewport.from == 0 ? 0 : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    if (lineStart > view.viewport.to)\n        return view.viewport.to == view.state.doc.length ? view.state.doc.length :\n            precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    // Prefer ShadowRootOrDocument.elementFromPoint if present, fall back to document if not\n    let doc = view.dom.ownerDocument;\n    let root = view.root.elementFromPoint ? view.root : doc;\n    let element = root.elementFromPoint(x, y);\n    if (element && !view.contentDOM.contains(element))\n        element = null;\n    // If the element is unexpected, clip x at the sides of the content area and try again\n    if (!element) {\n        x = Math.max(content.left + 1, Math.min(content.right - 1, x));\n        element = root.elementFromPoint(x, y);\n        if (element && !view.contentDOM.contains(element))\n            element = null;\n    }\n    // There's visible editor content under the point, so we can try\n    // using caret(Position|Range)FromPoint as a shortcut\n    let node, offset = -1;\n    if (element && ((_a = view.docView.nearest(element)) === null || _a === void 0 ? void 0 : _a.isEditable) != false) {\n        if (doc.caretPositionFromPoint) {\n            let pos = doc.caretPositionFromPoint(x, y);\n            if (pos)\n                ({ offsetNode: node, offset } = pos);\n        }\n        else if (doc.caretRangeFromPoint) {\n            let range = doc.caretRangeFromPoint(x, y);\n            if (range) {\n                ({ startContainer: node, startOffset: offset } = range);\n                if (!view.contentDOM.contains(node) ||\n                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||\n                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))\n                    node = undefined;\n            }\n        }\n    }\n    // No luck, do our own (potentially expensive) search\n    if (!node || !view.docView.dom.contains(node)) {\n        let line = LineView.find(view.docView, lineStart);\n        if (!line)\n            return yOffset > block.top + block.height / 2 ? block.to : block.from;\n        ({ node, offset } = domPosAtCoords(line.dom, x, y));\n    }\n    let nearest = view.docView.nearest(node);\n    if (!nearest)\n        return null;\n    if (nearest.isWidget && ((_b = nearest.dom) === null || _b === void 0 ? void 0 : _b.nodeType) == 1) {\n        let rect = nearest.dom.getBoundingClientRect();\n        return coords.y < rect.top || coords.y <= rect.bottom && coords.x <= (rect.left + rect.right) / 2\n            ? nearest.posAtStart : nearest.posAtEnd;\n    }\n    else {\n        return nearest.localPosFromDOM(node, offset) + nearest.posAtStart;\n    }\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + findColumn(content, into, view.state.tabSize);\n}\n// In case of a high line height, Safari's caretRangeFromPoint treats\n// the space between lines as belonging to the last character of the\n// line before. This is used to detect such a result so that it can be\n// ignored (issue #401).\nfunction isSuspiciousSafariCaretResult(node, offset, x) {\n    let len;\n    if (node.nodeType != 3 || offset != (len = node.nodeValue.length))\n        return false;\n    for (let next = node.nextSibling; next; next = next.nextSibling)\n        if (next.nodeType != 1 || next.nodeName != \"BR\")\n            return false;\n    return textRange(node, len - 1, len).getBoundingClientRect().left > x;\n}\n// Chrome will move positions between lines to the start of the next line\nfunction isSuspiciousChromeCaretResult(node, offset, x) {\n    if (offset != 0)\n        return false;\n    for (let cur = node;;) {\n        let parent = cur.parentNode;\n        if (!parent || parent.nodeType != 1 || parent.firstChild != cur)\n            return false;\n        if (parent.classList.contains(\"cm-line\"))\n            break;\n        cur = parent;\n    }\n    let rect = node.nodeType == 1 ? node.getBoundingClientRect()\n        : textRange(node, 0, Math.max(node.nodeValue.length, 1)).getBoundingClientRect();\n    return x - rect.left > 5;\n}\nfunction blockAt(view, pos) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type))\n        for (let l of line.type) {\n            if (l.to > pos || l.to == pos && (l.to == line.to || l.type == BlockType.Text))\n                return l;\n        }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head);\n    let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = view.visualLineSide(line, !forward);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || -1), docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let dist = distance !== null && distance !== void 0 ? distance : (view.viewState.heightOracle.textHeight >> 1);\n    for (let extra = 0;; extra += 10) {\n        let curY = startY + (dist + extra) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y: curY }, false, dir);\n        if (curY < rect.top || curY > rect.bottom || (dir < 0 ? pos < startPos : pos > startPos)) {\n            let charRect = view.docView.coordsForChar(pos);\n            let assoc = !charRect || curY < charRect.top ? -1 : 1;\n            return EditorSelection.cursor(pos, assoc, undefined, goal);\n        }\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\n\n// This will also be where dragging info and such goes\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.lastTouchTime = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        /**\n        When enabled (>-1), tab presses are not given to key handlers,\n        leaving the browser's default behavior. If >0, the mode expires\n        at that timestamp, and any other keypress clears it.\n        Esc enables temporary tab focus mode for two seconds when not\n        otherwise handled.\n        */\n        this.tabFocusMode = -1;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))\n            return true;\n        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.tabFocusMode = -1;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        let pending;\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey &&\n            ((pending = PendingKeys.find(key => key.keyCode == event.keyCode)) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey && !event.shiftKey)) {\n            this.pendingIOSKey = pending || event;\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey(change) {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        // This looks like an autocorrection before Enter\n        if (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString()))\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key instanceof KeyboardEvent ? key : undefined);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type))\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        this.view.observer.update(update);\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec;\n        if (spec && spec.domEventHandlers)\n            for (let type in spec.domEventHandlers) {\n                let f = spec.domEventHandlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (spec && spec.domEventObservers)\n            for (let type in spec.domEventObservers) {\n                let f = spec.domEventObservers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParent = scrollableParent(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        var _a;\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let rect = ((_a = this.scrollParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect())\n            || { left: 0, top: 0, right: this.view.win.innerWidth, bottom: this.view.win.innerHeight };\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= rect.left + dragScrollMargin)\n            sx = -dragScrollSpeed(rect.left - event.clientX);\n        else if (event.clientX + margins.right >= rect.right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - rect.right);\n        if (event.clientY - margins.top <= rect.top + dragScrollMargin)\n            sy = -dragScrollSpeed(rect.top - event.clientY);\n        else if (event.clientY + margins.bottom >= rect.bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - rect.bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        if (this.scrollParent) {\n            this.scrollParent.scrollLeft += this.scrollSpeed.x;\n            this.scrollParent.scrollTop += this.scrollSpeed.y;\n        }\n        else {\n            this.view.win.scrollBy(this.scrollSpeed.x, this.scrollSpeed.y);\n        }\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    skipAtoms(sel) {\n        let ranges = null;\n        for (let i = 0; i < sel.ranges.length; i++) {\n            let range = sel.ranges[i], updated = null;\n            if (range.empty) {\n                let pos = skipAtomicRanges(this.atoms, range.from, 0);\n                if (pos != range.from)\n                    updated = EditorSelection.cursor(pos, -1);\n            }\n            else {\n                let from = skipAtomicRanges(this.atoms, range.from, -1);\n                let to = skipAtomicRanges(this.atoms, range.to, 1);\n                if (from != range.from || to != range.to)\n                    updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n            }\n            if (updated) {\n                if (!ranges)\n                    ranges = sel.ranges.slice();\n                ranges[i] = updated;\n            }\n        }\n        return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n    }\n    select(event) {\n        let { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (update.transactions.some(tr => tr.isUserEvent(\"input.type\")))\n            this.destroy();\n        else if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, cView; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 || ((cView = ContentView.get(node)) && cView.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = /*@__PURE__*/Object.create(null);\nconst observers = /*@__PURE__*/Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction doPaste(view, input) {\n    let { state } = view, changes, i = 1, text = state.toText(input);\n    let byLine = text.lines == state.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state.changeByRange(range => {\n            let line = state.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)\n        view.inputState.tabFocusMode = Date.now() + 2000;\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    view.inputState.lastTouchTime = Date.now();\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => {\n                focusPreventScroll(view.contentDOM);\n                let active = view.root.activeElement;\n                if (active && !active.contains(view.contentDOM))\n                    active.blur();\n            });\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = LineView.find(view.docView, pos), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return EditorSelection.range(from, to);\n    }\n}\nlet insideY = (y, rect) => y >= rect.top && y <= rect.bottom;\nlet inside = (x, y, rect) => insideY(y, rect) && x >= rect.left && x <= rect.right;\n// Try to determine, for the given coordinates, associated with the\n// given position, whether they are related to the element before or\n// the element after the position.\nfunction findPositionSide(view, pos, x, y) {\n    let line = LineView.find(view.docView, pos);\n    if (!line)\n        return 1;\n    let off = pos - line.posAtStart;\n    // Line boundaries point into the line\n    if (off == 0)\n        return 1;\n    if (off == line.length)\n        return -1;\n    // Positions on top of an element point at that element\n    let before = line.coordsAt(off, -1);\n    if (before && inside(x, y, before))\n        return -1;\n    let after = line.coordsAt(off, 1);\n    if (after && inside(x, y, after))\n        return 1;\n    // This is probably a line wrap point. Pick before if the point is\n    // beside it.\n    return before && insideY(y, before) ? -1 : 1;\n}\nfunction queryPos(view, event) {\n    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = queryPos(view, event), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = queryPos(view, event), removed;\n            let range = rangeForClick(view, cur.pos, cur.bias, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.bias, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? EditorSelection.range(from, to) : EditorSelection.range(to, from);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let cView = view.docView.nearest(event.target);\n        if (cView && cView.isWidget) {\n            let from = cView.posAtStart, to = from + cView.length;\n            if (from >= range.to || to <= range.from)\n                range = EditorSelection.range(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", view.state.sliceDoc(range.from, range.to));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: content.join(state.lineBreak), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = /*@__PURE__*/Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of compositon\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a;\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    if (browser.ios && event.inputType == \"deleteContentForward\") {\n        // For some reason, DOM changes (and beforeinput) happen _before_\n        // the key event for ctrl-d on iOS when using an external\n        // keyboard.\n        view.observer.flushSoon();\n    }\n    // Safari will occasionally forget to fire compositionend at the end of a dead-key composition\n    if (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) {\n        setTimeout(() => observers.compositionend(view, event), 20);\n    }\n    return false;\n};\nconst appliedFirefoxHack = /*@__PURE__*/new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See https://github.com/codemirror/dev/issues/1082\n// and https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n        // Used to track, during updateHeight, if any actual heights changed\n        this.heightChanged = false;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nides. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-create line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType = /*@__PURE__*/(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\nreturn QueryType})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(oracle, height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                oracle.heightChanged = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = me.replace(fromA, toA, nodes);\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nHeightMap.prototype.size = 1;\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.deco || 0);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        return this.blockAt(0, oracle, top, offset);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.blockAt(0, oracle, top, offset));\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(oracle, measured.heights[measured.index++]);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(oracle, measured.heights[measured.index++]);\n        else if (force || this.outdated)\n            this.setHeight(oracle, Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + (height < oracle.lineHeight ? 0\n                : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++];\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                oracle.heightChanged = true;\n            return result;\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle, oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = left;\n        this.right = right;\n        this.height = left.height + right.height;\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = parent == dom.parentNode ? parentRect.bottom : Math.min(bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.size * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(state) {\n        this.state = state;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled\n        this.scrolledToBottom = false;\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = state.facet(decorations).filter(d => typeof d != \"function\");\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n        for (let i = 0; i < 2; i++) {\n            this.viewport = this.getViewport(0, null);\n            if (!this.updateForViewport())\n                break;\n        }\n        this.updateViewportLines();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        return this.updateScaler();\n    }\n    updateScaler() {\n        let scaler = this.scaler;\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != \"function\");\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = this.heightMap.height;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        update.flags |= this.updateForViewport();\n        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges();\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure(view) {\n        let dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace);\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let { scaleX, scaleY } = getScale(dom, domRect);\n            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||\n                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 8 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;\n        if (this.scrollTop != scrollTop) {\n            this.scrollAnchorHeight = -1;\n            this.scrollTop = scrollTop;\n        }\n        this.scrolledToBottom = isScrolledToBottom(view.scrollDOM);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget)\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 8 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            oracle.heightChanged = false;\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (oracle.heightChanged)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange) {\n            if (result & 2 /* UpdateFlag.Height */)\n                result |= this.updateScaler();\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n            result |= this.updateForViewport();\n        }\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                gap = new LineGap(from, to, this.gapSize(line, from, to, structure));\n            }\n            gaps.push(gap);\n        };\n        let checkLine = (line) => {\n            if (line.length < doubleMargin || line.type != BlockType.Text)\n                return;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                return;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.pixelViewport.right - this.pixelViewport.left) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (this.pixelViewport.left - marginWidth) / totalWidth;\n                    right = (this.pixelViewport.right + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        };\n        for (let line of this.viewportLines) {\n            if (Array.isArray(line.type))\n                line.type.forEach(checkLine);\n            else\n                checkLine(line);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges() {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = ranges.length != this.visibleRanges.length ||\n            this.visibleRanges.some((r, i) => r.from != ranges[i].from || r.to != ranges[i].to);\n        this.visibleRanges = ranges;\n        return changed ? 4 /* UpdateFlag.Viewport */ : 0;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to &&\n            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&\n            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||\n            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    scrollAnchorAt(scrollTop) {\n        let block = this.lineBlockAtHeight(scrollTop + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1,\n    eq(other) { return other == this; }\n};\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    eq(other) {\n        if (!(other instanceof BigScaler))\n            return false;\n        return this.scale == other.scale && this.viewports.length == other.viewports.length &&\n            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = /*@__PURE__*/Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = /*@__PURE__*/Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = /*@__PURE__*/StyleModule.newName(), baseLightID = /*@__PURE__*/StyleModule.newName(), baseDarkID = /*@__PURE__*/StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = /*@__PURE__*/buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\", // https://github.com/codemirror/dev/issues/456\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\", // For IE\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\", // For Safari, which doesn't support overflow-wrap: anywhere\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#444\"\n    },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \".cm-iso\": {\n        unicodeBidi: \"isolate\"\n    },\n    \".cm-announced\": {\n        position: \"fixed\",\n        top: \"-10000px\"\n    },\n    \"@media print\": {\n        \".cm-announced\": { display: \"none\" }\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        insetInlineStart: 0,\n        zIndex: 200\n    },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        borderRight: \"1px solid #ddd\"\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\", // Necessary -- prevents margin collapsing\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n    },\n    \".cm-highlightSpace:before\": {\n        content: \"attr(data-display)\",\n        position: \"absolute\",\n        pointerEvents: \"none\",\n        color: \"#888\"\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, state) {\n        this.points = points;\n        this.text = \"\";\n        this.lineSeparator = state.facet(EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let next = cur.nextSibling;\n            if (next == end)\n                break;\n            let view = ContentView.get(cur), nextView = ContentView.get(next);\n            if (view && nextView ? view.breakAfter :\n                (view ? view.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || cur.cmIgnore) && this.text.length > oldLen))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        if (node.cmIgnore)\n            return;\n        let view = ContentView.get(node);\n        let fromView = view && view.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        this.domChanged = start > -1;\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view.state);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? view.state.selection.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? view.state.selection.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            // iOS will refuse to select the block gaps when doing\n            // select-all.\n            // Chrome will put the selection *inside* them, confusing\n            // posFromDOM\n            let vp = view.viewport;\n            if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&\n                (vp.from > 0 || vp.to < view.state.doc.length)) {\n                let from = Math.min(head, anchor), to = Math.max(head, anchor);\n                let offFrom = vp.from - from, offTo = vp.to - to;\n                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n                    head = 0;\n                    anchor = view.state.doc.length;\n                }\n            }\n            this.newSel = EditorSelection.single(anchor, head);\n        }\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, sel = view.state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);\n        if (diff) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {\n        // Heuristic to notice typing over a selected character\n        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };\n    }\n    else if (change && change.from >= sel.from && change.to <= sel.to &&\n        (change.from != sel.from || change.to != sel.to) &&\n        (sel.to - sel.from) - (change.to - change.from) <= 4) {\n        // If the change is inside the selection and covers most of it,\n        // assume it is a selection replace (with identical characters at\n        // the start/end not included in the diff)\n        change = {\n            from: sel.from, to: sel.to,\n            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))\n        };\n    }\n    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    if (change) {\n        return applyDOMChangeInner(view, change, newSel, lastKey);\n    }\n    else if (newSel && !newSel.main.eq(sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n    if (browser.ios && view.inputState.flushIOSKey(change))\n        return true;\n    let sel = view.state.selection.main;\n    // Android browsers don't fire reasonable key events for enter,\n    // backspace, or delete. So this detects changes that look like\n    // they're caused by those keys, and reinterprets them as key\n    // events. (Some of these keys are also handled by beforeinput\n    // events and the pendingAndroidKey mechanism, but that's not\n    // reliable in all situations.)\n    if (browser.android &&\n        ((change.to == sel.to &&\n            // GBoard will sometimes remove a space it just inserted\n            // after a completion when you press enter\n            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") &&\n            change.insert.length == 1 && change.insert.lines == 2 &&\n            dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                dispatchKey(view.contentDOM, \"Delete\", 46))))\n        return true;\n    let text = change.insert.toString();\n    if (view.inputState.composing >= 0)\n        view.inputState.composing++;\n    let defaultTr;\n    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n    if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n        view.dispatch(defaultInsert());\n    return true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main;\n    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&\n            change.to <= sel.to && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to, size = sel.to - sel.from;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    range.to >= compositionRange.from && range.from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        this.editContext = null;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        this.printQuery = null;\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (window.EditContext && view.constructor.EDIT_CONTEXT !== false) {\n            this.editContext = new EditContextManager(view);\n            view.contentDOM.editContext = this.editContext.editContext;\n        }\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (window.matchMedia)\n            this.printQuery = window.matchMedia(\"print\");\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        if (this.editContext)\n            this.view.requestMeasure(this.editContext.measureReq);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint(event) {\n        if (event.type == \"change\" && !event.matches)\n            return;\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(view.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);\n        if (context && context.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // https://github.com/codemirror/dev/issues/414\n        let selection = getSelection(view.root);\n        if (!selection)\n            return false;\n        let range = browser.safari && view.root.nodeType == 11 &&\n            deepActiveElement(this.dom.ownerDocument) == this.dom &&\n            safariSelectionRangeHack(this.view, selection) || selection;\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set—the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated but DOM/selection changes were seen. Reset the view.\n        if (this.view.state == startState &&\n            (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let cView = this.view.docView.nearest(rec.target);\n        if (!cView || cView.ignoreMutation(rec))\n            return null;\n        cView.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"attributes\")\n            cView.flags |= 4 /* ViewFlag.AttrsDirty */;\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? cView.posAfter(childBefore) : cView.posAtStart,\n                to: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: cView.posAtStart, to: cView.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        if (this.printQuery)\n            this.printQuery.addEventListener(\"change\", this.onPrint);\n        else\n            win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        if (this.printQuery)\n            this.printQuery.removeEventListener(\"change\", this.onPrint);\n        else\n            win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    update(update) {\n        if (this.editContext)\n            this.editContext.update(update);\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n    }\n}\nfunction findChild(cView, dom, dir) {\n    while (dom) {\n        let curView = ContentView.get(dom);\n        if (curView && curView.parent == cView)\n            return curView;\n        let parent = dom.parentNode;\n        dom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return buildSelectionRangeFromRange(view, range);\n    }\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it—using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    return found ? buildSelectionRangeFromRange(view, found) : null;\n}\nclass EditContextManager {\n    constructor(view) {\n        // The document window for which the text in the context is\n        // maintained. For large documents, this may be smaller than the\n        // editor document. This window always includes the selection head.\n        this.from = 0;\n        this.to = 0;\n        // When applying a transaction, this is used to compare the change\n        // made to the context content to the change in the transaction in\n        // order to make the minimal changes to the context (since touching\n        // that sometimes breaks series of multiple edits made for a single\n        // user action on some Android keyboards)\n        this.pendingContextChange = null;\n        this.resetRange(view.state);\n        let context = this.editContext = new window.EditContext({\n            text: view.state.doc.sliceString(this.from, this.to),\n            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n            selectionEnd: this.toContextPos(view.state.selection.main.head)\n        });\n        context.addEventListener(\"textupdate\", e => {\n            let { anchor } = view.state.selection.main;\n            let change = { from: this.toEditorPos(e.updateRangeStart),\n                to: this.toEditorPos(e.updateRangeEnd),\n                insert: Text.of(e.text.split(\"\\n\")) };\n            // If the window doesn't include the anchor, assume changes\n            // adjacent to a side go up to the anchor.\n            if (change.from == this.from && anchor < this.from)\n                change.from = anchor;\n            else if (change.to == this.to && anchor > this.to)\n                change.to = anchor;\n            // Edit context sometimes fire empty changes\n            if (change.from == change.to && !change.insert.length)\n                return;\n            this.pendingContextChange = change;\n            applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd)));\n            // If the transaction didn't flush our change, revert it so\n            // that the context is in sync with the editor state again.\n            if (this.pendingContextChange)\n                this.revertPending(view.state);\n        });\n        context.addEventListener(\"characterboundsupdate\", e => {\n            let rects = [], prev = null;\n            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n                let rect = view.coordsForChar(i);\n                prev = (rect && new DOMRect(rect.left, rect.right, rect.right - rect.left, rect.bottom - rect.top))\n                    || prev || new DOMRect;\n                rects.push(prev);\n            }\n            context.updateCharacterBounds(e.rangeStart, rects);\n        });\n        context.addEventListener(\"textformatupdate\", e => {\n            let deco = [];\n            for (let format of e.getTextFormats()) {\n                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n                if (lineStyle != \"None\" && thickness != \"None\") {\n                    let style = `text-decoration: underline ${lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${thickness == \"Thin\" ? 1 : 2}px`;\n                    deco.push(Decoration.mark({ attributes: { style } })\n                        .range(this.toEditorPos(format.rangeStart), this.toEditorPos(format.rangeEnd)));\n                }\n            }\n            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n        });\n        context.addEventListener(\"compositionstart\", () => {\n            if (view.inputState.composing < 0) {\n                view.inputState.composing = 0;\n                view.inputState.compositionFirstChange = true;\n            }\n        });\n        context.addEventListener(\"compositionend\", () => {\n            view.inputState.composing = -1;\n            view.inputState.compositionFirstChange = null;\n        });\n        this.measureReq = { read: view => {\n                this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());\n                let sel = getSelection(view.root);\n                if (sel && sel.rangeCount)\n                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n            } };\n    }\n    applyEdits(update) {\n        let off = 0, abort = false, pending = this.pendingContextChange;\n        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n            if (abort)\n                return;\n            let dLen = insert.length - (toA - fromA);\n            if (pending && toA >= pending.to) {\n                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n                    pending = this.pendingContextChange = null; // Match\n                    off += dLen;\n                    return;\n                }\n                else { // Mismatch, revert\n                    pending = null;\n                    this.revertPending(update.state);\n                }\n            }\n            fromA += off;\n            toA += off;\n            if (toA <= this.from) { // Before the window\n                this.from += dLen;\n                this.to += dLen;\n            }\n            else if (fromA < this.to) { // Overlaps with window\n                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {\n                    abort = true;\n                    return;\n                }\n                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n                this.to += dLen;\n            }\n            off += dLen;\n        });\n        if (pending && !abort)\n            this.revertPending(update.state);\n        return !abort;\n    }\n    update(update) {\n        if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n            this.pendingContextChange = null;\n            this.resetRange(update.state);\n            this.editContext.updateText(0, this.editContext.text.length, update.state.doc.sliceString(this.from, this.to));\n            this.setSelection(update.state);\n        }\n        else if (update.docChanged || update.selectionSet) {\n            this.setSelection(update.state);\n        }\n        if (update.geometryChanged || update.docChanged || update.selectionSet)\n            update.view.requestMeasure(this.measureReq);\n    }\n    resetRange(state) {\n        let { head } = state.selection.main;\n        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);\n        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);\n    }\n    revertPending(state) {\n        let pending = this.pendingContextChange;\n        this.pendingContextChange = null;\n        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.to + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n    }\n    setSelection(state) {\n        let { main } = state.selection;\n        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n        let end = this.toContextPos(main.head);\n        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)\n            this.editContext.updateSelection(start, end);\n    }\n    rangeIsValid(state) {\n        let { head } = state.selection.main;\n        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||\n            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||\n            this.to - this.from > 10000 /* CxVp.Margin */ * 3);\n    }\n    toEditorPos(contextPos) { return contextPos + this.from; }\n    toContextPos(editorPos) { return editorPos - this.from; }\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle\n//                                         ↑      ↓\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.className = \"cm-announced\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(config.state || EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases))\n            return this.setState(state);\n        update = ViewUpdate.create(this, state, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    scrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1));\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (redrawn)\n            this.docViewUpdate();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView.destroy();\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    docViewUpdate() {\n        for (let plugin of this.plugins) {\n            let val = plugin.value;\n            if (val && val.docViewUpdate) {\n                try {\n                    val.docViewUpdate(this);\n                }\n                catch (e) {\n                    logException(this.state, e, \"doc view update listener\");\n                }\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let sDOM = this.scrollDOM, scrollTop = sDOM.scrollTop * this.scaleY;\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollTop - this.viewState.scrollTop) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(sDOM)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollTop);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure(this);\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                    if (redrawn)\n                        this.docViewUpdate();\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            scrollAnchorHeight = -1;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = newAnchorHeight - scrollAnchorHeight;\n                            if (diff > 1 || diff < -1) {\n                                scrollTop = scrollTop + diff;\n                                sDOM.scrollTop = scrollTop / this.scaleY;\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.spec != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.spec == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line breaks, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Get the cursor position visually at the start or end of a line.\n    Note that this may differ from the _logical_ position at its\n    start or end (which is simply at `line.from`/`line.to`) if text\n    at the start or end goes against the line's base text direction.\n    */\n    visualLineSide(line, end) {\n        let order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n        let span = order[end ? order.length - 1 : 0];\n        return EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos) {\n        return this.docView.domAtPos(pos);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let rect = this.docView.coordsAt(pos, side);\n        if (!rect || rect.left == rect.right)\n            return rect;\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return flattenRect(rect, (span.dir == Direction.LTR) == (side > 0));\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)—if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        if (this.root.activeElement == this.contentDOM)\n            this.contentDOM.blur();\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.docView.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, options.y, options.x, options.yMargin, options.xMargin));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Enable or disable tab-focus mode, which disables key bindings\n    for Tab and Shift-Tab, letting the browser's default\n    focus-changing behavior go through instead. This is useful to\n    prevent trapping keyboard users in your editor.\n    \n    Without argument, this toggles the mode. With a boolean, it\n    enables (true) or disables it (false). Given a number, it\n    temporarily enables the mode until that number of milliseconds\n    have passed or another non-Tab key is pressed.\n    */\n    setTabFocusMode(to) {\n        if (to == null)\n            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n        else if (typeof to == \"boolean\")\n            this.inputState.tabFocusMode = to ? 0 : -1;\n        else if (this.inputState.tabFocusMode != 0)\n            this.inputState.tabFocusMode = Date.now() + to;\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)—to which the scope class will be\n    added—need to be explicitly differentiated by adding an `&` to\n    the selector for that element—for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let cView = content && ContentView.get(content) || ContentView.get(dom);\n        return ((_a = cView === null || cView === void 0 ? void 0 : cView.rootView) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://github.com/marijnh/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways—directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping \\`outerDecorations\\` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /*@__PURE__*/EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /*@__PURE__*/StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = /*@__PURE__*/Prec.default(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /*@__PURE__*/Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /*@__PURE__*/new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                let { any } = b;\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(view => any(view, currentKeyEvent));\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n    currentKeyEvent = event;\n    let name = keyName(event);\n    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            (baseName = base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    currentKeyEvent = null;\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, side, inside) {\n    let coords = view.coordsAtPos(pos, side * 2);\n    if (!coords)\n        return inside;\n    let editorRect = view.dom.getBoundingClientRect();\n    let y = (coords.top + coords.bottom) / 2;\n    let left = view.posAtCoords({ x: editorRect.left + 1, y });\n    let right = view.posAtCoords({ x: editorRect.right - 1, y });\n    if (left == null || right == null)\n        return inside;\n    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);\n    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, 1, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, -1, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top - 0.01 /* C.Epsilon */, right - left, bottom - top + 0.01 /* C.Epsilon */);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    docViewUpdate(view) {\n        if (this.layer.updateOnDocViewUpdate !== false)\n            view.requestMeasure(this.measureReq);\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = /*@__PURE__*/Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst CanHidePrimary = !browser.ios; // FIXME test IE\nconst selectionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /*@__PURE__*/layer({\n    above: true,\n    markers(view) {\n        let { state } = view, conf = state.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state.selection.ranges) {\n            let prim = r == state.selection.main;\n            if (r.empty ? !prim || CanHidePrimary : conf.drawRangeCursor) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : EditorSelection.cursor(r.head, r.head > r.anchor ? -1 : 1);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /*@__PURE__*/layer({\n    above: false,\n    markers(view) {\n        return view.state.selection.ranges.map(r => r.empty ? [] : RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n            .reduce((a, b) => a.concat(b));\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\nconst themeSpec = {\n    \".cm-line\": {\n        \"& ::selection, &::selection\": { backgroundColor: \"transparent !important\" },\n    },\n    \".cm-content\": {\n        \"& :focus\": {\n            caretColor: \"initial !important\",\n            \"&::selection, & ::selection\": {\n                backgroundColor: \"Highlight !important\"\n            }\n        }\n    }\n};\nif (CanHidePrimary)\n    themeSpec[\".cm-line\"].caretColor = themeSpec[\".cm-content\"].caretColor = \"transparent !important\";\nconst hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));\n\nconst setDropCursorPos = /*@__PURE__*/StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to > update.view.viewport.from && from < update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportChanged || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to > from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /*@__PURE__*/new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let config = combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = /*@__PURE__*/Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM() {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) : this.content);\n        if (typeof this.content == \"string\")\n            wrap.setAttribute(\"aria-label\", \"placeholder \" + this.content);\n        else\n            wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder—a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    return ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            let start = findColumn(line.text, startCol, state.tabSize, true);\n            if (start < 0) {\n                ranges.push(EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = findColumn(line.text, endCol, state.tabSize);\n                ranges.push(EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView, removeTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.removeTooltipView = removeTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        let prev = null;\n        this.tooltipViews = this.tooltips.map(t => prev = createTooltipView(t, prev));\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                this.removeTooltipView(t);\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let { win } = view;\n    return { top: 0, left: 0, bottom: win.innerHeight, right: win.innerWidth };\n}\nconst tooltipConfig = /*@__PURE__*/Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = /*@__PURE__*/new WeakMap();\nconst tooltipPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n        this.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), t => {\n            if (this.resizeObserver)\n                this.resizeObserver.unobserve(t.dom);\n            t.dom.remove();\n        });\n        this.above = this.manager.tooltips.map(t => !!t.above);\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip, prev) {\n        let tooltipView = tooltip.create(this.view);\n        let before = prev ? prev.dom : null;\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.insertBefore(tooltipView.dom, before);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        if (this.resizeObserver)\n            this.resizeObserver.observe(tooltipView.dom);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let editor = this.view.dom.getBoundingClientRect();\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.gecko) {\n                // Firefox sets the element's `offsetParent` to the\n                // transformed element when a transform interferes with fixed\n                // positioning.\n                makeAbsolute = dom.offsetParent != this.container.ownerDocument.body;\n            }\n            else if (dom.style.top == Outside && dom.style.left == \"0px\") {\n                // On other browsers, we have to awkwardly try and use other\n                // information to detect a transform.\n                let rect = dom.getBoundingClientRect();\n                makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        return {\n            editor,\n            parent: this.parent ? this.container.getBoundingClientRect() : editor,\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { editor, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || pos.bottom <= Math.max(editor.top, space.top) ||\n                pos.top >= Math.min(editor.bottom, space.bottom) ||\n                pos.right < Math.max(editor.left, space.left) - .1 ||\n                pos.left > Math.min(editor.right, space.right) + .1) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n            let left = size.width > space.right - space.left ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width)\n                    : Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - (size.bottom - size.top) - offset.y < space.top\n                : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                dom.style.left = (left - measured.parent.left) / scaleX + \"px\";\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                dom.style.left = left / scaleX + \"px\";\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 100,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /*@__PURE__*/Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = /*@__PURE__*/Facet.define({\n    combine: inputs => inputs.reduce((a, i) => a.concat(i), [])\n});\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), t => t.dom.remove());\n    }\n    createHostedView(tooltip, prev) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = /*@__PURE__*/showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.map(t => { var _a; return (_a = t.end) !== null && _a !== void 0 ? _a : t.pos; })),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nclass HoverPlugin {\n    constructor(view, source, field, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update() {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active.length)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let desc = view.docView.nearest(lastMove.target);\n        if (!desc)\n            return;\n        let pos, side = 1;\n        if (desc instanceof WidgetView) {\n            pos = desc.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        let open = this.source(view, pos, side);\n        if (open === null || open === void 0 ? void 0 : open.then) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    if (result && !(Array.isArray(result) && !result.length))\n                        view.dispatch({ effects: this.setHover.of(Array.isArray(result) ? result : [result]) });\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else if (open && !(Array.isArray(open) && !open.length)) {\n            view.dispatch({ effects: this.setHover.of(Array.isArray(open) ? open : [open]) });\n        }\n    }\n    get tooltip() {\n        let plugin = this.view.plugin(tooltipPlugin);\n        let index = plugin ? plugin.manager.tooltips.findIndex(t => t.create == HoverTooltipHost.create) : -1;\n        return index > -1 ? plugin.manager.tooltipViews[index] : null;\n    }\n    mousemove(event) {\n        var _a, _b;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let { active, tooltip } = this;\n        if (active.length && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n            let { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of([]) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(event) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        let { active } = this;\n        if (active.length) {\n            let { tooltip } = this;\n            let inTooltip = tooltip && tooltip.dom.contains(event.relatedTarget);\n            if (!inTooltip)\n                this.view.dispatch({ effects: this.setHover.of([]) });\n            else\n                this.watchTooltipLeave(tooltip.dom);\n        }\n    }\n    watchTooltipLeave(tooltip) {\n        let watch = (event) => {\n            tooltip.removeEventListener(\"mouseleave\", watch);\n            if (this.active.length && !this.view.dom.contains(event.relatedTarget))\n                this.view.dispatch({ effects: this.setHover.of([]) });\n        };\n        tooltip.addEventListener(\"mouseleave\", watch);\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n    let rect = tooltip.getBoundingClientRect();\n    return event.clientX >= rect.left - tooltipMargin && event.clientX <= rect.right + tooltipMargin &&\n        event.clientY >= rect.top - tooltipMargin && event.clientY <= rect.bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is—it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = StateEffect.define();\n    let hoverState = StateField.define({\n        create() { return []; },\n        update(value, tr) {\n            if (value.length) {\n                if (options.hideOnChange && (tr.docChanged || tr.selection))\n                    value = [];\n                else if (options.hideOn)\n                    value = value.filter(v => !options.hideOn(tr, v));\n                if (tr.docChanged) {\n                    let mapped = [];\n                    for (let tooltip of value) {\n                        let newPos = tr.changes.mapPos(tooltip.pos, -1, MapMode.TrackDel);\n                        if (newPos != null) {\n                            let copy = Object.assign(Object.create(null), tooltip);\n                            copy.pos = newPos;\n                            if (copy.end != null)\n                                copy.end = tr.changes.mapPos(copy.end);\n                            mapped.push(copy);\n                        }\n                    }\n                    value = mapped;\n                }\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover))\n                    value = effect.value;\n                if (effect.is(closeHoverTooltipEffect))\n                    value = [];\n            }\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    return [\n        hoverState,\n        ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),\n        showHoverTooltipHost\n    ];\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = /*@__PURE__*/StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = /*@__PURE__*/closeHoverTooltipEffect.of(null);\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            this.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /*@__PURE__*/Facet.define({\n    enables: panelPlugin\n});\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {}\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults), config))];\n}\nconst unfixGutters = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        for (let gutter of this.gutters)\n            this.dom.appendChild(gutter.dom);\n        this.fixed = !view.state.facet(unfixGutters);\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged) {\n            this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        }\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach)\n            this.dom.remove();\n        let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach)\n            this.view.scrollDOM.insertBefore(this.dom, after);\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters)\n                this.dom.appendChild(g.dom);\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        return view.textDirection == Direction.LTR\n            ? { left: value.dom.offsetWidth * view.scaleX }\n            : { right: value.dom.offsetWidth * view.scaleX };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block);\n        if (marker)\n            this.addElement(view, block, [marker]);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n    combine(values) {\n        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: () => null,\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n    let marks = [], last = -1;\n    for (let range of state.selection.ranges) {\n        let linePos = state.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nconst WhitespaceDeco = /*@__PURE__*/new Map();\nfunction getWhitespaceDeco(space) {\n    let deco = WhitespaceDeco.get(space);\n    if (!deco)\n        WhitespaceDeco.set(space, deco = Decoration.mark({\n            attributes: space === \"\\t\" ? {\n                class: \"cm-highlightTab\",\n            } : {\n                class: \"cm-highlightSpace\",\n                \"data-display\": space.replace(/ /g, \"·\")\n            }\n        }));\n    return deco;\n}\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst whitespaceHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\t| +/g,\n    decoration: match => getWhitespaceDeco(match[0]),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: /*@__PURE__*/Decoration.mark({ class: \"cm-trailingSpace\" }),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder, moveVisually };\n\nexport { BidiSpan, BlockInfo, BlockType, Decoration, Direction, EditorView, GutterMarker, MatchDecorator, RectangleMarker, ViewPlugin, ViewUpdate, WidgetType, __test, closeHoverTooltips, crosshairCursor, drawSelection, dropCursor, getDrawSelectionConfig, getPanel, getTooltip, gutter, gutterLineClass, gutters, hasHoverTooltips, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, hoverTooltip, keymap, layer, lineNumberMarkers, lineNumbers, logException, panels, placeholder, rectangularSelection, repositionTooltips, runScopeHandlers, scrollPastEnd, showPanel, showTooltip, tooltips };\n","import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = TreeFragment.applyChanges(fragments, ranges);\n            tree = Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new Tree(NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting either entirely of the same whitespace\ncharacter. When not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = stack.node.enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur != stack.node; cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped)\n            return next.from < lineEnd ? openToken : null;\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n    create() {\n        return Decoration.none;\n    },\n    update(folded, tr) {\n        folded = folded.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                let { preparePlaceholder } = tr.state.facet(foldConfig);\n                let widget = !preparePlaceholder ? foldWidget :\n                    Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n                folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection) {\n            let onSelection = false, { head } = tr.selection.main;\n            folded.between(head, head, (a, b) => { if (a < head && b > head)\n                onSelection = true; });\n            if (onSelection)\n                folded = folded.update({\n                    filterFrom: head,\n                    filterTo: head,\n                    filter: (a, b) => b <= head || a >= head\n                });\n        }\n        return folded;\n    },\n    provide: f => EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return Decoration.set(ranges, true);\n    }\n});\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n    return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state, other) {\n    return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n    let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n    return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"…\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n    combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"⌄\",\n    closedText: \"›\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = Object.assign(Object.assign({}, foldGutterDefaults), config);\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: Object.assign(Object.assign({}, domEventHandlers), { click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                } })\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with higlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n            return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        for (let { from, to } of view.visibleRanges) {\n            highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.meta,\n        color: \"#404740\" },\n    { tag: tags.link,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.keyword,\n        color: \"#708\" },\n    { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n        color: \"#219\" },\n    { tag: [tags.literal, tags.inserted],\n        color: \"#164\" },\n    { tag: [tags.string, tags.deleted],\n        color: \"#a11\" },\n    { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n        color: \"#e40\" },\n    { tag: /*@__PURE__*/tags.definition(tags.variableName),\n        color: \"#00f\" },\n    { tag: /*@__PURE__*/tags.local(tags.variableName),\n        color: \"#30a\" },\n    { tag: [tags.typeName, tags.namespace],\n        color: \"#085\" },\n    { tag: tags.className,\n        color: \"#167\" },\n    { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n        color: \"#256\" },\n    { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n        color: \"#00c\" },\n    { tag: tags.comment,\n        color: \"#940\" },\n    { tag: tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nconst bracketMatchingState = /*@__PURE__*/StateField.define({\n    create() { return Decoration.none; },\n    update(deco, tr) {\n        if (!tr.docChanged && !tr.selection)\n            return deco;\n        let decorations = [];\n        let config = tr.state.facet(bracketMatchingConfig);\n        for (let range of tr.state.selection.ranges) {\n            if (!range.empty)\n                continue;\n            let match = matchBrackets(tr.state, range.head, -1, config)\n                || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n                || (config.afterCursor &&\n                    (matchBrackets(tr.state, range.head, 1, config) ||\n                        (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n            if (match)\n                decorations = decorations.concat(config.renderMatch(match, tr.state));\n        }\n        return Decoration.set(decorations, true);\n    },\n    provide: f => EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n    bracketMatchingState,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [indentService.of((cx, pos) => this.getIndent(cx, pos))], parser.name);\n        this.topNode = docID(data);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    getIndent(cx, pos) {\n        let tree = syntaxTree(cx.state), at = tree.resolve(pos);\n        while (at && at.type != this.topNode)\n            at = at.parent;\n        if (!at)\n            return null;\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, tree, 0, at.from, from !== null && from !== void 0 ? from : pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = 0;\n        }\n        if (pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, size, offset) {\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, 4, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 2048 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags$1 = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags$1.push(tag);\n    }\n    if (!tags$1.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n    let known = byTag[key];\n    if (known)\n        return known.id;\n    let type = byTag[key] = NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [styleTags({ [name]: tags$1 })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data) {\n    let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [languageDataProp.add(() => data)], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nfunction buildForLine(line) {\n    return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n    for (let i = text.iter(); !i.next().done;)\n        if (buildForLine(i.value))\n            return true;\n    return false;\n}\nfunction changeAddsRTL(change) {\n    let added = false;\n    change.iterChanges((fA, tA, fB, tB, ins) => {\n        if (!added && textHasRTL(ins))\n            added = true;\n    });\n    return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n    let extensions = [isolateMarks];\n    if (options.alwaysIsolate)\n        extensions.push(alwaysIsolate.of(true));\n    return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.always = view.state.facet(alwaysIsolate) ||\n            view.textDirection != Direction.LTR ||\n            view.state.facet(EditorView.perLineTextDirection);\n        this.hasRTL = !this.always && textHasRTL(view.state.doc);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n    }\n    update(update) {\n        let always = update.state.facet(alwaysIsolate) ||\n            update.view.textDirection != Direction.LTR ||\n            update.state.facet(EditorView.perLineTextDirection);\n        if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n            this.hasRTL = true;\n        if (!always && !this.hasRTL)\n            return;\n        let tree = syntaxTree(update.state);\n        if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n            this.tree = tree;\n            this.always = always;\n            this.decorations = buildDeco(update.view, tree, always);\n        }\n    }\n}, {\n    provide: plugin => {\n        function access(view) {\n            var _a, _b;\n            return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n        }\n        return [EditorView.outerDecorations.of(access),\n            Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n    }\n});\nfunction buildDeco(view, tree, always) {\n    let deco = new RangeSetBuilder();\n    let ranges = view.visibleRanges;\n    if (!always)\n        ranges = clipRTLLines(ranges, view.state.doc);\n    for (let { from, to } of ranges) {\n        tree.iterate({\n            enter: node => {\n                let iso = node.type.prop(NodeProp.isolate);\n                if (iso)\n                    deco.add(node.from, node.to, marks[iso]);\n            },\n            from, to\n        });\n    }\n    return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n    let cur = doc.iter(), pos = 0, result = [], last = null;\n    for (let { from, to } of ranges) {\n        if (last && last.to > from) {\n            from = last.to;\n            if (from >= to)\n                continue;\n        }\n        if (pos + cur.value.length < from) {\n            cur.next(from - (pos + cur.value.length));\n            pos = from;\n        }\n        for (;;) {\n            let start = pos, end = pos + cur.value.length;\n            if (!cur.lineBreak && buildForLine(cur.value)) {\n                if (last && last.to > start - 10)\n                    last.to = Math.min(to, end);\n                else\n                    result.push(last = { from: start, to: Math.min(to, end) });\n            }\n            if (end >= to)\n                break;\n            pos = end;\n            cur.next();\n        }\n    }\n    return result;\n}\nconst marks = {\n    rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n    ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n    auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n","import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n    /**\n    Create a new completion context. (Mostly useful for testing\n    completion sources—in the editor, the extension will create\n    these for you.)\n    */\n    constructor(\n    /**\n    The editor state that the completion happens in.\n    */\n    state, \n    /**\n    The position at which the completion is happening.\n    */\n    pos, \n    /**\n    Indicates whether completion was activated explicitly, or\n    implicitly by typing. The usual way to respond to this is to\n    only return completions when either there is part of a\n    completable entity before the cursor, or `explicit` is true.\n    */\n    explicit) {\n        this.state = state;\n        this.pos = pos;\n        this.explicit = explicit;\n        /**\n        @internal\n        */\n        this.abortListeners = [];\n    }\n    /**\n    Get the extent, content, and (if there is a token) type of the\n    token before `this.pos`.\n    */\n    tokenBefore(types) {\n        let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n        while (token && types.indexOf(token.name) < 0)\n            token = token.parent;\n        return token ? { from: token.from, to: this.pos,\n            text: this.state.sliceDoc(token.from, this.pos),\n            type: token.type } : null;\n    }\n    /**\n    Get the match of the given expression directly before the\n    cursor.\n    */\n    matchBefore(expr) {\n        let line = this.state.doc.lineAt(this.pos);\n        let start = Math.max(line.from, this.pos - 250);\n        let str = line.text.slice(start - line.from, this.pos - line.from);\n        let found = str.search(ensureAnchor(expr, false));\n        return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n    }\n    /**\n    Yields true when the query has been aborted. Can be useful in\n    asynchronous queries to avoid doing work that will be ignored.\n    */\n    get aborted() { return this.abortListeners == null; }\n    /**\n    Allows you to register abort handlers, which will be called when\n    the query is\n    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n    */\n    addEventListener(type, listener) {\n        if (type == \"abort\" && this.abortListeners)\n            this.abortListeners.push(listener);\n    }\n}\nfunction toSet(chars) {\n    let flat = Object.keys(chars).join(\"\");\n    let words = /\\w/.test(flat);\n    if (words)\n        flat = flat.replace(/\\w/g, \"\");\n    return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n    let first = Object.create(null), rest = Object.create(null);\n    for (let { label } of options) {\n        first[label[0]] = true;\n        for (let i = 1; i < label.length; i++)\n            rest[label[i]] = true;\n    }\n    let source = toSet(first) + toSet(rest) + \"*$\";\n    return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n    let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n    let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n    return (context) => {\n        let token = context.matchBefore(match);\n        return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n    };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return source(context);\n            if (pos.type.isTop)\n                break;\n        }\n        return null;\n    };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return null;\n            if (pos.type.isTop)\n                break;\n        }\n        return source(context);\n    };\n}\nclass Option {\n    constructor(completion, source, match, score) {\n        this.completion = completion;\n        this.source = source;\n        this.match = match;\n        this.score = score;\n    }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n    var _a;\n    let { source } = expr;\n    let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n    if (!addStart && !addEnd)\n        return expr;\n    return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n    return Object.assign(Object.assign({}, state.changeByRange(range => {\n        if (range != main && from != to &&\n            state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n            return { range };\n        return {\n            changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },\n            range: EditorSelection.cursor(range.from + fromOff + text.length)\n        };\n    })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n    if (!Array.isArray(source))\n        return source;\n    let known = SourceCache.get(source);\n    if (!known)\n        SourceCache.set(source, known = completeFromList(source));\n    return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.chars = [];\n        this.folded = [];\n        // Buffers reused by calls to `match` to track matched character\n        // positions.\n        this.any = [];\n        this.precise = [];\n        this.byWord = [];\n        this.score = 0;\n        this.matched = [];\n        for (let p = 0; p < pattern.length;) {\n            let char = codePointAt(pattern, p), size = codePointSize(char);\n            this.chars.push(char);\n            let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n            this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n            p += size;\n        }\n        this.astral = pattern.length != this.chars.length;\n    }\n    ret(score, matched) {\n        this.score = score;\n        this.matched = matched;\n        return this;\n    }\n    // Matches a given word (completion) against the pattern (input).\n    // Will return a boolean indicating whether there was a match and,\n    // on success, set `this.score` to the score, `this.matched` to an\n    // array of `from, to` pairs indicating the matched parts of `word`.\n    //\n    // The score is a number that is more negative the worse the match\n    // is. See `Penalty` above.\n    match(word) {\n        if (this.pattern.length == 0)\n            return this.ret(-100 /* Penalty.NotFull */, []);\n        if (word.length < this.pattern.length)\n            return null;\n        let { chars, folded, any, precise, byWord } = this;\n        // For single-character queries, only match when they occur right\n        // at the start\n        if (chars.length == 1) {\n            let first = codePointAt(word, 0), firstSize = codePointSize(first);\n            let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n            if (first == chars[0]) ;\n            else if (first == folded[0])\n                score += -200 /* Penalty.CaseFold */;\n            else\n                return null;\n            return this.ret(score, [0, firstSize]);\n        }\n        let direct = word.indexOf(this.pattern);\n        if (direct == 0)\n            return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n        let len = chars.length, anyTo = 0;\n        if (direct < 0) {\n            for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n                let next = codePointAt(word, i);\n                if (next == chars[anyTo] || next == folded[anyTo])\n                    any[anyTo++] = i;\n                i += codePointSize(next);\n            }\n            // No match, exit immediately\n            if (anyTo < len)\n                return null;\n        }\n        // This tracks the extent of the precise (non-folded, not\n        // necessarily adjacent) match\n        let preciseTo = 0;\n        // Tracks whether there is a match that hits only characters that\n        // appear to be starting words. `byWordFolded` is set to true when\n        // a case folded character is encountered in such a match\n        let byWordTo = 0, byWordFolded = false;\n        // If we've found a partial adjacent match, these track its state\n        let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n        let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n        // Go over the option's text, scanning for the various kinds of matches\n        for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n            let next = codePointAt(word, i);\n            if (direct < 0) {\n                if (preciseTo < len && next == chars[preciseTo])\n                    precise[preciseTo++] = i;\n                if (adjacentTo < len) {\n                    if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n                        if (adjacentTo == 0)\n                            adjacentStart = i;\n                        adjacentEnd = i + 1;\n                        adjacentTo++;\n                    }\n                    else {\n                        adjacentTo = 0;\n                    }\n                }\n            }\n            let ch, type = next < 0xff\n                ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n                : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n            if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n                if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n                    byWord[byWordTo++] = i;\n                else if (byWord.length)\n                    wordAdjacent = false;\n            }\n            prevType = type;\n            i += codePointSize(next);\n        }\n        if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n        if (adjacentTo == len && adjacentStart == 0)\n            return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n        if (direct > -1)\n            return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n        if (adjacentTo == len)\n            return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n        if (byWordTo == len)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n                (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n        return chars.length == 2 ? null\n            : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n    }\n    result(score, positions, word) {\n        let result = [], i = 0;\n        for (let pos of positions) {\n            let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n            if (i && result[i - 1] == pos)\n                result[i - 1] = to;\n            else {\n                result[i++] = pos;\n                result[i++] = to;\n            }\n        }\n        return this.ret(score - word.length, result);\n    }\n}\nclass StrictMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.matched = [];\n        this.score = 0;\n        this.folded = pattern.toLowerCase();\n    }\n    match(word) {\n        if (word.length < this.pattern.length)\n            return null;\n        let start = word.slice(0, this.pattern.length);\n        let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n        if (match == null)\n            return null;\n        this.matched = [0, start.length];\n        this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n        return this;\n    }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            activateOnTyping: true,\n            activateOnCompletion: () => false,\n            activateOnTypingDelay: 100,\n            selectOnOpen: true,\n            override: null,\n            closeOnBlur: true,\n            maxRenderedOptions: 100,\n            defaultKeymap: true,\n            tooltipClass: () => \"\",\n            optionClass: () => \"\",\n            aboveCursor: false,\n            icons: true,\n            addToOptions: [],\n            positionInfo: defaultPositionInfo,\n            filterStrict: false,\n            compareCompletions: (a, b) => a.label.localeCompare(b.label),\n            interactionDelay: 75,\n            updateSyncTime: 100\n        }, {\n            defaultKeymap: (a, b) => a && b,\n            closeOnBlur: (a, b) => a && b,\n            icons: (a, b) => a && b,\n            tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n            optionClass: (a, b) => c => joinClass(a(c), b(c)),\n            addToOptions: (a, b) => a.concat(b),\n            filterStrict: (a, b) => a || b,\n        });\n    }\n});\nfunction joinClass(a, b) {\n    return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n    let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n    let side = \"top\", offset, maxWidth;\n    let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n    let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n    if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n        left = false;\n    else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n        left = true;\n    if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n        offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n        maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n    }\n    else {\n        narrow = true;\n        maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n        let spaceBelow = space.bottom - list.bottom;\n        if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n            offset = option.bottom - list.top;\n        }\n        else { // Above it\n            side = \"bottom\";\n            offset = list.bottom - option.top;\n        }\n    }\n    let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n    let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n    return {\n        style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n        class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n    };\n}\n\nfunction optionContent(config) {\n    let content = config.addToOptions.slice();\n    if (config.icons)\n        content.push({\n            render(completion) {\n                let icon = document.createElement(\"div\");\n                icon.classList.add(\"cm-completionIcon\");\n                if (completion.type)\n                    icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n                icon.setAttribute(\"aria-hidden\", \"true\");\n                return icon;\n            },\n            position: 20\n        });\n    content.push({\n        render(completion, _s, _v, match) {\n            let labelElt = document.createElement(\"span\");\n            labelElt.className = \"cm-completionLabel\";\n            let label = completion.displayLabel || completion.label, off = 0;\n            for (let j = 0; j < match.length;) {\n                let from = match[j++], to = match[j++];\n                if (from > off)\n                    labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n                let span = labelElt.appendChild(document.createElement(\"span\"));\n                span.appendChild(document.createTextNode(label.slice(from, to)));\n                span.className = \"cm-completionMatchedText\";\n                off = to;\n            }\n            if (off < label.length)\n                labelElt.appendChild(document.createTextNode(label.slice(off)));\n            return labelElt;\n        },\n        position: 50\n    }, {\n        render(completion) {\n            if (!completion.detail)\n                return null;\n            let detailElt = document.createElement(\"span\");\n            detailElt.className = \"cm-completionDetail\";\n            detailElt.textContent = completion.detail;\n            return detailElt;\n        },\n        position: 80\n    });\n    return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n    if (total <= max)\n        return { from: 0, to: total };\n    if (selected < 0)\n        selected = 0;\n    if (selected <= (total >> 1)) {\n        let off = Math.floor(selected / max);\n        return { from: off * max, to: (off + 1) * max };\n    }\n    let off = Math.floor((total - selected) / max);\n    return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n    constructor(view, stateField, applyCompletion) {\n        this.view = view;\n        this.stateField = stateField;\n        this.applyCompletion = applyCompletion;\n        this.info = null;\n        this.infoDestroy = null;\n        this.placeInfoReq = {\n            read: () => this.measureInfo(),\n            write: (pos) => this.placeInfo(pos),\n            key: this\n        };\n        this.space = null;\n        this.currentClass = \"\";\n        let cState = view.state.field(stateField);\n        let { options, selected } = cState.open;\n        let config = view.state.facet(completionConfig);\n        this.optionContent = optionContent(config);\n        this.optionClass = config.optionClass;\n        this.tooltipClass = config.tooltipClass;\n        this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-autocomplete\";\n        this.updateTooltipClass(view.state);\n        this.dom.addEventListener(\"mousedown\", (e) => {\n            let { options } = view.state.field(stateField).open;\n            for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n                if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n                    this.applyCompletion(view, options[+match[1]]);\n                    e.preventDefault();\n                    return;\n                }\n            }\n        });\n        this.dom.addEventListener(\"focusout\", (e) => {\n            let state = view.state.field(this.stateField, false);\n            if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n                e.relatedTarget != view.contentDOM)\n                view.dispatch({ effects: closeCompletionEffect.of(null) });\n        });\n        this.showOptions(options, cState.id);\n    }\n    mount() { this.updateSel(); }\n    showOptions(options, id) {\n        if (this.list)\n            this.list.remove();\n        this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n        this.list.addEventListener(\"scroll\", () => {\n            if (this.info)\n                this.view.requestMeasure(this.placeInfoReq);\n        });\n    }\n    update(update) {\n        var _a;\n        let cState = update.state.field(this.stateField);\n        let prevState = update.startState.field(this.stateField);\n        this.updateTooltipClass(update.state);\n        if (cState != prevState) {\n            let { options, selected, disabled } = cState.open;\n            if (!prevState.open || prevState.open.options != options) {\n                this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n                this.showOptions(options, cState.id);\n            }\n            this.updateSel();\n            if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n                this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n        }\n    }\n    updateTooltipClass(state) {\n        let cls = this.tooltipClass(state);\n        if (cls != this.currentClass) {\n            for (let c of this.currentClass.split(\" \"))\n                if (c)\n                    this.dom.classList.remove(c);\n            for (let c of cls.split(\" \"))\n                if (c)\n                    this.dom.classList.add(c);\n            this.currentClass = cls;\n        }\n    }\n    positioned(space) {\n        this.space = space;\n        if (this.info)\n            this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSel() {\n        let cState = this.view.state.field(this.stateField), open = cState.open;\n        if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n            this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n            this.showOptions(open.options, cState.id);\n        }\n        if (this.updateSelectedOption(open.selected)) {\n            this.destroyInfo();\n            let { completion } = open.options[open.selected];\n            let { info } = completion;\n            if (!info)\n                return;\n            let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n            if (!infoResult)\n                return;\n            if (\"then\" in infoResult) {\n                infoResult.then(obj => {\n                    if (obj && this.view.state.field(this.stateField, false) == cState)\n                        this.addInfoPane(obj, completion);\n                }).catch(e => logException(this.view.state, e, \"completion info\"));\n            }\n            else {\n                this.addInfoPane(infoResult, completion);\n            }\n        }\n    }\n    addInfoPane(content, completion) {\n        this.destroyInfo();\n        let wrap = this.info = document.createElement(\"div\");\n        wrap.className = \"cm-tooltip cm-completionInfo\";\n        if (content.nodeType != null) {\n            wrap.appendChild(content);\n            this.infoDestroy = null;\n        }\n        else {\n            let { dom, destroy } = content;\n            wrap.appendChild(dom);\n            this.infoDestroy = destroy || null;\n        }\n        this.dom.appendChild(wrap);\n        this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSelectedOption(selected) {\n        let set = null;\n        for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n            if (opt.nodeName != \"LI\" || !opt.id) {\n                i--; // A section header\n            }\n            else if (i == selected) {\n                if (!opt.hasAttribute(\"aria-selected\")) {\n                    opt.setAttribute(\"aria-selected\", \"true\");\n                    set = opt;\n                }\n            }\n            else {\n                if (opt.hasAttribute(\"aria-selected\"))\n                    opt.removeAttribute(\"aria-selected\");\n            }\n        }\n        if (set)\n            scrollIntoView(this.list, set);\n        return set;\n    }\n    measureInfo() {\n        let sel = this.dom.querySelector(\"[aria-selected]\");\n        if (!sel || !this.info)\n            return null;\n        let listRect = this.dom.getBoundingClientRect();\n        let infoRect = this.info.getBoundingClientRect();\n        let selRect = sel.getBoundingClientRect();\n        let space = this.space;\n        if (!space) {\n            let win = this.dom.ownerDocument.defaultView || window;\n            space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n        }\n        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n            selRect.bottom < Math.max(space.top, listRect.top) + 10)\n            return null;\n        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n    }\n    placeInfo(pos) {\n        if (this.info) {\n            if (pos) {\n                if (pos.style)\n                    this.info.style.cssText = pos.style;\n                this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n            }\n            else {\n                this.info.style.cssText = \"top: -1e6px\";\n            }\n        }\n    }\n    createListBox(options, id, range) {\n        const ul = document.createElement(\"ul\");\n        ul.id = id;\n        ul.setAttribute(\"role\", \"listbox\");\n        ul.setAttribute(\"aria-expanded\", \"true\");\n        ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n        let curSection = null;\n        for (let i = range.from; i < range.to; i++) {\n            let { completion, match } = options[i], { section } = completion;\n            if (section) {\n                let name = typeof section == \"string\" ? section : section.name;\n                if (name != curSection && (i > range.from || range.from == 0)) {\n                    curSection = name;\n                    if (typeof section != \"string\" && section.header) {\n                        ul.appendChild(section.header(section));\n                    }\n                    else {\n                        let header = ul.appendChild(document.createElement(\"completion-section\"));\n                        header.textContent = name;\n                    }\n                }\n            }\n            const li = ul.appendChild(document.createElement(\"li\"));\n            li.id = id + \"-\" + i;\n            li.setAttribute(\"role\", \"option\");\n            let cls = this.optionClass(completion);\n            if (cls)\n                li.className = cls;\n            for (let source of this.optionContent) {\n                let node = source(completion, this.view.state, this.view, match);\n                if (node)\n                    li.appendChild(node);\n            }\n        }\n        if (range.from)\n            ul.classList.add(\"cm-completionListIncompleteTop\");\n        if (range.to < options.length)\n            ul.classList.add(\"cm-completionListIncompleteBottom\");\n        return ul;\n    }\n    destroyInfo() {\n        if (this.info) {\n            if (this.infoDestroy)\n                this.infoDestroy();\n            this.info.remove();\n            this.info = null;\n        }\n    }\n    destroy() {\n        this.destroyInfo();\n    }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n    return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n    let parent = container.getBoundingClientRect();\n    let self = element.getBoundingClientRect();\n    let scaleY = parent.height / container.offsetHeight;\n    if (self.top < parent.top)\n        container.scrollTop -= (parent.top - self.top) / scaleY;\n    else if (self.bottom > parent.bottom)\n        container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n    return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n        (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n    let options = [];\n    let sections = null;\n    let addOption = (option) => {\n        options.push(option);\n        let { section } = option.completion;\n        if (section) {\n            if (!sections)\n                sections = [];\n            let name = typeof section == \"string\" ? section : section.name;\n            if (!sections.some(s => s.name == name))\n                sections.push(typeof section == \"string\" ? { name } : section);\n        }\n    };\n    let conf = state.facet(completionConfig);\n    for (let a of active)\n        if (a.hasResult()) {\n            let getMatch = a.result.getMatch;\n            if (a.result.filter === false) {\n                for (let option of a.result.options) {\n                    addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n                }\n            }\n            else {\n                let pattern = state.sliceDoc(a.from, a.to), match;\n                let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n                for (let option of a.result.options)\n                    if (match = matcher.match(option.label)) {\n                        let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n                        addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n                    }\n            }\n        }\n    if (sections) {\n        let sectionOrder = Object.create(null), pos = 0;\n        let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n        for (let s of sections.sort(cmp)) {\n            pos -= 1e5;\n            sectionOrder[s.name] = pos;\n        }\n        for (let option of options) {\n            let { section } = option.completion;\n            if (section)\n                option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n        }\n    }\n    let result = [], prev = null;\n    let compare = conf.compareCompletions;\n    for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n        let cur = opt.completion;\n        if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n            (prev.type != null && cur.type != null && prev.type != cur.type) ||\n            prev.apply != cur.apply || prev.boost != cur.boost)\n            result.push(opt);\n        else if (score(opt.completion) > score(prev))\n            result[result.length - 1] = opt;\n        prev = opt.completion;\n    }\n    return result;\n}\nclass CompletionDialog {\n    constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n        this.options = options;\n        this.attrs = attrs;\n        this.tooltip = tooltip;\n        this.timestamp = timestamp;\n        this.selected = selected;\n        this.disabled = disabled;\n    }\n    setSelected(selected, id) {\n        return selected == this.selected || selected >= this.options.length ? this\n            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n    }\n    static build(active, state, id, prev, conf) {\n        let options = sortOptions(active, state);\n        if (!options.length) {\n            return prev && active.some(a => a.state == 1 /* State.Pending */) ?\n                new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;\n        }\n        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n        if (prev && prev.selected != selected && prev.selected != -1) {\n            let selectedValue = prev.options[prev.selected].completion;\n            for (let i = 0; i < options.length; i++)\n                if (options[i].completion == selectedValue) {\n                    selected = i;\n                    break;\n                }\n        }\n        return new CompletionDialog(options, makeAttrs(id, selected), {\n            pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n            create: createTooltip,\n            above: conf.aboveCursor,\n        }, prev ? prev.timestamp : Date.now(), selected, false);\n    }\n    map(changes) {\n        return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n    }\n}\nclass CompletionState {\n    constructor(active, id, open) {\n        this.active = active;\n        this.id = id;\n        this.open = open;\n    }\n    static start() {\n        return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n    }\n    update(tr) {\n        let { state } = tr, conf = state.facet(completionConfig);\n        let sources = conf.override ||\n            state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n        let active = sources.map(source => {\n            let value = this.active.find(s => s.source == source) ||\n                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n            return value.update(tr, conf);\n        });\n        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n            active = this.active;\n        let open = this.open;\n        if (open && tr.docChanged)\n            open = open.map(tr.changes);\n        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n            !sameResults(active, this.active))\n            open = CompletionDialog.build(active, state, this.id, open, conf);\n        else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))\n            open = null;\n        if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))\n            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n        for (let effect of tr.effects)\n            if (effect.is(setSelectedEffect))\n                open = open && open.setSelected(effect.value, this.id);\n        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n    }\n    get tooltip() { return this.open ? this.open.tooltip : null; }\n    get attrs() { return this.open ? this.open.attrs : baseAttrs; }\n}\nfunction sameResults(a, b) {\n    if (a == b)\n        return true;\n    for (let iA = 0, iB = 0;;) {\n        while (iA < a.length && !a[iA].hasResult)\n            iA++;\n        while (iB < b.length && !b[iB].hasResult)\n            iB++;\n        let endA = iA == a.length, endB = iB == b.length;\n        if (endA || endB)\n            return endA == endB;\n        if (a[iA++].result != b[iB++].result)\n            return false;\n    }\n}\nconst baseAttrs = {\n    \"aria-autocomplete\": \"list\"\n};\nfunction makeAttrs(id, selected) {\n    let result = {\n        \"aria-autocomplete\": \"list\",\n        \"aria-haspopup\": \"listbox\",\n        \"aria-controls\": id\n    };\n    if (selected > -1)\n        result[\"aria-activedescendant\"] = id + \"-\" + selected;\n    return result;\n}\nconst none = [];\nfunction getUserEvent(tr, conf) {\n    if (tr.isUserEvent(\"input.complete\")) {\n        let completion = tr.annotation(pickedCompletion);\n        if (completion && conf.activateOnCompletion(completion))\n            return \"input\";\n    }\n    return tr.isUserEvent(\"input.type\") ? \"input\" : tr.isUserEvent(\"delete.backward\") ? \"delete\" : null;\n}\nclass ActiveSource {\n    constructor(source, state, explicitPos = -1) {\n        this.source = source;\n        this.state = state;\n        this.explicitPos = explicitPos;\n    }\n    hasResult() { return false; }\n    update(tr, conf) {\n        let event = getUserEvent(tr, conf), value = this;\n        if (event)\n            value = value.handleUserEvent(tr, event, conf);\n        else if (tr.docChanged)\n            value = value.handleChange(tr);\n        else if (tr.selection && value.state != 0 /* State.Inactive */)\n            value = new ActiveSource(value.source, 0 /* State.Inactive */);\n        for (let effect of tr.effects) {\n            if (effect.is(startCompletionEffect))\n                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);\n            else if (effect.is(closeCompletionEffect))\n                value = new ActiveSource(value.source, 0 /* State.Inactive */);\n            else if (effect.is(setActiveEffect))\n                for (let active of effect.value)\n                    if (active.source == value.source)\n                        value = active;\n        }\n        return value;\n    }\n    handleUserEvent(tr, type, conf) {\n        return type == \"delete\" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);\n    }\n    handleChange(tr) {\n        return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n    }\n    map(changes) {\n        return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));\n    }\n}\nclass ActiveResult extends ActiveSource {\n    constructor(source, explicitPos, result, from, to) {\n        super(source, 2 /* State.Result */, explicitPos);\n        this.result = result;\n        this.from = from;\n        this.to = to;\n    }\n    hasResult() { return true; }\n    handleUserEvent(tr, type, conf) {\n        var _a;\n        let result = this.result;\n        if (result.map && !tr.changes.empty)\n            result = result.map(result, tr.changes);\n        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n        let pos = cur(tr.state);\n        if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||\n            pos > to || !result ||\n            type == \"delete\" && cur(tr.startState) == this.from)\n            return new ActiveSource(this.source, type == \"input\" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n        let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos);\n        if (checkValid(result.validFor, tr.state, from, to))\n            return new ActiveResult(this.source, explicitPos, result, from, to);\n        if (result.update &&\n            (result = result.update(result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))\n            return new ActiveResult(this.source, explicitPos, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n        return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);\n    }\n    handleChange(tr) {\n        return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n    }\n    map(mapping) {\n        if (mapping.empty)\n            return this;\n        let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n        if (!result)\n            return new ActiveSource(this.source, 0 /* State.Inactive */);\n        return new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n    }\n}\nfunction checkValid(validFor, state, from, to) {\n    if (!validFor)\n        return false;\n    let text = state.sliceDoc(from, to);\n    return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n    map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n    create() { return CompletionState.start(); },\n    update(value, tr) { return value.update(tr); },\n    provide: f => [\n        showTooltip.from(f, val => val.tooltip),\n        EditorView.contentAttributes.from(f, state => state.attrs)\n    ]\n});\nfunction applyCompletion(view, option) {\n    const apply = option.completion.apply || option.completion.label;\n    let result = view.state.field(completionState).active.find(a => a.source == option.source);\n    if (!(result instanceof ActiveResult))\n        return false;\n    if (typeof apply == \"string\")\n        view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n    else\n        apply(view, option.completion, result.from, result.to);\n    return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n    return (view) => {\n        let cState = view.state.field(completionState, false);\n        if (!cState || !cState.open || cState.open.disabled ||\n            Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n            return false;\n        let step = 1, tooltip;\n        if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n            step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n                tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n        let { length } = cState.open.options;\n        let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n        if (selected < 0)\n            selected = by == \"page\" ? 0 : length - 1;\n        else if (selected >= length)\n            selected = by == \"page\" ? length - 1 : 0;\n        view.dispatch({ effects: setSelectedEffect.of(selected) });\n        return true;\n    };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n        Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n        return false;\n    return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState)\n        return false;\n    view.dispatch({ effects: startCompletionEffect.of(true) });\n    return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n        return false;\n    view.dispatch({ effects: closeCompletionEffect.of(null) });\n    return true;\n};\nclass RunningQuery {\n    constructor(active, context) {\n        this.active = active;\n        this.context = context;\n        this.time = Date.now();\n        this.updates = [];\n        // Note that 'undefined' means 'not done yet', whereas 'null' means\n        // 'query returned null'.\n        this.done = undefined;\n    }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.debounceUpdate = -1;\n        this.running = [];\n        this.debounceAccept = -1;\n        this.pendingStart = false;\n        this.composing = 0 /* CompositionState.None */;\n        for (let active of view.state.field(completionState).active)\n            if (active.state == 1 /* State.Pending */)\n                this.startQuery(active);\n    }\n    update(update) {\n        let cState = update.state.field(completionState);\n        let conf = update.state.facet(completionConfig);\n        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n            return;\n        let doesReset = update.transactions.some(tr => {\n            return (tr.selection || tr.docChanged) && !getUserEvent(tr, conf);\n        });\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (doesReset ||\n                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n                for (let handler of query.context.abortListeners) {\n                    try {\n                        handler();\n                    }\n                    catch (e) {\n                        logException(this.view.state, e);\n                    }\n                }\n                query.context.abortListeners = null;\n                this.running.splice(i--, 1);\n            }\n            else {\n                query.updates.push(...update.transactions);\n            }\n        }\n        if (this.debounceUpdate > -1)\n            clearTimeout(this.debounceUpdate);\n        if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n            this.pendingStart = true;\n        let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n        this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))\n            ? setTimeout(() => this.startUpdate(), delay) : -1;\n        if (this.composing != 0 /* CompositionState.None */)\n            for (let tr of update.transactions) {\n                if (getUserEvent(tr, conf) == \"input\")\n                    this.composing = 2 /* CompositionState.Changed */;\n                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n                    this.composing = 3 /* CompositionState.ChangedAndMoved */;\n            }\n    }\n    startUpdate() {\n        this.debounceUpdate = -1;\n        this.pendingStart = false;\n        let { state } = this.view, cState = state.field(completionState);\n        for (let active of cState.active) {\n            if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))\n                this.startQuery(active);\n        }\n    }\n    startQuery(active) {\n        let { state } = this.view, pos = cur(state);\n        let context = new CompletionContext(state, pos, active.explicitPos == pos);\n        let pending = new RunningQuery(active, context);\n        this.running.push(pending);\n        Promise.resolve(active.source(context)).then(result => {\n            if (!pending.context.aborted) {\n                pending.done = result || null;\n                this.scheduleAccept();\n            }\n        }, err => {\n            this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n            logException(this.view.state, err);\n        });\n    }\n    scheduleAccept() {\n        if (this.running.every(q => q.done !== undefined))\n            this.accept();\n        else if (this.debounceAccept < 0)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    // For each finished query in this.running, try to create a result\n    // or, if appropriate, restart the query.\n    accept() {\n        var _a;\n        if (this.debounceAccept > -1)\n            clearTimeout(this.debounceAccept);\n        this.debounceAccept = -1;\n        let updated = [];\n        let conf = this.view.state.facet(completionConfig);\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (query.done === undefined)\n                continue;\n            this.running.splice(i--, 1);\n            if (query.done) {\n                let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));\n                // Replay the transactions that happened since the start of\n                // the request and see if that preserves the result\n                for (let tr of query.updates)\n                    active = active.update(tr, conf);\n                if (active.hasResult()) {\n                    updated.push(active);\n                    continue;\n                }\n            }\n            let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);\n            if (current && current.state == 1 /* State.Pending */) {\n                if (query.done == null) {\n                    // Explicitly failed. Should clear the pending status if it\n                    // hasn't been re-set in the meantime.\n                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n                    for (let tr of query.updates)\n                        active = active.update(tr, conf);\n                    if (active.state != 1 /* State.Pending */)\n                        updated.push(active);\n                }\n                else {\n                    // Cleared by subsequent transactions. Restart.\n                    this.startQuery(current);\n                }\n            }\n        }\n        if (updated.length)\n            this.view.dispatch({ effects: setActiveEffect.of(updated) });\n    }\n}, {\n    eventHandlers: {\n        blur(event) {\n            let state = this.view.state.field(completionState, false);\n            if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n                let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n                if (!dialog || !dialog.dom.contains(event.relatedTarget))\n                    setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n            }\n        },\n        compositionstart() {\n            this.composing = 1 /* CompositionState.Started */;\n        },\n        compositionend() {\n            if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n                // Safari fires compositionend events synchronously, possibly\n                // from inside an update, so dispatch asynchronously to avoid reentrancy\n                setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n            }\n            this.composing = 0 /* CompositionState.None */;\n        }\n    }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        let field = view.state.field(completionState, false);\n        if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n            event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n            return false;\n        let option = field.open.options[field.open.selected];\n        let result = field.active.find(a => a.source == option.source);\n        let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n        if (commitChars && commitChars.indexOf(event.key) > -1)\n            applyCompletion(view, option);\n        return false;\n    }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"monospace\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"250px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.2\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n    \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#17c\",\n        color: \"white\",\n    },\n    \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n    \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n    \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"···\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${400 /* Info.Width */}px`,\n        boxSizing: \"border-box\"\n    },\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n    \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n    \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'ƒ'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'○'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'◌'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'𝑥'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'𝐶'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'𝑡'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'∪'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'□'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'▢'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n});\n\nclass FieldPos {\n    constructor(field, line, from, to) {\n        this.field = field;\n        this.line = line;\n        this.from = from;\n        this.to = to;\n    }\n}\nclass FieldRange {\n    constructor(field, from, to) {\n        this.field = field;\n        this.from = from;\n        this.to = to;\n    }\n    map(changes) {\n        let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n        let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n        return from == null || to == null ? null : new FieldRange(this.field, from, to);\n    }\n}\nclass Snippet {\n    constructor(lines, fieldPositions) {\n        this.lines = lines;\n        this.fieldPositions = fieldPositions;\n    }\n    instantiate(state, pos) {\n        let text = [], lineStart = [pos];\n        let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n        for (let line of this.lines) {\n            if (text.length) {\n                let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n                for (let i = 0; i < tabs; i++)\n                    indent += state.facet(indentUnit);\n                lineStart.push(pos + indent.length - tabs);\n                line = indent + line.slice(tabs);\n            }\n            text.push(line);\n            pos += line.length + 1;\n        }\n        let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n        return { text, ranges };\n    }\n    static parse(template) {\n        let fields = [];\n        let lines = [], positions = [], m;\n        for (let line of template.split(/\\r\\n?|\\n/)) {\n            while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|((?:\\\\[{}]|[^}])*))\\}/.exec(line)) {\n                let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n                let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n                for (let i = 0; i < fields.length; i++) {\n                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n                        found = i;\n                }\n                if (found < 0) {\n                    let i = 0;\n                    while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n                        i++;\n                    fields.splice(i, 0, { seq, name });\n                    found = i;\n                    for (let pos of positions)\n                        if (pos.field >= found)\n                            pos.field++;\n                }\n                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n                line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n            }\n            line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n                for (let pos of positions)\n                    if (pos.line == lines.length && pos.from > index) {\n                        pos.from--;\n                        pos.to--;\n                    }\n                return brace;\n            });\n            lines.push(line);\n        }\n        return new Snippet(lines, positions);\n    }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM() {\n            let span = document.createElement(\"span\");\n            span.className = \"cm-snippetFieldPosition\";\n            return span;\n        }\n        ignoreEvent() { return false; }\n    } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n    constructor(ranges, active) {\n        this.ranges = ranges;\n        this.active = active;\n        this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n    }\n    map(changes) {\n        let ranges = [];\n        for (let r of this.ranges) {\n            let mapped = r.map(changes);\n            if (!mapped)\n                return null;\n            ranges.push(mapped);\n        }\n        return new ActiveSnippet(ranges, this.active);\n    }\n    selectionInsideField(sel) {\n        return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n    }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n    map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setActive))\n                return effect.value;\n            if (effect.is(moveToField) && value)\n                return new ActiveSnippet(value.ranges, effect.value);\n        }\n        if (value && tr.docChanged)\n            value = value.map(tr.changes);\n        if (value && tr.selection && !value.selectionInsideField(tr.selection))\n            value = null;\n        return value;\n    },\n    provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n    return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n    \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n    let snippet = Snippet.parse(template);\n    return (editor, completion, from, to) => {\n        let { text, ranges } = snippet.instantiate(editor.state, from);\n        let spec = {\n            changes: { from, to, insert: Text.of(text) },\n            scrollIntoView: true,\n            annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n        };\n        if (ranges.length)\n            spec.selection = fieldSelection(ranges, 0);\n        if (ranges.some(r => r.field > 0)) {\n            let active = new ActiveSnippet(ranges, 0);\n            let effects = spec.effects = [setActive.of(active)];\n            if (editor.state.field(snippetState, false) === undefined)\n                effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n        }\n        editor.dispatch(editor.state.update(spec));\n    };\n}\nfunction moveField(dir) {\n    return ({ state, dispatch }) => {\n        let active = state.field(snippetState, false);\n        if (!active || dir < 0 && active.active == 0)\n            return false;\n        let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n        dispatch(state.update({\n            selection: fieldSelection(active.ranges, next),\n            effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n            scrollIntoView: true\n        }));\n        return true;\n    };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n    let active = state.field(snippetState, false);\n    if (!active)\n        return false;\n    dispatch(state.update({ effects: setActive.of(null) }));\n    return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n    { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n    { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n    combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n    return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n    mousedown(event, view) {\n        let active = view.state.field(snippetState, false), pos;\n        if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n            return false;\n        let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n        if (!match || match.field == active.active)\n            return false;\n        view.dispatch({\n            selection: fieldSelection(active.ranges, match.field),\n            effects: setActive.of(active.ranges.some(r => r.field > match.field)\n                ? new ActiveSnippet(active.ranges, match.field) : null),\n            scrollIntoView: true\n        });\n        return true;\n    }\n});\n\nfunction wordRE(wordChars) {\n    let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n    try {\n        return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n    }\n    catch (_a) {\n        return new RegExp(`[\\w${escaped}]`, \"g\");\n    }\n}\nfunction mapRE(re, f) {\n    return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n    return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n    for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n        let { value } = lines, m;\n        wordRE.lastIndex = 0;\n        while (m = wordRE.exec(value)) {\n            if (!seen[m[0]] && pos + m.index != ignoreAt) {\n                result.push({ type: \"text\", label: m[0] });\n                seen[m[0]] = true;\n                if (result.length >= 2000 /* C.MaxList */)\n                    return;\n            }\n        }\n        pos += value.length + 1;\n    }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n    let big = doc.length >= 1000 /* C.MinCacheLen */;\n    let cached = big && cache.get(doc);\n    if (cached)\n        return cached;\n    let result = [], seen = Object.create(null);\n    if (doc.children) {\n        let pos = 0;\n        for (let ch of doc.children) {\n            if (ch.length >= 1000 /* C.MinCacheLen */) {\n                for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n                    if (!seen[c.label]) {\n                        seen[c.label] = true;\n                        result.push(c);\n                    }\n                }\n            }\n            else {\n                storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n            }\n            pos += ch.length + 1;\n        }\n    }\n    else {\n        storeWords(doc, wordRE, result, seen, ignoreAt);\n    }\n    if (big && result.length < 2000 /* C.MaxList */)\n        cache.set(doc, result);\n    return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n    let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n    let re = wordRE(wordChars);\n    let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n    if (!token && !context.explicit)\n        return null;\n    let from = token ? token.from : context.pos;\n    let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n    return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n    brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n    before: \")]}:;>\",\n    stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n    map(value, mapping) {\n        let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n        return mapped == null ? undefined : mapped;\n    }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n    create() { return RangeSet.empty; },\n    update(value, tr) {\n        value = value.map(tr.changes);\n        if (tr.selection) {\n            let line = tr.state.doc.lineAt(tr.selection.main.head);\n            value = value.update({ filter: from => from >= line.from && from <= line.to });\n        }\n        for (let effect of tr.effects)\n            if (effect.is(closeBracketEffect))\n                value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n        return value;\n    }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n    return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n    for (let i = 0; i < definedClosing.length; i += 2)\n        if (definedClosing.charCodeAt(i) == ch)\n            return definedClosing.charAt(i + 1);\n    return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n    return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n        return false;\n    let sel = view.state.selection.main;\n    if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n        from != sel.from || to != sel.to)\n        return false;\n    let tr = insertBracket(view.state, insert);\n    if (!tr)\n        return false;\n    view.dispatch(tr);\n    return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty) {\n            let before = prevChar(state.doc, range.head);\n            for (let token of tokens) {\n                if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n                    return { changes: { from: range.head - token.length, to: range.head + token.length },\n                        range: EditorSelection.cursor(range.head - token.length) };\n            }\n        }\n        return { range: dont = range };\n    });\n    if (!dont)\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n    return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n    { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    for (let tok of tokens) {\n        let closed = closing(codePointAt(tok, 0));\n        if (bracket == tok)\n            return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n                : handleOpen(state, tok, closed, conf.before || defaults.before);\n        if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n            return handleClose(state, tok, closed);\n    }\n    return null;\n}\nfunction closedBracketAt(state, pos) {\n    let found = false;\n    state.field(bracketState).between(0, state.doc.length, from => {\n        if (from == pos)\n            found = true;\n    });\n    return found;\n}\nfunction nextChar(doc, pos) {\n    let next = doc.sliceString(pos, pos + 2);\n    return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n    let prev = doc.sliceString(pos - 2, pos);\n    return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n                effects: closeBracketEffect.of(range.to + open.length),\n                range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n        let next = nextChar(state.doc, range.head);\n        if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n            return { changes: { insert: open + close, from: range.head },\n                effects: closeBracketEffect.of(range.head + open.length),\n                range: EditorSelection.cursor(range.head + open.length) };\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction handleClose(state, _open, close) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty && nextChar(state.doc, range.head) == close)\n            return { changes: { from: range.head, to: range.head + close.length, insert: close },\n                range: EditorSelection.cursor(range.head + close.length) };\n        return dont = { range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n    let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n                effects: closeBracketEffect.of(range.to + token.length),\n                range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n        let pos = range.head, next = nextChar(state.doc, pos), start;\n        if (next == token) {\n            if (nodeStart(state, pos)) {\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n            }\n            else if (closedBracketAt(state, pos)) {\n                let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n                let content = isTriple ? token + token + token : token;\n                return { changes: { from: pos, to: pos + content.length, insert: content },\n                    range: EditorSelection.cursor(pos + content.length) };\n            }\n        }\n        else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n            (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n            nodeStart(state, start)) {\n            return { changes: { insert: token + token + token + token, from: pos },\n                effects: closeBracketEffect.of(pos + token.length),\n                range: EditorSelection.cursor(pos + token.length) };\n        }\n        else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n            if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n        }\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction nodeStart(state, pos) {\n    let tree = syntaxTree(state).resolveInner(pos + 1);\n    return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n    let node = syntaxTree(state).resolveInner(pos, -1);\n    let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n    for (let i = 0; i < 5; i++) {\n        let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n        let quotePos = start.indexOf(quoteToken);\n        if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n            let first = node.firstChild;\n            while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n                if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n                    return false;\n                first = first.firstChild;\n            }\n            return true;\n        }\n        let parent = node.to == pos && node.parent;\n        if (!parent)\n            break;\n        node = parent;\n    }\n    return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n    let charCat = state.charCategorizer(pos);\n    if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n        return pos;\n    for (let prefix of prefixes) {\n        let start = pos - prefix.length;\n        if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n            return start;\n    }\n    return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n    return [\n        commitCharacters,\n        completionState,\n        completionConfig.of(config),\n        completionPlugin,\n        completionKeymapExt,\n        baseTheme\n    ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n    { key: \"Ctrl-Space\", run: startCompletion },\n    { key: \"Escape\", run: closeCompletion },\n    { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n    { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n    { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n    { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n    { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n    let cState = state.field(completionState, false);\n    return cState && cState.active.some(a => a.state == 1 /* State.Pending */) ? \"pending\"\n        : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    if (!open || open.disabled)\n        return [];\n    let completions = completionArrayCache.get(open.options);\n    if (!completions)\n        completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n    return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n    return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n","import { Annotation, Facet, combineConfig, StateField, Transaction, ChangeSet, ChangeDesc, EditorSelection, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n    let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n    return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let tr = f(option, state);\n        if (!tr)\n            return false;\n        dispatch(state.update(tr));\n        return true;\n    };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n    let data = state.languageDataAt(\"commentTokens\", pos);\n    return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n    let textBefore = state.sliceDoc(from - SearchMargin, from);\n    let textAfter = state.sliceDoc(to, to + SearchMargin);\n    let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n    let beforeOff = textBefore.length - spaceBefore;\n    if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n        textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n        return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n            close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n    }\n    let startText, endText;\n    if (to - from <= 2 * SearchMargin) {\n        startText = endText = state.sliceDoc(from, to);\n    }\n    else {\n        startText = state.sliceDoc(from, from + SearchMargin);\n        endText = state.sliceDoc(to - SearchMargin, to);\n    }\n    let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n    let endOff = endText.length - endSpace - close.length;\n    if (startText.slice(startSpace, startSpace + open.length) == open &&\n        endText.slice(endOff, endOff + close.length) == close) {\n        return { open: { pos: from + startSpace + open.length,\n                margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n            close: { pos: to - endSpace - close.length,\n                margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n    }\n    return null;\n}\nfunction selectedLineRanges(state) {\n    let ranges = [];\n    for (let r of state.selection.ranges) {\n        let fromLine = state.doc.lineAt(r.from);\n        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n        let last = ranges.length - 1;\n        if (last >= 0 && ranges[last].to > fromLine.from)\n            ranges[last].to = toLine.to;\n        else\n            ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n    }\n    return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n    let tokens = ranges.map(r => getConfig(state, r.from).block);\n    if (!tokens.every(c => c))\n        return null;\n    let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n    if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n        return { changes: state.changes(ranges.map((range, i) => {\n                if (comments[i])\n                    return [];\n                return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n            })) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n        let changes = [];\n        for (let i = 0, comment; i < comments.length; i++)\n            if (comment = comments[i]) {\n                let token = tokens[i], { open, close } = comment;\n                changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n            }\n        return { changes };\n    }\n    return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n    let lines = [];\n    let prevLine = -1;\n    for (let { from, to } of ranges) {\n        let startI = lines.length, minIndent = 1e9;\n        let token = getConfig(state, from).line;\n        if (!token)\n            continue;\n        for (let pos = from; pos <= to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.from > prevLine && (from == to || to > line.from)) {\n                prevLine = line.from;\n                let indent = /^\\s*/.exec(line.text)[0].length;\n                let empty = indent == line.length;\n                let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n                if (indent < line.text.length && indent < minIndent)\n                    minIndent = indent;\n                lines.push({ line, comment, token, indent, empty, single: false });\n            }\n            pos = line.to + 1;\n        }\n        if (minIndent < 1e9)\n            for (let i = startI; i < lines.length; i++)\n                if (lines[i].indent < lines[i].line.text.length)\n                    lines[i].indent = minIndent;\n        if (lines.length == startI + 1)\n            lines[startI].single = true;\n    }\n    if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n        let changes = [];\n        for (let { line, token, indent, empty, single } of lines)\n            if (single || !empty)\n                changes.push({ from: line.from + indent, insert: token + \" \" });\n        let changeSet = state.changes(changes);\n        return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n        let changes = [];\n        for (let { line, comment, token } of lines)\n            if (comment >= 0) {\n                let from = line.from + comment, to = from + token.length;\n                if (line.text[to - line.from] == \" \")\n                    to++;\n                changes.push({ from, to });\n            }\n        return { changes };\n    }\n    return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            minDepth: 100,\n            newGroupDelay: 500,\n            joinToEvent: (_t, isAdjacent) => isAdjacent,\n        }, {\n            minDepth: Math.max,\n            newGroupDelay: Math.min,\n            joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n        });\n    }\n});\nconst historyField_ = /*@__PURE__*/StateField.define({\n    create() {\n        return HistoryState.empty;\n    },\n    update(state, tr) {\n        let config = tr.state.facet(historyConfig);\n        let fromHist = tr.annotation(fromHistory);\n        if (fromHist) {\n            let item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n            let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n            if (item)\n                other = updateBranch(other, other.length, config.minDepth, item);\n            else\n                other = addSelection(other, tr.startState.selection);\n            return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n        }\n        let isolate = tr.annotation(isolateHistory);\n        if (isolate == \"full\" || isolate == \"before\")\n            state = state.isolate();\n        if (tr.annotation(Transaction.addToHistory) === false)\n            return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n        let event = HistEvent.fromTransaction(tr);\n        let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n        if (event)\n            state = state.addChanges(event, time, userEvent, config, tr);\n        else if (tr.selection)\n            state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n        if (isolate == \"full\" || isolate == \"after\")\n            state = state.isolate();\n        return state;\n    },\n    toJSON(value) {\n        return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n    },\n    fromJSON(json) {\n        return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n    }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n    return [\n        historyField_,\n        historyConfig.of(config),\n        EditorView.domEventHandlers({\n            beforeinput(e, view) {\n                let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n                if (!command)\n                    return false;\n                e.preventDefault();\n                return command(view);\n            }\n        })\n    ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n    return function ({ state, dispatch }) {\n        if (!selection && state.readOnly)\n            return false;\n        let historyState = state.field(historyField_, false);\n        if (!historyState)\n            return false;\n        let tr = historyState.pop(side, state, selection);\n        if (!tr)\n            return false;\n        dispatch(tr);\n        return true;\n    };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n    return function (state) {\n        let histState = state.field(historyField_, false);\n        if (!histState)\n            return 0;\n        let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n        return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n    };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n    constructor(\n    // The changes in this event. Normal events hold at least one\n    // change or effect. But it may be necessary to store selection\n    // events before the first change, in which case a special type of\n    // instance is created which doesn't hold any changes, with\n    // changes == startSelection == undefined\n    changes, \n    // The effects associated with this event\n    effects, \n    // Accumulated mapping (from addToHistory==false) that should be\n    // applied to events below this one.\n    mapped, \n    // The selection before this event\n    startSelection, \n    // Stores selection changes after this event, to be used for\n    // selection undo/redo.\n    selectionsAfter) {\n        this.changes = changes;\n        this.effects = effects;\n        this.mapped = mapped;\n        this.startSelection = startSelection;\n        this.selectionsAfter = selectionsAfter;\n    }\n    setSelAfter(after) {\n        return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n    }\n    toJSON() {\n        var _a, _b, _c;\n        return {\n            changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n            mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n            startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n            selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n        };\n    }\n    static fromJSON(json) {\n        return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n    }\n    // This does not check `addToHistory` and such, it assumes the\n    // transaction needs to be converted to an item. Returns null when\n    // there are no changes or effects in the transaction.\n    static fromTransaction(tr, selection) {\n        let effects = none;\n        for (let invert of tr.startState.facet(invertedEffects)) {\n            let result = invert(tr);\n            if (result.length)\n                effects = effects.concat(result);\n        }\n        if (!effects.length && tr.changes.empty)\n            return null;\n        return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n    }\n    static selection(selections) {\n        return new HistEvent(undefined, none, undefined, undefined, selections);\n    }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n    let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n    let newBranch = branch.slice(start, to);\n    newBranch.push(newEvent);\n    return newBranch;\n}\nfunction isAdjacent(a, b) {\n    let ranges = [], isAdjacent = false;\n    a.iterChangedRanges((f, t) => ranges.push(f, t));\n    b.iterChangedRanges((_f, _t, f, t) => {\n        for (let i = 0; i < ranges.length;) {\n            let from = ranges[i++], to = ranges[i++];\n            if (t >= from && f <= to)\n                isAdjacent = true;\n        }\n    });\n    return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n    return a.ranges.length == b.ranges.length &&\n        a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n    return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n    if (!branch.length) {\n        return [HistEvent.selection([selection])];\n    }\n    else {\n        let lastEvent = branch[branch.length - 1];\n        let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n        if (sels.length && sels[sels.length - 1].eq(selection))\n            return branch;\n        sels.push(selection);\n        return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n    }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n    let last = branch[branch.length - 1];\n    let newBranch = branch.slice();\n    newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n    return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n    if (!branch.length)\n        return branch;\n    let length = branch.length, selections = none;\n    while (length) {\n        let event = mapEvent(branch[length - 1], mapping, selections);\n        if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n            let result = branch.slice(0, length);\n            result[length - 1] = event;\n            return result;\n        }\n        else { // Drop this event, since there's no changes or effects left\n            mapping = event.mapped;\n            length--;\n            selections = event.selectionsAfter;\n        }\n    }\n    return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n    let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n    // Change-less events don't store mappings (they are always the last event in a branch)\n    if (!event.changes)\n        return HistEvent.selection(selections);\n    let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n    let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n    return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n    constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n        this.done = done;\n        this.undone = undone;\n        this.prevTime = prevTime;\n        this.prevUserEvent = prevUserEvent;\n    }\n    isolate() {\n        return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n    }\n    addChanges(event, time, userEvent, config, tr) {\n        let done = this.done, lastEvent = done[done.length - 1];\n        if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n            (!userEvent || joinableUserEvent.test(userEvent)) &&\n            ((!lastEvent.selectionsAfter.length &&\n                time - this.prevTime < config.newGroupDelay &&\n                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n                // For compose (but not compose.start) events, always join with previous event\n                userEvent == \"input.type.compose\")) {\n            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n        }\n        else {\n            done = updateBranch(done, done.length, config.minDepth, event);\n        }\n        return new HistoryState(done, none, time, userEvent);\n    }\n    addSelection(selection, time, userEvent, newGroupDelay) {\n        let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n        if (last.length > 0 &&\n            time - this.prevTime < newGroupDelay &&\n            userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n            eqSelectionShape(last[last.length - 1], selection))\n            return this;\n        return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n    }\n    addMapping(mapping) {\n        return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n    }\n    pop(side, state, onlySelection) {\n        let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n        if (branch.length == 0)\n            return null;\n        let event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n        if (onlySelection && event.selectionsAfter.length) {\n            return state.update({\n                selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n                annotations: fromHistory.of({ side, rest: popSelection(branch), selection }),\n                userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n                scrollIntoView: true\n            });\n        }\n        else if (!event.changes) {\n            return null;\n        }\n        else {\n            let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n            if (event.mapped)\n                rest = addMappingToBranch(rest, event.mapped);\n            return state.update({\n                changes: event.changes,\n                selection: event.startSelection,\n                effects: event.effects,\n                annotations: fromHistory.of({ side, rest, selection }),\n                filter: false,\n                userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n                scrollIntoView: true\n            });\n        }\n    }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n    { key: \"Mod-z\", run: undo, preventDefault: true },\n    { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n    { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n    { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n    { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n    return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n    return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n    let selection = updateSel(state.selection, how);\n    if (selection.eq(state.selection, true))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\nfunction rangeEnd(range, forward) {\n    return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n    return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction cursorByGroup(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n    /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n    let categorize = view.state.charCategorizer(range.from);\n    let cat = CharCategory.Space, pos = range.from, steps = 0;\n    let done = false, sawUpper = false, sawLower = false;\n    let step = (next) => {\n        if (done)\n            return false;\n        pos += forward ? next.length : -next.length;\n        let nextCat = categorize(next), ahead;\n        if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n            nextCat = -1; // Treat word punctuation specially\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        if (cat != nextCat)\n            return false;\n        if (cat == CharCategory.Word) {\n            if (next.toLowerCase() == next) {\n                if (!forward && sawUpper)\n                    return false;\n                sawLower = true;\n            }\n            else if (sawLower) {\n                if (forward)\n                    return false;\n                done = true;\n            }\n            else {\n                if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n                    ahead.toLowerCase() == ahead)\n                    return false;\n                sawUpper = true;\n            }\n        }\n        steps++;\n        return true;\n    };\n    let end = view.moveByChar(range, forward, start => {\n        step(start);\n        return step;\n    });\n    if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n        let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n        let skipped = view.state.sliceDoc(from, to);\n        if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n            let segments = Array.from(segmenter.segment(skipped));\n            if (segments.length > 1) {\n                if (forward)\n                    return EditorSelection.cursor(range.head + segments[1].index, -1);\n                return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n            }\n        }\n    }\n    return end;\n}\nfunction cursorBySubword(view, forward) {\n    return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n    if (node.type.prop(bracketProp))\n        return true;\n    let len = node.to - node.from;\n    return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n    let pos = syntaxTree(state).resolveInner(start.head);\n    let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n    // Scan forward through child nodes to see if there's an interesting\n    // node ahead.\n    for (let at = start.head;;) {\n        let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n        if (!next)\n            break;\n        if (interestingNode(state, next, bracketProp))\n            pos = next;\n        else\n            at = forward ? next.to : next.from;\n    }\n    let bracket = pos.type.prop(bracketProp), match, newPos;\n    if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n        newPos = forward ? match.end.to : match.end.from;\n    else\n        newPos = forward ? pos.to : pos.from;\n    return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n    return moveSel(view, range => {\n        if (!range.empty)\n            return rangeEnd(range, forward);\n        let moved = view.moveVertically(range, forward);\n        return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n    });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n    let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n    let marginTop = 0, marginBottom = 0, height;\n    if (selfScroll) {\n        for (let source of view.state.facet(EditorView.scrollMargins)) {\n            let margins = source(view);\n            if (margins === null || margins === void 0 ? void 0 : margins.top)\n                marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n            if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n                marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n        }\n        height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n    }\n    else {\n        height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n    }\n    return { marginTop, marginBottom, selfScroll,\n        height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n    let page = pageInfo(view);\n    let { state } = view, selection = updateSel(state.selection, range => {\n        return range.empty ? view.moveVertically(range, forward, page.height)\n            : rangeEnd(range, forward);\n    });\n    if (selection.eq(state.selection))\n        return false;\n    let effect;\n    if (page.selfScroll) {\n        let startPos = view.coordsAtPos(state.selection.main.head);\n        let scrollRect = view.scrollDOM.getBoundingClientRect();\n        let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n        if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n            effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n    }\n    view.dispatch(setSel(state, selection), { effects: effect });\n    return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n    let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n    if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n        moved = view.moveToLineBoundary(start, forward, false);\n    if (!forward && moved.head == line.from && line.length) {\n        let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n        if (space && start.head != line.from + space)\n            moved = EditorSelection.cursor(line.from + space);\n    }\n    return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n    let found = false, selection = updateSel(state.selection, range => {\n        let matching = matchBrackets(state, range.head, -1)\n            || matchBrackets(state, range.head, 1)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n        if (!matching || !matching.end)\n            return range;\n        found = true;\n        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n        return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n    });\n    if (!found)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(view, how) {\n    let selection = updateSel(view.state.selection, range => {\n        let head = how(range);\n        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n    });\n    if (selection.eq(view.state.selection))\n        return false;\n    view.dispatch(setSel(view.state, selection));\n    return true;\n}\nfunction selectByChar(view, forward) {\n    return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\nfunction selectByGroup(view, forward) {\n    return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\nfunction selectBySubword(view, forward) {\n    return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: 0 }));\n    return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.doc.length }));\n    return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n    return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n    return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n    dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n    return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n    let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n    dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n    return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n    let selection = updateSel(state.selection, range => {\n        var _a;\n        let stack = syntaxTree(state).resolveStack(range.from, 1);\n        for (let cur = stack; cur; cur = cur.next) {\n            let { node } = cur;\n            if (((node.from < range.from && node.to >= range.to) ||\n                (node.to > range.to && node.from <= range.from)) &&\n                ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent))\n                return EditorSelection.range(node.to, node.from);\n        }\n        return range;\n    });\n    dispatch(setSel(state, selection));\n    return true;\n};\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n    let cur = state.selection, selection = null;\n    if (cur.ranges.length > 1)\n        selection = EditorSelection.create([cur.main]);\n    else if (!cur.main.empty)\n        selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n    if (!selection)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\nfunction deleteBy(target, by) {\n    if (target.state.readOnly)\n        return false;\n    let event = \"delete.selection\", { state } = target;\n    let changes = state.changeByRange(range => {\n        let { from, to } = range;\n        if (from == to) {\n            let towards = by(range);\n            if (towards < from) {\n                event = \"delete.backward\";\n                towards = skipAtomic(target, towards, false);\n            }\n            else if (towards > from) {\n                event = \"delete.forward\";\n                towards = skipAtomic(target, towards, true);\n            }\n            from = Math.min(from, towards);\n            to = Math.max(to, towards);\n        }\n        else {\n            from = skipAtomic(target, from, false);\n            to = skipAtomic(target, to, true);\n        }\n        return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n    });\n    if (changes.changes.empty)\n        return false;\n    target.dispatch(state.update(changes, {\n        scrollIntoView: true,\n        userEvent: event,\n        effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n    }));\n    return true;\n}\nfunction skipAtomic(target, pos, forward) {\n    if (target instanceof EditorView)\n        for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n            ranges.between(pos, pos, (from, to) => {\n                if (from < pos && to > pos)\n                    pos = forward ? to : from;\n            });\n    return pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {\n    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n    if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&\n        !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n        if (before[before.length - 1] == \"\\t\")\n            return pos - 1;\n        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n        for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n            pos--;\n        targetPos = pos;\n    }\n    else {\n        targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n        if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n            targetPos += forward ? 1 : -1;\n        else if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from)))\n            targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n    }\n    return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false, true);\n/**\nDelete the selection or the character before the cursor. Does not\nimplement any extended behavior like deleting whole indentation\nunits in one go.\n*/\nconst deleteCharBackwardStrict = view => deleteByChar(view, false, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n    let categorize = state.charCategorizer(pos);\n    for (let cat = null;;) {\n        if (pos == (forward ? line.to : line.from)) {\n            if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n                pos += forward ? 1 : -1;\n            break;\n        }\n        let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n        let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n        let nextCat = categorize(nextChar);\n        if (cat != null && nextCat != cat)\n            break;\n        if (nextChar != \" \" || pos != range.head)\n            cat = nextCat;\n        pos = next;\n    }\n    return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n    let lineEnd = view.lineBlockAt(range.head).to;\n    return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n    let lineStart = view.lineBlockAt(range.head).from;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, false).head;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, true).head;\n    return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n        iter.next();\n        if (iter.lineBreak || iter.done) {\n            let trailing = prev.search(/\\s+$/);\n            if (trailing > -1)\n                changes.push({ from: pos - (prev.length - trailing), to: pos });\n            if (iter.done)\n                break;\n            prev = \"\";\n        }\n        else {\n            prev = iter.value;\n        }\n        pos += iter.value.length;\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({ changes, userEvent: \"delete\" }));\n    return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n            range: EditorSelection.cursor(range.from) };\n    });\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        if (!range.empty || range.from == 0 || range.from == state.doc.length)\n            return { range };\n        let pos = range.from, line = state.doc.lineAt(pos);\n        let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n        let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n        return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n            range: EditorSelection.cursor(to) };\n    });\n    if (changes.changes.empty)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n    return true;\n};\nfunction selectedLineBlocks(state) {\n    let blocks = [], upto = -1;\n    for (let range of state.selection.ranges) {\n        let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n        if (!range.empty && range.to == endLine.from)\n            endLine = state.doc.lineAt(range.to - 1);\n        if (upto >= startLine.number) {\n            let prev = blocks[blocks.length - 1];\n            prev.to = endLine.to;\n            prev.ranges.push(range);\n        }\n        else {\n            blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n        }\n        upto = endLine.number + 1;\n    }\n    return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [], ranges = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward ? block.to == state.doc.length : block.from == 0)\n            continue;\n        let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n        let size = nextLine.length + 1;\n        if (forward) {\n            changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n        }\n        else {\n            changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n        }\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({\n        changes,\n        scrollIntoView: true,\n        selection: EditorSelection.create(ranges, state.selection.mainIndex),\n        userEvent: \"move.line\"\n    }));\n    return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward)\n            changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n        else\n            changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n    }\n    dispatch(state.update({ changes, scrollIntoView: true, userEvent: \"input.copyline\" }));\n    return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n    if (view.state.readOnly)\n        return false;\n    let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n        if (from > 0)\n            from--;\n        else if (to < state.doc.length)\n            to++;\n        return { from, to };\n    }));\n    let selection = updateSel(state.selection, range => {\n        let dist = undefined;\n        if (view.lineWrapping) {\n            let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (pos)\n                dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;\n        }\n        return view.moveVertically(range, true, dist);\n    }).map(changes);\n    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n    return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n    dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nReplace the selection with a newline and the same amount of\nindentation as the line above.\n*/\nconst insertNewlineKeepIndent = ({ state, dispatch }) => {\n    dispatch(state.update(state.changeByRange(range => {\n        let indent = /^\\s*/.exec(state.doc.lineAt(range.from).text)[0];\n        return {\n            changes: { from: range.from, to: range.to, insert: state.lineBreak + indent },\n            range: EditorSelection.cursor(range.from + indent.length + 1)\n        };\n    }), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\nfunction isBetweenBrackets(state, pos) {\n    if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n        return { from: pos, to: pos };\n    let context = syntaxTree(state).resolveInner(pos);\n    let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n    if (before && after && before.to <= pos && after.from >= pos &&\n        (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n        state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n        !/\\S/.test(state.sliceDoc(before.to, after.from)))\n        return { from: before.to, to: after.from };\n    return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let changes = state.changeByRange(range => {\n            let { from, to } = range, line = state.doc.lineAt(from);\n            let explode = !atEof && from == to && isBetweenBrackets(state, from);\n            if (atEof)\n                from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n            let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n            let indent = getIndentation(cx, from);\n            if (indent == null)\n                indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n            while (to < line.to && /\\s/.test(line.text[to - line.from]))\n                to++;\n            if (explode)\n                ({ from, to } = explode);\n            else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n                from = line.from;\n            let insert = [\"\", indentString(state, indent)];\n            if (explode)\n                insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n            return { changes: { from, to, insert: Text.of(insert) },\n                range: EditorSelection.cursor(from + 1 + insert[1].length) };\n        });\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n        return true;\n    };\n}\nfunction changeBySelectedLine(state, f) {\n    let atLine = -1;\n    return state.changeByRange(range => {\n        let changes = [];\n        for (let pos = range.from; pos <= range.to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.number > atLine && (range.empty || range.to > line.from)) {\n                f(line, changes, range);\n                atLine = line.number;\n            }\n            pos = line.to + 1;\n        }\n        let changeSet = state.changes(changes);\n        return { changes,\n            range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n    });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => {\n            let found = updated[start];\n            return found == null ? -1 : found;\n        } });\n    let changes = changeBySelectedLine(state, (line, changes, range) => {\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            return;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm || range.from < line.from + cur.length) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    });\n    if (!changes.changes.empty)\n        dispatch(state.update(changes, { userEvent: \"indent\" }));\n    return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        changes.push({ from: line.from, insert: state.facet(indentUnit) });\n    }), { userEvent: \"input.indent\" }));\n    return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        let space = /^\\s*/.exec(line.text)[0];\n        if (!space)\n            return;\n        let col = countColumn(space, state.tabSize), keep = 0;\n        let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n        while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n            keep++;\n        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n    }), { userEvent: \"delete.dedent\" }));\n    return true;\n};\n/**\nEnables or disables\n[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this\nprevents the editor's key bindings from capturing Tab or\nShift-Tab, making it possible for the user to move focus out of\nthe editor with the keyboard.\n*/\nconst toggleTabFocusMode = view => {\n    view.setTabFocusMode();\n    return true;\n};\n/**\nTemporarily enables [tab-focus\nmode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode) for two seconds or until\nanother key is pressed.\n*/\nconst temporarilySetTabFocusMode = view => {\n    view.setTabFocusMode(2000);\n    return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n    if (state.selection.ranges.some(r => !r.empty))\n        return indentMore({ state, dispatch });\n    dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n    { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n    { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n    { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n    { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n    { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n    { key: \"Ctrl-d\", run: deleteCharForward },\n    { key: \"Ctrl-h\", run: deleteCharBackward },\n    { key: \"Ctrl-k\", run: deleteToLineEnd },\n    { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n    { key: \"Ctrl-o\", run: splitLine },\n    { key: \"Ctrl-t\", run: transposeChars },\n    { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n    { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n    { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n    { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n    { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n    { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n    { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n    { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n    { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n    { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n    { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n    { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n    { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n    { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n    { key: \"Enter\", run: insertNewlineAndIndent },\n    { key: \"Mod-a\", run: selectAll },\n    { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward },\n    { key: \"Delete\", run: deleteCharForward },\n    { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward },\n    { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward },\n    { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward },\n    { mac: \"Mod-Delete\", run: deleteLineBoundaryForward }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n    { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n    { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n    { key: \"Alt-ArrowUp\", run: moveLineUp },\n    { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n    { key: \"Alt-ArrowDown\", run: moveLineDown },\n    { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n    { key: \"Escape\", run: simplifySelection },\n    { key: \"Mod-Enter\", run: insertBlankLine },\n    { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n    { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n    { key: \"Mod-[\", run: indentLess },\n    { key: \"Mod-]\", run: indentMore },\n    { key: \"Mod-Alt-\\\\\", run: indentSelection },\n    { key: \"Shift-Mod-k\", run: deleteLine },\n    { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n    { key: \"Mod-/\", run: toggleComment },\n    { key: \"Alt-A\", run: toggleBlockComment },\n    { key: \"Ctrl-m\", mac: \"Shift-Alt-m\", run: toggleTabFocusMode },\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharForward, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharBackwardStrict, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertNewlineKeepIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharForward, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, temporarilySetTabFocusMode, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, toggleTabFocusMode, transposeChars, undo, undoDepth, undoSelection };\n","export default function crelt() {\n  var elt = arguments[0]\n  if (typeof elt == \"string\") elt = document.createElement(elt)\n  var i = 1, next = arguments[1]\n  if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n    for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n      var value = next[name]\n      if (typeof value == \"string\") elt.setAttribute(name, value)\n      else if (value != null) elt[name] = value\n    }\n    i++\n  }\n  for (; i < arguments.length; i++) add(elt, arguments[i])\n  return elt\n}\n\nfunction add(elt, child) {\n  if (typeof child == \"string\") {\n    elt.appendChild(document.createTextNode(child))\n  } else if (child == null) {\n  } else if (child.nodeType != null) {\n    elt.appendChild(child)\n  } else if (Array.isArray(child)) {\n    for (var i = 0; i < child.length; i++) add(elt, child[i])\n  } else {\n    throw new RangeError(\"Unsupported child node: \" + child)\n  }\n}\n","import { Decoration, showPanel, EditorView, ViewPlugin, logException, gutter, showTooltip, hoverTooltip, getPanel, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n    constructor(from, to, diagnostic) {\n        this.from = from;\n        this.to = to;\n        this.diagnostic = diagnostic;\n    }\n}\nclass LintState {\n    constructor(diagnostics, panel, selected) {\n        this.diagnostics = diagnostics;\n        this.panel = panel;\n        this.selected = selected;\n    }\n    static init(diagnostics, panel, state) {\n        // Filter the list of diagnostics for which to create markers\n        let markedDiagnostics = diagnostics;\n        let diagnosticFilter = state.facet(lintConfig).markerFilter;\n        if (diagnosticFilter)\n            markedDiagnostics = diagnosticFilter(markedDiagnostics, state);\n        let ranges = Decoration.set(markedDiagnostics.map((d) => {\n            // For zero-length ranges or ranges covering only a line break, create a widget\n            return d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)\n                ? Decoration.widget({\n                    widget: new DiagnosticWidget(d),\n                    diagnostic: d\n                }).range(d.from)\n                : Decoration.mark({\n                    attributes: { class: \"cm-lintRange cm-lintRange-\" + d.severity + (d.markClass ? \" \" + d.markClass : \"\") },\n                    diagnostic: d,\n                    inclusive: true\n                }).range(d.from, d.to);\n        }), true);\n        return new LintState(ranges, panel, findDiagnostic(ranges));\n    }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n    let found = null;\n    diagnostics.between(after, 1e9, (from, to, { spec }) => {\n        if (diagnostic && spec.diagnostic != diagnostic)\n            return;\n        found = new SelectedDiagnostic(from, to, spec.diagnostic);\n        return false;\n    });\n    return found;\n}\nfunction hideTooltip(tr, tooltip) {\n    let from = tooltip.pos, to = tooltip.end || from;\n    let result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n    if (result != null)\n        return result;\n    let line = tr.startState.doc.lineAt(tooltip.pos);\n    return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n    return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n    return {\n        effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n    };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n    create() {\n        return new LintState(Decoration.none, null, null);\n    },\n    update(value, tr) {\n        if (tr.docChanged && value.diagnostics.size) {\n            let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n            if (value.selected) {\n                let selPos = tr.changes.mapPos(value.selected.from, 1);\n                selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n            }\n            if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)\n                panel = null;\n            value = new LintState(mapped, panel, selected);\n        }\n        for (let effect of tr.effects) {\n            if (effect.is(setDiagnosticsEffect)) {\n                let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n                value = LintState.init(effect.value, panel, tr.state);\n            }\n            else if (effect.is(togglePanel)) {\n                value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n            }\n            else if (effect.is(movePanelSelection)) {\n                value = new LintState(value.diagnostics, value.panel, effect.value);\n            }\n        }\n        return value;\n    },\n    provide: f => [showPanel.from(f, val => val.panel),\n        EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n    let lint = state.field(lintState, false);\n    return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\", inclusive: true });\nfunction lintTooltip(view, pos, side) {\n    let { diagnostics } = view.state.field(lintState);\n    let found = [], stackStart = 2e8, stackEnd = 0;\n    diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n        if (pos >= from && pos <= to &&\n            (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n            found.push(spec.diagnostic);\n            stackStart = Math.min(from, stackStart);\n            stackEnd = Math.max(to, stackEnd);\n        }\n    });\n    let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n    if (diagnosticFilter)\n        found = diagnosticFilter(found, view.state);\n    if (!found.length)\n        return null;\n    return {\n        pos: stackStart,\n        end: stackEnd,\n        above: view.state.doc.lineAt(stackStart).to < stackEnd,\n        create() {\n            return { dom: diagnosticsTooltip(view, found) };\n        }\n    };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n    return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field || !field.panel)\n        view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n    let panel = getPanel(view, LintPanel.open);\n    if (panel)\n        panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n    return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field || !field.panel)\n        return false;\n    view.dispatch({ effects: togglePanel.of(false) });\n    return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n    let field = view.state.field(lintState, false);\n    if (!field)\n        return false;\n    let sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n    if (!next.value) {\n        next = field.diagnostics.iter(0);\n        if (!next.value || next.from == sel.from && next.to == sel.to)\n            return false;\n    }\n    view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n    return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n    let { state } = view, field = state.field(lintState, false);\n    if (!field)\n        return false;\n    let sel = state.selection.main;\n    let prevFrom, prevTo, lastFrom, lastTo;\n    field.diagnostics.between(0, state.doc.length, (from, to) => {\n        if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n            prevFrom = from;\n            prevTo = to;\n        }\n        if (lastFrom == null || from > lastFrom) {\n            lastFrom = from;\n            lastTo = to;\n        }\n    });\n    if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n        return false;\n    view.dispatch({ selection: { anchor: prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, head: prevTo !== null && prevTo !== void 0 ? prevTo : lastTo }, scrollIntoView: true });\n    return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n    { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n    { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.timeout = -1;\n        this.set = true;\n        let { delay } = view.state.facet(lintConfig);\n        this.lintTime = Date.now() + delay;\n        this.run = this.run.bind(this);\n        this.timeout = setTimeout(this.run, delay);\n    }\n    run() {\n        clearTimeout(this.timeout);\n        let now = Date.now();\n        if (now < this.lintTime - 10) {\n            this.timeout = setTimeout(this.run, this.lintTime - now);\n        }\n        else {\n            this.set = false;\n            let { state } = this.view, { sources } = state.facet(lintConfig);\n            if (sources.length)\n                Promise.all(sources.map(source => Promise.resolve(source(this.view)))).then(annotations => {\n                    let all = annotations.reduce((a, b) => a.concat(b));\n                    if (this.view.state.doc == state.doc)\n                        this.view.dispatch(setDiagnostics(this.view.state, all));\n                }, error => { logException(this.view.state, error); });\n        }\n    }\n    update(update) {\n        let config = update.state.facet(lintConfig);\n        if (update.docChanged || config != update.startState.facet(lintConfig) ||\n            config.needsRefresh && config.needsRefresh(update)) {\n            this.lintTime = Date.now() + config.delay;\n            if (!this.set) {\n                this.set = true;\n                this.timeout = setTimeout(this.run, config.delay);\n            }\n        }\n    }\n    force() {\n        if (this.set) {\n            this.lintTime = Date.now();\n            this.run();\n        }\n    }\n    destroy() {\n        clearTimeout(this.timeout);\n    }\n});\nconst lintConfig = /*@__PURE__*/Facet.define({\n    combine(input) {\n        return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {\n            delay: 750,\n            markerFilter: null,\n            tooltipFilter: null,\n            needsRefresh: null,\n            hideOn: () => null,\n        }, {\n            needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)\n        }));\n    }\n});\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed). If `null` is given as\nsource, this only configures the lint extension.\n*/\nfunction linter(source, config = {}) {\n    return [\n        lintConfig.of({ source, config }),\n        lintPlugin,\n        lintExtensions\n    ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n    let plugin = view.plugin(lintPlugin);\n    if (plugin)\n        plugin.force();\n}\nfunction assignKeys(actions) {\n    let assigned = [];\n    if (actions)\n        actions: for (let { name } of actions) {\n            for (let i = 0; i < name.length; i++) {\n                let ch = name[i];\n                if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n                    assigned.push(ch);\n                    continue actions;\n                }\n            }\n            assigned.push(\"\");\n        }\n    return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n    var _a;\n    let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n    return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n        let fired = false, click = (e) => {\n            e.preventDefault();\n            if (fired)\n                return;\n            fired = true;\n            let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n            if (found)\n                action.apply(view, found.from, found.to);\n        };\n        let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n        let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n            elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n            name.slice(keyIndex + 1)];\n        return elt(\"button\", {\n            type: \"button\",\n            class: \"cm-diagnosticAction\",\n            onclick: click,\n            onmousedown: click,\n            \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n        }, nameElt);\n    }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n    constructor(diagnostic) {\n        super();\n        this.diagnostic = diagnostic;\n    }\n    eq(other) { return other.diagnostic == this.diagnostic; }\n    toDOM() {\n        return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.diagnostic.severity });\n    }\n}\nclass PanelItem {\n    constructor(view, diagnostic) {\n        this.diagnostic = diagnostic;\n        this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n        this.dom = renderDiagnostic(view, diagnostic, true);\n        this.dom.id = this.id;\n        this.dom.setAttribute(\"role\", \"option\");\n    }\n}\nclass LintPanel {\n    constructor(view) {\n        this.view = view;\n        this.items = [];\n        let onkeydown = (event) => {\n            if (event.keyCode == 27) { // Escape\n                closeLintPanel(this.view);\n                this.view.focus();\n            }\n            else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n                this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n            }\n            else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n                this.moveSelection((this.selectedIndex + 1) % this.items.length);\n            }\n            else if (event.keyCode == 36) { // Home\n                this.moveSelection(0);\n            }\n            else if (event.keyCode == 35) { // End\n                this.moveSelection(this.items.length - 1);\n            }\n            else if (event.keyCode == 13) { // Enter\n                this.view.focus();\n            }\n            else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n                let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n                for (let i = 0; i < keys.length; i++)\n                    if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n                        let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n                        if (found)\n                            diagnostic.actions[i].apply(view, found.from, found.to);\n                    }\n            }\n            else {\n                return;\n            }\n            event.preventDefault();\n        };\n        let onclick = (event) => {\n            for (let i = 0; i < this.items.length; i++) {\n                if (this.items[i].dom.contains(event.target))\n                    this.moveSelection(i);\n            }\n        };\n        this.list = elt(\"ul\", {\n            tabIndex: 0,\n            role: \"listbox\",\n            \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n            onkeydown,\n            onclick\n        });\n        this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n            type: \"button\",\n            name: \"close\",\n            \"aria-label\": this.view.state.phrase(\"close\"),\n            onclick: () => closeLintPanel(this.view)\n        }, \"×\"));\n        this.update();\n    }\n    get selectedIndex() {\n        let selected = this.view.state.field(lintState).selected;\n        if (!selected)\n            return -1;\n        for (let i = 0; i < this.items.length; i++)\n            if (this.items[i].diagnostic == selected.diagnostic)\n                return i;\n        return -1;\n    }\n    update() {\n        let { diagnostics, selected } = this.view.state.field(lintState);\n        let i = 0, needsSync = false, newSelectedItem = null;\n        diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n            let found = -1, item;\n            for (let j = i; j < this.items.length; j++)\n                if (this.items[j].diagnostic == spec.diagnostic) {\n                    found = j;\n                    break;\n                }\n            if (found < 0) {\n                item = new PanelItem(this.view, spec.diagnostic);\n                this.items.splice(i, 0, item);\n                needsSync = true;\n            }\n            else {\n                item = this.items[found];\n                if (found > i) {\n                    this.items.splice(i, found - i);\n                    needsSync = true;\n                }\n            }\n            if (selected && item.diagnostic == selected.diagnostic) {\n                if (!item.dom.hasAttribute(\"aria-selected\")) {\n                    item.dom.setAttribute(\"aria-selected\", \"true\");\n                    newSelectedItem = item;\n                }\n            }\n            else if (item.dom.hasAttribute(\"aria-selected\")) {\n                item.dom.removeAttribute(\"aria-selected\");\n            }\n            i++;\n        });\n        while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n            needsSync = true;\n            this.items.pop();\n        }\n        if (this.items.length == 0) {\n            this.items.push(new PanelItem(this.view, {\n                from: -1, to: -1,\n                severity: \"info\",\n                message: this.view.state.phrase(\"No diagnostics\")\n            }));\n            needsSync = true;\n        }\n        if (newSelectedItem) {\n            this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n            this.view.requestMeasure({\n                key: this,\n                read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n                write: ({ sel, panel }) => {\n                    let scaleY = panel.height / this.list.offsetHeight;\n                    if (sel.top < panel.top)\n                        this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n                    else if (sel.bottom > panel.bottom)\n                        this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n                }\n            });\n        }\n        else if (this.selectedIndex < 0) {\n            this.list.removeAttribute(\"aria-activedescendant\");\n        }\n        if (needsSync)\n            this.sync();\n    }\n    sync() {\n        let domPos = this.list.firstChild;\n        function rm() {\n            let prev = domPos;\n            domPos = prev.nextSibling;\n            prev.remove();\n        }\n        for (let item of this.items) {\n            if (item.dom.parentNode == this.list) {\n                while (domPos != item.dom)\n                    rm();\n                domPos = item.dom.nextSibling;\n            }\n            else {\n                this.list.insertBefore(item.dom, domPos);\n            }\n        }\n        while (domPos)\n            rm();\n    }\n    moveSelection(selectedIndex) {\n        if (this.selectedIndex < 0)\n            return;\n        let field = this.view.state.field(lintState);\n        let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n        if (!selection)\n            return;\n        this.view.dispatch({\n            selection: { anchor: selection.from, head: selection.to },\n            scrollIntoView: true,\n            effects: movePanelSelection.of(selection)\n        });\n    }\n    static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n    return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n    return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-diagnostic\": {\n        padding: \"3px 6px 3px 8px\",\n        marginLeft: \"-1px\",\n        display: \"block\",\n        whiteSpace: \"pre-wrap\"\n    },\n    \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n    \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n    \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n    \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n    \".cm-diagnosticAction\": {\n        font: \"inherit\",\n        border: \"none\",\n        padding: \"2px 4px\",\n        backgroundColor: \"#444\",\n        color: \"white\",\n        borderRadius: \"3px\",\n        marginLeft: \"8px\",\n        cursor: \"pointer\"\n    },\n    \".cm-diagnosticSource\": {\n        fontSize: \"70%\",\n        opacity: .7\n    },\n    \".cm-lintRange\": {\n        backgroundPosition: \"left bottom\",\n        backgroundRepeat: \"repeat-x\",\n        paddingBottom: \"0.7px\",\n    },\n    \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#d11\") },\n    \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n    \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n    \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n    \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n    \".cm-tooltip-lint\": {\n        padding: 0,\n        margin: 0\n    },\n    \".cm-lintPoint\": {\n        position: \"relative\",\n        \"&:after\": {\n            content: '\"\"',\n            position: \"absolute\",\n            bottom: 0,\n            left: \"-2px\",\n            borderLeft: \"3px solid transparent\",\n            borderRight: \"3px solid transparent\",\n            borderBottom: \"4px solid #d11\"\n        }\n    },\n    \".cm-lintPoint-warning\": {\n        \"&:after\": { borderBottomColor: \"orange\" }\n    },\n    \".cm-lintPoint-info\": {\n        \"&:after\": { borderBottomColor: \"#999\" }\n    },\n    \".cm-lintPoint-hint\": {\n        \"&:after\": { borderBottomColor: \"#66d\" }\n    },\n    \".cm-panel.cm-panel-lint\": {\n        position: \"relative\",\n        \"& ul\": {\n            maxHeight: \"100px\",\n            overflowY: \"auto\",\n            \"& [aria-selected]\": {\n                backgroundColor: \"#ddd\",\n                \"& u\": { textDecoration: \"underline\" }\n            },\n            \"&:focus [aria-selected]\": {\n                background_fallback: \"#bdf\",\n                backgroundColor: \"Highlight\",\n                color_fallback: \"white\",\n                color: \"HighlightText\"\n            },\n            \"& u\": { textDecoration: \"none\" },\n            padding: 0,\n            margin: 0\n        },\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"2px\",\n            background: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        }\n    }\n});\nfunction severityWeight(sev) {\n    return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nclass LintGutterMarker extends GutterMarker {\n    constructor(diagnostics) {\n        super();\n        this.diagnostics = diagnostics;\n        this.severity = diagnostics.reduce((max, d) => severityWeight(max) < severityWeight(d.severity) ? d.severity : max, \"hint\");\n    }\n    toDOM(view) {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n        let diagnostics = this.diagnostics;\n        let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n        if (diagnosticsFilter)\n            diagnostics = diagnosticsFilter(diagnostics, view.state);\n        if (diagnostics.length)\n            elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n        return elt;\n    }\n}\nfunction trackHoverOn(view, marker) {\n    let mousemove = (event) => {\n        let rect = marker.getBoundingClientRect();\n        if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n            event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n            return;\n        for (let target = event.target; target; target = target.parentNode) {\n            if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n                return;\n        }\n        window.removeEventListener(\"mousemove\", mousemove);\n        if (view.state.field(lintGutterTooltip))\n            view.dispatch({ effects: setLintGutterTooltip.of(null) });\n    };\n    window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n    function hovered() {\n        let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n        const linePos = view.coordsAtPos(line.from);\n        if (linePos) {\n            view.dispatch({ effects: setLintGutterTooltip.of({\n                    pos: line.from,\n                    above: false,\n                    create() {\n                        return {\n                            dom: diagnosticsTooltip(view, diagnostics),\n                            getCoords: () => marker.getBoundingClientRect()\n                        };\n                    }\n                }) });\n        }\n        marker.onmouseout = marker.onmousemove = null;\n        trackHoverOn(view, marker);\n    }\n    let { hoverTime } = view.state.facet(lintGutterConfig);\n    let hoverTimeout = setTimeout(hovered, hoverTime);\n    marker.onmouseout = () => {\n        clearTimeout(hoverTimeout);\n        marker.onmouseout = marker.onmousemove = null;\n    };\n    marker.onmousemove = () => {\n        clearTimeout(hoverTimeout);\n        hoverTimeout = setTimeout(hovered, hoverTime);\n    };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n    let byLine = Object.create(null);\n    for (let diagnostic of diagnostics) {\n        let line = doc.lineAt(diagnostic.from);\n        (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n    }\n    let markers = [];\n    for (let line in byLine) {\n        markers.push(new LintGutterMarker(byLine[line]).range(+line));\n    }\n    return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n    class: \"cm-gutter-lint\",\n    markers: view => view.state.field(lintGutterMarkers),\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n    create() {\n        return RangeSet.empty;\n    },\n    update(markers, tr) {\n        markers = markers.map(tr.changes);\n        let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n        for (let effect of tr.effects) {\n            if (effect.is(setDiagnosticsEffect)) {\n                let diagnostics = effect.value;\n                if (diagnosticFilter)\n                    diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n                markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n            }\n        }\n        return markers;\n    }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(tooltip, tr) {\n        if (tooltip && tr.docChanged)\n            tooltip = hideTooltip(tr, tooltip) ? null : Object.assign(Object.assign({}, tooltip), { pos: tr.changes.mapPos(tooltip.pos) });\n        return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n    },\n    provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-gutter-lint\": {\n        width: \"1.4em\",\n        \"& .cm-gutterElement\": {\n            padding: \".2em\"\n        }\n    },\n    \".cm-lint-marker\": {\n        width: \"1em\",\n        height: \"1em\"\n    },\n    \".cm-lint-marker-info\": {\n        content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n    },\n    \".cm-lint-marker-warning\": {\n        content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n    },\n    \".cm-lint-marker-error\": {\n        content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n    },\n});\nconst lintExtensions = [\n    lintState,\n    /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n        let { selected, panel } = state.field(lintState);\n        return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n            activeMark.range(selected.from, selected.to)\n        ]);\n    }),\n    /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n    baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            hoverTime: 300 /* Hover.Time */,\n            markerFilter: null,\n            tooltipFilter: null\n        });\n    }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n    return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n    let lState = state.field(lintState, false);\n    if (lState && lState.diagnostics.size)\n        for (let iter = RangeSet.iter([lState.diagnostics]); iter.value; iter.next())\n            f(iter.value.spec.diagnostic, iter.from, iter.to);\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n","import { NodeType, NodeProp, NodeSet, Tree, Parser, parseMixed } from '@lezer/common';\nimport { styleTags, tags, Tag } from '@lezer/highlight';\n\nclass CompositeBlock {\n    static create(type, value, from, parentHash, end) {\n        let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0;\n        return new CompositeBlock(type, value, from, hash, end, [], []);\n    }\n    constructor(type, \n    // Used for indentation in list items, markup character in lists\n    value, from, hash, end, children, positions) {\n        this.type = type;\n        this.value = value;\n        this.from = from;\n        this.hash = hash;\n        this.end = end;\n        this.children = children;\n        this.positions = positions;\n        this.hashProp = [[NodeProp.contextHash, hash]];\n    }\n    addChild(child, pos) {\n        if (child.prop(NodeProp.contextHash) != this.hash)\n            child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);\n        this.children.push(child);\n        this.positions.push(pos);\n    }\n    toTree(nodeSet, end = this.end) {\n        let last = this.children.length - 1;\n        if (last >= 0)\n            end = Math.max(end, this.positions[last] + this.children[last].length + this.from);\n        return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n            makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n        });\n    }\n}\nvar Type;\n(function (Type) {\n    Type[Type[\"Document\"] = 1] = \"Document\";\n    Type[Type[\"CodeBlock\"] = 2] = \"CodeBlock\";\n    Type[Type[\"FencedCode\"] = 3] = \"FencedCode\";\n    Type[Type[\"Blockquote\"] = 4] = \"Blockquote\";\n    Type[Type[\"HorizontalRule\"] = 5] = \"HorizontalRule\";\n    Type[Type[\"BulletList\"] = 6] = \"BulletList\";\n    Type[Type[\"OrderedList\"] = 7] = \"OrderedList\";\n    Type[Type[\"ListItem\"] = 8] = \"ListItem\";\n    Type[Type[\"ATXHeading1\"] = 9] = \"ATXHeading1\";\n    Type[Type[\"ATXHeading2\"] = 10] = \"ATXHeading2\";\n    Type[Type[\"ATXHeading3\"] = 11] = \"ATXHeading3\";\n    Type[Type[\"ATXHeading4\"] = 12] = \"ATXHeading4\";\n    Type[Type[\"ATXHeading5\"] = 13] = \"ATXHeading5\";\n    Type[Type[\"ATXHeading6\"] = 14] = \"ATXHeading6\";\n    Type[Type[\"SetextHeading1\"] = 15] = \"SetextHeading1\";\n    Type[Type[\"SetextHeading2\"] = 16] = \"SetextHeading2\";\n    Type[Type[\"HTMLBlock\"] = 17] = \"HTMLBlock\";\n    Type[Type[\"LinkReference\"] = 18] = \"LinkReference\";\n    Type[Type[\"Paragraph\"] = 19] = \"Paragraph\";\n    Type[Type[\"CommentBlock\"] = 20] = \"CommentBlock\";\n    Type[Type[\"ProcessingInstructionBlock\"] = 21] = \"ProcessingInstructionBlock\";\n    // Inline\n    Type[Type[\"Escape\"] = 22] = \"Escape\";\n    Type[Type[\"Entity\"] = 23] = \"Entity\";\n    Type[Type[\"HardBreak\"] = 24] = \"HardBreak\";\n    Type[Type[\"Emphasis\"] = 25] = \"Emphasis\";\n    Type[Type[\"StrongEmphasis\"] = 26] = \"StrongEmphasis\";\n    Type[Type[\"Link\"] = 27] = \"Link\";\n    Type[Type[\"Image\"] = 28] = \"Image\";\n    Type[Type[\"InlineCode\"] = 29] = \"InlineCode\";\n    Type[Type[\"HTMLTag\"] = 30] = \"HTMLTag\";\n    Type[Type[\"Comment\"] = 31] = \"Comment\";\n    Type[Type[\"ProcessingInstruction\"] = 32] = \"ProcessingInstruction\";\n    Type[Type[\"Autolink\"] = 33] = \"Autolink\";\n    // Smaller tokens\n    Type[Type[\"HeaderMark\"] = 34] = \"HeaderMark\";\n    Type[Type[\"QuoteMark\"] = 35] = \"QuoteMark\";\n    Type[Type[\"ListMark\"] = 36] = \"ListMark\";\n    Type[Type[\"LinkMark\"] = 37] = \"LinkMark\";\n    Type[Type[\"EmphasisMark\"] = 38] = \"EmphasisMark\";\n    Type[Type[\"CodeMark\"] = 39] = \"CodeMark\";\n    Type[Type[\"CodeText\"] = 40] = \"CodeText\";\n    Type[Type[\"CodeInfo\"] = 41] = \"CodeInfo\";\n    Type[Type[\"LinkTitle\"] = 42] = \"LinkTitle\";\n    Type[Type[\"LinkLabel\"] = 43] = \"LinkLabel\";\n    Type[Type[\"URL\"] = 44] = \"URL\";\n})(Type || (Type = {}));\n/// Data structure used to accumulate a block's content during [leaf\n/// block parsing](#BlockParser.leaf).\nclass LeafBlock {\n    /// @internal\n    constructor(\n    /// The start position of the block.\n    start, \n    /// The block's text content.\n    content) {\n        this.start = start;\n        this.content = content;\n        /// @internal\n        this.marks = [];\n        /// The block parsers active for this block.\n        this.parsers = [];\n    }\n}\n/// Data structure used during block-level per-line parsing.\nclass Line {\n    constructor() {\n        /// The line's full text.\n        this.text = \"\";\n        /// The base indent provided by the composite contexts (that have\n        /// been handled so far).\n        this.baseIndent = 0;\n        /// The string position corresponding to the base indent.\n        this.basePos = 0;\n        /// The number of contexts handled @internal\n        this.depth = 0;\n        /// Any markers (i.e. block quote markers) parsed for the contexts. @internal\n        this.markers = [];\n        /// The position of the next non-whitespace character beyond any\n        /// list, blockquote, or other composite block markers.\n        this.pos = 0;\n        /// The column of the next non-whitespace character.\n        this.indent = 0;\n        /// The character code of the character after `pos`.\n        this.next = -1;\n    }\n    /// @internal\n    forward() {\n        if (this.basePos > this.pos)\n            this.forwardInner();\n    }\n    /// @internal\n    forwardInner() {\n        let newPos = this.skipSpace(this.basePos);\n        this.indent = this.countIndent(newPos, this.pos, this.indent);\n        this.pos = newPos;\n        this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);\n    }\n    /// Skip whitespace after the given position, return the position of\n    /// the next non-space character or the end of the line if there's\n    /// only space after `from`.\n    skipSpace(from) { return skipSpace(this.text, from); }\n    /// @internal\n    reset(text) {\n        this.text = text;\n        this.baseIndent = this.basePos = this.pos = this.indent = 0;\n        this.forwardInner();\n        this.depth = 1;\n        while (this.markers.length)\n            this.markers.pop();\n    }\n    /// Move the line's base position forward to the given position.\n    /// This should only be called by composite [block\n    /// parsers](#BlockParser.parse) or [markup skipping\n    /// functions](#NodeSpec.composite).\n    moveBase(to) {\n        this.basePos = to;\n        this.baseIndent = this.countIndent(to, this.pos, this.indent);\n    }\n    /// Move the line's base position forward to the given _column_.\n    moveBaseColumn(indent) {\n        this.baseIndent = indent;\n        this.basePos = this.findColumn(indent);\n    }\n    /// Store a composite-block-level marker. Should be called from\n    /// [markup skipping functions](#NodeSpec.composite) when they\n    /// consume any non-whitespace characters.\n    addMarker(elt) {\n        this.markers.push(elt);\n    }\n    /// Find the column position at `to`, optionally starting at a given\n    /// position and column.\n    countIndent(to, from = 0, indent = 0) {\n        for (let i = from; i < to; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return indent;\n    }\n    /// Find the position corresponding to the given column.\n    findColumn(goal) {\n        let i = 0;\n        for (let indent = 0; i < this.text.length && indent < goal; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return i;\n    }\n    /// @internal\n    scrub() {\n        if (!this.baseIndent)\n            return this.text;\n        let result = \"\";\n        for (let i = 0; i < this.basePos; i++)\n            result += \" \";\n        return result + this.text.slice(this.basePos);\n    }\n}\nfunction skipForList(bl, cx, line) {\n    if (line.pos == line.text.length ||\n        (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent))\n        return true;\n    if (line.indent >= line.baseIndent + 4)\n        return false;\n    let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);\n    return size > 0 &&\n        (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n        line.text.charCodeAt(line.pos + size - 1) == bl.value;\n}\nconst DefaultSkipMarkup = {\n    [Type.Blockquote](bl, cx, line) {\n        if (line.next != 62 /* '>' */)\n            return false;\n        line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));\n        line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));\n        bl.end = cx.lineStart + line.text.length;\n        return true;\n    },\n    [Type.ListItem](bl, _cx, line) {\n        if (line.indent < line.baseIndent + bl.value && line.next > -1)\n            return false;\n        line.moveBaseColumn(line.baseIndent + bl.value);\n        return true;\n    },\n    [Type.OrderedList]: skipForList,\n    [Type.BulletList]: skipForList,\n    [Type.Document]() { return true; }\n};\nfunction space(ch) { return ch == 32 || ch == 9 || ch == 10 || ch == 13; }\nfunction skipSpace(line, i = 0) {\n    while (i < line.length && space(line.charCodeAt(i)))\n        i++;\n    return i;\n}\nfunction skipSpaceBack(line, i, to) {\n    while (i > to && space(line.charCodeAt(i - 1)))\n        i--;\n    return i;\n}\nfunction isFencedCode(line) {\n    if (line.next != 96 && line.next != 126 /* '`~' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    if (pos < line.pos + 3)\n        return -1;\n    if (line.next == 96)\n        for (let i = pos; i < line.text.length; i++)\n            if (line.text.charCodeAt(i) == 96)\n                return -1;\n    return pos;\n}\nfunction isBlockquote(line) {\n    return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;\n}\nfunction isHorizontalRule(line, cx, breaking) {\n    if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */)\n        return -1;\n    let count = 1;\n    for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n        let ch = line.text.charCodeAt(pos);\n        if (ch == line.next)\n            count++;\n        else if (!space(ch))\n            return -1;\n    }\n    // Setext headers take precedence\n    if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length)\n        return -1;\n    return count < 3 ? -1 : 1;\n}\nfunction inList(cx, type) {\n    for (let i = cx.stack.length - 1; i >= 0; i--)\n        if (cx.stack[i].type == type)\n            return true;\n    return false;\n}\nfunction isBulletList(line, cx, breaking) {\n    return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n        (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n        (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;\n}\nfunction isOrderedList(line, cx, breaking) {\n    let pos = line.pos, next = line.next;\n    for (;;) {\n        if (next >= 48 && next <= 57 /* '0-9' */)\n            pos++;\n        else\n            break;\n        if (pos == line.text.length)\n            return -1;\n        next = line.text.charCodeAt(pos);\n    }\n    if (pos == line.pos || pos > line.pos + 9 ||\n        (next != 46 && next != 41 /* '.)' */) ||\n        (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n        breaking && !inList(cx, Type.OrderedList) &&\n            (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n        return -1;\n    return pos + 1 - line.pos;\n}\nfunction isAtxHeading(line) {\n    if (line.next != 35 /* '#' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == 35)\n        pos++;\n    if (pos < line.text.length && line.text.charCodeAt(pos) != 32)\n        return -1;\n    let size = pos - line.pos;\n    return size > 6 ? -1 : size;\n}\nfunction isSetextUnderline(line) {\n    if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    let end = pos;\n    while (pos < line.text.length && space(line.text.charCodeAt(pos)))\n        pos++;\n    return pos == line.text.length ? end : -1;\n}\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/;\nconst HTMLBlockStyle = [\n    [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n    [/^\\s*<!--/, CommentEnd],\n    [/^\\s*<\\?/, ProcessingEnd],\n    [/^\\s*<![A-Z]/, />/],\n    [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n    [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n    [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n];\nfunction isHTMLBlock(line, _cx, breaking) {\n    if (line.next != 60 /* '<' */)\n        return -1;\n    let rest = line.text.slice(line.pos);\n    for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n        if (HTMLBlockStyle[i][0].test(rest))\n            return i;\n    return -1;\n}\nfunction getListIndent(line, pos) {\n    let indentAfter = line.countIndent(pos, line.pos, line.indent);\n    let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);\n    return indented >= indentAfter + 5 ? indentAfter + 1 : indented;\n}\nfunction addCodeText(marks, from, to) {\n    let last = marks.length - 1;\n    if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText)\n        marks[last].to = to;\n    else\n        marks.push(elt(Type.CodeText, from, to));\n}\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers = {\n    LinkReference: undefined,\n    IndentedCode(cx, line) {\n        let base = line.baseIndent + 4;\n        if (line.indent < base)\n            return false;\n        let start = line.findColumn(base);\n        let from = cx.lineStart + start, to = cx.lineStart + line.text.length;\n        let marks = [], pendingMarks = [];\n        addCodeText(marks, from, to);\n        while (cx.nextLine() && line.depth >= cx.stack.length) {\n            if (line.pos == line.text.length) { // Empty\n                addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    pendingMarks.push(m);\n            }\n            else if (line.indent < base) {\n                break;\n            }\n            else {\n                if (pendingMarks.length) {\n                    for (let m of pendingMarks) {\n                        if (m.type == Type.CodeText)\n                            addCodeText(marks, m.from, m.to);\n                        else\n                            marks.push(m);\n                    }\n                    pendingMarks = [];\n                }\n                addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                to = cx.lineStart + line.text.length;\n                let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);\n                if (codeStart < to)\n                    addCodeText(marks, codeStart, to);\n            }\n        }\n        if (pendingMarks.length) {\n            pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);\n            if (pendingMarks.length)\n                line.markers = pendingMarks.concat(line.markers);\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);\n        return true;\n    },\n    FencedCode(cx, line) {\n        let fenceEnd = isFencedCode(line);\n        if (fenceEnd < 0)\n            return false;\n        let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos;\n        let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);\n        let marks = [elt(Type.CodeMark, from, from + len)];\n        if (infoFrom < infoTo)\n            marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));\n        for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n            let i = line.pos;\n            if (line.indent - line.baseIndent < 4)\n                while (i < line.text.length && line.text.charCodeAt(i) == ch)\n                    i++;\n            if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n                for (let m of line.markers)\n                    marks.push(m);\n                marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));\n                cx.nextLine();\n                break;\n            }\n            else {\n                if (!first)\n                    addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length;\n                if (textStart < textEnd)\n                    addCodeText(marks, textStart, textEnd);\n            }\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from)\n            .finish(Type.FencedCode, cx.prevLineEnd() - from), from);\n        return true;\n    },\n    Blockquote(cx, line) {\n        let size = isBlockquote(line);\n        if (size < 0)\n            return false;\n        cx.startContext(Type.Blockquote, line.pos);\n        cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);\n        line.moveBase(line.pos + size);\n        return null;\n    },\n    HorizontalRule(cx, line) {\n        if (isHorizontalRule(line, cx, false) < 0)\n            return false;\n        let from = cx.lineStart + line.pos;\n        cx.nextLine();\n        cx.addNode(Type.HorizontalRule, from);\n        return true;\n    },\n    BulletList(cx, line) {\n        let size = isBulletList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.BulletList)\n            cx.startContext(Type.BulletList, line.basePos, line.next);\n        let newBase = getListIndent(line, line.pos + 1);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    OrderedList(cx, line) {\n        let size = isOrderedList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.OrderedList)\n            cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));\n        let newBase = getListIndent(line, line.pos + size);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    ATXHeading(cx, line) {\n        let size = isAtxHeading(line);\n        if (size < 0)\n            return false;\n        let off = line.pos, from = cx.lineStart + off;\n        let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace;\n        while (after > off && line.text.charCodeAt(after - 1) == line.next)\n            after--;\n        if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1)))\n            after = line.text.length;\n        let buf = cx.buffer\n            .write(Type.HeaderMark, 0, size)\n            .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);\n        if (after < line.text.length)\n            buf.write(Type.HeaderMark, after - off, endOfSpace - off);\n        let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);\n        cx.nextLine();\n        cx.addNode(node, from);\n        return true;\n    },\n    HTMLBlock(cx, line) {\n        let type = isHTMLBlock(line, cx, false);\n        if (type < 0)\n            return false;\n        let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1];\n        let marks = [], trailing = end != EmptyLine;\n        while (!end.test(line.text) && cx.nextLine()) {\n            if (line.depth < cx.stack.length) {\n                trailing = false;\n                break;\n            }\n            for (let m of line.markers)\n                marks.push(m);\n        }\n        if (trailing)\n            cx.nextLine();\n        let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;\n        let to = cx.prevLineEnd();\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);\n        return true;\n    },\n    SetextHeading: undefined // Specifies relative precedence for block-continue function\n};\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser {\n    constructor(leaf) {\n        this.stage = 0 /* RefStage.Start */;\n        this.elts = [];\n        this.pos = 0;\n        this.start = leaf.start;\n        this.advance(leaf.content);\n    }\n    nextLine(cx, line, leaf) {\n        if (this.stage == -1 /* RefStage.Failed */)\n            return false;\n        let content = leaf.content + \"\\n\" + line.scrub();\n        let finish = this.advance(content);\n        if (finish > -1 && finish < content.length)\n            return this.complete(cx, leaf, finish);\n        return false;\n    }\n    finish(cx, leaf) {\n        if ((this.stage == 2 /* RefStage.Link */ || this.stage == 3 /* RefStage.Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n            return this.complete(cx, leaf, leaf.content.length);\n        return false;\n    }\n    complete(cx, leaf, len) {\n        cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));\n        return true;\n    }\n    nextStage(elt) {\n        if (elt) {\n            this.pos = elt.to - this.start;\n            this.elts.push(elt);\n            this.stage++;\n            return true;\n        }\n        if (elt === false)\n            this.stage = -1 /* RefStage.Failed */;\n        return false;\n    }\n    advance(content) {\n        for (;;) {\n            if (this.stage == -1 /* RefStage.Failed */) {\n                return -1;\n            }\n            else if (this.stage == 0 /* RefStage.Start */) {\n                if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true)))\n                    return -1;\n                if (content.charCodeAt(this.pos) != 58 /* ':' */)\n                    return this.stage = -1 /* RefStage.Failed */;\n                this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));\n                this.pos++;\n            }\n            else if (this.stage == 1 /* RefStage.Label */) {\n                if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start)))\n                    return -1;\n            }\n            else if (this.stage == 2 /* RefStage.Link */) {\n                let skip = skipSpace(content, this.pos), end = 0;\n                if (skip > this.pos) {\n                    let title = parseLinkTitle(content, skip, this.start);\n                    if (title) {\n                        let titleEnd = lineEnd(content, title.to - this.start);\n                        if (titleEnd > 0) {\n                            this.nextStage(title);\n                            end = titleEnd;\n                        }\n                    }\n                }\n                if (!end)\n                    end = lineEnd(content, this.pos);\n                return end > 0 && end < content.length ? end : -1;\n            }\n            else { // RefStage.Title\n                return lineEnd(content, this.pos);\n            }\n        }\n    }\n}\nfunction lineEnd(text, pos) {\n    for (; pos < text.length; pos++) {\n        let next = text.charCodeAt(pos);\n        if (next == 10)\n            break;\n        if (!space(next))\n            return -1;\n    }\n    return pos;\n}\nclass SetextHeadingParser {\n    nextLine(cx, line, leaf) {\n        let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);\n        let next = line.next;\n        if (underline < 0)\n            return false;\n        let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);\n        cx.nextLine();\n        cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n            ...cx.parser.parseInline(leaf.content, leaf.start),\n            underlineMark\n        ]));\n        return true;\n    }\n    finish() {\n        return false;\n    }\n}\nconst DefaultLeafBlocks = {\n    LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null; },\n    SetextHeading() { return new SetextHeadingParser; }\n};\nconst DefaultEndLeaf = [\n    (_, line) => isAtxHeading(line) >= 0,\n    (_, line) => isFencedCode(line) >= 0,\n    (_, line) => isBlockquote(line) >= 0,\n    (p, line) => isBulletList(line, p, true) >= 0,\n    (p, line) => isOrderedList(line, p, true) >= 0,\n    (p, line) => isHorizontalRule(line, p, true) >= 0,\n    (p, line) => isHTMLBlock(line, p, true) >= 0\n];\nconst scanLineResult = { text: \"\", end: 0 };\n/// Block-level parsing functions get access to this context object.\nclass BlockContext {\n    /// @internal\n    constructor(\n    /// The parser configuration used.\n    parser, \n    /// @internal\n    input, fragments, \n    /// @internal\n    ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.line = new Line();\n        this.atEnd = false;\n        /// For reused nodes on gaps, we can't directly put the original\n        /// node into the tree, since that may be bitter than its parent.\n        /// When this happens, we create a dummy tree that is replaced by\n        /// the proper node in `injectGaps` @internal\n        this.reusePlaceholders = new Map;\n        this.stoppedAt = null;\n        /// The range index that absoluteLineStart points into @internal\n        this.rangeI = 0;\n        this.to = ranges[ranges.length - 1].to;\n        this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;\n        this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);\n        this.stack = [this.block];\n        this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;\n        this.readLine();\n    }\n    get parsedPos() {\n        return this.absoluteLineStart;\n    }\n    advance() {\n        if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n            return this.finish();\n        let { line } = this;\n        for (;;) {\n            for (let markI = 0;;) {\n                let next = line.depth < this.stack.length ? this.stack[this.stack.length - 1] : null;\n                while (markI < line.markers.length && (!next || line.markers[markI].from < next.end)) {\n                    let mark = line.markers[markI++];\n                    this.addNode(mark.type, mark.from, mark.to);\n                }\n                if (!next)\n                    break;\n                this.finishContext();\n            }\n            if (line.pos < line.text.length)\n                break;\n            // Empty line\n            if (!this.nextLine())\n                return this.finish();\n        }\n        if (this.fragments && this.reuseFragment(line.basePos))\n            return null;\n        start: for (;;) {\n            for (let type of this.parser.blockParsers)\n                if (type) {\n                    let result = type(this, line);\n                    if (result != false) {\n                        if (result == true)\n                            return null;\n                        line.forward();\n                        continue start;\n                    }\n                }\n            break;\n        }\n        let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));\n        for (let parse of this.parser.leafBlockParsers)\n            if (parse) {\n                let parser = parse(this, leaf);\n                if (parser)\n                    leaf.parsers.push(parser);\n            }\n        lines: while (this.nextLine()) {\n            if (line.pos == line.text.length)\n                break;\n            if (line.indent < line.baseIndent + 4) {\n                for (let stop of this.parser.endLeafBlock)\n                    if (stop(this, line, leaf))\n                        break lines;\n            }\n            for (let parser of leaf.parsers)\n                if (parser.nextLine(this, line, leaf))\n                    return null;\n            leaf.content += \"\\n\" + line.scrub();\n            for (let m of line.markers)\n                leaf.marks.push(m);\n        }\n        this.finishLeaf(leaf);\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    reuseFragment(start) {\n        if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n            !this.fragments.matches(this.block.hash))\n            return false;\n        let taken = this.fragments.takeNodes(this);\n        if (!taken)\n            return false;\n        this.absoluteLineStart += taken;\n        this.lineStart = toRelative(this.absoluteLineStart, this.ranges);\n        this.moveRangeI();\n        if (this.absoluteLineStart < this.to) {\n            this.lineStart++;\n            this.absoluteLineStart++;\n            this.readLine();\n        }\n        else {\n            this.atEnd = true;\n            this.readLine();\n        }\n        return true;\n    }\n    /// The number of parent blocks surrounding the current block.\n    get depth() {\n        return this.stack.length;\n    }\n    /// Get the type of the parent block at the given depth. When no\n    /// depth is passed, return the type of the innermost parent.\n    parentType(depth = this.depth - 1) {\n        return this.parser.nodeSet.types[this.stack[depth].type];\n    }\n    /// Move to the next input line. This should only be called by\n    /// (non-composite) [block parsers](#BlockParser.parse) that consume\n    /// the line directly, or leaf block parser\n    /// [`nextLine`](#LeafBlockParser.nextLine) methods when they\n    /// consume the current line (and return true).\n    nextLine() {\n        this.lineStart += this.line.text.length;\n        if (this.absoluteLineEnd >= this.to) {\n            this.absoluteLineStart = this.absoluteLineEnd;\n            this.atEnd = true;\n            this.readLine();\n            return false;\n        }\n        else {\n            this.lineStart++;\n            this.absoluteLineStart = this.absoluteLineEnd + 1;\n            this.moveRangeI();\n            this.readLine();\n            return true;\n        }\n    }\n    moveRangeI() {\n        while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n            this.rangeI++;\n            this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);\n        }\n    }\n    /// @internal\n    scanLine(start) {\n        let r = scanLineResult;\n        r.end = start;\n        if (start >= this.to) {\n            r.text = \"\";\n        }\n        else {\n            r.text = this.lineChunkAt(start);\n            r.end += r.text.length;\n            if (this.ranges.length > 1) {\n                let textOffset = this.absoluteLineStart, rangeI = this.rangeI;\n                while (this.ranges[rangeI].to < r.end) {\n                    rangeI++;\n                    let nextFrom = this.ranges[rangeI].from;\n                    let after = this.lineChunkAt(nextFrom);\n                    r.end = nextFrom + after.length;\n                    r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;\n                    textOffset = r.end - r.text.length;\n                }\n            }\n        }\n        return r;\n    }\n    /// @internal\n    readLine() {\n        let { line } = this, { text, end } = this.scanLine(this.absoluteLineStart);\n        this.absoluteLineEnd = end;\n        line.reset(text);\n        for (; line.depth < this.stack.length; line.depth++) {\n            let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type];\n            if (!handler)\n                throw new Error(\"Unhandled block context \" + Type[cx.type]);\n            if (!handler(cx, this, line))\n                break;\n            line.forward();\n        }\n    }\n    lineChunkAt(pos) {\n        let next = this.input.chunk(pos), text;\n        if (!this.input.lineChunks) {\n            let eol = next.indexOf(\"\\n\");\n            text = eol < 0 ? next : next.slice(0, eol);\n        }\n        else {\n            text = next == \"\\n\" ? \"\" : next;\n        }\n        return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;\n    }\n    /// The end position of the previous line.\n    prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; }\n    /// @internal\n    startContext(type, start, value = 0) {\n        this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);\n        this.stack.push(this.block);\n    }\n    /// Start a composite block. Should only be called from [block\n    /// parser functions](#BlockParser.parse) that return null.\n    startComposite(type, start, value = 0) {\n        this.startContext(this.parser.getNodeType(type), start, value);\n    }\n    /// @internal\n    addNode(block, from, to) {\n        if (typeof block == \"number\")\n            block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);\n        this.block.addChild(block, from - this.block.from);\n    }\n    /// Add a block element. Can be called by [block\n    /// parsers](#BlockParser.parse).\n    addElement(elt) {\n        this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);\n    }\n    /// Add a block element from a [leaf parser](#LeafBlockParser). This\n    /// makes sure any extra composite block markup (such as blockquote\n    /// markers) inside the block are also added to the syntax tree.\n    addLeafElement(leaf, elt) {\n        this.addNode(this.buffer\n            .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n            .finish(elt.type, elt.to - elt.from), elt.from);\n    }\n    /// @internal\n    finishContext() {\n        let cx = this.stack.pop();\n        let top = this.stack[this.stack.length - 1];\n        top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);\n        this.block = top;\n    }\n    finish() {\n        while (this.stack.length > 1)\n            this.finishContext();\n        return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));\n    }\n    addGaps(tree) {\n        return this.ranges.length > 1 ?\n            injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree;\n    }\n    /// @internal\n    finishLeaf(leaf) {\n        for (let parser of leaf.parsers)\n            if (parser.finish(this, leaf))\n                return;\n        let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);\n        this.addNode(this.buffer\n            .writeElements(inline, -leaf.start)\n            .finish(Type.Paragraph, leaf.content.length), leaf.start);\n    }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n    /// @internal\n    get buffer() { return new Buffer(this.parser.nodeSet); }\n}\nfunction injectGaps(ranges, rangeI, tree, offset, dummies) {\n    let rangeEnd = ranges[rangeI].to;\n    let children = [], positions = [], start = tree.from + offset;\n    function movePastNext(upto, inclusive) {\n        while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n            let size = ranges[rangeI + 1].from - rangeEnd;\n            offset += size;\n            upto += size;\n            rangeI++;\n            rangeEnd = ranges[rangeI].to;\n        }\n    }\n    for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n        movePastNext(ch.from + offset, true);\n        let from = ch.from + offset, node, reuse = dummies.get(ch.tree);\n        if (reuse) {\n            node = reuse;\n        }\n        else if (ch.to + offset > rangeEnd) {\n            node = injectGaps(ranges, rangeI, ch, offset, dummies);\n            movePastNext(ch.to + offset, false);\n        }\n        else {\n            node = ch.toTree();\n        }\n        children.push(node);\n        positions.push(from - start);\n    }\n    movePastNext(tree.to + offset, false);\n    return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);\n}\n/// A Markdown parser configuration.\nclass MarkdownParser extends Parser {\n    /// @internal\n    constructor(\n    /// The parser's syntax [node\n    /// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n    nodeSet, \n    /// @internal\n    blockParsers, \n    /// @internal\n    leafBlockParsers, \n    /// @internal\n    blockNames, \n    /// @internal\n    endLeafBlock, \n    /// @internal\n    skipContextMarkup, \n    /// @internal\n    inlineParsers, \n    /// @internal\n    inlineNames, \n    /// @internal\n    wrappers) {\n        super();\n        this.nodeSet = nodeSet;\n        this.blockParsers = blockParsers;\n        this.leafBlockParsers = leafBlockParsers;\n        this.blockNames = blockNames;\n        this.endLeafBlock = endLeafBlock;\n        this.skipContextMarkup = skipContextMarkup;\n        this.inlineParsers = inlineParsers;\n        this.inlineNames = inlineNames;\n        this.wrappers = wrappers;\n        /// @internal\n        this.nodeTypes = Object.create(null);\n        for (let t of nodeSet.types)\n            this.nodeTypes[t.name] = t.id;\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new BlockContext(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /// Reconfigure the parser.\n    configure(spec) {\n        let config = resolveConfig(spec);\n        if (!config)\n            return this;\n        let { nodeSet, skipContextMarkup } = this;\n        let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(), blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(), inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(), wrappers = this.wrappers;\n        if (nonEmpty(config.defineNodes)) {\n            skipContextMarkup = Object.assign({}, skipContextMarkup);\n            let nodeTypes = nodeSet.types.slice(), styles;\n            for (let s of config.defineNodes) {\n                let { name, block, composite, style } = typeof s == \"string\" ? { name: s } : s;\n                if (nodeTypes.some(t => t.name == name))\n                    continue;\n                if (composite)\n                    skipContextMarkup[nodeTypes.length] =\n                        (bl, cx, line) => composite(cx, line, bl.value);\n                let id = nodeTypes.length;\n                let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n                    : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"];\n                nodeTypes.push(NodeType.define({\n                    id,\n                    name,\n                    props: group && [[NodeProp.group, group]]\n                }));\n                if (style) {\n                    if (!styles)\n                        styles = {};\n                    if (Array.isArray(style) || style instanceof Tag)\n                        styles[name] = style;\n                    else\n                        Object.assign(styles, style);\n                }\n            }\n            nodeSet = new NodeSet(nodeTypes);\n            if (styles)\n                nodeSet = nodeSet.extend(styleTags(styles));\n        }\n        if (nonEmpty(config.props))\n            nodeSet = nodeSet.extend(...config.props);\n        if (nonEmpty(config.remove)) {\n            for (let rm of config.remove) {\n                let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm);\n                if (block > -1)\n                    blockParsers[block] = leafBlockParsers[block] = undefined;\n                if (inline > -1)\n                    inlineParsers[inline] = undefined;\n            }\n        }\n        if (nonEmpty(config.parseBlock)) {\n            for (let spec of config.parseBlock) {\n                let found = blockNames.indexOf(spec.name);\n                if (found > -1) {\n                    blockParsers[found] = spec.parse;\n                    leafBlockParsers[found] = spec.leaf;\n                }\n                else {\n                    let pos = spec.before ? findName(blockNames, spec.before)\n                        : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;\n                    blockParsers.splice(pos, 0, spec.parse);\n                    leafBlockParsers.splice(pos, 0, spec.leaf);\n                    blockNames.splice(pos, 0, spec.name);\n                }\n                if (spec.endLeaf)\n                    endLeafBlock.push(spec.endLeaf);\n            }\n        }\n        if (nonEmpty(config.parseInline)) {\n            for (let spec of config.parseInline) {\n                let found = inlineNames.indexOf(spec.name);\n                if (found > -1) {\n                    inlineParsers[found] = spec.parse;\n                }\n                else {\n                    let pos = spec.before ? findName(inlineNames, spec.before)\n                        : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;\n                    inlineParsers.splice(pos, 0, spec.parse);\n                    inlineNames.splice(pos, 0, spec.name);\n                }\n            }\n        }\n        if (config.wrap)\n            wrappers = wrappers.concat(config.wrap);\n        return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);\n    }\n    /// @internal\n    getNodeType(name) {\n        let found = this.nodeTypes[name];\n        if (found == null)\n            throw new RangeError(`Unknown node type '${name}'`);\n        return found;\n    }\n    /// Parse the given piece of inline text at the given offset,\n    /// returning an array of [`Element`](#Element) objects representing\n    /// the inline content.\n    parseInline(text, offset) {\n        let cx = new InlineContext(this, text, offset);\n        outer: for (let pos = offset; pos < cx.end;) {\n            let next = cx.char(pos);\n            for (let token of this.inlineParsers)\n                if (token) {\n                    let result = token(cx, next, pos);\n                    if (result >= 0) {\n                        pos = result;\n                        continue outer;\n                    }\n                }\n            pos++;\n        }\n        return cx.resolveMarkers(0);\n    }\n}\nfunction nonEmpty(a) {\n    return a != null && a.length > 0;\n}\nfunction resolveConfig(spec) {\n    if (!Array.isArray(spec))\n        return spec;\n    if (spec.length == 0)\n        return null;\n    let conf = resolveConfig(spec[0]);\n    if (spec.length == 1)\n        return conf;\n    let rest = resolveConfig(spec.slice(1));\n    if (!rest || !conf)\n        return conf || rest;\n    let conc = (a, b) => (a || none).concat(b || none);\n    let wrapA = conf.wrap, wrapB = rest.wrap;\n    return {\n        props: conc(conf.props, rest.props),\n        defineNodes: conc(conf.defineNodes, rest.defineNodes),\n        parseBlock: conc(conf.parseBlock, rest.parseBlock),\n        parseInline: conc(conf.parseInline, rest.parseInline),\n        remove: conc(conf.remove, rest.remove),\n        wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n            (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)\n    };\n}\nfunction findName(names, name) {\n    let found = names.indexOf(name);\n    if (found < 0)\n        throw new RangeError(`Position specified relative to unknown parser ${name}`);\n    return found;\n}\nlet nodeTypes = [NodeType.none];\nfor (let i = 1, name; name = Type[i]; i++) {\n    nodeTypes[i] = NodeType.define({\n        id: i,\n        name,\n        props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n        top: name == \"Document\"\n    });\n}\nconst none = [];\nclass Buffer {\n    constructor(nodeSet) {\n        this.nodeSet = nodeSet;\n        this.content = [];\n        this.nodes = [];\n    }\n    write(type, from, to, children = 0) {\n        this.content.push(type, from, to, 4 + children * 4);\n        return this;\n    }\n    writeElements(elts, offset = 0) {\n        for (let e of elts)\n            e.writeTo(this, offset);\n        return this;\n    }\n    finish(type, length) {\n        return Tree.build({\n            buffer: this.content,\n            nodeSet: this.nodeSet,\n            reused: this.nodes,\n            topID: type,\n            length\n        });\n    }\n}\n/// Elements are used to compose syntax nodes during parsing.\nclass Element {\n    /// @internal\n    constructor(\n    /// The node's\n    /// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n    type, \n    /// The start of the node, as an offset from the start of the document.\n    from, \n    /// The end of the node.\n    to, \n    /// The node's child nodes @internal\n    children = none) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.children = children;\n    }\n    /// @internal\n    writeTo(buf, offset) {\n        let startOff = buf.content.length;\n        buf.writeElements(this.children, offset);\n        buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);\n    }\n    /// @internal\n    toTree(nodeSet) {\n        return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);\n    }\n}\nclass TreeElement {\n    constructor(tree, from) {\n        this.tree = tree;\n        this.from = from;\n    }\n    get to() { return this.from + this.tree.length; }\n    get type() { return this.tree.type.id; }\n    get children() { return none; }\n    writeTo(buf, offset) {\n        buf.nodes.push(this.tree);\n        buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);\n    }\n    toTree() { return this.tree; }\n}\nfunction elt(type, from, to, children) {\n    return new Element(type, from, to, children);\n}\nconst EmphasisUnderscore = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst EmphasisAsterisk = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst LinkStart = {}, ImageStart = {};\nclass InlineDelimiter {\n    constructor(type, from, to, side) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.side = side;\n    }\n}\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\";\nlet Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;\ntry {\n    Punctuation = new RegExp(\"[\\\\p{Pc}|\\\\p{Pd}|\\\\p{Pe}|\\\\p{Pf}|\\\\p{Pi}|\\\\p{Po}|\\\\p{Ps}]\", \"u\");\n}\ncatch (_) { }\nconst DefaultInline = {\n    Escape(cx, next, start) {\n        if (next != 92 /* '\\\\' */ || start == cx.end - 1)\n            return -1;\n        let escaped = cx.char(start + 1);\n        for (let i = 0; i < Escapable.length; i++)\n            if (Escapable.charCodeAt(i) == escaped)\n                return cx.append(elt(Type.Escape, start, start + 2));\n        return -1;\n    },\n    Entity(cx, next, start) {\n        if (next != 38 /* '&' */)\n            return -1;\n        let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31));\n        return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;\n    },\n    InlineCode(cx, next, start) {\n        if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96)\n            return -1;\n        let pos = start + 1;\n        while (pos < cx.end && cx.char(pos) == 96)\n            pos++;\n        let size = pos - start, curSize = 0;\n        for (; pos < cx.end; pos++) {\n            if (cx.char(pos) == 96) {\n                curSize++;\n                if (curSize == size && cx.char(pos + 1) != 96)\n                    return cx.append(elt(Type.InlineCode, start, pos + 1, [\n                        elt(Type.CodeMark, start, start + size),\n                        elt(Type.CodeMark, pos + 1 - size, pos + 1)\n                    ]));\n            }\n            else {\n                curSize = 0;\n            }\n        }\n        return -1;\n    },\n    HTMLTag(cx, next, start) {\n        if (next != 60 /* '<' */ || start == cx.end - 1)\n            return -1;\n        let after = cx.slice(start + 1, cx.end);\n        let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after);\n        if (url) {\n            return cx.append(elt(Type.Autolink, start, start + 1 + url[0].length, [\n                elt(Type.LinkMark, start, start + 1),\n                // url[0] includes the closing bracket, so exclude it from this slice\n                elt(Type.URL, start + 1, start + url[0].length),\n                elt(Type.LinkMark, start + url[0].length, start + 1 + url[0].length)\n            ]));\n        }\n        let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);\n        if (comment)\n            return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));\n        let procInst = /^\\?[^]*?\\?>/.exec(after);\n        if (procInst)\n            return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));\n        let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after);\n        if (!m)\n            return -1;\n        return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));\n    },\n    Emphasis(cx, next, start) {\n        if (next != 95 && next != 42)\n            return -1;\n        let pos = start + 1;\n        while (cx.char(pos) == next)\n            pos++;\n        let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1);\n        let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n        let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n        let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);\n        let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);\n        let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);\n        let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);\n        return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (canClose ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n    },\n    HardBreak(cx, next, start) {\n        if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n            return cx.append(elt(Type.HardBreak, start, start + 2));\n        if (next == 32) {\n            let pos = start + 1;\n            while (cx.char(pos) == 32)\n                pos++;\n            if (cx.char(pos) == 10 && pos >= start + 2)\n                return cx.append(elt(Type.HardBreak, start, pos + 1));\n        }\n        return -1;\n    },\n    Link(cx, next, start) {\n        return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Mark.Open */)) : -1;\n    },\n    Image(cx, next, start) {\n        return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n            ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Mark.Open */)) : -1;\n    },\n    LinkEnd(cx, next, start) {\n        if (next != 93 /* ']' */)\n            return -1;\n        // Scanning back to the next link/image start marker\n        for (let i = cx.parts.length - 1; i >= 0; i--) {\n            let part = cx.parts[i];\n            if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n                // If this one has been set invalid (because it would produce\n                // a nested link) or there's no valid link here ignore both.\n                if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n                    cx.parts[i] = null;\n                    return -1;\n                }\n                // Finish the content and replace the entire range in\n                // this.parts with the link/image node.\n                let content = cx.takeContent(i);\n                let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);\n                // Set any open-link markers before this link to invalid.\n                if (part.type == LinkStart)\n                    for (let j = 0; j < i; j++) {\n                        let p = cx.parts[j];\n                        if (p instanceof InlineDelimiter && p.type == LinkStart)\n                            p.side = 0 /* Mark.None */;\n                    }\n                return link.to;\n            }\n        }\n        return -1;\n    }\n};\nfunction finishLink(cx, content, type, start, startPos) {\n    let { text } = cx, next = cx.char(startPos), endPos = startPos;\n    content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));\n    content.push(elt(Type.LinkMark, startPos - 1, startPos));\n    if (next == 40 /* '(' */) {\n        let pos = cx.skipSpace(startPos + 1);\n        let dest = parseURL(text, pos - cx.offset, cx.offset), title;\n        if (dest) {\n            pos = cx.skipSpace(dest.to);\n            // The destination and title must be separated by whitespace\n            if (pos != dest.to) {\n                title = parseLinkTitle(text, pos - cx.offset, cx.offset);\n                if (title)\n                    pos = cx.skipSpace(title.to);\n            }\n        }\n        if (cx.char(pos) == 41 /* ')' */) {\n            content.push(elt(Type.LinkMark, startPos, startPos + 1));\n            endPos = pos + 1;\n            if (dest)\n                content.push(dest);\n            if (title)\n                content.push(title);\n            content.push(elt(Type.LinkMark, pos, endPos));\n        }\n    }\n    else if (next == 91 /* '[' */) {\n        let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);\n        if (label) {\n            content.push(label);\n            endPos = label.to;\n        }\n    }\n    return elt(type, start, endPos, content);\n}\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\nfunction parseURL(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next == 60 /* '<' */) {\n        for (let pos = start + 1; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (ch == 62 /* '>' */)\n                return elt(Type.URL, start + offset, pos + 1 + offset);\n            if (ch == 60 || ch == 10 /* '<\\n' */)\n                return false;\n        }\n        return null;\n    }\n    else {\n        let depth = 0, pos = start;\n        for (let escaped = false; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (space(ch)) {\n                break;\n            }\n            else if (escaped) {\n                escaped = false;\n            }\n            else if (ch == 40 /* '(' */) {\n                depth++;\n            }\n            else if (ch == 41 /* ')' */) {\n                if (!depth)\n                    break;\n                depth--;\n            }\n            else if (ch == 92 /* '\\\\' */) {\n                escaped = true;\n            }\n        }\n        return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;\n    }\n}\nfunction parseLinkTitle(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */)\n        return false;\n    let end = next == 40 ? 41 : next;\n    for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == end)\n            return elt(Type.LinkTitle, start + offset, pos + 1 + offset);\n        else if (ch == 92 /* '\\\\' */)\n            escaped = true;\n    }\n    return null;\n}\nfunction parseLinkLabel(text, start, offset, requireNonWS) {\n    for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == 93 /* ']' */)\n            return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);\n        else {\n            if (requireNonWS && !space(ch))\n                requireNonWS = false;\n            if (ch == 91 /* '[' */)\n                return false;\n            else if (ch == 92 /* '\\\\' */)\n                escaped = true;\n        }\n    }\n    return null;\n}\n/// Inline parsing functions get access to this context, and use it to\n/// read the content and emit syntax nodes.\nclass InlineContext {\n    /// @internal\n    constructor(\n    /// The parser that is being used.\n    parser, \n    /// The text of this inline section.\n    text, \n    /// The starting offset of the section in the document.\n    offset) {\n        this.parser = parser;\n        this.text = text;\n        this.offset = offset;\n        /// @internal\n        this.parts = [];\n    }\n    /// Get the character code at the given (document-relative)\n    /// position.\n    char(pos) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset); }\n    /// The position of the end of this inline section.\n    get end() { return this.offset + this.text.length; }\n    /// Get a substring of this inline section. Again uses\n    /// document-relative positions.\n    slice(from, to) { return this.text.slice(from - this.offset, to - this.offset); }\n    /// @internal\n    append(elt) {\n        this.parts.push(elt);\n        return elt.to;\n    }\n    /// Add a [delimiter](#DelimiterType) at this given position. `open`\n    /// and `close` indicate whether this delimiter is opening, closing,\n    /// or both. Returns the end of the delimiter, for convenient\n    /// returning from [parse functions](#InlineParser.parse).\n    addDelimiter(type, from, to, open, close) {\n        return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (close ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n    }\n    /// Returns true when there is an unmatched link or image opening\n    /// token before the current position.\n    get hasOpenLink() {\n        for (let i = this.parts.length - 1; i >= 0; i--) {\n            let part = this.parts[i];\n            if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart))\n                return true;\n        }\n        return false;\n    }\n    /// Add an inline element. Returns the end of the element.\n    addElement(elt) {\n        return this.append(elt);\n    }\n    /// Resolve markers between this.parts.length and from, wrapping matched markers in the\n    /// appropriate node and updating the content of this.parts. @internal\n    resolveMarkers(from) {\n        // Scan forward, looking for closing tokens\n        for (let i = from; i < this.parts.length; i++) {\n            let close = this.parts[i];\n            if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & 2 /* Mark.Close */)))\n                continue;\n            let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;\n            let closeSize = close.to - close.from;\n            let open, j = i - 1;\n            // Continue scanning for a matching opening token\n            for (; j >= from; j--) {\n                let part = this.parts[j];\n                if (part instanceof InlineDelimiter && (part.side & 1 /* Mark.Open */) && part.type == close.type &&\n                    // Ignore emphasis delimiters where the character count doesn't match\n                    !(emp && ((close.side & 1 /* Mark.Open */) || (part.side & 2 /* Mark.Close */)) &&\n                        (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n                    open = part;\n                    break;\n                }\n            }\n            if (!open)\n                continue;\n            let type = close.type.resolve, content = [];\n            let start = open.from, end = close.to;\n            // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n            // markers.\n            if (emp) {\n                let size = Math.min(2, open.to - open.from, closeSize);\n                start = open.to - size;\n                end = close.from + size;\n                type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\";\n            }\n            // Move the covered region into content, optionally adding marker nodes\n            if (open.type.mark)\n                content.push(this.elt(open.type.mark, start, open.to));\n            for (let k = j + 1; k < i; k++) {\n                if (this.parts[k] instanceof Element)\n                    content.push(this.parts[k]);\n                this.parts[k] = null;\n            }\n            if (close.type.mark)\n                content.push(this.elt(close.type.mark, close.from, end));\n            let element = this.elt(type, start, end, content);\n            // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n            this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;\n            let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;\n            // Insert the new element in this.parts\n            if (keep)\n                this.parts.splice(i, 0, element);\n            else\n                this.parts[i] = element;\n        }\n        // Collect the elements remaining in this.parts into an array.\n        let result = [];\n        for (let i = from; i < this.parts.length; i++) {\n            let part = this.parts[i];\n            if (part instanceof Element)\n                result.push(part);\n        }\n        return result;\n    }\n    /// Find an opening delimiter of the given type. Returns `null` if\n    /// no delimiter is found, or an index that can be passed to\n    /// [`takeContent`](#InlineContext.takeContent) otherwise.\n    findOpeningDelimiter(type) {\n        for (let i = this.parts.length - 1; i >= 0; i--) {\n            let part = this.parts[i];\n            if (part instanceof InlineDelimiter && part.type == type)\n                return i;\n        }\n        return null;\n    }\n    /// Remove all inline elements and delimiters starting from the\n    /// given index (which you should get from\n    /// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n    /// resolve delimiters inside of them, and return them as an array\n    /// of elements.\n    takeContent(startIndex) {\n        let content = this.resolveMarkers(startIndex);\n        this.parts.length = startIndex;\n        return content;\n    }\n    /// Skip space after the given (document) position, returning either\n    /// the position of the next non-space character or the end of the\n    /// section.\n    skipSpace(from) { return skipSpace(this.text, from - this.offset) + this.offset; }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n}\nfunction injectMarks(elements, marks) {\n    if (!marks.length)\n        return elements;\n    if (!elements.length)\n        return marks;\n    let elts = elements.slice(), eI = 0;\n    for (let mark of marks) {\n        while (eI < elts.length && elts[eI].to < mark.to)\n            eI++;\n        if (eI < elts.length && elts[eI].from < mark.from) {\n            let e = elts[eI];\n            if (e instanceof Element)\n                elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));\n        }\n        else {\n            elts.splice(eI++, 0, mark);\n        }\n    }\n    return elts;\n}\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];\nclass FragmentCursor {\n    constructor(fragments, input) {\n        this.fragments = fragments;\n        this.input = input;\n        // Index into fragment array\n        this.i = 0;\n        // Active fragment\n        this.fragment = null;\n        this.fragmentEnd = -1;\n        // Cursor into the current fragment, if any. When `moveTo` returns\n        // true, this points at the first block after `pos`.\n        this.cursor = null;\n        if (fragments.length)\n            this.fragment = fragments[this.i++];\n    }\n    nextFragment() {\n        this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;\n        this.cursor = null;\n        this.fragmentEnd = -1;\n    }\n    moveTo(pos, lineStart) {\n        while (this.fragment && this.fragment.to <= pos)\n            this.nextFragment();\n        if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0))\n            return false;\n        if (this.fragmentEnd < 0) {\n            let end = this.fragment.to;\n            while (end > 0 && this.input.read(end - 1, end) != \"\\n\")\n                end--;\n            this.fragmentEnd = end ? end - 1 : 0;\n        }\n        let c = this.cursor;\n        if (!c) {\n            c = this.cursor = this.fragment.tree.cursor();\n            c.firstChild();\n        }\n        let rPos = pos + this.fragment.offset;\n        while (c.to <= rPos)\n            if (!c.parent())\n                return false;\n        for (;;) {\n            if (c.from >= rPos)\n                return this.fragment.from <= lineStart;\n            if (!c.childAfter(rPos))\n                return false;\n        }\n    }\n    matches(hash) {\n        let tree = this.cursor.tree;\n        return tree && tree.prop(NodeProp.contextHash) == hash;\n    }\n    takeNodes(cx) {\n        let cur = this.cursor, off = this.fragment.offset, fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);\n        let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length;\n        let prevEnd = end, prevI = blockI;\n        for (;;) {\n            if (cur.to - off > fragEnd) {\n                if (cur.type.isAnonymous && cur.firstChild())\n                    continue;\n                break;\n            }\n            let pos = toRelative(cur.from - off, cx.ranges);\n            if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n                cx.addNode(cur.tree, pos);\n            }\n            else {\n                let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp);\n                cx.reusePlaceholders.set(dummy, cur.tree);\n                cx.addNode(dummy, pos);\n            }\n            // Taken content must always end in a block, because incremental\n            // parsing happens on block boundaries. Never stop directly\n            // after an indented code block, since those can continue after\n            // any number of blank lines.\n            if (cur.type.is(\"Block\")) {\n                if (NotLast.indexOf(cur.type.id) < 0) {\n                    end = cur.to - off;\n                    blockI = cx.block.children.length;\n                }\n                else {\n                    end = prevEnd;\n                    blockI = prevI;\n                    prevEnd = cur.to - off;\n                    prevI = cx.block.children.length;\n                }\n            }\n            if (!cur.nextSibling())\n                break;\n        }\n        while (cx.block.children.length > blockI) {\n            cx.block.children.pop();\n            cx.block.positions.pop();\n        }\n        return end - start;\n    }\n}\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs, ranges) {\n    let pos = abs;\n    for (let i = 1; i < ranges.length; i++) {\n        let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from;\n        if (gapFrom < abs)\n            pos -= gapTo - gapFrom;\n    }\n    return pos;\n}\nconst markdownHighlighting = styleTags({\n    \"Blockquote/...\": tags.quote,\n    HorizontalRule: tags.contentSeparator,\n    \"ATXHeading1/... SetextHeading1/...\": tags.heading1,\n    \"ATXHeading2/... SetextHeading2/...\": tags.heading2,\n    \"ATXHeading3/...\": tags.heading3,\n    \"ATXHeading4/...\": tags.heading4,\n    \"ATXHeading5/...\": tags.heading5,\n    \"ATXHeading6/...\": tags.heading6,\n    \"Comment CommentBlock\": tags.comment,\n    Escape: tags.escape,\n    Entity: tags.character,\n    \"Emphasis/...\": tags.emphasis,\n    \"StrongEmphasis/...\": tags.strong,\n    \"Link/... Image/...\": tags.link,\n    \"OrderedList/... BulletList/...\": tags.list,\n    \"BlockQuote/...\": tags.quote,\n    \"InlineCode CodeText\": tags.monospace,\n    \"URL Autolink\": tags.url,\n    \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": tags.processingInstruction,\n    \"CodeInfo LinkLabel\": tags.labelName,\n    LinkTitle: tags.string,\n    Paragraph: tags.content\n});\n/// The default CommonMark parser.\nconst parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);\n\nfunction leftOverSpace(node, from, to) {\n    let ranges = [];\n    for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n        let nextPos = n ? n.from : to;\n        if (nextPos > pos)\n            ranges.push({ from: pos, to: nextPos });\n        if (!n)\n            break;\n        pos = n.to;\n    }\n    return ranges;\n}\n/// Create a Markdown extension to enable nested parsing on code\n/// blocks and/or embedded HTML.\nfunction parseCode(config) {\n    let { codeParser, htmlParser } = config;\n    let wrap = parseMixed((node, input) => {\n        let id = node.type.id;\n        if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n            let info = \"\";\n            if (id == Type.FencedCode) {\n                let infoNode = node.node.getChild(Type.CodeInfo);\n                if (infoNode)\n                    info = input.read(infoNode.from, infoNode.to);\n            }\n            let parser = codeParser(info);\n            if (parser)\n                return { parser, overlay: node => node.type.id == Type.CodeText };\n        }\n        else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {\n            return { parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to) };\n        }\n        return null;\n    });\n    return { wrap };\n}\n\nconst StrikethroughDelim = { resolve: \"Strikethrough\", mark: \"StrikethroughMark\" };\n/// An extension that implements\n/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\n/// Strikethrough syntax using `~~` delimiters.\nconst Strikethrough = {\n    defineNodes: [{\n            name: \"Strikethrough\",\n            style: { \"Strikethrough/...\": tags.strikethrough }\n        }, {\n            name: \"StrikethroughMark\",\n            style: tags.processingInstruction\n        }],\n    parseInline: [{\n            name: \"Strikethrough\",\n            parse(cx, next, pos) {\n                if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126)\n                    return -1;\n                let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3);\n                let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n                let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n                return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));\n            },\n            after: \"Emphasis\"\n        }]\n};\nfunction parseRow(cx, line, startI = 0, elts, offset = 0) {\n    let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false;\n    let parseCell = () => {\n        elts.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));\n    };\n    for (let i = startI; i < line.length; i++) {\n        let next = line.charCodeAt(i);\n        if (next == 124 /* '|' */ && !esc) {\n            if (!first || cellStart > -1)\n                count++;\n            first = false;\n            if (elts) {\n                if (cellStart > -1)\n                    parseCell();\n                elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1));\n            }\n            cellStart = cellEnd = -1;\n        }\n        else if (esc || next != 32 && next != 9) {\n            if (cellStart < 0)\n                cellStart = i;\n            cellEnd = i + 1;\n        }\n        esc = !esc && next == 92;\n    }\n    if (cellStart > -1) {\n        count++;\n        if (elts)\n            parseCell();\n    }\n    return count;\n}\nfunction hasPipe(str, start) {\n    for (let i = start; i < str.length; i++) {\n        let next = str.charCodeAt(i);\n        if (next == 124 /* '|' */)\n            return true;\n        if (next == 92 /* '\\\\' */)\n            i++;\n    }\n    return false;\n}\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/;\nclass TableParser {\n    constructor() {\n        // Null means we haven't seen the second line yet, false means this\n        // isn't a table, and an array means this is a table and we've\n        // parsed the given rows so far.\n        this.rows = null;\n    }\n    nextLine(cx, line, leaf) {\n        if (this.rows == null) { // Second line\n            this.rows = false;\n            let lineText;\n            if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n                delimiterLine.test(lineText = line.text.slice(line.pos))) {\n                let firstRow = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);\n                if (firstCount == parseRow(cx, lineText, line.pos))\n                    this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n                        cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)];\n            }\n        }\n        else if (this.rows) { // Line after the second\n            let content = [];\n            parseRow(cx, line.text, line.pos, content, cx.lineStart);\n            this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));\n        }\n        return false;\n    }\n    finish(cx, leaf) {\n        if (!this.rows)\n            return false;\n        cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows));\n        return true;\n    }\n}\n/// This extension provides\n/// [GFM-style](https://github.github.com/gfm/#tables-extension-)\n/// tables, using syntax like this:\n///\n/// ```\n/// | head 1 | head 2 |\n/// | ---    | ---    |\n/// | cell 1 | cell 2 |\n/// ```\nconst Table = {\n    defineNodes: [\n        { name: \"Table\", block: true },\n        { name: \"TableHeader\", style: { \"TableHeader/...\": tags.heading } },\n        \"TableRow\",\n        { name: \"TableCell\", style: tags.content },\n        { name: \"TableDelimiter\", style: tags.processingInstruction },\n    ],\n    parseBlock: [{\n            name: \"Table\",\n            leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null; },\n            endLeaf(cx, line, leaf) {\n                if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos))\n                    return false;\n                let next = cx.scanLine(cx.absoluteLineEnd + 1).text;\n                return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);\n            },\n            before: \"SetextHeading\"\n        }]\n};\nclass TaskParser {\n    nextLine() { return false; }\n    finish(cx, leaf) {\n        cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n            cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n            ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n        ]));\n        return true;\n    }\n}\n/// Extension providing\n/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\n/// task list items, where list items can be prefixed with `[ ]` or\n/// `[x]` to add a checkbox.\nconst TaskList = {\n    defineNodes: [\n        { name: \"Task\", block: true, style: tags.list },\n        { name: \"TaskMarker\", style: tags.atom }\n    ],\n    parseBlock: [{\n            name: \"TaskList\",\n            leaf(cx, leaf) {\n                return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null;\n            },\n            after: \"SetextHeading\"\n        }]\n};\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]+@)|(mailto:|xmpp:)/gy;\nconst urlRE = /[\\w-]+(\\.[\\w-]+)+(\\/[^\\s<]*)?/gy;\nconst lastTwoDomainWords = /[\\w-]+\\.[\\w-]+($|\\/)/;\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy;\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy;\nfunction count(str, from, to, ch) {\n    let result = 0;\n    for (let i = from; i < to; i++)\n        if (str[i] == ch)\n            result++;\n    return result;\n}\nfunction autolinkURLEnd(text, from) {\n    urlRE.lastIndex = from;\n    let m = urlRE.exec(text);\n    if (!m || lastTwoDomainWords.exec(m[0])[0].indexOf(\"_\") > -1)\n        return -1;\n    let end = from + m[0].length;\n    for (;;) {\n        let last = text[end - 1], m;\n        if (/[?!.,:*_~]/.test(last) ||\n            last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n            end--;\n        else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n            end = from + m.index;\n        else\n            break;\n    }\n    return end;\n}\nfunction autolinkEmailEnd(text, from) {\n    emailRE.lastIndex = from;\n    let m = emailRE.exec(text);\n    if (!m)\n        return -1;\n    let last = m[0][m[0].length - 1];\n    return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0);\n}\n/// Extension that implements autolinking for\n/// `www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\n/// addresses.\nconst Autolink = {\n    parseInline: [{\n            name: \"Autolink\",\n            parse(cx, next, absPos) {\n                let pos = absPos - cx.offset;\n                autolinkRE.lastIndex = pos;\n                let m = autolinkRE.exec(cx.text), end = -1;\n                if (!m)\n                    return -1;\n                if (m[1] || m[2]) { // www., http://\n                    end = autolinkURLEnd(cx.text, pos + m[0].length);\n                    if (end > -1 && cx.hasOpenLink) {\n                        let noBracket = /([^\\[\\]]|\\[[^\\]]*\\])*/.exec(cx.text.slice(pos, end));\n                        end = pos + noBracket[0].length;\n                    }\n                }\n                else if (m[3]) { // email address\n                    end = autolinkEmailEnd(cx.text, pos);\n                }\n                else { // mailto:/xmpp:\n                    end = autolinkEmailEnd(cx.text, pos + m[0].length);\n                    if (end > -1 && m[0] == \"xmpp:\") {\n                        xmppResourceRE.lastIndex = end;\n                        m = xmppResourceRE.exec(cx.text);\n                        if (m)\n                            end = m.index + m[0].length;\n                    }\n                }\n                if (end < 0)\n                    return -1;\n                cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset));\n                return end + cx.offset;\n            }\n        }]\n};\n/// Extension bundle containing [`Table`](#Table),\n/// [`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n/// [`Autolink`](#Autolink).\nconst GFM = [Table, TaskList, Strikethrough, Autolink];\nfunction parseSubSuper(ch, node, mark) {\n    return (cx, next, pos) => {\n        if (next != ch || cx.char(pos + 1) == ch)\n            return -1;\n        let elts = [cx.elt(mark, pos, pos + 1)];\n        for (let i = pos + 1; i < cx.end; i++) {\n            let next = cx.char(i);\n            if (next == ch)\n                return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));\n            if (next == 92 /* '\\\\' */)\n                elts.push(cx.elt(\"Escape\", i, i++ + 2));\n            if (space(next))\n                break;\n        }\n        return -1;\n    };\n}\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// superscript using `^` markers.\nconst Superscript = {\n    defineNodes: [\n        { name: \"Superscript\", style: tags.special(tags.content) },\n        { name: \"SuperscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Superscript\",\n            parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n        }]\n};\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// subscript using `~` markers.\nconst Subscript = {\n    defineNodes: [\n        { name: \"Subscript\", style: tags.special(tags.content) },\n        { name: \"SubscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Subscript\",\n            parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n        }]\n};\n/// Extension that parses two colons with only letters, underscores,\n/// and numbers between them as `Emoji` nodes.\nconst Emoji = {\n    defineNodes: [{ name: \"Emoji\", style: tags.character }],\n    parseInline: [{\n            name: \"Emoji\",\n            parse(cx, next, pos) {\n                let match;\n                if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end))))\n                    return -1;\n                return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length));\n            }\n        }]\n};\n\nexport { Autolink, BlockContext, Element, Emoji, GFM, InlineContext, LeafBlock, Line, MarkdownParser, Strikethrough, Subscript, Superscript, Table, TaskList, parseCode, parser };\n","import { parser } from 'lezer-feel';\nimport { syntaxTree } from '@codemirror/language';\n\n/**\n * Create an array of syntax errors in the given tree.\n *\n * @param {Tree} syntaxTree\n * @returns {LintMessage[]} array of syntax errors\n */\nfunction lintSyntax(syntaxTree) {\n\n  const lintMessages = [];\n\n  syntaxTree.iterate({\n    enter: ref => {\n      const node = ref.node;\n\n      if (!node.type.isError) {\n        return;\n      }\n\n      const parent = node.parent;\n      const next = getNextNode(node);\n\n      const message = {\n        from: node.from,\n        to: node.to,\n        severity: 'error',\n        type: 'Syntax Error'\n      };\n\n      if (node.from !== node.to) {\n        message.message = `Unrecognized token in <${parent.name}>`;\n      } else if (next) {\n        message.message = `Unrecognized token <${next.name}> in <${parent.name}>`;\n        message.to = next.to;\n      } else {\n        const before = parent.enterUnfinishedNodesBefore(node.to);\n        message.message = `Incomplete <${ (before || parent).name }>`;\n      }\n\n      lintMessages.push(message);\n    }\n  });\n\n  return lintMessages;\n}\n\nfunction getNextNode(node) {\n  if (!node) {\n    return null;\n  }\n\n  return node.nextSibling || getNextNode(node.parent);\n}\n\n/**\n * Generates lint messages for the given syntax tree.\n *\n * @param {Tree} syntaxTree\n * @returns {LintMessage[]} array of all lint messages\n */\nfunction lintAll(syntaxTree) {\n\n  const lintMessages = [\n    ...lintSyntax(syntaxTree)\n  ];\n\n  return lintMessages;\n}\n\n/**\n * Create an array of syntax errors for the given expression.\n *\n * @param {String} expression\n * @returns {LintMessage[]} array of syntax errors\n */\nfunction lintExpression(expression) {\n\n  const syntaxTree = parser.parse(expression);\n\n  const lintMessages = lintAll(syntaxTree);\n\n  return lintMessages;\n}\n\n/**\n * CodeMirror extension that provides linting for FEEL expressions.\n *\n * @param {EditorView} editorView\n * @returns {Source} CodeMirror linting source\n */\nconst cmFeelLinter = () => editorView => {\n\n  // don't lint if the Editor is empty\n  if (editorView.state.doc.length === 0) {\n    return [];\n  }\n\n  const tree = syntaxTree(editorView.state);\n\n  const messages = lintAll(tree);\n\n  return messages.map(message => ({\n    ...message,\n    source: message.type\n  }));\n};\n\nexport { cmFeelLinter, lintExpression };\n","import { EditorView } from '@codemirror/view';\nimport { syntaxHighlighting, HighlightStyle } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\n\nconst highlightStyle$2 = syntaxHighlighting(HighlightStyle.define([\r\n  { tag: tags.strong, fontWeight: 'bold' },\r\n  { tag: tags.emphasis, fontStyle: 'italic' },\r\n]));\r\n\r\nconst theme$2 = EditorView.theme({\r\n  '& .cm-lintRange': {\r\n    position: 'relative',\r\n  },\r\n  '& .cm-lintRange::after': {\r\n    content: '\"\"',\r\n    width: '100%',\r\n    position: 'absolute',\r\n    left: '0px',\r\n    bottom: '-2px',\r\n    height: '3px',\r\n    backgroundRepeat: 'repeat-x',\r\n  },\r\n  '& .cm-lintRange.cm-lintRange-warning, & .cm-lintRange.cm-lintRange-error': {\r\n    backgroundImage: 'none',\r\n  },\r\n  '& .cm-lintPoint::after': {\r\n    bottom: '-2px'\r\n  }\r\n});\r\n\r\nvar commonTheme = [\r\n  theme$2,\r\n  highlightStyle$2\r\n];\n\nconst _urlify = (color) => `%23${color.slice(1)}`;\r\n\r\nconst colors = {\r\n  black: '#1f2b36',\r\n  darkGrey: '#2f3d58',\r\n  grey: '#404a5c',\r\n  midGrey: '#576071',\r\n  lightGrey: '#c5d1e5',\r\n  offWhite: '#d9e0f5',\r\n  snowWhite: '#eaf1ff',\r\n  white: '#ffffff',\r\n  mossGreen: '#7ab6aa',\r\n  iceBlue: '#6cbfd8',\r\n  waterBlue: '#065aaa',\r\n  brightBlue: '#0a56b9',\r\n  deepBlue: '#355472',\r\n  red: '#9f1c15',\r\n  orangeBrown: '#b4502f',\r\n  yellow: '#debd71',\r\n  lila: '#9a4890',\r\n  purple: '#5b2c83'\r\n};\r\n\r\nconst colorByRole = {\r\n  lightBackground: colors.white,\r\n  darkBackground: colors.snowWhite,\r\n  selection: colors.snowWhite,\r\n  tooltipBackground: colors.offWhite,\r\n  error: colors.red,\r\n  warning: colors.yellow,\r\n  invalid: '#b40000'\r\n};\r\n\r\nconst theme$1 = EditorView.theme(\r\n  {\r\n    '&': { color: colors.black, backgroundColor: colorByRole.lightBackground },\r\n    '.cm-content': { caretColor: colors.darkGrey },\r\n    '.cm-cursor, .cm-dropCursor': { borderLeftColor: colors.darkGrey },\r\n    '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection':\r\n      { backgroundColor: colorByRole.selection },\r\n\r\n    '.cm-panels': { backgroundColor: colorByRole.darkBackground, color: colors.grey },\r\n    '.cm-panels.cm-panels-top': { borderBottom: `2px solid ${ colors.black }` },\r\n    '.cm-panels.cm-panels-bottom': { borderTop: `2px solid ${ colors.black }` },\r\n\r\n    '.cm-searchMatch': {\r\n      backgroundColor: '#72a1ff59',\r\n      outline: `1px solid ${colors.midGrey}`\r\n    },\r\n    '.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: colors.offWhite },\r\n    '.cm-activeLine': { backgroundColor: colorByRole.selection },\r\n    '.cm-selectionMatch': { backgroundColor: colors.offWhite },\r\n\r\n    '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {\r\n      outline: `1px solid ${colors.grey}`\r\n    },\r\n\r\n    '&.cm-focused .cm-matchingBracket': {\r\n      backgroundColor: colors.snowWhite\r\n    },\r\n\r\n    '.cm-gutters': {\r\n      backgroundColor: '#f3f7fe',\r\n      color: '#52668d',\r\n      border: 'none',\r\n      padding: '0 5px'\r\n    },\r\n\r\n    '.cm-activeLineGutter': {\r\n      backgroundColor: colorByRole.selection\r\n    },\r\n\r\n    '.cm-foldPlaceholder': {\r\n      backgroundColor: 'transparent',\r\n      border: 'none',\r\n      color: '#ddd'\r\n    },\r\n\r\n    '.cm-tooltip': {\r\n      border: 'none',\r\n      backgroundColor: colorByRole.tooltipBackground\r\n    },\r\n    '.cm-tooltip .cm-tooltip-arrow:before': {\r\n      borderTopColor: 'transparent',\r\n      borderBottomColor: 'transparent'\r\n    },\r\n    '.cm-tooltip .cm-tooltip-arrow:after': {\r\n      borderTopColor: colorByRole.tooltipBackground,\r\n      borderBottomColor: colorByRole.tooltipBackground\r\n    },\r\n    '.cm-tooltip-autocomplete': {\r\n      '& > ul > li[aria-selected]': {\r\n        backgroundColor: colorByRole.darkBackground,\r\n        color: colors.midGrey\r\n      }\r\n    },\r\n    '& .cm-lintRange.cm-lintRange-warning::after': {\r\n      backgroundImage: `url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='6' height='3'><path d='m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0' stroke='${_urlify(colorByRole.warning)}' fill='none' stroke-width='1.2'/></svg>\")`,\r\n    },\r\n    '& .cm-lintRange.cm-lintRange-error::after': {\r\n      backgroundImage: `url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='6' height='3'><path d='m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0' stroke='${_urlify(colorByRole.error)}' fill='none' stroke-width='1.2'/></svg>\")`,\r\n    },\r\n    '& .cm-diagnostic-warning': {\r\n      border: `1px solid ${colorByRole.warning}`,\r\n      borderLeft: `5px solid ${colorByRole.warning}`,\r\n      background: colorByRole.lightBackground,\r\n    },\r\n    '& .cm-diagnostic-error': {\r\n      border: `1px solid ${colorByRole.error}`,\r\n      borderLeft: `5px solid ${colorByRole.error}`,\r\n      background: colorByRole.lightBackground\r\n    },\r\n    '& .cm-diagnostic': {\r\n      padding: '3px 8px'\r\n    }\r\n  },\r\n  { dark: false }\r\n);\r\n\r\nconst highlightStyle$1 = syntaxHighlighting(HighlightStyle.define([\r\n  {\r\n    tag: [ tags.macroName, tags.variableName ],\r\n    color: colors.waterBlue\r\n  },\r\n  {\r\n    tag: [ tags.special(tags.bracket) ],\r\n    color: colors.waterBlue,\r\n    fontWeight: 'bold'\r\n  },\r\n  {\r\n    tag: [ tags.color, tags.name, tags.definition(tags.name), tags.constant(tags.name), tags.standard(tags.name), tags.propertyName, ],\r\n    color: colors.deepBlue\r\n  },\r\n  {\r\n    tag: [ tags.definition(tags.variableName), tags.function(tags.variableName), tags.function(tags.propertyName) ],\r\n    color: colors.brightBlue,\r\n  },\r\n  { tag: [ tags.labelName ], color: colors.orangeBrown },\r\n  {\r\n    tag: [ tags.annotation ],\r\n    color: colorByRole.invalid\r\n  },\r\n  {\r\n    tag: [ tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace, tags.atom, tags.bool, tags.special(tags.variableName) ],\r\n    color: colors.red\r\n  },\r\n  {\r\n    tag: [ tags.typeName, tags.className, tags.attributeName ],\r\n    color: colors.lila\r\n  },\r\n  {\r\n    tag: [ tags.operator, tags.operatorKeyword, tags.tagName, tags.keyword ],\r\n    color: colors.purple\r\n  },\r\n  {\r\n    tag: [ tags.angleBracket, tags.squareBracket, tags.brace, tags.separator, tags.punctuation ],\r\n    color: colors.midGrey\r\n  },\r\n  {\r\n    tag: [ tags.regexp ],\r\n    color: colors.deepBlue\r\n  },\r\n  {\r\n    tag: [ tags.quote ],\r\n    color: colors.darkGrey\r\n  },\r\n  { tag: [ tags.string, tags.character, tags.deleted ], color: colors.orangeBrown },\r\n  {\r\n    tag: tags.link,\r\n    color: colors.mossGreen,\r\n    textDecoration: 'underline',\r\n    textUnderlinePosition: 'under'\r\n  },\r\n  {\r\n    tag: [ tags.url, tags.escape, tags.special(tags.string) ],\r\n    color: colors.red\r\n  },\r\n  { tag: [ tags.meta ], color: colors.iceBlue },\r\n  { tag: [ tags.comment ], color: colors.midGrey, fontStyle: 'italic' },\r\n  { tag: tags.strong, fontWeight: 'bold', color: colors.deepBlue },\r\n  { tag: tags.emphasis, fontStyle: 'italic', color: colors.deepBlue },\r\n  { tag: tags.strikethrough, textDecoration: 'line-through' },\r\n  { tag: tags.heading, fontWeight: 'bold', color: colors.midGray },\r\n  { tag: tags.special(tags.heading1), fontWeight: 'bold', color: colors.darkGrey },\r\n  {\r\n    tag: [ tags.heading1, tags.heading2, tags.heading3, tags.heading4 ],\r\n    fontWeight: 'bold',\r\n    color: colors.midGrey\r\n  },\r\n  { tag: [ tags.heading5, tags.heading6, tags.processingInstruction, tags.inserted ], color: colors.grey },\r\n  {\r\n    tag: [ tags.contentSeparator ],\r\n    color: colors.yellow\r\n  },\r\n  { tag: tags.invalid, color: colors.midGrey, borderBottom: `1px dotted ${colorByRole.invalid}` }\r\n]));\r\n\r\nvar bpmnioLight = [\r\n  theme$1,\r\n  highlightStyle$1\r\n];\n\nconst ivory = '#abb2bf',\r\n      peach = '#f07178',\r\n      stone = '#7d8799',\r\n      invalid = '#ffffff',\r\n      pastelYellow = '#fffce1',\r\n      pastelOrange = '#ec9e6f',\r\n      raisinBlack = '#21252b',\r\n      highlightBackground = 'rgba(0, 0, 0, 0.5)',\r\n      background = '#292d3e',\r\n      tooltipBackground = '#353a42',\r\n      selection = 'rgba(128, 203, 196, 0.2)',\r\n      cursor = '#ffcc00';\r\n\r\nconst urlHash = '%23';\r\nconst warningColorHex = 'fff890';\r\nconst errorColor = 'red';\r\nconst warningBackgroundColor = '#281e16';\r\nconst errorBackgroundColor = '#281616';\r\n\r\nconst theme = EditorView.theme(\r\n  {\r\n    '&': {\r\n      color: '#ffffff',\r\n      backgroundColor: background\r\n    },\r\n    '.cm-content': {\r\n      caretColor: cursor\r\n    },\r\n    '&.cm-focused .cm-cursor': {\r\n      borderLeftColor: cursor\r\n    },\r\n    '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection':\r\n      { backgroundColor: selection },\r\n    '.cm-panels': { backgroundColor: raisinBlack, color: '#ffffff' },\r\n    '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },\r\n    '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },\r\n    '.cm-searchMatch': {\r\n      backgroundColor: '#72a1ff59',\r\n      outline: '1px solid #457dff'\r\n    },\r\n    '.cm-searchMatch.cm-searchMatch-selected': {\r\n      backgroundColor: '#6199ff2f'\r\n    },\r\n    '.cm-activeLine': { backgroundColor: highlightBackground },\r\n    '.cm-selectionMatch': { backgroundColor: '#aafe661a' },\r\n    '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {\r\n      backgroundColor: '#bad0f847',\r\n      outline: '1px solid #515a6b'\r\n    },\r\n    '.cm-gutters': {\r\n      background: '#292d3e',\r\n      color: '#676e95',\r\n      border: 'none',\r\n      padding: '0 5px'\r\n    },\r\n    '.cm-activeLineGutter': {\r\n      backgroundColor: highlightBackground\r\n    },\r\n    '.cm-foldPlaceholder': {\r\n      backgroundColor: 'transparent',\r\n      border: 'none',\r\n      color: '#ddd'\r\n    },\r\n    '.cm-tooltip': {\r\n      border: 'none',\r\n      backgroundColor: tooltipBackground\r\n    },\r\n    '.cm-tooltip .cm-tooltip-arrow:before': {\r\n      borderTopColor: 'transparent',\r\n      borderBottomColor: 'transparent'\r\n    },\r\n    '.cm-tooltip .cm-tooltip-arrow:after': {\r\n      borderTopColor: tooltipBackground,\r\n      borderBottomColor: tooltipBackground\r\n    },\r\n    '.cm-tooltip-autocomplete': {\r\n      '& > ul > li[aria-selected]': {\r\n        backgroundColor: highlightBackground,\r\n        color: ivory\r\n      }\r\n    },\r\n    '& .cm-lintRange.cm-lintRange-warning::after': {\r\n      backgroundImage: `url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='6' height='3'><path d='m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0' stroke='${urlHash + warningColorHex}' fill='none' stroke-width='1.2'/></svg>\")`,\r\n    },\r\n    '& .cm-lintRange.cm-lintRange-error::after': {\r\n      backgroundImage: `url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='6' height='3'><path d='m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0' stroke='${errorColor}' fill='none' stroke-width='1.2'/></svg>\")`,\r\n    },\r\n    '& .cm-diagnostic-warning': {\r\n      borderLeft: `5px solid #${warningColorHex}`,\r\n      background: warningBackgroundColor\r\n    },\r\n    '& .cm-diagnostic-error': {\r\n      borderLeft: `5px solid ${errorColor}`,\r\n      background: errorBackgroundColor\r\n    },\r\n    '& .cm-diagnostic': {\r\n      borderRadius: '2px',\r\n      padding: '3px 8px'\r\n    }\r\n  },\r\n  { dark: true }\r\n);\r\n\r\nconst highlightStyle = syntaxHighlighting(HighlightStyle.define([\r\n\r\n  // Markdown headings\r\n  { tag: tags.heading1, color: pastelYellow },\r\n  { tag: tags.heading2, color: pastelYellow },\r\n  { tag: tags.heading3, color: pastelYellow },\r\n  { tag: tags.heading4, color: pastelYellow },\r\n  { tag: tags.heading5, color: pastelYellow },\r\n  { tag: tags.heading6, color: pastelYellow },\r\n\r\n  // Feelers\r\n  { tag: tags.special(tags.bracket), color: pastelOrange, fontWeight: 'bold' },\r\n\r\n  // Everything else\r\n  { tag: tags.keyword, color: '#c792ea' },\r\n  { tag: tags.operator, color: '#89ddff' },\r\n  { tag: tags.special(tags.variableName), color: '#eeffff' },\r\n  { tag: tags.typeName, color: '#f07178' },\r\n  { tag: tags.atom, color: '#f78c6c' },\r\n  { tag: tags.number, color: '#ff5370' },\r\n  { tag: tags.bool, color: '#ff5370' },\r\n  { tag: tags.definition(tags.variableName), color: '#82aaff' },\r\n  { tag: tags.string, color: '#c3e88d' },\r\n  { tag: tags.comment, color: stone },\r\n  { tag: tags.tagName, color: '#ff5370' },\r\n  { tag: tags.bracket, color: '#a2a1a4' },\r\n  { tag: tags.meta, color: '#ffcb6b' },\r\n  { tag: tags.special(tags.string), color: peach },\r\n  { tag: tags.propertyName, color: pastelOrange },\r\n  { tag: tags.variableName, color: pastelOrange },\r\n  { tag: tags.attributeName, color: peach },\r\n  { tag: tags.className, color: peach },\r\n  { tag: tags.invalid, color: invalid }\r\n]));\r\n\r\nvar bpmnioDark = [\r\n  theme,\r\n  highlightStyle\r\n];\n\nconst lightTheme = [ ...commonTheme, ...bpmnioLight ];\r\nconst darkTheme = [ ...commonTheme, ...bpmnioDark ];\n\nexport { darkTheme, lightTheme };\n","import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { evaluate as evaluate$1 } from 'feelin';\nimport { closeBrackets } from '@codemirror/autocomplete';\nimport { defaultKeymap } from '@codemirror/commands';\nimport { foldNodeProp, LRLanguage, foldInside, LanguageSupport, syntaxTree, bracketMatching, indentOnInput } from '@codemirror/language';\nimport { linter, setDiagnosticsEffect } from '@codemirror/lint';\nimport { EditorState } from '@codemirror/state';\nimport { EditorView, tooltips, keymap, lineNumbers } from '@codemirror/view';\nimport { parser as parser$2 } from '@lezer/markdown';\nimport { parser as parser$1 } from 'lezer-feel';\nimport { parseMixed } from '@lezer/common';\nimport { cmFeelLinter } from '@bpmn-io/feel-lint';\nimport { darkTheme, lightTheme } from '@bpmn-io/cm-theme';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst Feel = 1,\n  FeelBlock = 2,\n  SimpleTextBlock = 3;\n\n/* global console */\r\n\r\n\r\nconst CHAR_TABLE = {\r\n  '{': 123,\r\n  '}': 125\r\n};\r\n\r\nconst isClosingFeelScope = (input, offset = 0) => {\r\n\r\n  const isReadingCloseCurrent = input.peek(offset) === CHAR_TABLE['}'];\r\n  const isReadingCloseAhead = input.peek(offset + 1) === CHAR_TABLE['}'];\r\n\r\n  const isReadingClose = isReadingCloseCurrent && isReadingCloseAhead;\r\n\r\n  return isReadingClose || input.peek(offset) === -1;\r\n\r\n};\r\n\r\nconst feelBlock = new ExternalTokenizer((input, stack) => {\r\n\r\n  let lookAhead = 0;\r\n\r\n  // check if we haven't reached the end of a templating tag\r\n  while (!isClosingFeelScope(input, lookAhead)) { lookAhead++; }\r\n\r\n  if (lookAhead > 0) {\r\n    input.advance(lookAhead);\r\n    input.acceptToken(FeelBlock);\r\n  }\r\n\r\n});\r\n\r\nconst isClosingTextScope = (input, offset = 0) => {\r\n  const isReadingOpenCurrent = input.peek(offset) === CHAR_TABLE['{'];\r\n  const isReadingOpenAhead = input.peek(offset + 1) === CHAR_TABLE['{'];\r\n\r\n  const isReadOpen = isReadingOpenCurrent && isReadingOpenAhead;\r\n\r\n  return isReadOpen || input.peek(offset) === -1;\r\n};\r\n\r\n\r\nconst simpleTextBlock = new ExternalTokenizer((input, stack) => {\r\n\r\n  let lookAhead = 0;\r\n\r\n  // check if we haven't reached the start of a templating tag\r\n  while (!isClosingTextScope(input, lookAhead)) { lookAhead++; }\r\n\r\n  if (lookAhead > 0) {\r\n    input.advance(lookAhead);\r\n    input.acceptToken(SimpleTextBlock);\r\n  }\r\n\r\n});\r\n\r\n// Anytime this tokenizer is run, simply tag the rest of the input as FEEL\r\nconst feel = new ExternalTokenizer((input, stack) => {\r\n\r\n  let lookAhead = 0;\r\n\r\n  while (input.peek(lookAhead) !== -1) { lookAhead++; }\r\n\r\n  if (lookAhead > 0) {\r\n    input.advance(lookAhead);\r\n    input.acceptToken(Feel);\r\n  }\r\n\r\n});\n\nconst feelersHighlighting = styleTags({\r\n  ConditionalSpanner: tags.special(tags.bracket),\r\n  ConditionalSpannerClose: tags.special(tags.bracket),\r\n  ConditionalSpannerCloseNl: tags.special(tags.bracket),\r\n  LoopSpanner: tags.special(tags.bracket),\r\n  LoopSpannerClose: tags.special(tags.bracket),\r\n  LoopSpannerCloseNl: tags.special(tags.bracket),\r\n  EmptyInsert: tags.special(tags.bracket),\r\n  Insert: tags.special(tags.bracket),\r\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$bOQOaOOOfOXO'#CbOOO`'#Cm'#CmOqOWO'#CcOvOWO'#CfOOO`'#Cp'#CpOOO`'#Ci'#CiO{OaO'#ClO!jOSOOQOOOOOO!oOPO,58{O!tOXO,58|OOO`,58|,58|O!|OQO,58}O#ROQO,59QOOO`-E6g-E6gOOO`1G.g1G.gO#WOPO1G.gOOO`1G.h1G.hO#]OaO1G.iO#qOaO1G.lOOO`7+$R7+$RO$VOPO7+$TO$_OPO7+$WOOO`<<Go<<GoOOO`<<Gr<<Gr\",\n  stateData: \"$g~ORUO_WObPOeROgSO^`P~OQYO_ZOc[O~OQ]O~OQ^O~ORUObPOeROgSO^`XW`XX`XZ`X[`X~OPXO~Oc`O~OQaOcbO~OfcO~OfdO~OceO~ORUObPOeROgSOW`PX`P~ORUObPOeROgSOZ`P[`P~OWhOXhO~OZiO[iO~O\",\n  goto: \"!ZePPPPPfflPPlPPrPPz!TPP!TXQOVcdXTOVcdUVOcdR_VQXOQfcRgdXUOVcd\",\n  nodeNames: \"⚠ Feel FeelBlock SimpleTextBlock Feelers Insert EmptyInsert ConditionalSpanner ConditionalSpannerClose ConditionalSpannerCloseNl LoopSpanner LoopSpannerClose LoopSpannerCloseNl\",\n  maxTerm: 23,\n  propSources: [feelersHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 1,\n  tokenData: \"%X~RR!_!`[#o#pa#q#r$r~aO_~~dP#o#pg~lQb~str!P!Q!{~uQ#]#^{#`#a!^~!OP#Y#Z!R~!UPpq!X~!^Oe~~!aP#c#d!d~!gP#c#d!j~!mP#d#e!p~!sPpq!v~!{Og~~#OQ#]#^#U#`#a#u~#XP#Y#Z#[~#_P#q#r#b~#eP#q#r#h~#mPW~YZ#p~#uOX~~#xP#c#d#{~$OP#c#d$R~$UP#d#e$X~$[P#q#r$_~$bP#q#r$e~$jPZ~YZ$m~$rO[~R$uP#q#r$xR%PPcPfQYZ%SQ%XOfQ\",\n  tokenizers: [0, 1, feel, feelBlock, simpleTextBlock],\n  topRules: {\"Feelers\":[0,4]},\n  tokenPrec: 0\n});\n\nfunction buildSimpleTree(parseTree, templateString) {\r\n\r\n  const stack = [ { children: [] } ];\r\n  const isLeafNode = (node) => [ 'SimpleTextBlock', 'Feel', 'FeelBlock' ].includes(node.type.name);\r\n\r\n  parseTree.iterate({\r\n    enter: (node, pos, type) => {\r\n\r\n      const nodeRepresentation = {\r\n        name: node.type.name,\r\n        children: []\r\n      };\r\n\r\n      if (isLeafNode(node)) {\r\n        nodeRepresentation.content = templateString.slice(node.from, node.to);\r\n      }\r\n\r\n      stack.push(nodeRepresentation);\r\n    },\r\n    leave: (node, pos, type) => {\r\n      const result = stack.pop();\r\n      const parent = stack[stack.length - 1];\r\n      result.parent = parent;\r\n      parent.children.push(result);\r\n    }\r\n  });\r\n\r\n  return stack[0].children[0];\r\n}\n\n/**\r\n * @typedef {object} EvaluationOptions\r\n * @property {boolean} [debug=false] - whether to enable debug mode, which displays errors inline instead of throwing them\r\n * @property {function} [buildDebugString=(e) => `{{ ${e.message.toLowerCase()} }}`] - function that takes an error and returns the string to display in debug mode\r\n * @property {boolean} [strict=false] - whether to expect strict data types out of our FEEL expression, e.g. boolean for conditionals\r\n * @property {function} [sanitizer] - function to sanitize individual FEEL evaluation results\r\n */\r\n\r\n/**\r\n * @param {string} templateString - the template string to evaluate\r\n * @param {object} [context={}] - the context object to evaluate the template string against\r\n * @param {EvaluationOptions} [options={}] - options to configure the evaluation\r\n * @return {string} the evaluated template string\r\n */\r\nconst evaluate = (templateString, context = {}, options = {}) => {\r\n\r\n  const {\r\n    debug = false,\r\n    strict = false,\r\n    buildDebugString = (e) => `{{ ${e.message.toLowerCase()} }}`,\r\n    sanitizer\r\n  } = options;\r\n\r\n  const parseTree = parser.parse(templateString);\r\n\r\n  const simpleTreeRoot = buildSimpleTree(parseTree, templateString);\r\n\r\n  const evaluateNode = buildNodeEvaluator({ debug, strict, buildDebugString, sanitizer });\r\n\r\n  return evaluateNode(simpleTreeRoot, enhanceContext(context, null));\r\n\r\n};\r\n\r\n/**\r\n * @param {EvaluationOptions} options - options to configure the evaluation\r\n * @return {function} a function that takes a node and context and evaluates it\r\n */\r\nconst buildNodeEvaluator = (options) => {\r\n\r\n  const {\r\n    debug,\r\n    strict,\r\n    buildDebugString,\r\n    sanitizer\r\n  } = options;\r\n\r\n  const errorHandler = (error) => {\r\n\r\n    if (debug) {\r\n      return buildDebugString(error);\r\n    }\r\n\r\n    throw error;\r\n  };\r\n\r\n  const evaluateNodeValue = (node, context = {}) => {\r\n\r\n    switch (node.name) {\r\n\r\n    case 'SimpleTextBlock':\r\n      return node.content;\r\n\r\n    case 'Insert': {\r\n      const feel = node.children[0].content;\r\n\r\n      try {\r\n        const result = evaluate$1(`string(${feel})`, context);\r\n        return sanitizer ? sanitizer(result) : result;\r\n      }\r\n      catch {\r\n        return errorHandler(new Error(`FEEL expression ${feel} couldn't be evaluated`));\r\n      }\r\n    }\r\n\r\n    case 'EmptyInsert':\r\n      return '';\r\n\r\n    case 'Feel':\r\n    case 'FeelBlock': {\r\n      const feel = node.content;\r\n\r\n      try {\r\n        const result = evaluate$1(`string(${feel})`, context);\r\n        return sanitizer ? sanitizer(result) : result;\r\n      }\r\n      catch (e) {\r\n        return errorHandler(new Error(`FEEL expression ${feel} couldn't be evaluated`));\r\n      }\r\n    }\r\n\r\n    case 'Feelers':\r\n      return node.children.map(child => evaluateNode(child, context)).join('');\r\n\r\n    case 'ConditionalSpanner': {\r\n      const feel = node.children[0].content;\r\n      let shouldRender;\r\n\r\n      try {\r\n        shouldRender = evaluate$1(feel, context);\r\n      }\r\n      catch {\r\n        return errorHandler(new Error(`FEEL expression ${feel} couldn't be evaluated`));\r\n      }\r\n\r\n      if (strict && typeof(shouldRender) !== 'boolean') {\r\n        return errorHandler(new Error(`FEEL expression ${feel} expected to evaluate to a boolean`));\r\n      }\r\n\r\n      if (shouldRender) {\r\n        const children = node.children.slice(1, node.children.length - 1);\r\n        const innerRender = children.map(child => evaluateNode(child, context)).join('');\r\n\r\n        const closeNode = node.children[node.children.length - 1];\r\n        const shouldAddNewline = closeNode.name.endsWith('Nl') && !innerRender.endsWith('\\n');\r\n\r\n        return innerRender + (shouldAddNewline ? '\\n' : '');\r\n      }\r\n\r\n      return '';\r\n    }\r\n\r\n    case 'LoopSpanner': {\r\n      const feel = node.children[0].content;\r\n      let loopArray;\r\n\r\n      try {\r\n        loopArray = evaluate$1(feel, context);\r\n      }\r\n      catch {\r\n        return errorHandler(new Error(`FEEL expression ${feel} couldn't be evaluated`));\r\n      }\r\n\r\n      if (!Array.isArray(loopArray)) {\r\n\r\n        if (strict) {\r\n          return errorHandler(new Error(`FEEL expression ${feel} expected to evaluate to an array`));\r\n        }\r\n\r\n        // if not strict, we treat undefined/null as an empty array\r\n        else if (loopArray === undefined || loopArray === null) {\r\n          loopArray = [];\r\n        }\r\n\r\n        // if not strict, we treat a single item as an array with one item\r\n        else {\r\n          loopArray = [ loopArray ];\r\n        }\r\n\r\n      }\r\n\r\n      const childrenToLoop = node.children.slice(1, node.children.length - 1);\r\n\r\n      const evaluateChildren = (arrayElement, parentContext) => {\r\n        const childContext = enhanceContext(arrayElement, parentContext);\r\n        return childrenToLoop.map(child => evaluateNode(child, childContext)).join('');\r\n      };\r\n\r\n      const innerRender = loopArray.map(arrayElement => evaluateChildren(arrayElement, context)).join('');\r\n      const closeNode = node.children[node.children.length - 1];\r\n      const shouldAddNewline = closeNode.name.endsWith('Nl') && !innerRender.endsWith('\\n');\r\n\r\n      return innerRender + (shouldAddNewline ? '\\n' : '');\r\n    }}\r\n\r\n  };\r\n\r\n  const evaluateNode = (node, context = {}) => {\r\n    try {\r\n      return evaluateNodeValue(node, context);\r\n    } catch (error) {\r\n      return errorHandler(error);\r\n    }\r\n  };\r\n\r\n  return evaluateNode;\r\n\r\n};\r\n\r\nconst enhanceContext = (context, parentContext) => {\r\n\r\n  if (typeof(context) === 'object') {\r\n    return { this: context, parent: parentContext, ...context, _this_: context, _parent_: parentContext };\r\n  }\r\n\r\n  return { this: context, parent: parentContext, _this_: context, _parent_: parentContext };\r\n\r\n};\n\nconst foldMetadata = {\r\n  ConditionalSpanner: foldInside,\r\n  LoopSpanner: foldInside\r\n};\r\n\r\nfunction createMixedLanguage(hostLanguage = null) {\r\n  const _mixedParser = parser.configure({\r\n\r\n    wrap: parseMixed(node => {\r\n\r\n      if (node.name == 'Feel' || node.name == 'FeelBlock') {\r\n        return { parser: parser$1 };\r\n      }\r\n\r\n      if (hostLanguage && node.name == 'SimpleTextBlock') {\r\n        return { parser: hostLanguage };\r\n      }\r\n\r\n      return null;\r\n    }),\r\n\r\n    props: [\r\n      foldNodeProp.add(foldMetadata)\r\n    ]\r\n  });\r\n\r\n  return LRLanguage.define({ parser: _mixedParser });\r\n}\n\nconst createFeelersLanguageSupport = (hostLanguageParser) => new LanguageSupport(createMixedLanguage(hostLanguageParser), []);\n\n/**\r\n * Create warnings for empty inserts in the given tree.\r\n *\r\n * @param {Tree} syntaxTree\r\n * @returns {LintMessage[]} array of syntax errors\r\n */\r\nfunction lintEmptyInserts(syntaxTree) {\r\n\r\n  const lintMessages = [];\r\n\r\n  syntaxTree.iterate({\r\n    enter: node => {\r\n      if (node.type.name === 'EmptyInsert') {\r\n        lintMessages.push(\r\n          {\r\n            from: node.from,\r\n            to: node.to,\r\n            severity: 'warning',\r\n            message: 'this insert is empty and will be ignored',\r\n            type: 'emptyInsert'\r\n          }\r\n        );\r\n      }\r\n    }\r\n  });\r\n\r\n  return lintMessages;\r\n}\n\n/**\r\n * Generates lint messages for the given syntax tree.\r\n *\r\n * @param {Tree} syntaxTree\r\n * @returns {LintMessage[]} array of all lint messages\r\n */\r\nfunction lintAll(syntaxTree) {\r\n\r\n  const lintMessages = [\r\n\r\n    ...lintEmptyInserts(syntaxTree)\r\n  ];\r\n\r\n  return lintMessages;\r\n}\r\n\r\n\r\n/**\r\n * CodeMirror extension that provides linting for FEEL expressions.\r\n *\r\n * @param {EditorView} editorView\r\n * @returns {Source} CodeMirror linting source\r\n */\r\nfunction cmFeelersLinter() {\r\n  const lintFeel = cmFeelLinter();\r\n  return editorView => {\r\n\r\n    const feelMessages = lintFeel(editorView);\r\n\r\n    // don't lint if the Editor is empty\r\n    if (editorView.state.doc.length === 0) {\r\n      return [];\r\n    }\r\n\r\n    const tree = syntaxTree(editorView.state);\r\n\r\n    const feelersMessages = lintAll(tree);\r\n\r\n    return [\r\n      ...feelMessages,\r\n      ...feelersMessages.map(message => ({\r\n        ...message,\r\n        source: 'feelers linter'\r\n      }))\r\n    ];\r\n  };\r\n}\n\nvar lint = linter(cmFeelersLinter());\n\n/**\n * Creates a Feelers editor in the supplied container.\n *\n * @param {Object} config Configuration options for the Feelers editor.\n * @param {DOMNode} [config.container] The DOM node that will contain the editor.\n * @param {DOMNode|String} [config.tooltipContainer] The DOM node or CSS selector string for the tooltip container.\n * @param {String} [config.hostLanguage] The host language for the editor (e.g., 'markdown').\n * @param {Object} [config.hostLanguageParser] A custom parser for the host language.\n * @param {Function} [config.onChange] Callback function that is called when the editor's content changes.\n * @param {Function} [config.onKeyDown] Callback function that is called when a key is pressed within the editor.\n * @param {Function} [config.onLint] Callback function that is called when linting messages are available.\n * @param {Object} [config.contentAttributes] Additional attributes to set on the editor's content element.\n * @param {Boolean} [config.readOnly] Set to true to make the editor read-only.\n * @param {String} [config.value] Initial value of the editor.\n * @param {Boolean} [config.enableGutters] Set to true to enable gutter decorations (e.g., line numbers).\n * @param {Boolean} [config.singleLine] Set to true to limit the editor to a single line.\n * @param {Boolean} [config.lineWrap] Set to true to enable line wrapping.\n * @param {Boolean} [config.darkMode] Set to true to use the dark theme for the editor.\n *\n * @returns {Object} editor An instance of the FeelersEditor class.\n */\nfunction FeelersEditor({\n  container,\n  tooltipContainer,\n  hostLanguage,\n  hostLanguageParser,\n  onChange = () => { },\n  onKeyDown = () => { },\n  onLint = () => { },\n  contentAttributes = { },\n  readOnly = false,\n  value = '',\n  enableGutters = false,\n  singleLine = false,\n  lineWrap = false,\n  darkMode = false\n}) {\n\n  const changeHandler = EditorView.updateListener.of((update) => {\n    if (update.docChanged) {\n      onChange(update.state.doc.toString());\n    }\n  });\n\n  const lintHandler = EditorView.updateListener.of((update) => {\n    const diagnosticEffects = update.transactions\n      .flatMap(t => t.effects)\n      .filter(effect => effect.is(setDiagnosticsEffect));\n\n    if (!diagnosticEffects.length) {\n      return;\n    }\n\n    const messages = diagnosticEffects.flatMap(effect => effect.value);\n\n    onLint(messages);\n  });\n\n  const contentAttributesExtension = EditorView.contentAttributes.of(contentAttributes);\n\n  const keyHandler = EditorView.domEventHandlers(\n    {\n      keydown: onKeyDown\n    }\n  );\n\n  if (typeof tooltipContainer === 'string') {\n    // eslint-disable-next-line no-undef\n    tooltipContainer = document.querySelector(tooltipContainer);\n  }\n\n  const tooltipLayout = tooltipContainer ? tooltips({\n    tooltipSpace: function() {\n      return tooltipContainer.getBoundingClientRect();\n    }\n  }) : [];\n\n  const _getHostLanguageParser = (hostLanguage) => {\n    switch (hostLanguage) {\n    case 'markdown':\n      return parser$2;\n    default:\n      return null;\n    }\n  };\n\n  const feelersLanguageSupport = createFeelersLanguageSupport(hostLanguageParser || hostLanguage && _getHostLanguageParser(hostLanguage));\n\n  const extensions = [\n    bracketMatching(),\n    changeHandler,\n    contentAttributesExtension,\n    closeBrackets(),\n    indentOnInput(),\n    keyHandler,\n    keymap.of([\n      ...defaultKeymap,\n    ]),\n    feelersLanguageSupport,\n    lint,\n    lintHandler,\n    tooltipLayout,\n    darkMode ? darkTheme : lightTheme,\n    ...(enableGutters ? [\n\n      // todo: adjust folding boundaries first foldGutter(),\n      lineNumbers()\n    ] : []),\n    ...(singleLine ? [\n      EditorState.transactionFilter.of(tr => tr.newDoc.lines > 1 ? [] : tr)\n    ] : []),\n    ...(lineWrap ? [\n      EditorView.lineWrapping\n    ] : [])\n  ];\n\n  if (readOnly) {\n    extensions.push(EditorView.editable.of(false));\n  }\n\n  if (singleLine && value) {\n    value = value.toString().split('\\n')[0];\n  }\n\n  this._cmEditor = new EditorView({\n    state: EditorState.create({\n      doc: value,\n      extensions: extensions\n    }),\n    parent: container\n  });\n\n  return this;\n}\n\n/**\n * Replaces the content of the Editor\n *\n * @param {String} value\n */\nFeelersEditor.prototype.setValue = function(value) {\n  this._cmEditor.dispatch({\n    changes: {\n      from: 0,\n      to: this._cmEditor.state.doc.length,\n      insert: value,\n    }\n  });\n};\n\n/**\n * Sets the focus in the editor.\n */\nFeelersEditor.prototype.focus = function(position) {\n  const cmEditor = this._cmEditor;\n\n  // the Codemirror `focus` method always calls `focus` with `preventScroll`,\n  // so we have to focus + scroll manually\n  cmEditor.contentDOM.focus();\n  cmEditor.focus();\n\n  if (typeof position === 'number') {\n    const end = cmEditor.state.doc.length;\n    cmEditor.dispatch({ selection: { anchor: position <= end ? position : end } });\n  }\n};\n\n/**\n * Returns the current selection ranges. If no text is selected, a single\n * range with the start and end index at the cursor position will be returned.\n *\n * @returns {Object} selection\n * @returns {Array} selection.ranges\n */\nFeelersEditor.prototype.getSelection = function() {\n  return this._cmEditor.state.selection;\n};\n\nexport { FeelersEditor, buildSimpleTree, evaluate, parser };\n","/**\n * marked v12.0.2 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n    return {\n        async: false,\n        breaks: false,\n        extensions: null,\n        gfm: true,\n        hooks: null,\n        pedantic: false,\n        renderer: null,\n        silent: false,\n        tokenizer: null,\n        walkTokens: null\n    };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n    _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape$1(html, encode) {\n    if (encode) {\n        if (escapeTest.test(html)) {\n            return html.replace(escapeReplace, getEscapeReplacement);\n        }\n    }\n    else {\n        if (escapeTestNoEncode.test(html)) {\n            return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n        }\n    }\n    return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n    // explicitly match decimal, hex, and named HTML entities\n    return html.replace(unescapeTest, (_, n) => {\n        n = n.toLowerCase();\n        if (n === 'colon')\n            return ':';\n        if (n.charAt(0) === '#') {\n            return n.charAt(1) === 'x'\n                ? String.fromCharCode(parseInt(n.substring(2), 16))\n                : String.fromCharCode(+n.substring(1));\n        }\n        return '';\n    });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n    let source = typeof regex === 'string' ? regex : regex.source;\n    opt = opt || '';\n    const obj = {\n        replace: (name, val) => {\n            let valSource = typeof val === 'string' ? val : val.source;\n            valSource = valSource.replace(caret, '$1');\n            source = source.replace(name, valSource);\n            return obj;\n        },\n        getRegex: () => {\n            return new RegExp(source, opt);\n        }\n    };\n    return obj;\n}\nfunction cleanUrl(href) {\n    try {\n        href = encodeURI(href).replace(/%25/g, '%');\n    }\n    catch (e) {\n        return null;\n    }\n    return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n    // ensure that every cell-delimiting pipe has a space\n    // before it to distinguish it from an escaped pipe\n    const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n        let escaped = false;\n        let curr = offset;\n        while (--curr >= 0 && str[curr] === '\\\\')\n            escaped = !escaped;\n        if (escaped) {\n            // odd number of slashes means | is escaped\n            // so we leave it alone\n            return '|';\n        }\n        else {\n            // add space before unescaped |\n            return ' |';\n        }\n    }), cells = row.split(/ \\|/);\n    let i = 0;\n    // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n    if (!cells[0].trim()) {\n        cells.shift();\n    }\n    if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n        cells.pop();\n    }\n    if (count) {\n        if (cells.length > count) {\n            cells.splice(count);\n        }\n        else {\n            while (cells.length < count)\n                cells.push('');\n        }\n    }\n    for (; i < cells.length; i++) {\n        // leading or trailing whitespace is ignored per the gfm spec\n        cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n    }\n    return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n    const l = str.length;\n    if (l === 0) {\n        return '';\n    }\n    // Length of suffix matching the invert condition.\n    let suffLen = 0;\n    // Step left until we fail to match the invert condition.\n    while (suffLen < l) {\n        const currChar = str.charAt(l - suffLen - 1);\n        if (currChar === c && !invert) {\n            suffLen++;\n        }\n        else if (currChar !== c && invert) {\n            suffLen++;\n        }\n        else {\n            break;\n        }\n    }\n    return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n    if (str.indexOf(b[1]) === -1) {\n        return -1;\n    }\n    let level = 0;\n    for (let i = 0; i < str.length; i++) {\n        if (str[i] === '\\\\') {\n            i++;\n        }\n        else if (str[i] === b[0]) {\n            level++;\n        }\n        else if (str[i] === b[1]) {\n            level--;\n            if (level < 0) {\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n    const href = link.href;\n    const title = link.title ? escape$1(link.title) : null;\n    const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n    if (cap[0].charAt(0) !== '!') {\n        lexer.state.inLink = true;\n        const token = {\n            type: 'link',\n            raw,\n            href,\n            title,\n            text,\n            tokens: lexer.inlineTokens(text)\n        };\n        lexer.state.inLink = false;\n        return token;\n    }\n    return {\n        type: 'image',\n        raw,\n        href,\n        title,\n        text: escape$1(text)\n    };\n}\nfunction indentCodeCompensation(raw, text) {\n    const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n    if (matchIndentToCode === null) {\n        return text;\n    }\n    const indentToCode = matchIndentToCode[1];\n    return text\n        .split('\\n')\n        .map(node => {\n        const matchIndentInNode = node.match(/^\\s+/);\n        if (matchIndentInNode === null) {\n            return node;\n        }\n        const [indentInNode] = matchIndentInNode;\n        if (indentInNode.length >= indentToCode.length) {\n            return node.slice(indentToCode.length);\n        }\n        return node;\n    })\n        .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n    options;\n    rules; // set by the lexer\n    lexer; // set by the lexer\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    space(src) {\n        const cap = this.rules.block.newline.exec(src);\n        if (cap && cap[0].length > 0) {\n            return {\n                type: 'space',\n                raw: cap[0]\n            };\n        }\n    }\n    code(src) {\n        const cap = this.rules.block.code.exec(src);\n        if (cap) {\n            const text = cap[0].replace(/^ {1,4}/gm, '');\n            return {\n                type: 'code',\n                raw: cap[0],\n                codeBlockStyle: 'indented',\n                text: !this.options.pedantic\n                    ? rtrim(text, '\\n')\n                    : text\n            };\n        }\n    }\n    fences(src) {\n        const cap = this.rules.block.fences.exec(src);\n        if (cap) {\n            const raw = cap[0];\n            const text = indentCodeCompensation(raw, cap[3] || '');\n            return {\n                type: 'code',\n                raw,\n                lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n                text\n            };\n        }\n    }\n    heading(src) {\n        const cap = this.rules.block.heading.exec(src);\n        if (cap) {\n            let text = cap[2].trim();\n            // remove trailing #s\n            if (/#$/.test(text)) {\n                const trimmed = rtrim(text, '#');\n                if (this.options.pedantic) {\n                    text = trimmed.trim();\n                }\n                else if (!trimmed || / $/.test(trimmed)) {\n                    // CommonMark requires space before trailing #s\n                    text = trimmed.trim();\n                }\n            }\n            return {\n                type: 'heading',\n                raw: cap[0],\n                depth: cap[1].length,\n                text,\n                tokens: this.lexer.inline(text)\n            };\n        }\n    }\n    hr(src) {\n        const cap = this.rules.block.hr.exec(src);\n        if (cap) {\n            return {\n                type: 'hr',\n                raw: cap[0]\n            };\n        }\n    }\n    blockquote(src) {\n        const cap = this.rules.block.blockquote.exec(src);\n        if (cap) {\n            // precede setext continuation with 4 spaces so it isn't a setext\n            let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n    $1');\n            text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n            const top = this.lexer.state.top;\n            this.lexer.state.top = true;\n            const tokens = this.lexer.blockTokens(text);\n            this.lexer.state.top = top;\n            return {\n                type: 'blockquote',\n                raw: cap[0],\n                tokens,\n                text\n            };\n        }\n    }\n    list(src) {\n        let cap = this.rules.block.list.exec(src);\n        if (cap) {\n            let bull = cap[1].trim();\n            const isordered = bull.length > 1;\n            const list = {\n                type: 'list',\n                raw: '',\n                ordered: isordered,\n                start: isordered ? +bull.slice(0, -1) : '',\n                loose: false,\n                items: []\n            };\n            bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n            if (this.options.pedantic) {\n                bull = isordered ? bull : '[*+-]';\n            }\n            // Get next list item\n            const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n            let raw = '';\n            let itemContents = '';\n            let endsWithBlankLine = false;\n            // Check if current bullet point can start a new List Item\n            while (src) {\n                let endEarly = false;\n                if (!(cap = itemRegex.exec(src))) {\n                    break;\n                }\n                if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n                    break;\n                }\n                raw = cap[0];\n                src = src.substring(raw.length);\n                let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n                let nextLine = src.split('\\n', 1)[0];\n                let indent = 0;\n                if (this.options.pedantic) {\n                    indent = 2;\n                    itemContents = line.trimStart();\n                }\n                else {\n                    indent = cap[2].search(/[^ ]/); // Find first non-space char\n                    indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n                    itemContents = line.slice(indent);\n                    indent += cap[1].length;\n                }\n                let blankLine = false;\n                if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n                    raw += nextLine + '\\n';\n                    src = src.substring(nextLine.length + 1);\n                    endEarly = true;\n                }\n                if (!endEarly) {\n                    const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n                    const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n                    const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n                    const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n                    // Check if following lines should be included in List Item\n                    while (src) {\n                        const rawLine = src.split('\\n', 1)[0];\n                        nextLine = rawLine;\n                        // Re-align to follow commonmark nesting rules\n                        if (this.options.pedantic) {\n                            nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n                        }\n                        // End list item if found code fences\n                        if (fencesBeginRegex.test(nextLine)) {\n                            break;\n                        }\n                        // End list item if found start of new heading\n                        if (headingBeginRegex.test(nextLine)) {\n                            break;\n                        }\n                        // End list item if found start of new bullet\n                        if (nextBulletRegex.test(nextLine)) {\n                            break;\n                        }\n                        // Horizontal rule found\n                        if (hrRegex.test(src)) {\n                            break;\n                        }\n                        if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n                            itemContents += '\\n' + nextLine.slice(indent);\n                        }\n                        else {\n                            // not enough indentation\n                            if (blankLine) {\n                                break;\n                            }\n                            // paragraph continuation unless last line was a different block level element\n                            if (line.search(/[^ ]/) >= 4) { // indented code block\n                                break;\n                            }\n                            if (fencesBeginRegex.test(line)) {\n                                break;\n                            }\n                            if (headingBeginRegex.test(line)) {\n                                break;\n                            }\n                            if (hrRegex.test(line)) {\n                                break;\n                            }\n                            itemContents += '\\n' + nextLine;\n                        }\n                        if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n                            blankLine = true;\n                        }\n                        raw += rawLine + '\\n';\n                        src = src.substring(rawLine.length + 1);\n                        line = nextLine.slice(indent);\n                    }\n                }\n                if (!list.loose) {\n                    // If the previous item ended with a blank line, the list is loose\n                    if (endsWithBlankLine) {\n                        list.loose = true;\n                    }\n                    else if (/\\n *\\n *$/.test(raw)) {\n                        endsWithBlankLine = true;\n                    }\n                }\n                let istask = null;\n                let ischecked;\n                // Check for task list items\n                if (this.options.gfm) {\n                    istask = /^\\[[ xX]\\] /.exec(itemContents);\n                    if (istask) {\n                        ischecked = istask[0] !== '[ ] ';\n                        itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n                    }\n                }\n                list.items.push({\n                    type: 'list_item',\n                    raw,\n                    task: !!istask,\n                    checked: ischecked,\n                    loose: false,\n                    text: itemContents,\n                    tokens: []\n                });\n                list.raw += raw;\n            }\n            // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n            list.items[list.items.length - 1].raw = raw.trimEnd();\n            (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n            list.raw = list.raw.trimEnd();\n            // Item child tokens handled here at end because we needed to have the final item to trim it first\n            for (let i = 0; i < list.items.length; i++) {\n                this.lexer.state.top = false;\n                list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n                if (!list.loose) {\n                    // Check if list should be loose\n                    const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n                    const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n                    list.loose = hasMultipleLineBreaks;\n                }\n            }\n            // Set all items to loose if list is loose\n            if (list.loose) {\n                for (let i = 0; i < list.items.length; i++) {\n                    list.items[i].loose = true;\n                }\n            }\n            return list;\n        }\n    }\n    html(src) {\n        const cap = this.rules.block.html.exec(src);\n        if (cap) {\n            const token = {\n                type: 'html',\n                block: true,\n                raw: cap[0],\n                pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n                text: cap[0]\n            };\n            return token;\n        }\n    }\n    def(src) {\n        const cap = this.rules.block.def.exec(src);\n        if (cap) {\n            const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n            const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n            const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n            return {\n                type: 'def',\n                tag,\n                raw: cap[0],\n                href,\n                title\n            };\n        }\n    }\n    table(src) {\n        const cap = this.rules.block.table.exec(src);\n        if (!cap) {\n            return;\n        }\n        if (!/[:|]/.test(cap[2])) {\n            // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n            return;\n        }\n        const headers = splitCells(cap[1]);\n        const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n        const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n        const item = {\n            type: 'table',\n            raw: cap[0],\n            header: [],\n            align: [],\n            rows: []\n        };\n        if (headers.length !== aligns.length) {\n            // header and align columns must be equal, rows can be different.\n            return;\n        }\n        for (const align of aligns) {\n            if (/^ *-+: *$/.test(align)) {\n                item.align.push('right');\n            }\n            else if (/^ *:-+: *$/.test(align)) {\n                item.align.push('center');\n            }\n            else if (/^ *:-+ *$/.test(align)) {\n                item.align.push('left');\n            }\n            else {\n                item.align.push(null);\n            }\n        }\n        for (const header of headers) {\n            item.header.push({\n                text: header,\n                tokens: this.lexer.inline(header)\n            });\n        }\n        for (const row of rows) {\n            item.rows.push(splitCells(row, item.header.length).map(cell => {\n                return {\n                    text: cell,\n                    tokens: this.lexer.inline(cell)\n                };\n            }));\n        }\n        return item;\n    }\n    lheading(src) {\n        const cap = this.rules.block.lheading.exec(src);\n        if (cap) {\n            return {\n                type: 'heading',\n                raw: cap[0],\n                depth: cap[2].charAt(0) === '=' ? 1 : 2,\n                text: cap[1],\n                tokens: this.lexer.inline(cap[1])\n            };\n        }\n    }\n    paragraph(src) {\n        const cap = this.rules.block.paragraph.exec(src);\n        if (cap) {\n            const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n                ? cap[1].slice(0, -1)\n                : cap[1];\n            return {\n                type: 'paragraph',\n                raw: cap[0],\n                text,\n                tokens: this.lexer.inline(text)\n            };\n        }\n    }\n    text(src) {\n        const cap = this.rules.block.text.exec(src);\n        if (cap) {\n            return {\n                type: 'text',\n                raw: cap[0],\n                text: cap[0],\n                tokens: this.lexer.inline(cap[0])\n            };\n        }\n    }\n    escape(src) {\n        const cap = this.rules.inline.escape.exec(src);\n        if (cap) {\n            return {\n                type: 'escape',\n                raw: cap[0],\n                text: escape$1(cap[1])\n            };\n        }\n    }\n    tag(src) {\n        const cap = this.rules.inline.tag.exec(src);\n        if (cap) {\n            if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n                this.lexer.state.inLink = true;\n            }\n            else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n                this.lexer.state.inLink = false;\n            }\n            if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n                this.lexer.state.inRawBlock = true;\n            }\n            else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n                this.lexer.state.inRawBlock = false;\n            }\n            return {\n                type: 'html',\n                raw: cap[0],\n                inLink: this.lexer.state.inLink,\n                inRawBlock: this.lexer.state.inRawBlock,\n                block: false,\n                text: cap[0]\n            };\n        }\n    }\n    link(src) {\n        const cap = this.rules.inline.link.exec(src);\n        if (cap) {\n            const trimmedUrl = cap[2].trim();\n            if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n                // commonmark requires matching angle brackets\n                if (!(/>$/.test(trimmedUrl))) {\n                    return;\n                }\n                // ending angle bracket cannot be escaped\n                const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n                if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n                    return;\n                }\n            }\n            else {\n                // find closing parenthesis\n                const lastParenIndex = findClosingBracket(cap[2], '()');\n                if (lastParenIndex > -1) {\n                    const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n                    const linkLen = start + cap[1].length + lastParenIndex;\n                    cap[2] = cap[2].substring(0, lastParenIndex);\n                    cap[0] = cap[0].substring(0, linkLen).trim();\n                    cap[3] = '';\n                }\n            }\n            let href = cap[2];\n            let title = '';\n            if (this.options.pedantic) {\n                // split pedantic href and title\n                const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n                if (link) {\n                    href = link[1];\n                    title = link[3];\n                }\n            }\n            else {\n                title = cap[3] ? cap[3].slice(1, -1) : '';\n            }\n            href = href.trim();\n            if (/^</.test(href)) {\n                if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n                    // pedantic allows starting angle bracket without ending angle bracket\n                    href = href.slice(1);\n                }\n                else {\n                    href = href.slice(1, -1);\n                }\n            }\n            return outputLink(cap, {\n                href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n                title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n            }, cap[0], this.lexer);\n        }\n    }\n    reflink(src, links) {\n        let cap;\n        if ((cap = this.rules.inline.reflink.exec(src))\n            || (cap = this.rules.inline.nolink.exec(src))) {\n            const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n            const link = links[linkString.toLowerCase()];\n            if (!link) {\n                const text = cap[0].charAt(0);\n                return {\n                    type: 'text',\n                    raw: text,\n                    text\n                };\n            }\n            return outputLink(cap, link, cap[0], this.lexer);\n        }\n    }\n    emStrong(src, maskedSrc, prevChar = '') {\n        let match = this.rules.inline.emStrongLDelim.exec(src);\n        if (!match)\n            return;\n        // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n        if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n            return;\n        const nextChar = match[1] || match[2] || '';\n        if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n            // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n            const lLength = [...match[0]].length - 1;\n            let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n            const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n            endReg.lastIndex = 0;\n            // Clip maskedSrc to same section of string as src (move to lexer?)\n            maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n            while ((match = endReg.exec(maskedSrc)) != null) {\n                rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n                if (!rDelim)\n                    continue; // skip single * in __abc*abc__\n                rLength = [...rDelim].length;\n                if (match[3] || match[4]) { // found another Left Delim\n                    delimTotal += rLength;\n                    continue;\n                }\n                else if (match[5] || match[6]) { // either Left or Right Delim\n                    if (lLength % 3 && !((lLength + rLength) % 3)) {\n                        midDelimTotal += rLength;\n                        continue; // CommonMark Emphasis Rules 9-10\n                    }\n                }\n                delimTotal -= rLength;\n                if (delimTotal > 0)\n                    continue; // Haven't found enough closing delimiters\n                // Remove extra characters. *a*** -> *a*\n                rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n                // char length can be >1 for unicode characters;\n                const lastCharLength = [...match[0]][0].length;\n                const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n                // Create `em` if smallest delimiter has odd char count. *a***\n                if (Math.min(lLength, rLength) % 2) {\n                    const text = raw.slice(1, -1);\n                    return {\n                        type: 'em',\n                        raw,\n                        text,\n                        tokens: this.lexer.inlineTokens(text)\n                    };\n                }\n                // Create 'strong' if smallest delimiter has even char count. **a***\n                const text = raw.slice(2, -2);\n                return {\n                    type: 'strong',\n                    raw,\n                    text,\n                    tokens: this.lexer.inlineTokens(text)\n                };\n            }\n        }\n    }\n    codespan(src) {\n        const cap = this.rules.inline.code.exec(src);\n        if (cap) {\n            let text = cap[2].replace(/\\n/g, ' ');\n            const hasNonSpaceChars = /[^ ]/.test(text);\n            const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n            if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n                text = text.substring(1, text.length - 1);\n            }\n            text = escape$1(text, true);\n            return {\n                type: 'codespan',\n                raw: cap[0],\n                text\n            };\n        }\n    }\n    br(src) {\n        const cap = this.rules.inline.br.exec(src);\n        if (cap) {\n            return {\n                type: 'br',\n                raw: cap[0]\n            };\n        }\n    }\n    del(src) {\n        const cap = this.rules.inline.del.exec(src);\n        if (cap) {\n            return {\n                type: 'del',\n                raw: cap[0],\n                text: cap[2],\n                tokens: this.lexer.inlineTokens(cap[2])\n            };\n        }\n    }\n    autolink(src) {\n        const cap = this.rules.inline.autolink.exec(src);\n        if (cap) {\n            let text, href;\n            if (cap[2] === '@') {\n                text = escape$1(cap[1]);\n                href = 'mailto:' + text;\n            }\n            else {\n                text = escape$1(cap[1]);\n                href = text;\n            }\n            return {\n                type: 'link',\n                raw: cap[0],\n                text,\n                href,\n                tokens: [\n                    {\n                        type: 'text',\n                        raw: text,\n                        text\n                    }\n                ]\n            };\n        }\n    }\n    url(src) {\n        let cap;\n        if (cap = this.rules.inline.url.exec(src)) {\n            let text, href;\n            if (cap[2] === '@') {\n                text = escape$1(cap[0]);\n                href = 'mailto:' + text;\n            }\n            else {\n                // do extended autolink path validation\n                let prevCapZero;\n                do {\n                    prevCapZero = cap[0];\n                    cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n                } while (prevCapZero !== cap[0]);\n                text = escape$1(cap[0]);\n                if (cap[1] === 'www.') {\n                    href = 'http://' + cap[0];\n                }\n                else {\n                    href = cap[0];\n                }\n            }\n            return {\n                type: 'link',\n                raw: cap[0],\n                text,\n                href,\n                tokens: [\n                    {\n                        type: 'text',\n                        raw: text,\n                        text\n                    }\n                ]\n            };\n        }\n    }\n    inlineText(src) {\n        const cap = this.rules.inline.text.exec(src);\n        if (cap) {\n            let text;\n            if (this.lexer.state.inRawBlock) {\n                text = cap[0];\n            }\n            else {\n                text = escape$1(cap[0]);\n            }\n            return {\n                type: 'text',\n                raw: cap[0],\n                text\n            };\n        }\n    }\n}\n\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n    .replace(/bull/g, bullet) // lists can interrupt\n    .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n    .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n    .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n    .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n    .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n    .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n    .replace('label', _blockLabel)\n    .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n    .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n    .replace(/bull/g, bullet)\n    .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n    + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n    + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n    + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n    + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n    + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n    + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n    + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n    + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n    + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n    + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n    + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n    + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n    + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n    + ')', 'i')\n    .replace('comment', _comment)\n    .replace('tag', _tag)\n    .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n    .getRegex();\nconst paragraph = edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n    .replace('|table', '')\n    .replace('blockquote', ' {0,3}>')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n    .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n    .replace('paragraph', paragraph)\n    .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n    blockquote,\n    code: blockCode,\n    def,\n    fences,\n    heading,\n    hr,\n    html,\n    lheading,\n    list,\n    newline,\n    paragraph,\n    table: noopTest,\n    text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n    + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n    + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('blockquote', ' {0,3}>')\n    .replace('code', ' {4}[^\\\\n]')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n    .getRegex();\nconst blockGfm = {\n    ...blockNormal,\n    table: gfmTable,\n    paragraph: edit(_paragraph)\n        .replace('hr', hr)\n        .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n        .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n        .replace('table', gfmTable) // interrupt paragraphs with table\n        .replace('blockquote', ' {0,3}>')\n        .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n        .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n        .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n        .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n        .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n    ...blockNormal,\n    html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n        + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n        + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n        .replace('comment', _comment)\n        .replace(/tag/g, '(?!(?:'\n        + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n        + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n        + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n        .getRegex(),\n    def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n    heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n    fences: noopTest, // fences not supported\n    lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n    paragraph: edit(_paragraph)\n        .replace('hr', hr)\n        .replace('heading', ' *#{1,6} *[^\\n]')\n        .replace('lheading', lheading)\n        .replace('|table', '')\n        .replace('blockquote', ' {0,3}>')\n        .replace('|fences', '')\n        .replace('|list', '')\n        .replace('|html', '')\n        .replace('|tag', '')\n        .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = '\\\\p{P}\\\\p{S}';\nconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n    .replace(/punctuation/g, _punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n    + '|[^*]+(?=[^*])' // Consume to delim\n    + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n    + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n    + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n    + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n    + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n    + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n    .replace(/punct/g, _punctuation)\n    .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n    + '|[^_]+(?=[^_])' // Consume to delim\n    + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n    + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n    + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n    + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n    + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n    .replace(/punct/g, _punctuation)\n    .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n    .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n    .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n    .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n    .replace('comment', _inlineComment)\n    .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n    .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n    .replace('label', _inlineLabel)\n    .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n    .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n    .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n    .replace('label', _inlineLabel)\n    .replace('ref', _blockLabel)\n    .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n    .replace('ref', _blockLabel)\n    .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n    .replace('reflink', reflink)\n    .replace('nolink', nolink)\n    .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n    _backpedal: noopTest, // only used for GFM url\n    anyPunctuation,\n    autolink,\n    blockSkip,\n    br,\n    code: inlineCode,\n    del: noopTest,\n    emStrongLDelim,\n    emStrongRDelimAst,\n    emStrongRDelimUnd,\n    escape,\n    link,\n    nolink,\n    punctuation,\n    reflink,\n    reflinkSearch,\n    tag,\n    text: inlineText,\n    url: noopTest\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n    ...inlineNormal,\n    link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n        .replace('label', _inlineLabel)\n        .getRegex(),\n    reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n        .replace('label', _inlineLabel)\n        .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n    ...inlineNormal,\n    escape: edit(escape).replace('])', '~|])').getRegex(),\n    url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n        .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n        .getRegex(),\n    _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n    del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n    text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n    ...inlineGfm,\n    br: edit(br).replace('{2,}', '*').getRegex(),\n    text: edit(inlineGfm.text)\n        .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n        .replace(/\\{2,\\}/g, '*')\n        .getRegex()\n};\n/**\n * exports\n */\nconst block = {\n    normal: blockNormal,\n    gfm: blockGfm,\n    pedantic: blockPedantic\n};\nconst inline = {\n    normal: inlineNormal,\n    gfm: inlineGfm,\n    breaks: inlineBreaks,\n    pedantic: inlinePedantic\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n    tokens;\n    options;\n    state;\n    tokenizer;\n    inlineQueue;\n    constructor(options) {\n        // TokenList cannot be created in one go\n        this.tokens = [];\n        this.tokens.links = Object.create(null);\n        this.options = options || _defaults;\n        this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n        this.tokenizer = this.options.tokenizer;\n        this.tokenizer.options = this.options;\n        this.tokenizer.lexer = this;\n        this.inlineQueue = [];\n        this.state = {\n            inLink: false,\n            inRawBlock: false,\n            top: true\n        };\n        const rules = {\n            block: block.normal,\n            inline: inline.normal\n        };\n        if (this.options.pedantic) {\n            rules.block = block.pedantic;\n            rules.inline = inline.pedantic;\n        }\n        else if (this.options.gfm) {\n            rules.block = block.gfm;\n            if (this.options.breaks) {\n                rules.inline = inline.breaks;\n            }\n            else {\n                rules.inline = inline.gfm;\n            }\n        }\n        this.tokenizer.rules = rules;\n    }\n    /**\n     * Expose Rules\n     */\n    static get rules() {\n        return {\n            block,\n            inline\n        };\n    }\n    /**\n     * Static Lex Method\n     */\n    static lex(src, options) {\n        const lexer = new _Lexer(options);\n        return lexer.lex(src);\n    }\n    /**\n     * Static Lex Inline Method\n     */\n    static lexInline(src, options) {\n        const lexer = new _Lexer(options);\n        return lexer.inlineTokens(src);\n    }\n    /**\n     * Preprocessing\n     */\n    lex(src) {\n        src = src\n            .replace(/\\r\\n|\\r/g, '\\n');\n        this.blockTokens(src, this.tokens);\n        for (let i = 0; i < this.inlineQueue.length; i++) {\n            const next = this.inlineQueue[i];\n            this.inlineTokens(next.src, next.tokens);\n        }\n        this.inlineQueue = [];\n        return this.tokens;\n    }\n    blockTokens(src, tokens = []) {\n        if (this.options.pedantic) {\n            src = src.replace(/\\t/g, '    ').replace(/^ +$/gm, '');\n        }\n        else {\n            src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n                return leading + '    '.repeat(tabs.length);\n            });\n        }\n        let token;\n        let lastToken;\n        let cutSrc;\n        let lastParagraphClipped;\n        while (src) {\n            if (this.options.extensions\n                && this.options.extensions.block\n                && this.options.extensions.block.some((extTokenizer) => {\n                    if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n                        src = src.substring(token.raw.length);\n                        tokens.push(token);\n                        return true;\n                    }\n                    return false;\n                })) {\n                continue;\n            }\n            // newline\n            if (token = this.tokenizer.space(src)) {\n                src = src.substring(token.raw.length);\n                if (token.raw.length === 1 && tokens.length > 0) {\n                    // if there's a single \\n as a spacer, it's terminating the last line,\n                    // so move it there so that we don't get unnecessary paragraph tags\n                    tokens[tokens.length - 1].raw += '\\n';\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // code\n            if (token = this.tokenizer.code(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                // An indented code block cannot interrupt a paragraph.\n                if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // fences\n            if (token = this.tokenizer.fences(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // heading\n            if (token = this.tokenizer.heading(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // hr\n            if (token = this.tokenizer.hr(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // blockquote\n            if (token = this.tokenizer.blockquote(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // list\n            if (token = this.tokenizer.list(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // html\n            if (token = this.tokenizer.html(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // def\n            if (token = this.tokenizer.def(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.raw;\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else if (!this.tokens.links[token.tag]) {\n                    this.tokens.links[token.tag] = {\n                        href: token.href,\n                        title: token.title\n                    };\n                }\n                continue;\n            }\n            // table (gfm)\n            if (token = this.tokenizer.table(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // lheading\n            if (token = this.tokenizer.lheading(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // top-level paragraph\n            // prevent paragraph consuming extensions by clipping 'src' to extension start\n            cutSrc = src;\n            if (this.options.extensions && this.options.extensions.startBlock) {\n                let startIndex = Infinity;\n                const tempSrc = src.slice(1);\n                let tempStart;\n                this.options.extensions.startBlock.forEach((getStartIndex) => {\n                    tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n                    if (typeof tempStart === 'number' && tempStart >= 0) {\n                        startIndex = Math.min(startIndex, tempStart);\n                    }\n                });\n                if (startIndex < Infinity && startIndex >= 0) {\n                    cutSrc = src.substring(0, startIndex + 1);\n                }\n            }\n            if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n                lastToken = tokens[tokens.length - 1];\n                if (lastParagraphClipped && lastToken.type === 'paragraph') {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue.pop();\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                lastParagraphClipped = (cutSrc.length !== src.length);\n                src = src.substring(token.raw.length);\n                continue;\n            }\n            // text\n            if (token = this.tokenizer.text(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && lastToken.type === 'text') {\n                    lastToken.raw += '\\n' + token.raw;\n                    lastToken.text += '\\n' + token.text;\n                    this.inlineQueue.pop();\n                    this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            if (src) {\n                const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n                if (this.options.silent) {\n                    console.error(errMsg);\n                    break;\n                }\n                else {\n                    throw new Error(errMsg);\n                }\n            }\n        }\n        this.state.top = true;\n        return tokens;\n    }\n    inline(src, tokens = []) {\n        this.inlineQueue.push({ src, tokens });\n        return tokens;\n    }\n    /**\n     * Lexing/Compiling\n     */\n    inlineTokens(src, tokens = []) {\n        let token, lastToken, cutSrc;\n        // String with links masked to avoid interference with em and strong\n        let maskedSrc = src;\n        let match;\n        let keepPrevChar, prevChar;\n        // Mask out reflinks\n        if (this.tokens.links) {\n            const links = Object.keys(this.tokens.links);\n            if (links.length > 0) {\n                while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n                    if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n                        maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n                    }\n                }\n            }\n        }\n        // Mask out other blocks\n        while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n        }\n        // Mask out escaped characters\n        while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n        }\n        while (src) {\n            if (!keepPrevChar) {\n                prevChar = '';\n            }\n            keepPrevChar = false;\n            // extensions\n            if (this.options.extensions\n                && this.options.extensions.inline\n                && this.options.extensions.inline.some((extTokenizer) => {\n                    if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n                        src = src.substring(token.raw.length);\n                        tokens.push(token);\n                        return true;\n                    }\n                    return false;\n                })) {\n                continue;\n            }\n            // escape\n            if (token = this.tokenizer.escape(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // tag\n            if (token = this.tokenizer.tag(src)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // link\n            if (token = this.tokenizer.link(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // reflink, nolink\n            if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n                src = src.substring(token.raw.length);\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            // em & strong\n            if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // code\n            if (token = this.tokenizer.codespan(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // br\n            if (token = this.tokenizer.br(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // del (gfm)\n            if (token = this.tokenizer.del(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // autolink\n            if (token = this.tokenizer.autolink(src)) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // url (gfm)\n            if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n                src = src.substring(token.raw.length);\n                tokens.push(token);\n                continue;\n            }\n            // text\n            // prevent inlineText consuming extensions by clipping 'src' to extension start\n            cutSrc = src;\n            if (this.options.extensions && this.options.extensions.startInline) {\n                let startIndex = Infinity;\n                const tempSrc = src.slice(1);\n                let tempStart;\n                this.options.extensions.startInline.forEach((getStartIndex) => {\n                    tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n                    if (typeof tempStart === 'number' && tempStart >= 0) {\n                        startIndex = Math.min(startIndex, tempStart);\n                    }\n                });\n                if (startIndex < Infinity && startIndex >= 0) {\n                    cutSrc = src.substring(0, startIndex + 1);\n                }\n            }\n            if (token = this.tokenizer.inlineText(cutSrc)) {\n                src = src.substring(token.raw.length);\n                if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n                    prevChar = token.raw.slice(-1);\n                }\n                keepPrevChar = true;\n                lastToken = tokens[tokens.length - 1];\n                if (lastToken && lastToken.type === 'text') {\n                    lastToken.raw += token.raw;\n                    lastToken.text += token.text;\n                }\n                else {\n                    tokens.push(token);\n                }\n                continue;\n            }\n            if (src) {\n                const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n                if (this.options.silent) {\n                    console.error(errMsg);\n                    break;\n                }\n                else {\n                    throw new Error(errMsg);\n                }\n            }\n        }\n        return tokens;\n    }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n    options;\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    code(code, infostring, escaped) {\n        const lang = (infostring || '').match(/^\\S*/)?.[0];\n        code = code.replace(/\\n$/, '') + '\\n';\n        if (!lang) {\n            return '<pre><code>'\n                + (escaped ? code : escape$1(code, true))\n                + '</code></pre>\\n';\n        }\n        return '<pre><code class=\"language-'\n            + escape$1(lang)\n            + '\">'\n            + (escaped ? code : escape$1(code, true))\n            + '</code></pre>\\n';\n    }\n    blockquote(quote) {\n        return `<blockquote>\\n${quote}</blockquote>\\n`;\n    }\n    html(html, block) {\n        return html;\n    }\n    heading(text, level, raw) {\n        // ignore IDs\n        return `<h${level}>${text}</h${level}>\\n`;\n    }\n    hr() {\n        return '<hr>\\n';\n    }\n    list(body, ordered, start) {\n        const type = ordered ? 'ol' : 'ul';\n        const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n        return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n    }\n    listitem(text, task, checked) {\n        return `<li>${text}</li>\\n`;\n    }\n    checkbox(checked) {\n        return '<input '\n            + (checked ? 'checked=\"\" ' : '')\n            + 'disabled=\"\" type=\"checkbox\">';\n    }\n    paragraph(text) {\n        return `<p>${text}</p>\\n`;\n    }\n    table(header, body) {\n        if (body)\n            body = `<tbody>${body}</tbody>`;\n        return '<table>\\n'\n            + '<thead>\\n'\n            + header\n            + '</thead>\\n'\n            + body\n            + '</table>\\n';\n    }\n    tablerow(content) {\n        return `<tr>\\n${content}</tr>\\n`;\n    }\n    tablecell(content, flags) {\n        const type = flags.header ? 'th' : 'td';\n        const tag = flags.align\n            ? `<${type} align=\"${flags.align}\">`\n            : `<${type}>`;\n        return tag + content + `</${type}>\\n`;\n    }\n    /**\n     * span level renderer\n     */\n    strong(text) {\n        return `<strong>${text}</strong>`;\n    }\n    em(text) {\n        return `<em>${text}</em>`;\n    }\n    codespan(text) {\n        return `<code>${text}</code>`;\n    }\n    br() {\n        return '<br>';\n    }\n    del(text) {\n        return `<del>${text}</del>`;\n    }\n    link(href, title, text) {\n        const cleanHref = cleanUrl(href);\n        if (cleanHref === null) {\n            return text;\n        }\n        href = cleanHref;\n        let out = '<a href=\"' + href + '\"';\n        if (title) {\n            out += ' title=\"' + title + '\"';\n        }\n        out += '>' + text + '</a>';\n        return out;\n    }\n    image(href, title, text) {\n        const cleanHref = cleanUrl(href);\n        if (cleanHref === null) {\n            return text;\n        }\n        href = cleanHref;\n        let out = `<img src=\"${href}\" alt=\"${text}\"`;\n        if (title) {\n            out += ` title=\"${title}\"`;\n        }\n        out += '>';\n        return out;\n    }\n    text(text) {\n        return text;\n    }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n    // no need for block level renderers\n    strong(text) {\n        return text;\n    }\n    em(text) {\n        return text;\n    }\n    codespan(text) {\n        return text;\n    }\n    del(text) {\n        return text;\n    }\n    html(text) {\n        return text;\n    }\n    text(text) {\n        return text;\n    }\n    link(href, title, text) {\n        return '' + text;\n    }\n    image(href, title, text) {\n        return '' + text;\n    }\n    br() {\n        return '';\n    }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n    options;\n    renderer;\n    textRenderer;\n    constructor(options) {\n        this.options = options || _defaults;\n        this.options.renderer = this.options.renderer || new _Renderer();\n        this.renderer = this.options.renderer;\n        this.renderer.options = this.options;\n        this.textRenderer = new _TextRenderer();\n    }\n    /**\n     * Static Parse Method\n     */\n    static parse(tokens, options) {\n        const parser = new _Parser(options);\n        return parser.parse(tokens);\n    }\n    /**\n     * Static Parse Inline Method\n     */\n    static parseInline(tokens, options) {\n        const parser = new _Parser(options);\n        return parser.parseInline(tokens);\n    }\n    /**\n     * Parse Loop\n     */\n    parse(tokens, top = true) {\n        let out = '';\n        for (let i = 0; i < tokens.length; i++) {\n            const token = tokens[i];\n            // Run any renderer extensions\n            if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n                const genericToken = token;\n                const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n                if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n                    out += ret || '';\n                    continue;\n                }\n            }\n            switch (token.type) {\n                case 'space': {\n                    continue;\n                }\n                case 'hr': {\n                    out += this.renderer.hr();\n                    continue;\n                }\n                case 'heading': {\n                    const headingToken = token;\n                    out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape(this.parseInline(headingToken.tokens, this.textRenderer)));\n                    continue;\n                }\n                case 'code': {\n                    const codeToken = token;\n                    out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);\n                    continue;\n                }\n                case 'table': {\n                    const tableToken = token;\n                    let header = '';\n                    // header\n                    let cell = '';\n                    for (let j = 0; j < tableToken.header.length; j++) {\n                        cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), { header: true, align: tableToken.align[j] });\n                    }\n                    header += this.renderer.tablerow(cell);\n                    let body = '';\n                    for (let j = 0; j < tableToken.rows.length; j++) {\n                        const row = tableToken.rows[j];\n                        cell = '';\n                        for (let k = 0; k < row.length; k++) {\n                            cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { header: false, align: tableToken.align[k] });\n                        }\n                        body += this.renderer.tablerow(cell);\n                    }\n                    out += this.renderer.table(header, body);\n                    continue;\n                }\n                case 'blockquote': {\n                    const blockquoteToken = token;\n                    const body = this.parse(blockquoteToken.tokens);\n                    out += this.renderer.blockquote(body);\n                    continue;\n                }\n                case 'list': {\n                    const listToken = token;\n                    const ordered = listToken.ordered;\n                    const start = listToken.start;\n                    const loose = listToken.loose;\n                    let body = '';\n                    for (let j = 0; j < listToken.items.length; j++) {\n                        const item = listToken.items[j];\n                        const checked = item.checked;\n                        const task = item.task;\n                        let itemBody = '';\n                        if (item.task) {\n                            const checkbox = this.renderer.checkbox(!!checked);\n                            if (loose) {\n                                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                                    item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n                                    if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                                        item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                                    }\n                                }\n                                else {\n                                    item.tokens.unshift({\n                                        type: 'text',\n                                        text: checkbox + ' '\n                                    });\n                                }\n                            }\n                            else {\n                                itemBody += checkbox + ' ';\n                            }\n                        }\n                        itemBody += this.parse(item.tokens, loose);\n                        body += this.renderer.listitem(itemBody, task, !!checked);\n                    }\n                    out += this.renderer.list(body, ordered, start);\n                    continue;\n                }\n                case 'html': {\n                    const htmlToken = token;\n                    out += this.renderer.html(htmlToken.text, htmlToken.block);\n                    continue;\n                }\n                case 'paragraph': {\n                    const paragraphToken = token;\n                    out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n                    continue;\n                }\n                case 'text': {\n                    let textToken = token;\n                    let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n                    while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n                        textToken = tokens[++i];\n                        body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n                    }\n                    out += top ? this.renderer.paragraph(body) : body;\n                    continue;\n                }\n                default: {\n                    const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n                    if (this.options.silent) {\n                        console.error(errMsg);\n                        return '';\n                    }\n                    else {\n                        throw new Error(errMsg);\n                    }\n                }\n            }\n        }\n        return out;\n    }\n    /**\n     * Parse Inline Tokens\n     */\n    parseInline(tokens, renderer) {\n        renderer = renderer || this.renderer;\n        let out = '';\n        for (let i = 0; i < tokens.length; i++) {\n            const token = tokens[i];\n            // Run any renderer extensions\n            if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n                const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n                if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n                    out += ret || '';\n                    continue;\n                }\n            }\n            switch (token.type) {\n                case 'escape': {\n                    const escapeToken = token;\n                    out += renderer.text(escapeToken.text);\n                    break;\n                }\n                case 'html': {\n                    const tagToken = token;\n                    out += renderer.html(tagToken.text);\n                    break;\n                }\n                case 'link': {\n                    const linkToken = token;\n                    out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n                    break;\n                }\n                case 'image': {\n                    const imageToken = token;\n                    out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n                    break;\n                }\n                case 'strong': {\n                    const strongToken = token;\n                    out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n                    break;\n                }\n                case 'em': {\n                    const emToken = token;\n                    out += renderer.em(this.parseInline(emToken.tokens, renderer));\n                    break;\n                }\n                case 'codespan': {\n                    const codespanToken = token;\n                    out += renderer.codespan(codespanToken.text);\n                    break;\n                }\n                case 'br': {\n                    out += renderer.br();\n                    break;\n                }\n                case 'del': {\n                    const delToken = token;\n                    out += renderer.del(this.parseInline(delToken.tokens, renderer));\n                    break;\n                }\n                case 'text': {\n                    const textToken = token;\n                    out += renderer.text(textToken.text);\n                    break;\n                }\n                default: {\n                    const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n                    if (this.options.silent) {\n                        console.error(errMsg);\n                        return '';\n                    }\n                    else {\n                        throw new Error(errMsg);\n                    }\n                }\n            }\n        }\n        return out;\n    }\n}\n\nclass _Hooks {\n    options;\n    constructor(options) {\n        this.options = options || _defaults;\n    }\n    static passThroughHooks = new Set([\n        'preprocess',\n        'postprocess',\n        'processAllTokens'\n    ]);\n    /**\n     * Process markdown before marked\n     */\n    preprocess(markdown) {\n        return markdown;\n    }\n    /**\n     * Process HTML after marked is finished\n     */\n    postprocess(html) {\n        return html;\n    }\n    /**\n     * Process all tokens before walk tokens\n     */\n    processAllTokens(tokens) {\n        return tokens;\n    }\n}\n\nclass Marked {\n    defaults = _getDefaults();\n    options = this.setOptions;\n    parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n    parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n    Parser = _Parser;\n    Renderer = _Renderer;\n    TextRenderer = _TextRenderer;\n    Lexer = _Lexer;\n    Tokenizer = _Tokenizer;\n    Hooks = _Hooks;\n    constructor(...args) {\n        this.use(...args);\n    }\n    /**\n     * Run callback for every token\n     */\n    walkTokens(tokens, callback) {\n        let values = [];\n        for (const token of tokens) {\n            values = values.concat(callback.call(this, token));\n            switch (token.type) {\n                case 'table': {\n                    const tableToken = token;\n                    for (const cell of tableToken.header) {\n                        values = values.concat(this.walkTokens(cell.tokens, callback));\n                    }\n                    for (const row of tableToken.rows) {\n                        for (const cell of row) {\n                            values = values.concat(this.walkTokens(cell.tokens, callback));\n                        }\n                    }\n                    break;\n                }\n                case 'list': {\n                    const listToken = token;\n                    values = values.concat(this.walkTokens(listToken.items, callback));\n                    break;\n                }\n                default: {\n                    const genericToken = token;\n                    if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n                        this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n                            const tokens = genericToken[childTokens].flat(Infinity);\n                            values = values.concat(this.walkTokens(tokens, callback));\n                        });\n                    }\n                    else if (genericToken.tokens) {\n                        values = values.concat(this.walkTokens(genericToken.tokens, callback));\n                    }\n                }\n            }\n        }\n        return values;\n    }\n    use(...args) {\n        const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n        args.forEach((pack) => {\n            // copy options to new object\n            const opts = { ...pack };\n            // set async to true if it was set to true before\n            opts.async = this.defaults.async || opts.async || false;\n            // ==-- Parse \"addon\" extensions --== //\n            if (pack.extensions) {\n                pack.extensions.forEach((ext) => {\n                    if (!ext.name) {\n                        throw new Error('extension name required');\n                    }\n                    if ('renderer' in ext) { // Renderer extensions\n                        const prevRenderer = extensions.renderers[ext.name];\n                        if (prevRenderer) {\n                            // Replace extension with func to run new extension but fall back if false\n                            extensions.renderers[ext.name] = function (...args) {\n                                let ret = ext.renderer.apply(this, args);\n                                if (ret === false) {\n                                    ret = prevRenderer.apply(this, args);\n                                }\n                                return ret;\n                            };\n                        }\n                        else {\n                            extensions.renderers[ext.name] = ext.renderer;\n                        }\n                    }\n                    if ('tokenizer' in ext) { // Tokenizer Extensions\n                        if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n                            throw new Error(\"extension level must be 'block' or 'inline'\");\n                        }\n                        const extLevel = extensions[ext.level];\n                        if (extLevel) {\n                            extLevel.unshift(ext.tokenizer);\n                        }\n                        else {\n                            extensions[ext.level] = [ext.tokenizer];\n                        }\n                        if (ext.start) { // Function to check for start of token\n                            if (ext.level === 'block') {\n                                if (extensions.startBlock) {\n                                    extensions.startBlock.push(ext.start);\n                                }\n                                else {\n                                    extensions.startBlock = [ext.start];\n                                }\n                            }\n                            else if (ext.level === 'inline') {\n                                if (extensions.startInline) {\n                                    extensions.startInline.push(ext.start);\n                                }\n                                else {\n                                    extensions.startInline = [ext.start];\n                                }\n                            }\n                        }\n                    }\n                    if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n                        extensions.childTokens[ext.name] = ext.childTokens;\n                    }\n                });\n                opts.extensions = extensions;\n            }\n            // ==-- Parse \"overwrite\" extensions --== //\n            if (pack.renderer) {\n                const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n                for (const prop in pack.renderer) {\n                    if (!(prop in renderer)) {\n                        throw new Error(`renderer '${prop}' does not exist`);\n                    }\n                    if (prop === 'options') {\n                        // ignore options property\n                        continue;\n                    }\n                    const rendererProp = prop;\n                    const rendererFunc = pack.renderer[rendererProp];\n                    const prevRenderer = renderer[rendererProp];\n                    // Replace renderer with func to run extension, but fall back if false\n                    renderer[rendererProp] = (...args) => {\n                        let ret = rendererFunc.apply(renderer, args);\n                        if (ret === false) {\n                            ret = prevRenderer.apply(renderer, args);\n                        }\n                        return ret || '';\n                    };\n                }\n                opts.renderer = renderer;\n            }\n            if (pack.tokenizer) {\n                const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n                for (const prop in pack.tokenizer) {\n                    if (!(prop in tokenizer)) {\n                        throw new Error(`tokenizer '${prop}' does not exist`);\n                    }\n                    if (['options', 'rules', 'lexer'].includes(prop)) {\n                        // ignore options, rules, and lexer properties\n                        continue;\n                    }\n                    const tokenizerProp = prop;\n                    const tokenizerFunc = pack.tokenizer[tokenizerProp];\n                    const prevTokenizer = tokenizer[tokenizerProp];\n                    // Replace tokenizer with func to run extension, but fall back if false\n                    // @ts-expect-error cannot type tokenizer function dynamically\n                    tokenizer[tokenizerProp] = (...args) => {\n                        let ret = tokenizerFunc.apply(tokenizer, args);\n                        if (ret === false) {\n                            ret = prevTokenizer.apply(tokenizer, args);\n                        }\n                        return ret;\n                    };\n                }\n                opts.tokenizer = tokenizer;\n            }\n            // ==-- Parse Hooks extensions --== //\n            if (pack.hooks) {\n                const hooks = this.defaults.hooks || new _Hooks();\n                for (const prop in pack.hooks) {\n                    if (!(prop in hooks)) {\n                        throw new Error(`hook '${prop}' does not exist`);\n                    }\n                    if (prop === 'options') {\n                        // ignore options property\n                        continue;\n                    }\n                    const hooksProp = prop;\n                    const hooksFunc = pack.hooks[hooksProp];\n                    const prevHook = hooks[hooksProp];\n                    if (_Hooks.passThroughHooks.has(prop)) {\n                        // @ts-expect-error cannot type hook function dynamically\n                        hooks[hooksProp] = (arg) => {\n                            if (this.defaults.async) {\n                                return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n                                    return prevHook.call(hooks, ret);\n                                });\n                            }\n                            const ret = hooksFunc.call(hooks, arg);\n                            return prevHook.call(hooks, ret);\n                        };\n                    }\n                    else {\n                        // @ts-expect-error cannot type hook function dynamically\n                        hooks[hooksProp] = (...args) => {\n                            let ret = hooksFunc.apply(hooks, args);\n                            if (ret === false) {\n                                ret = prevHook.apply(hooks, args);\n                            }\n                            return ret;\n                        };\n                    }\n                }\n                opts.hooks = hooks;\n            }\n            // ==-- Parse WalkTokens extensions --== //\n            if (pack.walkTokens) {\n                const walkTokens = this.defaults.walkTokens;\n                const packWalktokens = pack.walkTokens;\n                opts.walkTokens = function (token) {\n                    let values = [];\n                    values.push(packWalktokens.call(this, token));\n                    if (walkTokens) {\n                        values = values.concat(walkTokens.call(this, token));\n                    }\n                    return values;\n                };\n            }\n            this.defaults = { ...this.defaults, ...opts };\n        });\n        return this;\n    }\n    setOptions(opt) {\n        this.defaults = { ...this.defaults, ...opt };\n        return this;\n    }\n    lexer(src, options) {\n        return _Lexer.lex(src, options ?? this.defaults);\n    }\n    parser(tokens, options) {\n        return _Parser.parse(tokens, options ?? this.defaults);\n    }\n    #parseMarkdown(lexer, parser) {\n        return (src, options) => {\n            const origOpt = { ...options };\n            const opt = { ...this.defaults, ...origOpt };\n            // Show warning if an extension set async to true but the parse was called with async: false\n            if (this.defaults.async === true && origOpt.async === false) {\n                if (!opt.silent) {\n                    console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n                }\n                opt.async = true;\n            }\n            const throwError = this.#onError(!!opt.silent, !!opt.async);\n            // throw error in case of non string input\n            if (typeof src === 'undefined' || src === null) {\n                return throwError(new Error('marked(): input parameter is undefined or null'));\n            }\n            if (typeof src !== 'string') {\n                return throwError(new Error('marked(): input parameter is of type '\n                    + Object.prototype.toString.call(src) + ', string expected'));\n            }\n            if (opt.hooks) {\n                opt.hooks.options = opt;\n            }\n            if (opt.async) {\n                return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n                    .then(src => lexer(src, opt))\n                    .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n                    .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n                    .then(tokens => parser(tokens, opt))\n                    .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n                    .catch(throwError);\n            }\n            try {\n                if (opt.hooks) {\n                    src = opt.hooks.preprocess(src);\n                }\n                let tokens = lexer(src, opt);\n                if (opt.hooks) {\n                    tokens = opt.hooks.processAllTokens(tokens);\n                }\n                if (opt.walkTokens) {\n                    this.walkTokens(tokens, opt.walkTokens);\n                }\n                let html = parser(tokens, opt);\n                if (opt.hooks) {\n                    html = opt.hooks.postprocess(html);\n                }\n                return html;\n            }\n            catch (e) {\n                return throwError(e);\n            }\n        };\n    }\n    #onError(silent, async) {\n        return (e) => {\n            e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n            if (silent) {\n                const msg = '<p>An error occurred:</p><pre>'\n                    + escape$1(e.message + '', true)\n                    + '</pre>';\n                if (async) {\n                    return Promise.resolve(msg);\n                }\n                return msg;\n            }\n            if (async) {\n                return Promise.reject(e);\n            }\n            throw e;\n        };\n    }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n    return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n    marked.setOptions = function (options) {\n        markedInstance.setOptions(options);\n        marked.defaults = markedInstance.defaults;\n        changeDefaults(marked.defaults);\n        return marked;\n    };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n    markedInstance.use(...args);\n    marked.defaults = markedInstance.defaults;\n    changeDefaults(marked.defaults);\n    return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n    return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","import Ids from 'ids';\nimport { isString, get, isNil, isObject, some, isNumber, set, findIndex, isArray, isDefined, values, uniqueBy, isFunction, bind, assign, groupBy, isUndefined } from 'min-dash';\nimport Big from 'big.js';\nimport classNames from 'classnames';\nimport { jsx, jsxs, Fragment } from 'preact/jsx-runtime';\nimport { useContext, useMemo, useRef, useCallback, useEffect, useState, useLayoutEffect } from 'preact/hooks';\nimport { createContext, createElement, Fragment as Fragment$1, render } from 'preact';\nimport isEqual from 'lodash/isEqual';\nimport flatpickr from 'flatpickr';\nimport * as React from 'preact/compat';\nimport { createPortal } from 'preact/compat';\nimport DOMPurify from 'dompurify';\nimport { isEqual as isEqual$1 } from 'lodash';\nimport { Injector } from 'didi';\nimport { parseExpression, parseUnaryTests, evaluate, unaryTest } from 'feelin';\nimport { evaluate as evaluate$1, parser, buildSimpleTree } from 'feelers';\nimport { marked } from 'marked';\n\nconst getFlavouredFeelVariableNames = (feelString, feelFlavour = 'expression', options = {}) => {\n  const {\n    depth = 0,\n    specialDepthAccessors = {}\n  } = options;\n  if (!['expression', 'unaryTest'].includes(feelFlavour)) return [];\n  const tree = feelFlavour === 'expression' ? parseExpression(feelString) : parseUnaryTests(feelString);\n  const simpleExpressionTree = _buildSimpleFeelStructureTree(tree, feelString);\n  const variables = function _unfoldVariables(node) {\n    if (node.name === 'PathExpression') {\n      // if the path is built on top of a context, we process that context and\n      // ignore the rest of the path expression, as it is not relevant for variable extraction\n      const pathRoot = _linearizePathExpression(node)[0];\n      if (pathRoot.name === 'Context') {\n        return _unfoldVariables(pathRoot);\n      }\n      if (Object.keys(specialDepthAccessors).length === 0) {\n        return depth === 0 ? [_getVariableNameAtPathIndex(node, 0)] : [];\n      }\n\n      // if using special depth accessors, use a more complex extraction\n      return Array.from(_smartExtractVariableNames(node, depth, specialDepthAccessors));\n    }\n    if (depth === 0 && node.name === 'VariableName') return [node.variableName];\n\n    // for any other kind of node, traverse its children and flatten the result\n    if (node.children) {\n      const variables = node.children.reduce((acc, child) => {\n        return acc.concat(_unfoldVariables(child));\n      }, []);\n\n      // if we are within a filter context, we need to remove the item variable as it is used for iteration there\n      return node.name === 'FilterContext' ? variables.filter(name => name !== 'item') : variables;\n    }\n    return [];\n  }(simpleExpressionTree);\n  return [...new Set(variables)];\n};\n\n/**\n * Get the variable name at the specified index in a given path expression.\n *\n * @param {Object} root - The root node of the path expression tree.\n * @param {number} index - The index of the variable name to retrieve.\n * @returns {string|null} The variable name at the specified index or null if index is out of bounds.\n */\nconst _getVariableNameAtPathIndex = (root, index) => {\n  const nodes = _linearizePathExpression(root);\n  return nodes[index].variableName || null;\n};\n\n/**\n * Extracts the variables which are required of the external context for a given path expression.\n * This is done by traversing the path expression tree and keeping track of the current depth relative to the external context.\n *\n * @param {Object} node - The root node of the path expression tree.\n * @param {number} initialDepth - The depth at which the root node is located in the outer context.\n * @param {Object} specialDepthAccessors - Definitions of special keywords which represent more complex accesses of the outer context.\n * @returns {Set} - A set containing the extracted variable names.\n */\nconst _smartExtractVariableNames = (node, initialDepth, specialDepthAccessors) => {\n  // depth info represents the previous (initialised as null) and current depth of the current accessor in the path expression\n  // we track multiple of these to account for the fact that a path expression may be ambiguous due to special keywords\n  let accessorDepthInfos = [{\n    previous: null,\n    current: initialDepth - 1\n  }];\n  const extractedVariables = new Set();\n  const pathNodes = _linearizePathExpression(node);\n  for (let i = 0; i < pathNodes.length; i++) {\n    const currentAccessor = pathNodes[i].variableName;\n    if (currentAccessor in specialDepthAccessors) {\n      const depthOffsets = specialDepthAccessors[currentAccessor];\n\n      // if the current accessor is a special keyword, we need to expand the current depth info set\n      // this is done to account for the ambiguity of keywords like parent, which may be used to access\n      // the parent of the current node, or a child variable of the same name\n      accessorDepthInfos = depthOffsets.reduce((accumulator, offset) => {\n        return [...accumulator, ...accessorDepthInfos.map(depthInfo => ({\n          previous: depthInfo.current,\n          current: depthInfo.current + offset\n        }))];\n      }, []).filter(depthInfo => depthInfo.current >= -1); // discard all depth infos which are out of bounds\n    } else {\n      // if the current accessor is not a special keyword, we know it's simply accessing a child\n      // hence we are now one level deeper in the tree and simply increment\n      accessorDepthInfos = accessorDepthInfos.map(depthInfo => ({\n        previous: depthInfo.current,\n        current: depthInfo.current + 1\n      }));\n    }\n\n    // finally, we check if for the current accessor, there is a scenario where:\n    // previous it was at depth -1 (i.e. the root context), and is now at depth 0 (i.e. a variable)\n    // these are the variables we need to request, so we add them to the set\n    if (accessorDepthInfos.some(depthInfo => depthInfo.previous === -1 && depthInfo.current === 0)) {\n      extractedVariables.add(currentAccessor);\n    }\n  }\n\n  // we return a set to avoid duplicates\n  return new Set(extractedVariables);\n};\n\n/**\n * Deconstructs a path expression tree into an array of components.\n *\n * @param {Object} root - The root node of the path expression tree.\n * @returns {Array<object>} An array of components in the path expression, in the correct order.\n */\nconst _linearizePathExpression = root => {\n  let node = root;\n  let parts = [];\n\n  // Traverse the tree and collect path components\n  while (node.name === 'PathExpression') {\n    parts.push(node.children[1]);\n    node = node.children[0];\n  }\n\n  // Add the last component to the array\n  parts.push(node);\n\n  // Reverse and return the array to get the correct order\n  return parts.reverse();\n};\n\n/**\n * Builds a simplified feel structure tree from the given parse tree and feel string.\n * The nodes follow this structure: `{ name: string, children: Array, variableName?: string }`\n *\n * @param {Object} parseTree - The parse tree generated by a parser.\n * @param {string} feelString - The feel string used for parsing.\n * @returns {Object} The simplified feel structure tree.\n */\nconst _buildSimpleFeelStructureTree = (parseTree, feelString) => {\n  const stack = [{\n    children: []\n  }];\n  parseTree.iterate({\n    enter: node => {\n      const nodeRepresentation = {\n        name: node.type.name,\n        children: []\n      };\n      if (node.type.name === 'VariableName') {\n        nodeRepresentation.variableName = feelString.slice(node.from, node.to);\n      }\n      stack.push(nodeRepresentation);\n    },\n    leave: () => {\n      const result = stack.pop();\n      const parent = stack[stack.length - 1];\n      parent.children.push(result);\n    }\n  });\n  return _extractFilterExpressions(stack[0].children[0]);\n};\n\n/**\n * Restructure the tree in such a way to bring filters (which create new contexts) to the root of the tree.\n * This is done to simplify the extraction of variables and match the context hierarchy.\n */\nconst _extractFilterExpressions = tree => {\n  const flattenedExpressionTree = {\n    name: 'Root',\n    children: [tree]\n  };\n  const iterate = node => {\n    if (node.children) {\n      for (let x = 0; x < node.children.length; x++) {\n        if (node.children[x].name === 'FilterExpression') {\n          const filterTarget = node.children[x].children[0];\n          const filterExpression = node.children[x].children[2];\n\n          // bypass the filter expression\n          node.children[x] = filterTarget;\n          const taggedFilterExpression = {\n            name: 'FilterContext',\n            children: [filterExpression]\n          };\n\n          // append the filter expression to the root\n          flattenedExpressionTree.children.push(taggedFilterExpression);\n\n          // recursively iterate the expression\n          iterate(filterExpression);\n        } else {\n          iterate(node.children[x]);\n        }\n      }\n    }\n  };\n  iterate(tree);\n  return flattenedExpressionTree;\n};\n\nclass FeelExpressionLanguage {\n  constructor(eventBus) {\n    this._eventBus = eventBus;\n  }\n\n  /**\n   * Determines if the given value is a FEEL expression.\n   *\n   * @param {any} value\n   * @returns {boolean}\n   *\n   */\n  isExpression(value) {\n    return isString(value) && value.startsWith('=');\n  }\n\n  /**\n   * Retrieve variable names from a given FEEL expression.\n   *\n   * @param {string} expression\n   * @param {object} [options]\n   * @param {string} [options.type]\n   *\n   * @returns {string[]}\n   */\n  getVariableNames(expression, options = {}) {\n    const {\n      type = 'expression'\n    } = options;\n    if (!this.isExpression(expression)) {\n      return [];\n    }\n    if (!['unaryTest', 'expression'].includes(type)) {\n      throw new Error('Unknown expression type: ' + type);\n    }\n    return getFlavouredFeelVariableNames(expression, type);\n  }\n\n  /**\n   * Evaluate an expression.\n   *\n   * @param {string} expression\n   * @param {import('../../types').Data} [data]\n   *\n   * @returns {any}\n   */\n  evaluate(expression, data = {}) {\n    if (!expression) {\n      return null;\n    }\n    if (!isString(expression) || !expression.startsWith('=')) {\n      return null;\n    }\n    try {\n      const result = evaluate(expression.slice(1), data);\n      return result;\n    } catch (error) {\n      this._eventBus.fire('error', {\n        error\n      });\n      return null;\n    }\n  }\n}\nFeelExpressionLanguage.$inject = ['eventBus'];\n\nclass FeelersTemplating {\n  constructor() {}\n\n  /**\n   * Determines if the given value is a feelers template.\n   *\n   * @param {any} value\n   * @returns {boolean}\n   *\n   */\n  isTemplate(value) {\n    return isString(value) && (value.startsWith('=') || /{{.*?}}/.test(value));\n  }\n\n  /**\n   * Retrieve variable names from a given feelers template.\n   *\n   * @param {string} template\n   *\n   * @returns {string[]}\n   */\n  getVariableNames(template) {\n    if (!this.isTemplate(template)) {\n      return [];\n    }\n    const expressions = this._extractExpressionsWithDepth(template);\n\n    // defines special accessors, and the change(s) in depth they could imply (e.g. parent can be used to access the parent context (depth - 1) or a child variable named parent (depth + 1)\n    const specialDepthAccessors = {\n      parent: [-1, 1],\n      _parent_: [-1],\n      this: [0, 1],\n      _this_: [0]\n    };\n    return expressions.reduce((variables, {\n      expression,\n      depth\n    }) => {\n      return variables.concat(getFlavouredFeelVariableNames(expression, 'expression', {\n        depth,\n        specialDepthAccessors\n      }));\n    }, []);\n  }\n\n  /**\n   * Evaluate a template.\n   *\n   * @param {string} template\n   * @param {Object<string, any>} context\n   * @param {Object} options\n   * @param {boolean} [options.debug = false]\n   * @param {boolean} [options.strict = false]\n   * @param {Function} [options.buildDebugString]\n   * @param {Function} [options.sanitizer]\n   *\n   * @returns\n   */\n  evaluate(template, context = {}, options = {}) {\n    const {\n      debug = false,\n      strict = false,\n      buildDebugString = err => ' {{⚠}} ',\n      sanitizer = value => value\n    } = options;\n    return evaluate$1(template, context, {\n      debug,\n      strict,\n      buildDebugString,\n      sanitizer\n    });\n  }\n\n  /**\n   * @typedef {Object} ExpressionWithDepth\n   * @property {number} depth - The depth of the expression in the syntax tree.\n   * @property {string} expression - The extracted expression\n   */\n\n  /**\n  * Extracts all feel expressions in the template along with their depth in the syntax tree.\n  * The depth is incremented for child expressions of loops to account for context drilling.\n  * @name extractExpressionsWithDepth\n  * @param {string} template - A feelers template string.\n  * @returns {Array<ExpressionWithDepth>} An array of objects, each containing the depth and the extracted expression.\n  *\n  * @example\n  * const template = \"Hello {{user}}, you have:{{#loop items}}\\n- {{amount}} {{name}}{{/loop}}.\";\n  * const extractedExpressions = _extractExpressionsWithDepth(template);\n  */\n  _extractExpressionsWithDepth(template) {\n    // build simplified feelers syntax tree\n    const parseTree = parser.parse(template);\n    const tree = buildSimpleTree(parseTree, template);\n    return function _traverse(n, depth = 0) {\n      if (['Feel', 'FeelBlock'].includes(n.name)) {\n        return [{\n          depth,\n          expression: n.content\n        }];\n      }\n      if (n.name === 'LoopSpanner') {\n        const loopExpression = n.children[0].content;\n        const childResults = n.children.slice(1).reduce((acc, child) => {\n          return acc.concat(_traverse(child, depth + 1));\n        }, []);\n        return [{\n          depth,\n          expression: loopExpression\n        }, ...childResults];\n      }\n      return n.children.reduce((acc, child) => {\n        return acc.concat(_traverse(child, depth));\n      }, []);\n    }(tree);\n  }\n}\nFeelersTemplating.$inject = [];\n\n// config  ///////////////////\n\nconst MINUTES_IN_DAY = 60 * 24;\nconst DATETIME_SUBTYPES = {\n  DATE: 'date',\n  TIME: 'time',\n  DATETIME: 'datetime'\n};\nconst TIME_SERIALISING_FORMATS = {\n  UTC_OFFSET: 'utc_offset',\n  UTC_NORMALIZED: 'utc_normalized',\n  NO_TIMEZONE: 'no_timezone'\n};\nconst DATETIME_SUBTYPES_LABELS = {\n  [DATETIME_SUBTYPES.DATE]: 'Date',\n  [DATETIME_SUBTYPES.TIME]: 'Time',\n  [DATETIME_SUBTYPES.DATETIME]: 'Date & Time'\n};\nconst TIME_SERIALISINGFORMAT_LABELS = {\n  [TIME_SERIALISING_FORMATS.UTC_OFFSET]: 'UTC offset',\n  [TIME_SERIALISING_FORMATS.UTC_NORMALIZED]: 'UTC normalized',\n  [TIME_SERIALISING_FORMATS.NO_TIMEZONE]: 'No timezone'\n};\nconst DATETIME_SUBTYPE_PATH = ['subtype'];\nconst DATE_LABEL_PATH = ['dateLabel'];\nconst DATE_DISALLOW_PAST_PATH = ['disallowPassedDates'];\nconst TIME_LABEL_PATH = ['timeLabel'];\nconst TIME_USE24H_PATH = ['use24h'];\nconst TIME_INTERVAL_PATH = ['timeInterval'];\nconst TIME_SERIALISING_FORMAT_PATH = ['timeSerializingFormat'];\n\n// config  ///////////////////\n\nconst OPTIONS_SOURCES = {\n  STATIC: 'static',\n  INPUT: 'input',\n  EXPRESSION: 'expression'\n};\nconst OPTIONS_SOURCE_DEFAULT = OPTIONS_SOURCES.STATIC;\nconst OPTIONS_SOURCES_LABELS = {\n  [OPTIONS_SOURCES.STATIC]: 'Static',\n  [OPTIONS_SOURCES.INPUT]: 'Input data',\n  [OPTIONS_SOURCES.EXPRESSION]: 'Expression'\n};\nconst OPTIONS_SOURCES_PATHS = {\n  [OPTIONS_SOURCES.STATIC]: ['values'],\n  [OPTIONS_SOURCES.INPUT]: ['valuesKey'],\n  [OPTIONS_SOURCES.EXPRESSION]: ['valuesExpression']\n};\nconst OPTIONS_SOURCES_DEFAULTS = {\n  [OPTIONS_SOURCES.STATIC]: [{\n    label: 'Value',\n    value: 'value'\n  }],\n  [OPTIONS_SOURCES.INPUT]: '',\n  [OPTIONS_SOURCES.EXPRESSION]: '='\n};\n\n// helpers ///////////////////\n\nfunction getOptionsSource(field) {\n  for (const source of Object.values(OPTIONS_SOURCES)) {\n    if (get(field, OPTIONS_SOURCES_PATHS[source]) !== undefined) {\n      return source;\n    }\n  }\n  return OPTIONS_SOURCE_DEFAULT;\n}\n\nconst SANDBOX_ATTRIBUTE = 'sandbox';\nconst ALLOW_ATTRIBUTE = 'allow';\n\n// Cf. https://developer.mozilla.org/en-US/docs/Web/HTTP/Permissions_Policy#iframe_syntax\nconst SECURITY_ATTRIBUTES_DEFINITIONS = [{\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-scripts',\n  property: 'allowScripts',\n  label: 'Script execution'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-same-origin',\n  property: 'allowSameOrigin',\n  label: 'Allow same origin'\n}, {\n  attribute: ALLOW_ATTRIBUTE,\n  directive: 'fullscreen',\n  property: 'fullscreen',\n  label: 'Open in fullscreen'\n}, {\n  attribute: ALLOW_ATTRIBUTE,\n  directive: 'geolocation',\n  property: 'geolocation',\n  label: 'Geolocation'\n}, {\n  attribute: ALLOW_ATTRIBUTE,\n  directive: 'camera',\n  property: 'camera',\n  label: 'Camera access'\n}, {\n  attribute: ALLOW_ATTRIBUTE,\n  directive: 'microphone',\n  property: 'microphone',\n  label: 'Microphone access'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-forms',\n  property: 'allowForms',\n  label: 'Forms submission'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-modals',\n  property: 'allowModals',\n  label: 'Open modal windows'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-popups',\n  property: 'allowPopups',\n  label: 'Open popups'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-top-navigation',\n  property: 'allowTopNavigation',\n  label: 'Top level navigation'\n}, {\n  attribute: SANDBOX_ATTRIBUTE,\n  directive: 'allow-storage-access-by-user-activation',\n  property: 'allowStorageAccessByUserActivation',\n  label: 'Storage access by user'\n}];\n\nfunction createInjector(bootstrapModules) {\n  const injector = new Injector(bootstrapModules);\n  injector.init();\n  return injector;\n}\n\n/**\n * @param {string?} prefix\n *\n * @returns Element\n */\nfunction createFormContainer(prefix = 'fjs') {\n  const container = document.createElement('div');\n  container.classList.add(`${prefix}-container`);\n  return container;\n}\n\nfunction formFieldClasses(type, {\n  errors = [],\n  disabled = false,\n  readonly = false\n} = {}) {\n  if (!type) {\n    throw new Error('type required');\n  }\n  return classNames('fjs-form-field', `fjs-form-field-${type}`, {\n    'fjs-has-errors': errors.length > 0,\n    'fjs-disabled': disabled,\n    'fjs-readonly': readonly\n  });\n}\nfunction gridColumnClasses(formField) {\n  const {\n    layout = {}\n  } = formField;\n  const {\n    columns\n  } = layout;\n  return classNames('fjs-layout-column', `cds--col${columns ? '-lg-' + columns : ''}`,\n  // always fall back to top-down on smallest screens\n  'cds--col-sm-16', 'cds--col-md-16');\n}\nfunction prefixId(id, formId, indexes) {\n  let result = 'fjs-form';\n  if (formId) {\n    result += `-${formId}`;\n  }\n  result += `-${id}`;\n  Object.values(indexes || {}).forEach(index => {\n    result += `_${index}`;\n  });\n  return result;\n}\n\nconst FormRenderContext = createContext({\n  Empty: props => {\n    return null;\n  },\n  Hidden: props => {\n    return null;\n  },\n  Children: props => {\n    return jsx(\"div\", {\n      class: props.class,\n      style: props.style,\n      children: props.children\n    });\n  },\n  Element: props => {\n    return jsx(\"div\", {\n      class: props.class,\n      style: props.style,\n      children: props.children\n    });\n  },\n  Row: props => {\n    return jsx(\"div\", {\n      class: props.class,\n      style: props.style,\n      children: props.children\n    });\n  },\n  Column: props => {\n    if (props.field.type === 'default') {\n      return props.children;\n    }\n    return jsx(\"div\", {\n      class: props.class,\n      style: props.style,\n      children: props.children\n    });\n  },\n  hoverInfo: {\n    cleanup: () => {}\n  }\n});\n\nconst LocalExpressionContext = createContext({\n  data: null,\n  this: null,\n  parent: null,\n  i: null\n});\n\n/**\n * @param {string} type\n * @param {boolean} [strict]\n *\n * @returns {any}\n */\nfunction getService(type, strict) {}\nconst FormContext = createContext({\n  getService,\n  formId: null\n});\n\nfunction useService(type, strict) {\n  const {\n    getService\n  } = useContext(FormContext);\n  return getService(type, strict);\n}\n\nfunction isRequired(field) {\n  return field.required;\n}\nfunction pathParse(path) {\n  if (!path) {\n    return [];\n  }\n  return path.split('.').map(key => {\n    return isNaN(parseInt(key)) ? key : parseInt(key);\n  });\n}\nfunction pathsEqual(a, b) {\n  return a && b && a.length === b.length && a.every((value, index) => value === b[index]);\n}\nconst indices = {};\nfunction generateIndexForType(type) {\n  if (type in indices) {\n    indices[type]++;\n  } else {\n    indices[type] = 1;\n  }\n  return indices[type];\n}\nfunction generateIdForType(type) {\n  return `${type}${generateIndexForType(type)}`;\n}\n\n/**\n * @template T\n * @param {T} data\n * @param {(this: any, key: string, value: any) => any} [replacer]\n * @return {T}\n */\nfunction clone(data, replacer) {\n  return JSON.parse(JSON.stringify(data, replacer));\n}\nfunction runRecursively(formField, fn) {\n  const components = formField.components || [];\n  components.forEach((component, _) => {\n    runRecursively(component, fn);\n  });\n  fn(formField);\n}\nfunction wrapObjectKeysWithUnderscores(obj) {\n  const newObj = {};\n  for (const [key, value] of Object.entries(obj)) {\n    newObj[`_${key}_`] = value;\n  }\n  return newObj;\n}\n\n/**\n * Transform a LocalExpressionContext object into a usable FEEL context.\n *\n * @param {Object} context - The LocalExpressionContext object.\n * @returns {Object} The usable FEEL context.\n */\n\nfunction buildExpressionContext(context) {\n  const {\n    data,\n    ...specialContextKeys\n  } = context;\n  return {\n    ...specialContextKeys,\n    ...data,\n    ...wrapObjectKeysWithUnderscores(specialContextKeys)\n  };\n}\n\n/**\n * Evaluate a string based on the expressionLanguage and context information.\n * If the string is not an expression, it is returned as is.\n *\n * @param {any} expressionLanguage - The expression language to use.\n * @param {string} value - The string to evaluate.\n * @param {Object} expressionContextInfo - The context information to use.\n * @returns {any} - Evaluated value or the original value if not an expression.\n */\nfunction runExpressionEvaluation(expressionLanguage, value, expressionContextInfo) {\n  if (expressionLanguage && expressionLanguage.isExpression(value)) {\n    return expressionLanguage.evaluate(value, buildExpressionContext(expressionContextInfo));\n  }\n  return value;\n}\n\n/**\n * Evaluate if condition is met reactively based on the conditionChecker and form data.\n *\n * @param {string | undefined} condition\n *\n * @returns {boolean} true if condition is met or no condition or condition checker exists\n */\nfunction useCondition(condition) {\n  const conditionChecker = useService('conditionChecker', false);\n  const expressionContextInfo = useContext(LocalExpressionContext);\n  return useMemo(() => {\n    return conditionChecker ? conditionChecker.check(condition, buildExpressionContext(expressionContextInfo)) : null;\n  }, [conditionChecker, condition, expressionContextInfo]);\n}\n\n/**\n * Returns the options data for the provided if they can be simply determined, ignoring expression defined options.\n *\n * @param {object} formField\n * @param {object} formData\n */\nfunction getSimpleOptionsData(formField, formData) {\n  const {\n    valuesExpression: optionsExpression,\n    valuesKey: optionsKey,\n    values: staticOptions\n  } = formField;\n  if (optionsExpression) {\n    return null;\n  }\n  return optionsKey ? get(formData, [optionsKey]) : staticOptions;\n}\n\n/**\n * Normalizes the provided options data to a format that can be used by the select components.\n * If the options data is not valid, it is filtered out.\n *\n * @param {any[]} optionsData\n *\n * @returns {object[]}\n */\nfunction normalizeOptionsData(optionsData) {\n  return optionsData.filter(_isAllowedValue).map(_normalizeOption).filter(o => !isNil(o));\n}\n\n/**\n * Creates an options object with default values if no options are provided.\n *\n * @param {object} options\n *\n * @returns {object}\n */\nfunction createEmptyOptions(options = {}) {\n  const defaults = {};\n\n  // provide default options if valuesKey and valuesExpression are not set\n  if (!options.valuesKey && !options.valuesExpression) {\n    defaults.values = [{\n      label: 'Value',\n      value: 'value'\n    }];\n  }\n  return {\n    ...defaults,\n    ...options\n  };\n}\n\n/**\n * Converts the provided option to a normalized format.\n * If the option is not valid, null is returned.\n *\n * @param {object} option\n * @param {string} option.label\n * @param {*} option.value\n *\n * @returns\n */\nfunction _normalizeOption(option) {\n  // (1) simple primitive case, use it as both label and value\n  if (_isAllowedPrimitive(option)) {\n    return {\n      value: option,\n      label: `${option}`\n    };\n  }\n  if (isObject(option)) {\n    const isValidLabel = _isValidLabel(option.label);\n\n    // (2) no label provided, but value is a simple primitive, use it as label and value\n    if (!isValidLabel && _isAllowedPrimitive(option.value)) {\n      return {\n        value: option.value,\n        label: `${option.value}`\n      };\n    }\n\n    // (3) both label and value are provided, use them as is\n    if (isValidLabel && _isAllowedValue(option.value)) {\n      return option;\n    }\n  }\n  return null;\n}\nfunction _isAllowedPrimitive(value) {\n  const isAllowedPrimitiveType = ['number', 'string', 'boolean'].includes(typeof value);\n  const isValid = value || value === 0 || value === false;\n  return isAllowedPrimitiveType && isValid;\n}\nfunction _isValidLabel(label) {\n  return label && isString(label);\n}\nfunction _isAllowedValue(value) {\n  if (isObject(value)) {\n    return Object.keys(value).length > 0;\n  }\n  return _isAllowedPrimitive(value);\n}\n\n/**\n * Evaluate a string reactively based on the expressionLanguage and form data.\n * If the string is not an expression, it is returned as is.\n * The function is memoized to minimize re-renders.\n *\n * @param {string} value - The string to evaluate.\n * @returns {any} - Evaluated value or the original value if not an expression.\n */\nfunction useExpressionEvaluation(value) {\n  const expressionLanguage = useService('expressionLanguage');\n  const expressionContextInfo = useContext(LocalExpressionContext);\n  return useMemo(() => runExpressionEvaluation(expressionLanguage, value, expressionContextInfo), [expressionLanguage, expressionContextInfo, value]);\n}\n\n/**\n * A custom hook to manage state changes with deep comparison.\n *\n * @template T\n * @param {T} value - The current value to manage.\n * @returns {T} - Returns the current state.\n */\nfunction useDeepCompareMemoize(value) {\n  const ref = useRef();\n  if (!isEqual(value, ref.current)) {\n    ref.current = value;\n  }\n  return ref.current;\n}\n\n/**\n * @enum { String }\n */\nconst LOAD_STATES = {\n  LOADING: 'loading',\n  LOADED: 'loaded',\n  ERROR: 'error'\n};\n\n/**\n * @typedef {Object} OptionsGetter\n * @property {Object[]} options - The options data\n * @property {(LOAD_STATES)} loadState - The options data's loading state, to use for conditional rendering\n */\n\n/**\n * A hook to load options for single and multiselect components.\n *\n * @param {Object} field - The form field to handle options for\n * @return {OptionsGetter} optionsGetter - A options getter object providing loading state and options\n */\nfunction useOptionsAsync(field) {\n  const {\n    valuesExpression: optionsExpression,\n    valuesKey: optionsKey,\n    values: staticOptions\n  } = field;\n  const initialData = useService('form')._getState().initialData;\n  const expressionEvaluation = useExpressionEvaluation(optionsExpression);\n  const evaluatedOptions = useDeepCompareMemoize(expressionEvaluation || []);\n  const optionsGetter = useMemo(() => {\n    let options = [];\n\n    // dynamic options\n    if (optionsKey !== undefined) {\n      const keyedOptions = (initialData || {})[optionsKey];\n      if (keyedOptions && Array.isArray(keyedOptions)) {\n        options = keyedOptions;\n      }\n\n      // static options\n    } else if (staticOptions !== undefined) {\n      options = Array.isArray(staticOptions) ? staticOptions : [];\n\n      // expression\n    } else if (optionsExpression && evaluatedOptions && Array.isArray(evaluatedOptions)) {\n      options = evaluatedOptions;\n\n      // error case\n    } else {\n      return buildErrorState('No options source defined in the form definition');\n    }\n\n    // normalize data to support primitives and partially defined objects\n    return buildLoadedState(normalizeOptionsData(options));\n  }, [optionsKey, staticOptions, initialData, optionsExpression, evaluatedOptions]);\n  return optionsGetter;\n}\nconst buildErrorState = error => ({\n  options: [],\n  error,\n  loadState: LOAD_STATES.ERROR\n});\nconst buildLoadedState = options => ({\n  options,\n  error: undefined,\n  loadState: LOAD_STATES.LOADED\n});\n\n/**\n * Wrap HTML content in a configuration object for dangerouslySetInnerHTML\n * @param {Object} props\n * @param {string} props.html\n * @param {Function} [props.transform]\n * @param {boolean} [props.sanitize = true]\n * @param {boolean} [props.sanitizeStyleTags = true]\n */\nconst useDangerousHTMLWrapper = props => {\n  const {\n    html,\n    transform = html => html,\n    sanitize = true,\n    sanitizeStyleTags = true\n  } = props;\n  const sanitizedHtml = useMemo(() => sanitize ? DOMPurify.sanitize(html, getDOMPurifyConfig(sanitizeStyleTags)) : html, [html, sanitize, sanitizeStyleTags]);\n  const transformedHtml = useMemo(() => transform(sanitizedHtml), [sanitizedHtml, transform]);\n\n  // Return the configuration object for dangerouslySetInnerHTML\n  return {\n    __html: transformedHtml\n  };\n};\nconst getDOMPurifyConfig = sanitizeStyleTags => {\n  return {\n    FORCE_BODY: true,\n    FORBID_TAGS: sanitizeStyleTags ? ['style'] : []\n  };\n};\n\n/**\n * A custom hook to build up security attributes from form configuration.\n *\n * @param {Object} security - The security configuration.\n * @returns {Array} - Returns a tuple with sandbox and allow attributes.\n */\nfunction useSecurityAttributesMap(security) {\n  const securityMemoized = useDeepCompareMemoize(security);\n  const sandbox = useMemo(() => SECURITY_ATTRIBUTES_DEFINITIONS.filter(({\n    attribute\n  }) => attribute === SANDBOX_ATTRIBUTE).filter(({\n    property\n  }) => get(securityMemoized, [property], false)).map(({\n    directive\n  }) => directive).join(' '), [securityMemoized]);\n  const allow = useMemo(() => SECURITY_ATTRIBUTES_DEFINITIONS.filter(({\n    attribute\n  }) => attribute !== SANDBOX_ATTRIBUTE).filter(({\n    property\n  }) => get(securityMemoized, [property], false)).map(({\n    directive\n  }) => directive).join('; '), [securityMemoized]);\n  return [sandbox, allow];\n}\n\n/**\n * This hook allows us to retrieve the label from a value in linear time by caching it in a map\n * @param {Array} options\n */\nfunction useGetLabelCorrelation(options) {\n  // This allows us to retrieve the label from a value in linear time\n  const labelMap = useMemo(() => Object.assign({}, ...options.map(o => ({\n    [_getValueHash(o.value)]: o.label\n  }))), [options]);\n  return useCallback(value => labelMap[_getValueHash(value)], [labelMap]);\n}\nconst _getValueHash = value => {\n  return isObject(value) ? JSON.stringify(value) : value;\n};\n\n/**\n * Wrap CSS styles with a given prefix.\n *\n * @param {HTMLElement} rootNode\n * @param {string} prefix\n *\n * @returns {HTMLElement}\n */\nfunction wrapCSSStyles(rootNode, prefix) {\n  const styleTags = rootNode.querySelectorAll('style');\n  styleTags.forEach(styleTag => {\n    const topLevelRules = extractTopLevelRules(styleTag.textContent);\n    const scopedCss = topLevelRules.map(rule => {\n      const {\n        selector,\n        styles\n      } = splitRule(rule);\n      const scopedSelector = scopeSelector(selector, prefix);\n      return `${scopedSelector} ${styles}`;\n    }).join(' ');\n    styleTag.textContent = scopedCss;\n  });\n  return rootNode;\n}\nfunction extractTopLevelRules(cssString) {\n  let cursor = 0;\n  let start = 0;\n  let level = 0;\n  const topLevelRules = [];\n  while (cursor < cssString.length) {\n    if (cssString[cursor] === '{') {\n      level++;\n    }\n    if (cssString[cursor] === '}') {\n      level--;\n      if (level === 0) {\n        topLevelRules.push(cssString.substring(start, cursor + 1));\n        start = cursor + 1;\n      }\n    }\n    cursor++;\n  }\n  return topLevelRules.map(rule => rule.trim());\n}\nfunction splitRule(rule) {\n  const firstBracket = rule.indexOf('{');\n  const selector = rule.substring(0, firstBracket);\n  const styles = rule.substring(firstBracket);\n  return {\n    selector,\n    styles\n  };\n}\nfunction scopeSelector(selector, prefix) {\n  return selector.split(',').map(sel => `${prefix} ${sel.trim()}`).join(', ');\n}\nfunction getScrollContainer(el) {\n  while (el && el !== document.body && el !== document.documentElement) {\n    if (_isElementScrollable(el)) {\n      return el;\n    }\n    el = el.parentElement;\n  }\n  if (_isElementScrollable(document.body)) {\n    return document.body;\n  } else if (_isElementScrollable(document.documentElement)) {\n    return document.documentElement;\n  }\n  return null;\n}\nfunction _isElementScrollable(el) {\n  const style = window.getComputedStyle(el);\n  const overflowY = style.overflowY || style.overflow;\n  return (overflowY === 'auto' || overflowY === 'scroll') && el.scrollHeight > el.clientHeight;\n}\n\nconst EMPTY_OBJECT = {};\nconst EMPTY_ARRAY = [];\n\n/**\n * Custom hook to scroll an element within a scrollable container.\n *\n * @param {Object} scrolledElementRef - A ref pointing to the DOM element to scroll into view.\n * @param {Array} deps - An array of dependencies that trigger the effect.\n * @param {Object} [scrollOptions={}] - Options defining the behavior of the scrolling.\n * @param {String} [scrollOptions.align='center'] - The alignment of the element within the viewport.\n * @param {String} [scrollOptions.behavior='auto'] - The scrolling behavior.\n * @param {Number} [scrollOptions.offset=0] - An offset that is added to the scroll position.\n * @param {Boolean} [scrollOptions.scrollIfVisible=false] - Whether to scroll even if the element is visible.\n * @param {Array} [flagRefs] - An array of refs that are used as flags to control when to scroll.\n */\nfunction useScrollIntoView(scrolledElementRef, deps, scrollOptions, flagRefs) {\n  const _scrollOptions = scrollOptions || EMPTY_OBJECT;\n  const _flagRefs = flagRefs || EMPTY_ARRAY;\n  useEffect(() => {\n    // return early if flags are not raised, or component is not mounted\n    if (some(_flagRefs, ref => !ref.current) || !scrolledElementRef.current) {\n      return;\n    }\n    for (let i = 0; i < _flagRefs.length; i++) {\n      _flagRefs[i].current = false;\n    }\n    const itemToBeScrolled = scrolledElementRef.current;\n    const scrollContainer = getScrollContainer(itemToBeScrolled);\n    if (!scrollContainer) {\n      return;\n    }\n    const itemRect = itemToBeScrolled.getBoundingClientRect();\n    const containerRect = scrollContainer.getBoundingClientRect();\n    const {\n      align = 'center',\n      offset = 0,\n      behavior = 'auto',\n      scrollIfVisible = false\n    } = _scrollOptions;\n    const shouldScroll = scrollIfVisible || !(itemRect.top >= containerRect.top && itemRect.bottom <= containerRect.bottom);\n    if (!shouldScroll) {\n      return;\n    }\n    const topOffset = _getTopOffset(itemToBeScrolled, scrollContainer, {\n      align,\n      offset\n    });\n    scrollContainer.scroll({\n      top: topOffset,\n      behavior\n    });\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, deps);\n}\n\n// helper //////////////////////\n\nfunction _getTopOffset(item, scrollContainer, options) {\n  const itemRect = item.getBoundingClientRect();\n  const containerRect = scrollContainer.getBoundingClientRect();\n  if (options.align === 'top') {\n    return itemRect.top - containerRect.top + scrollContainer.scrollTop - options.offset;\n  } else if (options.align === 'bottom') {\n    return itemRect.bottom - containerRect.top - scrollContainer.clientHeight + scrollContainer.scrollTop + options.offset;\n  } else if (options.align === 'center') {\n    return itemRect.top - containerRect.top - scrollContainer.clientHeight / 2 + scrollContainer.scrollTop + itemRect.height / 2 + options.offset;\n  }\n  return 0;\n}\n\n/**\n * Returns the conditionally filtered data of a form reactively.\n * Memoised to minimize re-renders\n *\n * Warning: costly operation, use with care\n */\nfunction useFilteredFormData() {\n  const {\n    initialData,\n    data\n  } = useService('form')._getState();\n  const conditionChecker = useService('conditionChecker', false);\n  return useMemo(() => {\n    const newData = conditionChecker ? conditionChecker.applyConditions(data, data) : data;\n    return {\n      ...initialData,\n      ...newData\n    };\n  }, [conditionChecker, data, initialData]);\n}\n\nfunction useKeyDownAction(targetKey, action, listenerElement = window) {\n  function downHandler({\n    key\n  }) {\n    if (key === targetKey) {\n      action();\n    }\n  }\n  useEffect(() => {\n    listenerElement.addEventListener('keydown', downHandler);\n    return () => {\n      listenerElement.removeEventListener('keydown', downHandler);\n    };\n  });\n}\n\n/**\n * Retrieve readonly value of a form field, given it can be an\n * expression optionally or configured globally.\n *\n * @typedef { import('../../types').FormProperties } FormProperties\n *\n * @param {any} formField\n * @param {FormProperties} properties\n *\n * @returns {boolean}\n */\nfunction useReadonly(formField, properties = {}) {\n  const expressionLanguage = useService('expressionLanguage');\n  const conditionChecker = useService('conditionChecker', false);\n  const expressionContextInfo = useContext(LocalExpressionContext);\n  const {\n    readonly\n  } = formField;\n  if (properties.readOnly) {\n    return true;\n  }\n  if (expressionLanguage && expressionLanguage.isExpression(readonly)) {\n    return conditionChecker ? conditionChecker.check(readonly, buildExpressionContext(expressionContextInfo)) : false;\n  }\n  return readonly || false;\n}\n\nfunction usePrevious(value, defaultValue = null) {\n  const ref = useRef(defaultValue);\n  useEffect(() => ref.current = value, [value]);\n  return ref.current;\n}\n\nfunction useFlushDebounce(func) {\n  const timeoutRef = useRef(null);\n  const lastArgsRef = useRef(null);\n  const config = useService('config', false);\n  const debounce = config && config.debounce;\n  const shouldDebounce = debounce !== false && debounce !== 0;\n  const delay = typeof debounce === 'number' ? debounce : 300;\n  const debounceFunc = useCallback((...args) => {\n    if (!shouldDebounce) {\n      func(...args);\n      return;\n    }\n    lastArgsRef.current = args;\n    if (timeoutRef.current) {\n      clearTimeout(timeoutRef.current);\n    }\n    timeoutRef.current = setTimeout(() => {\n      func(...lastArgsRef.current);\n      lastArgsRef.current = null;\n    }, delay);\n  }, [func, delay, shouldDebounce]);\n  const flushFunc = useCallback(() => {\n    if (timeoutRef.current) {\n      clearTimeout(timeoutRef.current);\n      if (lastArgsRef.current !== null) {\n        func(...lastArgsRef.current);\n        lastArgsRef.current = null;\n      }\n      timeoutRef.current = null;\n    }\n  }, [func]);\n  return [debounceFunc, flushFunc];\n}\n\n/**\n * Template a string reactively based on form data. If the string is not a template, it is returned as is.\n * Memoised to minimize re-renders\n *\n * @param {string} value\n * @param {Object} options\n * @param {boolean} [options.debug = false]\n * @param {boolean} [options.strict = false]\n * @param {Function} [options.sanitizer]\n * @param {Function} [options.buildDebugString]\n *\n */\nfunction useTemplateEvaluation(value, options = {}) {\n  const templating = useService('templating');\n  const expressionContextInfo = useContext(LocalExpressionContext);\n  return useMemo(() => {\n    if (templating && templating.isTemplate(value)) {\n      return templating.evaluate(value, buildExpressionContext(expressionContextInfo), options);\n    }\n    return value;\n  }, [templating, value, expressionContextInfo, options]);\n}\n\n/**\n * Template a string reactively based on form data. If the string is not a template, it is returned as is.\n * If the string contains multiple lines, only the first line is returned.\n * Memoised to minimize re-renders\n *\n * @param {string} value\n * @param {Object} [options]\n * @param {boolean} [options.debug = false]\n * @param {boolean} [options.strict = false]\n * @param {Function} [options.buildDebugString]\n *\n */\nfunction useSingleLineTemplateEvaluation(value, options = {}) {\n  const evaluatedTemplate = useTemplateEvaluation(value, options);\n  return useMemo(() => evaluatedTemplate && evaluatedTemplate.split('\\n')[0], [evaluatedTemplate]);\n}\n\nconst ENTER_KEYDOWN_EVENT = new KeyboardEvent('keydown', {\n  code: 'Enter',\n  key: 'Enter',\n  charCode: 13,\n  keyCode: 13,\n  bubbles: true\n});\nfunction focusRelevantFlatpickerDay(flatpickrInstance) {\n  if (!flatpickrInstance) return;\n  !flatpickrInstance.isOpen && flatpickrInstance.open();\n  const container = flatpickrInstance.calendarContainer;\n  const dayToFocus = container.querySelector('.flatpickr-day.selected') || container.querySelector('.flatpickr-day.today') || container.querySelector('.flatpickr-day');\n  dayToFocus && dayToFocus.focus();\n}\nfunction formatTime(use24h, minutes) {\n  if (minutes === null) return null;\n  const wrappedMinutes = minutes % (24 * 60);\n  const minute = minutes % 60;\n  let hour = Math.floor(wrappedMinutes / 60);\n  if (use24h) {\n    return _getZeroPaddedString(hour) + ':' + _getZeroPaddedString(minute);\n  }\n  hour = hour % 12 || 12;\n  const isPM = wrappedMinutes >= 12 * 60;\n  return _getZeroPaddedString(hour) + ':' + _getZeroPaddedString(minute) + ' ' + (isPM ? 'PM' : 'AM');\n}\nfunction parseInputTime(stringTime) {\n  let workingString = stringTime.toLowerCase();\n  const is12h = workingString.includes('am') || workingString.includes('pm');\n  if (is12h) {\n    const isPM = workingString.includes('pm');\n    const digits = workingString.match(/\\d+/g);\n    const displayHour = parseInt(digits && digits[0]);\n    const minute = parseInt(digits && digits[1]) || 0;\n    const isValidDisplayHour = isNumber(displayHour) && displayHour >= 1 && displayHour <= 12;\n    const isValidMinute = minute >= 0 && minute <= 59;\n    if (!isValidDisplayHour || !isValidMinute) return null;\n    const hour = displayHour % 12 + (isPM ? 12 : 0);\n    return hour * 60 + minute;\n  } else {\n    const digits = workingString.match(/\\d+/g);\n    const hour = parseInt(digits && digits[0]);\n    const minute = parseInt(digits && digits[1]);\n    const isValidHour = isNumber(hour) && hour >= 0 && hour <= 23;\n    const isValidMinute = isNumber(minute) && minute >= 0 && minute <= 59;\n    if (!isValidHour || !isValidMinute) return null;\n    return hour * 60 + minute;\n  }\n}\nfunction serializeTime(minutes, offset, timeSerializingFormat) {\n  if (timeSerializingFormat === TIME_SERIALISING_FORMATS.UTC_NORMALIZED) {\n    const normalizedMinutes = (minutes + offset + MINUTES_IN_DAY) % MINUTES_IN_DAY;\n    return _getZeroPaddedString(Math.floor(normalizedMinutes / 60)) + ':' + _getZeroPaddedString(normalizedMinutes % 60) + 'Z';\n  }\n  const baseTime = _getZeroPaddedString(Math.floor(minutes / 60)) + ':' + _getZeroPaddedString(minutes % 60);\n  const addUTCOffset = timeSerializingFormat === TIME_SERIALISING_FORMATS.UTC_OFFSET;\n  return baseTime + (addUTCOffset ? formatTimezoneOffset(offset) : '');\n}\nfunction parseIsoTime(isoTimeString) {\n  if (!isoTimeString) return null;\n  const parseBasicMinutes = timeString => {\n    const timeSegments = timeString.split(':');\n    const hour = parseInt(timeSegments[0]);\n    const minute = timeSegments.length > 1 ? parseInt(timeSegments[1]) : 0;\n    if (isNaN(hour) || hour < 0 || hour > 24 || isNaN(minute) || minute < 0 || minute > 60) return null;\n    return hour * 60 + minute;\n  };\n  const localOffset = new Date().getTimezoneOffset();\n\n  // Parse normalized time\n  if (isoTimeString.includes('Z')) {\n    isoTimeString = isoTimeString.replace('Z', '');\n    const minutes = parseBasicMinutes(isoTimeString);\n    if (minutes === null) return null;\n    return (minutes - localOffset + MINUTES_IN_DAY) % MINUTES_IN_DAY;\n  }\n\n  // Parse offset positive time\n  else if (isoTimeString.includes('+')) {\n    const [timeString, offsetString] = isoTimeString.split('+');\n    const minutes = parseBasicMinutes(timeString);\n    let inboundOffset = parseBasicMinutes(offsetString);\n    if (minutes === null || inboundOffset === null) return null;\n\n    // The offset is flipped for consistency with javascript\n    inboundOffset = -inboundOffset;\n    return (minutes + inboundOffset - localOffset + MINUTES_IN_DAY) % MINUTES_IN_DAY;\n  }\n\n  // Parse offset negative time\n  else if (isoTimeString.includes('-')) {\n    const [timeString, offsetString] = isoTimeString.split('-');\n    const minutes = parseBasicMinutes(timeString);\n    let inboundOffset = parseBasicMinutes(offsetString);\n    if (minutes === null || inboundOffset === null) return null;\n    return (minutes + inboundOffset - localOffset + MINUTES_IN_DAY) % MINUTES_IN_DAY;\n  }\n\n  // Default to local parsing\n  else {\n    return parseBasicMinutes(isoTimeString);\n  }\n}\nfunction serializeDate(date) {\n  var d = new Date(date),\n    month = '' + (d.getMonth() + 1),\n    day = '' + d.getDate(),\n    year = d.getFullYear();\n  if (month.length < 2) month = '0' + month;\n  if (day.length < 2) day = '0' + day;\n  return [year, month, day].join('-');\n}\n\n// this method is used to make the `new Date(value)` parsing behavior stricter\nfunction isDateTimeInputInformationSufficient(value) {\n  if (!value || typeof value !== 'string') return false;\n  const segments = value.split('T');\n  if (segments.length != 2) return false;\n  const dateNumbers = segments[0].split('-');\n  if (dateNumbers.length != 3) return false;\n  return true;\n}\n\n// this method checks if the date isn't a datetime, or a partial date\nfunction isDateInputInformationMatching(value) {\n  if (!value || typeof value !== 'string') return false;\n  if (value.includes('T')) return false;\n  const dateNumbers = value.split('-');\n  if (dateNumbers.length != 3) return false;\n  return true;\n}\nfunction serializeDateTime(date, time, timeSerializingFormat) {\n  const workingDate = new Date();\n  workingDate.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n  workingDate.setHours(Math.floor(time / 60), time % 60, 0, 0);\n  if (timeSerializingFormat === TIME_SERIALISING_FORMATS.UTC_NORMALIZED) {\n    const timezoneOffsetMinutes = workingDate.getTimezoneOffset();\n    const dayOffset = time + timezoneOffsetMinutes < 0 ? -1 : time + timezoneOffsetMinutes > MINUTES_IN_DAY ? 1 : 0;\n\n    // Apply the date rollover pre-emptively\n    workingDate.setHours(workingDate.getHours() + dayOffset * 24);\n  }\n  return serializeDate(workingDate) + 'T' + serializeTime(time, workingDate.getTimezoneOffset(), timeSerializingFormat);\n}\nfunction formatTimezoneOffset(minutes) {\n  return _getSignedPaddedHours(minutes) + ':' + _getZeroPaddedString(Math.abs(minutes % 60));\n}\nfunction isInvalidDateString(value) {\n  return isNaN(new Date(Date.parse(value)).getTime());\n}\nfunction getNullDateTime() {\n  return {\n    date: new Date(Date.parse(null)),\n    time: null\n  };\n}\nfunction isValidDate(date) {\n  return date && !isNaN(date.getTime());\n}\nfunction isValidTime(time) {\n  return !isNaN(parseInt(time));\n}\nfunction _getSignedPaddedHours(minutes) {\n  if (minutes > 0) {\n    return '-' + _getZeroPaddedString(Math.floor(minutes / 60));\n  } else {\n    return '+' + _getZeroPaddedString(Math.floor((0 - minutes) / 60));\n  }\n}\nfunction _getZeroPaddedString(time) {\n  return time.toString().padStart(2, '0');\n}\n\nconst ALLOWED_IMAGE_SRC_PATTERN = /^(https?|data):.*/i; // eslint-disable-line no-useless-escape\nconst ALLOWED_IFRAME_SRC_PATTERN = /^(https):\\/\\/*/i; // eslint-disable-line no-useless-escape\n\nfunction sanitizeDateTimePickerValue(options) {\n  const {\n    formField,\n    value\n  } = options;\n  const {\n    subtype\n  } = formField;\n  if (typeof value !== 'string') return null;\n  if (subtype === DATETIME_SUBTYPES.DATE && (isInvalidDateString(value) || !isDateInputInformationMatching(value))) return null;\n  if (subtype === DATETIME_SUBTYPES.TIME && parseIsoTime(value) === null) return null;\n  if (subtype === DATETIME_SUBTYPES.DATETIME && (isInvalidDateString(value) || !isDateTimeInputInformationSufficient(value))) return null;\n  return value;\n}\nfunction hasEqualValue(value, array) {\n  if (!Array.isArray(array)) {\n    return false;\n  }\n  return array.some(element => isEqual(value, element));\n}\nfunction sanitizeSingleSelectValue(options) {\n  const {\n    formField,\n    data,\n    value\n  } = options;\n  const {\n    valuesExpression: optionsExpression\n  } = formField;\n  try {\n    // if options are expression evaluated, we don't need to sanitize the value against the options\n    // and defer to the field's internal validation\n    if (optionsExpression) {\n      return value;\n    }\n    const validValues = normalizeOptionsData(getSimpleOptionsData(formField, data)).map(v => v.value);\n    return hasEqualValue(value, validValues) ? value : null;\n  } catch (error) {\n    // use default value in case of formatting error\n    // TODO(@Skaiir): log a warning when this happens - https://github.com/bpmn-io/form-js/issues/289\n    return null;\n  }\n}\nfunction sanitizeMultiSelectValue(options) {\n  const {\n    formField,\n    data,\n    value\n  } = options;\n  const {\n    valuesExpression: optionsExpression\n  } = formField;\n  try {\n    // if options are expression evaluated, we don't need to sanitize the values against the options\n    // and defer to the field's internal validation\n    if (optionsExpression) {\n      return value;\n    }\n    const validValues = normalizeOptionsData(getSimpleOptionsData(formField, data)).map(v => v.value);\n    return value.filter(v => hasEqualValue(v, validValues));\n  } catch (error) {\n    // use default value in case of formatting error\n    // TODO(@Skaiir): log a warning when this happens - https://github.com/bpmn-io/form-js/issues/289\n    return [];\n  }\n}\n\n/**\n * Sanitizes an image source to ensure we only allow for data URI and links\n * that start with http(s).\n *\n * Note: Most browsers anyway do not support script execution in <img> elements.\n *\n * @param {string} src\n * @returns {string}\n */\nfunction sanitizeImageSource(src) {\n  const valid = ALLOWED_IMAGE_SRC_PATTERN.test(src);\n  return valid ? src : '';\n}\n\n/**\n * Sanitizes an iframe source to ensure we only allow for links\n * that start with http(s).\n *\n * @param {string} src\n * @returns {string}\n */\nfunction sanitizeIFrameSource(src) {\n  const valid = ALLOWED_IFRAME_SRC_PATTERN.test(src);\n  return valid ? src : '';\n}\n\n/**\n * Escapes HTML and returns pure text.\n * @param {string} html\n * @returns {string}\n */\nfunction escapeHTML(html) {\n  const escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#039;',\n    '{': '&#123;',\n    '}': '&#125;',\n    ':': '&#58;',\n    ';': '&#59;'\n  };\n  return html.replace(/[&<>\"'{};:]/g, match => escapeMap[match]);\n}\n\nfunction useCleanupSingleSelectValue(props) {\n  const {\n    field,\n    options,\n    loadState,\n    onChange,\n    value\n  } = props;\n\n  // Ensures that the value is always one of the possible options\n  useEffect(() => {\n    if (loadState !== LOAD_STATES.LOADED) {\n      return;\n    }\n    const optionValues = options.map(o => o.value);\n    const hasValueNotInOptions = value && !hasEqualValue(value, optionValues);\n    if (hasValueNotInOptions) {\n      onChange({\n        field,\n        value: null\n      });\n    }\n  }, [field, options, onChange, value, loadState]);\n}\n\nfunction useCleanupMultiSelectValue(props) {\n  const {\n    field,\n    options,\n    loadState,\n    onChange,\n    values\n  } = props;\n  const memoizedValues = useDeepCompareMemoize(values || []);\n\n  // ensures that the values are always a subset of the possible options\n  useEffect(() => {\n    if (loadState !== LOAD_STATES.LOADED) {\n      return;\n    }\n    const optionValues = options.map(o => o.value);\n    const hasValuesNotInOptions = memoizedValues.some(v => !hasEqualValue(v, optionValues));\n    if (hasValuesNotInOptions) {\n      onChange({\n        field,\n        value: memoizedValues.filter(v => hasEqualValue(v, optionValues))\n      });\n    }\n  }, [field, options, onChange, memoizedValues, loadState]);\n}\n\nconst type$h = 'button';\nfunction Button(props) {\n  const {\n    disabled,\n    onFocus,\n    onBlur,\n    field\n  } = props;\n  const {\n    action = 'submit'\n  } = field;\n  const evaluatedLabel = useSingleLineTemplateEvaluation(field.label || '', {\n    debug: true\n  });\n  return jsx(\"div\", {\n    class: formFieldClasses(type$h),\n    children: jsx(\"button\", {\n      class: \"fjs-button\",\n      type: action,\n      disabled: disabled,\n      onFocus: () => onFocus && onFocus(),\n      onBlur: () => onBlur && onBlur(),\n      children: evaluatedLabel\n    })\n  });\n}\nButton.config = {\n  type: type$h,\n  keyed: false,\n  label: 'Button',\n  group: 'action',\n  create: (options = {}) => ({\n    action: 'submit',\n    ...options\n  })\n};\n\nfunction Description(props) {\n  const {\n    description,\n    id\n  } = props;\n  const evaluatedDescription = useSingleLineTemplateEvaluation(description || '', {\n    debug: true\n  });\n  if (!evaluatedDescription) {\n    return null;\n  }\n  return jsx(\"div\", {\n    id: id,\n    class: \"fjs-form-field-description\",\n    children: evaluatedDescription\n  });\n}\n\nfunction Errors(props) {\n  const {\n    errors,\n    id\n  } = props;\n  if (!errors.length) {\n    return null;\n  }\n  return jsx(\"div\", {\n    class: \"fjs-form-field-error\",\n    \"aria-live\": \"polite\",\n    id: id,\n    children: jsx(\"ul\", {\n      children: errors.map(error => {\n        return jsx(\"li\", {\n          children: error\n        });\n      })\n    })\n  });\n}\n\nfunction Label(props) {\n  const {\n    id,\n    htmlFor,\n    label,\n    collapseOnEmpty = true,\n    required = false\n  } = props;\n  const evaluatedLabel = useSingleLineTemplateEvaluation(label || '', {\n    debug: true\n  });\n  return jsxs(\"label\", {\n    id: id,\n    for: htmlFor,\n    class: classNames('fjs-form-field-label', {\n      'fjs-incollapsible-label': !collapseOnEmpty\n    }, props['class']),\n    children: [props.children, evaluatedLabel, required && jsx(\"span\", {\n      class: \"fjs-asterix\",\n      \"aria-hidden\": true,\n      children: \"*\"\n    })]\n  });\n}\n\nconst type$g = 'checkbox';\nfunction Checkbox(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value = false\n  } = props;\n  const {\n    description,\n    label,\n    validate = {}\n  } = field;\n  const {\n    required\n  } = validate;\n  const onChange = ({\n    target\n  }) => {\n    props.onChange({\n      value: target.checked\n    });\n  };\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: classNames(formFieldClasses(type$g, {\n      errors,\n      disabled,\n      readonly\n    }), {\n      'fjs-checked': value\n    }),\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      required: required,\n      children: jsx(\"input\", {\n        checked: value,\n        class: \"fjs-input\",\n        disabled: disabled,\n        readOnly: readonly,\n        id: domId,\n        type: \"checkbox\",\n        onChange: onChange,\n        onBlur: () => onBlur && onBlur(),\n        onFocus: () => onFocus && onFocus(),\n        required: required,\n        \"aria-invalid\": errors.length > 0,\n        \"aria-describedby\": [descriptionId, errorMessageId].join(' ')\n      })\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nCheckbox.config = {\n  type: type$g,\n  keyed: true,\n  label: 'Checkbox',\n  group: 'selection',\n  emptyValue: false,\n  sanitizeValue: ({\n    value\n  }) => value === true,\n  create: (options = {}) => ({\n    ...options\n  })\n};\n\nconst type$f = 'checklist';\nfunction Checklist(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value: values = []\n  } = props;\n  const {\n    description,\n    label,\n    validate = {}\n  } = field;\n  const outerDivRef = useRef();\n  const {\n    required\n  } = validate;\n  const toggleCheckbox = toggledValue => {\n    const newValues = hasEqualValue(toggledValue, values) ? values.filter(value => !isEqual(value, toggledValue)) : [...values, toggledValue];\n    props.onChange({\n      value: newValues\n    });\n  };\n  const onCheckboxBlur = e => {\n    if (outerDivRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onBlur && onBlur();\n  };\n  const onCheckboxFocus = e => {\n    if (outerDivRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onFocus && onFocus();\n  };\n  const {\n    loadState,\n    options\n  } = useOptionsAsync(field);\n  useCleanupMultiSelectValue({\n    field,\n    loadState,\n    options,\n    values,\n    onChange: props.onChange\n  });\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: classNames(formFieldClasses(type$f, {\n      errors,\n      disabled,\n      readonly\n    })),\n    ref: outerDivRef,\n    children: [jsx(Label, {\n      label: label,\n      required: required\n    }), loadState == LOAD_STATES.LOADED && options.map((o, index) => {\n      const itemDomId = `${domId}-${index}`;\n      const isChecked = hasEqualValue(o.value, values);\n      return jsx(Label, {\n        htmlFor: itemDomId,\n        label: o.label,\n        class: classNames({\n          'fjs-checked': isChecked\n        }),\n        required: false,\n        children: jsx(\"input\", {\n          checked: isChecked,\n          class: \"fjs-input\",\n          disabled: disabled,\n          readOnly: readonly,\n          id: itemDomId,\n          type: \"checkbox\",\n          onClick: () => toggleCheckbox(o.value),\n          onBlur: onCheckboxBlur,\n          onFocus: onCheckboxFocus,\n          required: required,\n          \"aria-invalid\": errors.length > 0,\n          \"aria-describedby\": [descriptionId, errorMessageId].join(' ')\n        })\n      });\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nChecklist.config = {\n  type: type$f,\n  keyed: true,\n  label: 'Checkbox group',\n  group: 'selection',\n  emptyValue: [],\n  sanitizeValue: sanitizeMultiSelectValue,\n  create: createEmptyOptions\n};\n\nconst noop$1 = () => false;\nfunction FormField(props) {\n  const {\n    field,\n    indexes,\n    onChange: _onChange\n  } = props;\n  const formFields = useService('formFields'),\n    viewerCommands = useService('viewerCommands', false),\n    formFieldInstanceRegistry = useService('formFieldInstanceRegistry', false),\n    pathRegistry = useService('pathRegistry'),\n    eventBus = useService('eventBus'),\n    form = useService('form');\n  const {\n    initialData,\n    data,\n    errors,\n    properties\n  } = form._getState();\n  const {\n    Element,\n    Hidden,\n    Column\n  } = useContext(FormRenderContext);\n  const {\n    formId\n  } = useContext(FormContext);\n\n  // track whether we should trigger initial validation on certain actions, e.g. field blur\n  // disabled straight away, if viewerCommands are not available\n  const [initialValidationTrigger, setInitialValidationTrigger] = useState(!!viewerCommands);\n  const FormFieldComponent = formFields.get(field.type);\n  if (!FormFieldComponent) {\n    throw new Error(`cannot render field <${field.type}>`);\n  }\n  const fieldConfig = FormFieldComponent.config;\n  const localExpressionContext = useContext(LocalExpressionContext);\n  const valuePath = useMemo(() => pathRegistry.getValuePath(field, {\n    indexes\n  }), [field, indexes, pathRegistry]);\n  const initialValue = useMemo(() => get(initialData, valuePath), [initialData, valuePath]);\n  const readonly = useReadonly(field, properties);\n  const value = get(data, valuePath);\n\n  // add precedence: global readonly > form field disabled\n  const disabled = !properties.readOnly && (properties.disabled || field.disabled || false);\n  const hidden = useCondition(field.conditional && field.conditional.hide || null);\n  const fieldInstance = useMemo(() => ({\n    id: field.id,\n    expressionContextInfo: localExpressionContext,\n    valuePath,\n    indexes\n  }), [field.id, valuePath, localExpressionContext, indexes]);\n\n  // register form field instance\n  useEffect(() => {\n    if (formFieldInstanceRegistry && !hidden) {\n      const instanceId = formFieldInstanceRegistry.add(fieldInstance);\n      return () => {\n        formFieldInstanceRegistry.remove(instanceId);\n      };\n    }\n  }, [fieldInstance, formFieldInstanceRegistry, hidden]);\n\n  // ensures the initial validation behavior can be re-triggered upon form reset\n  useEffect(() => {\n    if (!viewerCommands) {\n      return;\n    }\n    const resetValidation = () => {\n      setInitialValidationTrigger(true);\n    };\n    eventBus.on('import.done', resetValidation);\n    eventBus.on('reset', resetValidation);\n    return () => {\n      eventBus.off('import.done', resetValidation);\n      eventBus.off('reset', resetValidation);\n    };\n  }, [eventBus, viewerCommands]);\n  useEffect(() => {\n    const hasInitialValue = initialValue && !isEqual(initialValue, []);\n    if (initialValidationTrigger && hasInitialValue) {\n      setInitialValidationTrigger(false);\n      viewerCommands.updateFieldInstanceValidation(fieldInstance, initialValue);\n    }\n  }, [fieldInstance, initialValidationTrigger, initialValue, viewerCommands]);\n  const onBlur = useCallback(() => {\n    const value = get(data, valuePath);\n    if (initialValidationTrigger) {\n      setInitialValidationTrigger(false);\n      viewerCommands.updateFieldInstanceValidation(fieldInstance, value);\n    }\n    eventBus.fire('formField.blur', {\n      formField: field\n    });\n  }, [data, eventBus, field, fieldInstance, initialValidationTrigger, valuePath, viewerCommands]);\n  const onFocus = useCallback(() => {\n    eventBus.fire('formField.focus', {\n      formField: field\n    });\n  }, [eventBus, field]);\n  const onChange = useCallback(update => {\n    setInitialValidationTrigger(false);\n    _onChange({\n      field,\n      indexes,\n      fieldInstance,\n      ...update\n    });\n  }, [_onChange, field, fieldInstance, indexes]);\n  if (hidden) {\n    return jsx(Hidden, {\n      field: field\n    });\n  }\n  const domId = `${prefixId(field.id, formId, indexes)}`;\n  const fieldErrors = get(errors, [field.id, ...Object.values(indexes || {})]) || [];\n  const formFieldElement = jsx(FormFieldComponent, {\n    ...props,\n    disabled: disabled,\n    errors: fieldErrors,\n    domId: domId,\n    onChange: disabled || readonly ? noop$1 : onChange,\n    onBlur: disabled || readonly ? noop$1 : onBlur,\n    onFocus: disabled || readonly ? noop$1 : onFocus,\n    readonly: readonly,\n    value: value,\n    fieldInstance: fieldInstance\n  });\n  if (fieldConfig.escapeGridRender) {\n    return formFieldElement;\n  }\n  return jsx(Column, {\n    field: field,\n    class: gridColumnClasses(field),\n    children: jsx(Element, {\n      class: \"fjs-element\",\n      field: field,\n      children: formFieldElement\n    })\n  });\n}\n\nfunction ChildrenRenderer(props) {\n  const {\n    Children\n  } = useContext(FormRenderContext);\n  const {\n    field,\n    Empty\n  } = props;\n  const {\n    id\n  } = field;\n  const repeatRenderManager = useService('repeatRenderManager', false);\n  const isRepeating = repeatRenderManager && repeatRenderManager.isFieldRepeating(id);\n  const Repeater = repeatRenderManager.Repeater;\n  const RepeatFooter = repeatRenderManager.RepeatFooter;\n  return isRepeating ? jsx(RepeatChildrenRenderer, {\n    ...props,\n    ChildrenRoot: Children,\n    Empty,\n    Repeater,\n    RepeatFooter,\n    repeatRenderManager\n  }) : jsx(SimpleChildrenRenderer, {\n    ...props,\n    ChildrenRoot: Children,\n    Empty\n  });\n}\nfunction SimpleChildrenRenderer(props) {\n  const {\n    ChildrenRoot,\n    Empty,\n    field\n  } = props;\n  const {\n    components = []\n  } = field;\n  const isEmpty = !components.length;\n  return jsxs(ChildrenRoot, {\n    class: \"fjs-vertical-layout fjs-children cds--grid cds--grid--condensed\",\n    field: field,\n    children: [jsx(RowsRenderer, {\n      ...props\n    }), isEmpty ? jsx(Empty, {\n      field: field\n    }) : null]\n  });\n}\nfunction RepeatChildrenRenderer(props) {\n  const {\n    ChildrenRoot,\n    repeatRenderManager,\n    Empty,\n    field,\n    ...restProps\n  } = props;\n  const {\n    components = []\n  } = field;\n  const useSharedState = useState({\n    isCollapsed: true\n  });\n  const Repeater = repeatRenderManager.Repeater;\n  const RepeatFooter = repeatRenderManager.RepeatFooter;\n  return jsxs(Fragment, {\n    children: [jsxs(ChildrenRoot, {\n      class: \"fjs-vertical-layout fjs-children cds--grid cds--grid--condensed\",\n      field: field,\n      children: [Repeater ? jsx(Repeater, {\n        ...restProps,\n        useSharedState,\n        field,\n        RowsRenderer\n      }) : jsx(RowsRenderer, {\n        ...restProps,\n        field\n      }), !components.length ? jsx(Empty, {\n        field: field\n      }) : null]\n    }), RepeatFooter ? jsx(RepeatFooter, {\n      ...restProps,\n      useSharedState,\n      field\n    }) : null]\n  });\n}\nfunction RowsRenderer(props) {\n  const {\n    field,\n    indexes\n  } = props;\n  const {\n    id: parentId,\n    verticalAlignment = 'start'\n  } = field;\n  const formLayouter = useService('formLayouter');\n  const formFieldRegistry = useService('formFieldRegistry');\n  const rows = formLayouter.getRows(parentId);\n  const {\n    Row\n  } = useContext(FormRenderContext);\n  return jsxs(Fragment, {\n    children: [' ', rows.map(row => {\n      const {\n        components = []\n      } = row;\n      if (!components.length) {\n        return null;\n      }\n      return jsx(Row, {\n        row: row,\n        class: \"fjs-layout-row cds--row\",\n        style: {\n          alignItems: verticalAlignment\n        },\n        children: components.map(childId => {\n          const childField = formFieldRegistry.get(childId);\n          if (!childField) {\n            return null;\n          }\n          return createElement(FormField, {\n            ...props,\n            key: childId,\n            field: childField,\n            indexes: indexes\n          });\n        })\n      });\n    }), ' ']\n  });\n}\n\nfunction Default(props) {\n  const {\n    Empty\n  } = useContext(FormRenderContext);\n  const fullProps = {\n    ...props,\n    Empty\n  };\n  return jsx(ChildrenRenderer, {\n    ...fullProps\n  });\n}\nDefault.config = {\n  type: 'default',\n  keyed: false,\n  label: null,\n  group: null,\n  create: (options = {}) => ({\n    components: [],\n    ...options\n  })\n};\n\nvar _path$w;\nfunction _extends$x() { _extends$x = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$x.apply(this, arguments); }\nvar SvgCalendar = function SvgCalendar(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$x({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 14,\n    height: 15,\n    fill: \"none\",\n    viewBox: \"0 0 28 30\"\n  }, props), _path$w || (_path$w = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M19 2H9V0H7v2H2a2 2 0 0 0-2 2v24a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-5V0h-2zM7 7V4H2v5h24V4h-5v3h-2V4H9v3zm-5 4v17h24V11z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\n/**\n * Returns date format for the provided locale.\n * If the locale is not provided, uses the browser's locale.\n *\n * @param {string} [locale] - The locale to get date format for.\n * @returns {string} The date format for the locale.\n */\nfunction getLocaleDateFormat(locale = 'default') {\n  const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(Date.UTC(2020, 5, 5)));\n  return parts.map(part => {\n    const len = part.value.length;\n    switch (part.type) {\n      case 'day':\n        return 'd'.repeat(len);\n      case 'month':\n        return 'M'.repeat(len);\n      case 'year':\n        return 'y'.repeat(len);\n      default:\n        return part.value;\n    }\n  }).join('');\n}\n\n/**\n * Returns readable date format for the provided locale.\n * If the locale is not provided, uses the browser's locale.\n *\n * @param {string} [locale] - The locale to get readable date format for.\n * @returns {string} The readable date format for the locale.\n */\nfunction getLocaleReadableDateFormat(locale) {\n  let format = getLocaleDateFormat(locale).toLowerCase();\n\n  // Ensure month is in 'mm' format\n  if (!format.includes('mm')) {\n    format = format.replace('m', 'mm');\n  }\n\n  // Ensure day is in 'dd' format\n  if (!format.includes('dd')) {\n    format = format.replace('d', 'dd');\n  }\n  return format;\n}\n\n/**\n * Returns flatpickr config for the provided locale.\n * If the locale is not provided, uses the browser's locale.\n *\n * @param {string} [locale] - The locale to get flatpickr config for.\n * @returns {object} The flatpickr config for the locale.\n */\nfunction getLocaleDateFlatpickrConfig(locale) {\n  return flatpickerizeDateFormat(getLocaleDateFormat(locale));\n}\nfunction flatpickerizeDateFormat(dateFormat) {\n  const useLeadingZero = {\n    day: dateFormat.includes('dd'),\n    month: dateFormat.includes('MM'),\n    year: dateFormat.includes('yyyy')\n  };\n  dateFormat = useLeadingZero.day ? dateFormat.replace('dd', 'd') : dateFormat.replace('d', 'j');\n  dateFormat = useLeadingZero.month ? dateFormat.replace('MM', 'm') : dateFormat.replace('M', 'n');\n  dateFormat = useLeadingZero.year ? dateFormat.replace('yyyy', 'Y') : dateFormat.replace('yy', 'y');\n  return dateFormat;\n}\n\nfunction InputAdorner(props) {\n  const {\n    pre,\n    post,\n    rootRef,\n    inputRef,\n    children,\n    disabled,\n    readonly,\n    hasErrors\n  } = props;\n  const onAdornmentClick = () => inputRef && inputRef.current && inputRef.current.focus();\n  return jsxs(\"div\", {\n    class: classNames('fjs-input-group', {\n      'fjs-disabled': disabled,\n      'fjs-readonly': readonly\n    }, {\n      hasErrors: hasErrors\n    }),\n    ref: rootRef,\n    children: [pre && jsxs(\"span\", {\n      class: \"fjs-input-adornment border-right border-radius-left\",\n      onClick: onAdornmentClick,\n      children: [' ', isString(pre) ? jsx(\"span\", {\n        class: \"fjs-input-adornment-text\",\n        children: pre\n      }) : pre, ' ']\n    }), children, post && jsxs(\"span\", {\n      class: \"fjs-input-adornment border-left border-radius-right\",\n      onClick: onAdornmentClick,\n      children: [' ', isString(post) ? jsx(\"span\", {\n        class: \"fjs-input-adornment-text\",\n        children: post\n      }) : post, ' ']\n    })]\n  });\n}\n\nfunction Datepicker(props) {\n  const {\n    label,\n    domId,\n    collapseLabelOnEmpty,\n    onDateTimeBlur,\n    onDateTimeFocus,\n    required,\n    disabled,\n    disallowPassedDates,\n    date: dateObject,\n    readonly,\n    setDate\n  } = props;\n  const dateInputRef = useRef();\n  const focusScopeRef = useRef();\n  const [flatpickrInstance, setFlatpickrInstance] = useState(null);\n  const [isInputDirty, setIsInputDirty] = useState(false);\n  const [forceFocusCalendar, setForceFocusCalendar] = useState(false);\n\n  // ensures we render based on date value instead of reference\n  const date = useDeepCompareMemoize(dateObject);\n\n  // shorts the date value back to the source\n  useEffect(() => {\n    if (!flatpickrInstance || !flatpickrInstance.config) return;\n    flatpickrInstance.setDate(date, true);\n    setIsInputDirty(false);\n  }, [flatpickrInstance, date]);\n  useEffect(() => {\n    if (!forceFocusCalendar) return;\n    focusRelevantFlatpickerDay(flatpickrInstance);\n    setForceFocusCalendar(false);\n  }, [flatpickrInstance, forceFocusCalendar]);\n\n  // setup flatpickr instance\n  useEffect(() => {\n    let config = {\n      allowInput: true,\n      dateFormat: getLocaleDateFlatpickrConfig(),\n      static: true,\n      clickOpens: false,\n      // TODO: support dates prior to 1900 (https://github.com/bpmn-io/form-js/issues/533)\n      minDate: disallowPassedDates ? 'today' : '01/01/1900',\n      errorHandler: () => {\n        /* do nothing, we expect the values to sometimes be erronous and we don't want warnings polluting the console */\n      }\n    };\n    const instance = flatpickr(dateInputRef.current, config);\n    setFlatpickrInstance(instance);\n    const onCalendarFocusOut = e => {\n      if (!instance.calendarContainer.contains(e.relatedTarget) && e.relatedTarget != dateInputRef.current) {\n        instance.close();\n      }\n    };\n\n    // remove dirty tag to have mouse day selection prioritize input blur\n    const onCalendarMouseDown = e => {\n      if (e.target.classList.contains('flatpickr-day')) {\n        setIsInputDirty(false);\n      }\n    };\n\n    // when the dropdown of the datepickr opens, we register a few event handlers to re-implement some of the\n    // flatpicker logic that was lost when setting allowInput to true\n    instance.config.onOpen = [() => instance.calendarContainer.addEventListener('focusout', onCalendarFocusOut), () => instance.calendarContainer.addEventListener('mousedown', onCalendarMouseDown)];\n    instance.config.onClose = [() => instance.calendarContainer.removeEventListener('focusout', onCalendarFocusOut), () => instance.calendarContainer.removeEventListener('mousedown', onCalendarMouseDown)];\n  }, [disallowPassedDates]);\n\n  // onChange is updated dynamically, so not to re-render the flatpicker every time it changes\n  useEffect(() => {\n    if (!flatpickrInstance || !flatpickrInstance.config) return;\n    flatpickrInstance.config.onChange = [date => setDate(new Date(date)), () => setIsInputDirty(false)];\n  }, [flatpickrInstance, setDate]);\n  const onInputKeyDown = useCallback(e => {\n    if (!flatpickrInstance) return;\n    if (e.code === 'Escape') {\n      flatpickrInstance.close();\n    }\n    if (e.code === 'ArrowDown') {\n      if (isInputDirty) {\n        // trigger an enter keypress to submit the new input, then focus calendar day on the next render cycle\n        dateInputRef.current.dispatchEvent(ENTER_KEYDOWN_EVENT);\n        setIsInputDirty(false);\n        setForceFocusCalendar(true);\n      } else {\n        // focus calendar day immediately\n        focusRelevantFlatpickerDay(flatpickrInstance);\n      }\n      e.preventDefault();\n    }\n    if (e.code === 'Enter') {\n      setIsInputDirty(false);\n    }\n  }, [flatpickrInstance, isInputDirty]);\n  const onInputFocus = useCallback(e => {\n    if (!flatpickrInstance || focusScopeRef.current.contains(e.relatedTarget) || readonly) return;\n    flatpickrInstance.open();\n    onDateTimeFocus(e);\n  }, [flatpickrInstance, readonly, onDateTimeFocus]);\n\n  // simulate an enter press on blur to make sure the date value is submitted in all scenarios\n  const onInputBlur = useCallback(e => {\n    const isFalseBlur = e.relatedTarget && e.relatedTarget.classList.contains('flatpickr-day');\n    if (isFalseBlur) return;\n    if (isInputDirty) {\n      dateInputRef.current.dispatchEvent(ENTER_KEYDOWN_EVENT);\n      setIsInputDirty(false);\n    }\n    onDateTimeBlur(e);\n  }, [isInputDirty, onDateTimeBlur]);\n  return jsxs(\"div\", {\n    class: \"fjs-datetime-subsection\",\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      collapseOnEmpty: collapseLabelOnEmpty,\n      required: required\n    }), jsx(InputAdorner, {\n      pre: jsx(SvgCalendar, {}),\n      disabled: disabled,\n      readonly: readonly,\n      rootRef: focusScopeRef,\n      inputRef: dateInputRef,\n      children: jsx(\"div\", {\n        class: \"fjs-datepicker\",\n        style: {\n          width: '100%'\n        },\n        children: jsx(\"input\", {\n          ref: dateInputRef,\n          type: \"text\",\n          id: domId,\n          class: \"fjs-input\",\n          disabled: disabled,\n          readOnly: readonly,\n          placeholder: getLocaleReadableDateFormat(),\n          autoComplete: \"off\",\n          onFocus: onInputFocus,\n          onBlur: onInputBlur,\n          onKeyDown: onInputKeyDown,\n          onMouseDown: () => !flatpickrInstance.isOpen && !readonly && flatpickrInstance.open(),\n          onInput: () => setIsInputDirty(true),\n          \"data-input\": true,\n          \"aria-describedby\": props['aria-describedby']\n        })\n      })\n    })]\n  });\n}\n\nvar _path$v, _path2$4;\nfunction _extends$w() { _extends$w = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$w.apply(this, arguments); }\nvar SvgClock = function SvgClock(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$w({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\",\n    viewBox: \"0 0 28 29\"\n  }, props), _path$v || (_path$v = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M13 14.41 18.59 20 20 18.59l-5-5.01V5h-2z\"\n  })), _path2$4 || (_path2$4 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M6.222 25.64A14 14 0 1 0 21.778 2.36 14 14 0 0 0 6.222 25.64M7.333 4.023a12 12 0 1 1 13.334 19.955A12 12 0 0 1 7.333 4.022Z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nconst DEFAULT_LABEL_GETTER = value => value;\nconst NOOP = () => {};\nfunction DropdownList(props) {\n  const {\n    listenerElement = window,\n    values = [],\n    getLabel = DEFAULT_LABEL_GETTER,\n    onValueSelected = NOOP,\n    height = 235,\n    emptyListMessage = 'No results',\n    initialFocusIndex = 0\n  } = props;\n  const [mouseControl, setMouseControl] = useState(false);\n  const [focusedValueIndex, setFocusedValueIndex] = useState(initialFocusIndex);\n  const [smoothScrolling, setSmoothScrolling] = useState(false);\n  const dropdownContainer = useRef();\n  const mouseScreenPos = useRef();\n  const focusedItem = useMemo(() => values.length ? values[focusedValueIndex] : null, [focusedValueIndex, values]);\n  const changeFocusedValueIndex = useCallback(delta => {\n    setFocusedValueIndex(x => Math.min(Math.max(0, x + delta), values.length - 1));\n  }, [values.length]);\n  useEffect(() => {\n    if (focusedValueIndex === 0) return;\n    if (!focusedValueIndex || !values.length) {\n      setFocusedValueIndex(0);\n    } else if (focusedValueIndex >= values.length) {\n      setFocusedValueIndex(values.length - 1);\n    }\n  }, [focusedValueIndex, values.length]);\n  useKeyDownAction('ArrowUp', () => {\n    if (values.length) {\n      changeFocusedValueIndex(-1);\n      setMouseControl(false);\n    }\n  }, listenerElement);\n  useKeyDownAction('ArrowDown', () => {\n    if (values.length) {\n      changeFocusedValueIndex(1);\n      setMouseControl(false);\n    }\n  }, listenerElement);\n  useKeyDownAction('Enter', () => {\n    if (focusedItem) {\n      onValueSelected(focusedItem);\n    }\n  }, listenerElement);\n  useEffect(() => {\n    const individualEntries = dropdownContainer.current.children;\n    if (individualEntries.length && !mouseControl) {\n      const focusedEntry = individualEntries[focusedValueIndex];\n      focusedEntry && focusedEntry.scrollIntoView({\n        block: 'nearest',\n        inline: 'nearest'\n      });\n    }\n  }, [focusedValueIndex, mouseControl]);\n  useEffect(() => {\n    setSmoothScrolling(true);\n  }, []);\n  const onMouseMovedInKeyboardMode = (event, valueIndex) => {\n    const userMovedCursor = !mouseScreenPos.current || mouseScreenPos.current.x !== event.screenX && mouseScreenPos.current.y !== event.screenY;\n    if (userMovedCursor) {\n      mouseScreenPos.current = {\n        x: event.screenX,\n        y: event.screenY\n      };\n      setMouseControl(true);\n      setFocusedValueIndex(valueIndex);\n    }\n  };\n  return jsxs(\"div\", {\n    ref: dropdownContainer,\n    tabIndex: -1,\n    class: \"fjs-dropdownlist\",\n    onMouseDown: e => e.preventDefault(),\n    style: {\n      maxHeight: height,\n      scrollBehavior: smoothScrolling ? 'smooth' : 'auto'\n    },\n    children: [values.length > 0 && values.map((v, i) => {\n      return jsx(\"div\", {\n        class: classNames('fjs-dropdownlist-item', {\n          focused: focusedValueIndex === i\n        }),\n        onMouseMove: mouseControl ? undefined : e => onMouseMovedInKeyboardMode(e, i),\n        onMouseEnter: mouseControl ? () => setFocusedValueIndex(i) : undefined,\n        onMouseDown: e => onValueSelected(v),\n        children: getLabel(v)\n      });\n    }), !values.length && jsx(\"div\", {\n      class: \"fjs-dropdownlist-empty\",\n      children: emptyListMessage\n    })]\n  });\n}\n\nfunction Timepicker(props) {\n  const {\n    label,\n    collapseLabelOnEmpty,\n    onDateTimeBlur,\n    onDateTimeFocus,\n    domId,\n    required,\n    disabled,\n    readonly,\n    use24h = false,\n    timeInterval,\n    time,\n    setTime\n  } = props;\n  const safeTimeInterval = useMemo(() => {\n    const allowedIntervals = [1, 5, 10, 15, 30, 60];\n    if (allowedIntervals.includes(timeInterval)) {\n      return timeInterval;\n    }\n    return 15;\n  }, [timeInterval]);\n  const timeInputRef = useRef();\n  const [dropdownIsOpen, setDropdownIsOpen] = useState(false);\n  const useDropdown = useMemo(() => safeTimeInterval !== 1, [safeTimeInterval]);\n  const [rawValue, setRawValue] = useState('');\n\n  // populates values from source\n  useEffect(() => {\n    if (time === null) {\n      setRawValue('');\n      return;\n    }\n    const intervalAdjustedTime = time - time % safeTimeInterval;\n    setRawValue(formatTime(use24h, intervalAdjustedTime));\n    if (intervalAdjustedTime != time) {\n      setTime(intervalAdjustedTime);\n    }\n  }, [time, setTime, use24h, safeTimeInterval]);\n  const propagateRawToMinute = useCallback(newRawValue => {\n    const localRawValue = newRawValue || rawValue;\n\n    // If no raw value exists, set the minute to null\n    if (!localRawValue) {\n      setTime(null);\n      return;\n    }\n    const minutes = parseInputTime(localRawValue);\n\n    // If raw string couldn't be parsed, clean everything up\n    if (!isNumber(minutes)) {\n      setRawValue('');\n      setTime(null);\n      return;\n    }\n\n    // Enforce the minutes to match the timeInterval\n    const correctedMinutes = minutes - minutes % safeTimeInterval;\n\n    // Enforce the raw text to be formatted properly\n    setRawValue(formatTime(use24h, correctedMinutes));\n    setTime(correctedMinutes);\n  }, [rawValue, safeTimeInterval, use24h, setTime]);\n  const timeOptions = useMemo(() => {\n    const minutesInDay = 24 * 60;\n    const intervalCount = Math.floor(minutesInDay / safeTimeInterval);\n    return [...Array(intervalCount).keys()].map(intervalIndex => formatTime(use24h, intervalIndex * safeTimeInterval));\n  }, [safeTimeInterval, use24h]);\n  const initialFocusIndex = useMemo(() => {\n    // if there are no options, there will not be any focusing\n    if (!timeOptions || !safeTimeInterval) return null;\n\n    // if there is a set minute value, we focus it in the dropdown\n    if (time) return time / safeTimeInterval;\n    const cacheTime = parseInputTime(rawValue);\n\n    // if there is a valid value in the input cache, we try and focus close to it\n    if (cacheTime) {\n      const flooredCacheTime = cacheTime - cacheTime % safeTimeInterval;\n      return flooredCacheTime / safeTimeInterval;\n    }\n\n    // If there is no set value, simply focus the middle of the dropdown (12:00)\n    return Math.floor(timeOptions.length / 2);\n  }, [rawValue, time, safeTimeInterval, timeOptions]);\n  const onInputKeyDown = e => {\n    switch (e.key) {\n      case 'ArrowUp':\n        e.preventDefault();\n        break;\n      case 'ArrowDown':\n        useDropdown && setDropdownIsOpen(true);\n        e.preventDefault();\n        break;\n      case 'Escape':\n        useDropdown && setDropdownIsOpen(false);\n        break;\n      case 'Enter':\n        !dropdownIsOpen && propagateRawToMinute();\n        break;\n    }\n  };\n  const onInputBlur = e => {\n    setDropdownIsOpen(false);\n    propagateRawToMinute();\n    onDateTimeBlur(e);\n  };\n  const onInputFocus = e => {\n    onDateTimeFocus(e);\n    !readonly && useDropdown && setDropdownIsOpen(true);\n  };\n  const onDropdownValueSelected = value => {\n    setDropdownIsOpen(false);\n    propagateRawToMinute(value);\n  };\n  return jsxs(\"div\", {\n    class: \"fjs-datetime-subsection\",\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      collapseOnEmpty: collapseLabelOnEmpty,\n      required: required\n    }), jsx(InputAdorner, {\n      pre: jsx(SvgClock, {}),\n      inputRef: timeInputRef,\n      disabled: disabled,\n      readonly: readonly,\n      children: jsxs(\"div\", {\n        class: \"fjs-timepicker fjs-timepicker-anchor\",\n        children: [jsx(\"input\", {\n          ref: timeInputRef,\n          type: \"text\",\n          id: domId,\n          class: \"fjs-input\",\n          value: rawValue,\n          disabled: disabled,\n          readOnly: readonly,\n          placeholder: use24h ? 'hh:mm' : 'hh:mm ?m',\n          autoComplete: \"off\",\n          onInput: e => {\n            // @ts-expect-error\n            setRawValue(e.target.value);\n            useDropdown && setDropdownIsOpen(false);\n          },\n          onBlur: onInputBlur,\n          onFocus: onInputFocus,\n          onClick: () => !readonly && useDropdown && setDropdownIsOpen(true),\n          onKeyDown: onInputKeyDown,\n          \"data-input\": true,\n          \"aria-describedby\": props['aria-describedby']\n        }), dropdownIsOpen && jsx(DropdownList, {\n          values: timeOptions,\n          height: 150,\n          onValueSelected: onDropdownValueSelected,\n          listenerElement: timeInputRef.current,\n          initialFocusIndex: initialFocusIndex\n        })]\n      })\n    })]\n  });\n}\n\nconst type$e = 'datetime';\nfunction Datetime(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    onChange,\n    readonly,\n    value = ''\n  } = props;\n  const {\n    description,\n    id,\n    dateLabel,\n    timeLabel,\n    validate = {},\n    subtype,\n    use24h,\n    disallowPassedDates,\n    timeInterval,\n    timeSerializingFormat\n  } = field;\n  const {\n    required\n  } = validate;\n  const {\n    formId\n  } = useContext(FormContext);\n  const dateTimeGroupRef = useRef();\n  const [dateTime, setDateTime] = useState(getNullDateTime());\n  const [dateTimeUpdateRequest, setDateTimeUpdateRequest] = useState(null);\n  const useDatePicker = useMemo(() => subtype === DATETIME_SUBTYPES.DATE || subtype === DATETIME_SUBTYPES.DATETIME, [subtype]);\n  const useTimePicker = useMemo(() => subtype === DATETIME_SUBTYPES.TIME || subtype === DATETIME_SUBTYPES.DATETIME, [subtype]);\n  const onDateTimeBlur = useCallback(e => {\n    if (e.relatedTarget && dateTimeGroupRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onBlur && onBlur();\n  }, [onBlur]);\n  const onDateTimeFocus = useCallback(e => {\n    if (e.relatedTarget && dateTimeGroupRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onFocus && onFocus();\n  }, [onFocus]);\n  useEffect(() => {\n    let {\n      date,\n      time\n    } = getNullDateTime();\n    switch (subtype) {\n      case DATETIME_SUBTYPES.DATE:\n        {\n          date = new Date(Date.parse(value));\n          break;\n        }\n      case DATETIME_SUBTYPES.TIME:\n        {\n          time = parseIsoTime(value);\n          break;\n        }\n      case DATETIME_SUBTYPES.DATETIME:\n        {\n          date = new Date(Date.parse(value));\n          time = isValidDate(date) ? 60 * date.getHours() + date.getMinutes() : null;\n          break;\n        }\n    }\n    setDateTime({\n      date,\n      time\n    });\n  }, [subtype, value]);\n  const computeAndSetState = useCallback(({\n    date,\n    time\n  }) => {\n    let newDateTimeValue = null;\n    if (subtype === DATETIME_SUBTYPES.DATE && isValidDate(date)) {\n      newDateTimeValue = serializeDate(date);\n    } else if (subtype === DATETIME_SUBTYPES.TIME && isValidTime(time)) {\n      newDateTimeValue = serializeTime(time, new Date().getTimezoneOffset(), timeSerializingFormat);\n    } else if (subtype === DATETIME_SUBTYPES.DATETIME && isValidDate(date) && isValidTime(time)) {\n      newDateTimeValue = serializeDateTime(date, time, timeSerializingFormat);\n    }\n    if (value === newDateTimeValue) {\n      return;\n    }\n    onChange({\n      value: newDateTimeValue,\n      field\n    });\n  }, [value, field, onChange, subtype, timeSerializingFormat]);\n  useEffect(() => {\n    if (dateTimeUpdateRequest) {\n      if (dateTimeUpdateRequest.refreshOnly) {\n        computeAndSetState(dateTime);\n      } else {\n        const newDateTime = {\n          ...dateTime,\n          ...dateTimeUpdateRequest\n        };\n        setDateTime(newDateTime);\n        computeAndSetState(newDateTime);\n      }\n      setDateTimeUpdateRequest(null);\n    }\n  }, [computeAndSetState, dateTime, dateTimeUpdateRequest]);\n  useEffect(() => {\n    setDateTimeUpdateRequest({\n      refreshOnly: true\n    });\n  }, [timeSerializingFormat]);\n  const allErrors = useMemo(() => {\n    if (required || subtype !== DATETIME_SUBTYPES.DATETIME) return errors;\n    const isOnlyOneFieldSet = isValidDate(dateTime.date) && !isValidTime(dateTime.time) || !isValidDate(dateTime.date) && isValidTime(dateTime.time);\n    return isOnlyOneFieldSet ? ['Date and time must both be entered.', ...errors] : errors;\n  }, [required, subtype, dateTime, errors]);\n  const setDate = useCallback(date => {\n    setDateTimeUpdateRequest(prev => prev ? {\n      ...prev,\n      date\n    } : {\n      date\n    });\n  }, []);\n  const setTime = useCallback(time => {\n    setDateTimeUpdateRequest(prev => prev ? {\n      ...prev,\n      time\n    } : {\n      time\n    });\n  }, []);\n  const errorMessageId = allErrors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;\n  const descriptionId = `${prefixId(id, formId)}-description`;\n  const datePickerProps = {\n    label: dateLabel,\n    collapseLabelOnEmpty: !timeLabel,\n    onDateTimeBlur,\n    onDateTimeFocus,\n    domId: `${domId}-date`,\n    required,\n    disabled,\n    disallowPassedDates,\n    date: dateTime.date,\n    readonly,\n    setDate,\n    'aria-describedby': [descriptionId, errorMessageId].join(' ')\n  };\n  const timePickerProps = {\n    label: timeLabel,\n    collapseLabelOnEmpty: !dateLabel,\n    onDateTimeBlur,\n    onDateTimeFocus,\n    domId: `${domId}-time`,\n    required,\n    disabled,\n    readonly,\n    use24h,\n    timeInterval,\n    time: dateTime.time,\n    setTime,\n    'aria-describedby': [descriptionId, errorMessageId].join(' ')\n  };\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$e, {\n      errors: allErrors,\n      disabled,\n      readonly\n    }),\n    children: [jsxs(\"div\", {\n      class: classNames('fjs-vertical-group'),\n      ref: dateTimeGroupRef,\n      children: [useDatePicker && jsx(Datepicker, {\n        ...datePickerProps\n      }), useTimePicker && useDatePicker && jsx(\"div\", {\n        class: \"fjs-datetime-separator\"\n      }), useTimePicker && jsx(Timepicker, {\n        ...timePickerProps\n      })]\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      errors: allErrors,\n      id: errorMessageId\n    })]\n  });\n}\nDatetime.config = {\n  type: type$e,\n  keyed: true,\n  label: 'Date time',\n  group: 'basic-input',\n  emptyValue: null,\n  sanitizeValue: sanitizeDateTimePickerValue,\n  create: (options = {}) => {\n    const defaults = {};\n    set(defaults, DATETIME_SUBTYPE_PATH, DATETIME_SUBTYPES.DATE);\n    set(defaults, DATE_LABEL_PATH, 'Date');\n    return {\n      ...defaults,\n      ...options\n    };\n  }\n};\n\nfunction Group(props) {\n  const {\n    field,\n    domId\n  } = props;\n  const {\n    label,\n    type,\n    showOutline\n  } = field;\n  const {\n    Empty\n  } = useContext(FormRenderContext);\n  const fullProps = {\n    ...props,\n    Empty\n  };\n  return jsxs(\"div\", {\n    className: classNames(formFieldClasses(type), 'fjs-form-field-grouplike', {\n      'fjs-outlined': showOutline\n    }),\n    role: \"group\",\n    \"aria-labelledby\": domId,\n    children: [jsx(Label, {\n      id: domId,\n      label: label\n    }), jsx(ChildrenRenderer, {\n      ...fullProps\n    })]\n  });\n}\nGroup.config = {\n  type: 'group',\n  pathed: true,\n  label: 'Group',\n  group: 'container',\n  create: (options = {}) => ({\n    components: [],\n    showOutline: true,\n    ...options\n  })\n};\n\nconst type$d = 'iframe';\nconst DEFAULT_HEIGHT = 300;\nfunction IFrame(props) {\n  const {\n    field,\n    disabled,\n    readonly,\n    domId\n  } = props;\n  const {\n    height = DEFAULT_HEIGHT,\n    label,\n    url,\n    security = {}\n  } = field;\n  const evaluatedUrl = useSingleLineTemplateEvaluation(url, {\n    debug: true\n  });\n  const safeUrl = useMemo(() => sanitizeIFrameSource(evaluatedUrl), [evaluatedUrl]);\n  const evaluatedLabel = useSingleLineTemplateEvaluation(label, {\n    debug: true\n  });\n  const [sandbox, allow] = useSecurityAttributesMap(security);\n  const [iframeRefresh, setIframeRefresh] = useState(0);\n\n  // forces re-render of iframe when sandbox or allow attributes change, as browsers do not do it automatically\n  useEffect(() => {\n    setIframeRefresh(count => count + 1);\n  }, [sandbox, allow]);\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$d, {\n      disabled,\n      readonly\n    }),\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: evaluatedLabel\n    }), !evaluatedUrl && jsx(IFramePlaceholder, {\n      text: \"No content to show.\"\n    }), evaluatedUrl && safeUrl && jsx(\"iframe\", {\n      src: safeUrl,\n      title: evaluatedLabel,\n      height: height,\n      class: \"fjs-iframe\",\n      id: domId,\n      sandbox: sandbox,\n      allow\n    }, 'iframe-' + iframeRefresh), evaluatedUrl && !safeUrl && jsx(IFramePlaceholder, {\n      text: \"External content couldn't be loaded.\"\n    })]\n  });\n}\nfunction IFramePlaceholder(props) {\n  const {\n    text = 'iFrame'\n  } = props;\n  return jsx(\"div\", {\n    class: \"fjs-iframe-placeholder\",\n    children: jsx(\"p\", {\n      class: \"fjs-iframe-placeholder-text\",\n      children: text\n    })\n  });\n}\nIFrame.config = {\n  type: type$d,\n  keyed: false,\n  label: 'iFrame',\n  group: 'container',\n  create: (options = {}) => ({\n    security: {\n      allowScripts: true\n    },\n    ...options\n  })\n};\n\nvar _path$u;\nfunction _extends$v() { _extends$v = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$v.apply(this, arguments); }\nvar SvgButton = function SvgButton(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$v({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$u || (_path$u = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 17a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V20a3 3 0 0 1 3-3zm-9 8.889H18v2.222h18z\"\n  })));\n};\n\nvar _path$t;\nfunction _extends$u() { _extends$u = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$u.apply(this, arguments); }\nvar SvgCheckbox = function SvgCheckbox(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$u({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$t || (_path$t = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M34 18H20a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V20a2 2 0 0 0-2-2m-9 14-5-5 1.41-1.41L25 29.17l7.59-7.59L34 23z\"\n  })));\n};\n\nvar _path$s;\nfunction _extends$t() { _extends$t = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$t.apply(this, arguments); }\nvar SvgChecklist = function SvgChecklist(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$t({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$s || (_path$s = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M14.35 24.75H19v4.65h-4.65zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414M14.35 37.05H19v4.65h-4.65zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414M14.35 12.45H19v4.65h-4.65zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414m12.007 14.977a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293m0 12.3a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293m0-24.6a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$r, _path2$3, _path3;\nfunction _extends$s() { _extends$s = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$s.apply(this, arguments); }\nvar SvgDatetime = function SvgDatetime(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$s({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$r || (_path$r = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M37.908 13.418h-5.004v-2.354h-1.766v2.354H21.13v-2.354h-1.766v2.354H14.36a2.07 2.07 0 0 0-2.06 2.06v23.549a2.07 2.07 0 0 0 2.06 2.06h6.77v-1.766h-6.358a.707.707 0 0 1-.706-.706V15.89c0-.39.316-.707.706-.707h4.592v2.355h1.766v-2.355h10.008v2.355h1.766v-2.355h4.592a.71.71 0 0 1 .707.707v6.358h1.765v-6.77c0-1.133-.927-2.06-2.06-2.06\"\n  })), _path2$3 || (_path2$3 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m35.13 37.603 1.237-1.237-3.468-3.475v-5.926h-1.754v6.654l3.984 3.984Z\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M23.08 36.962a9.678 9.678 0 1 0 17.883-7.408 9.678 9.678 0 0 0-17.882 7.408Zm4.54-10.292a7.924 7.924 0 1 1 8.805 13.177A7.924 7.924 0 0 1 27.62 26.67\"\n  })));\n};\n\nvar _path$q, _path2$2;\nfunction _extends$r() { _extends$r = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$r.apply(this, arguments); }\nvar SvgTaglist = function SvgTaglist(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$r({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$q || (_path$q = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1\"\n  })), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M11 22a1 1 0 0 1 1-1h19a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1z\"\n  })));\n};\n\nvar _rect, _rect2, _rect3;\nfunction _extends$q() { _extends$q = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$q.apply(this, arguments); }\nvar SvgForm = function SvgForm(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$q({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54\n  }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n    width: 24,\n    height: 4,\n    x: 15,\n    y: 17,\n    rx: 1\n  })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n    width: 24,\n    height: 4,\n    x: 15,\n    y: 25,\n    rx: 1\n  })), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n    width: 13,\n    height: 4,\n    x: 15,\n    y: 33,\n    rx: 1\n  })));\n};\n\nvar _path$p;\nfunction _extends$p() { _extends$p = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$p.apply(this, arguments); }\nvar SvgGroup = function SvgGroup(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$p({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$p || (_path$p = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#000\",\n    fillRule: \"evenodd\",\n    d: \"M4.05 42.132v1.164c0 .693.604 1.254 1.35 1.254h1.35v-2.507h-2.7v.09Zm0-2.328h2.7v-2.328h-2.7zm0-4.656h2.7V32.82h-2.7zm0-4.656h2.7v-2.328h-2.7zm0-4.656h2.7v-2.328h-2.7zm0-4.656h2.7v-2.328h-2.7zm0-4.656h2.7v-2.328h-2.7zm0-4.656v.09h2.7V9.45H5.4c-.746 0-1.35.561-1.35 1.254zm5.4-2.418v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7V9.45zm5.4 0v2.507h2.7v-1.253c0-.693-.604-1.254-1.35-1.254zm2.7 4.746h-2.7v2.328h2.7zm0 4.656h-2.7v2.328h2.7zm0 4.656h-2.7v2.328h2.7zm0 4.656h-2.7v2.328h2.7zm0 4.656h-2.7v2.328h2.7zm0 4.656h-2.7v2.328h2.7zm0 4.656v-.09h-2.7v2.508h1.35c.746 0 1.35-.561 1.35-1.254zm-5.4 2.418v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507zm-5.4 0v-2.507h-2.7v2.507z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$o;\nfunction _extends$o() { _extends$o = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$o.apply(this, arguments); }\nvar SvgNumber = function SvgNumber(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$o({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$o || (_path$o = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1M35 28.444h7l-3.5 4zM35 26h7l-3.5-4z\"\n  })));\n};\n\nvar _path$n;\nfunction _extends$n() { _extends$n = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$n.apply(this, arguments); }\nvar SvgRadio = function SvgRadio(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$n({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$n || (_path$n = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M27 22c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5m0-5c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10m0 18a8 8 0 1 1 0-16 8 8 0 1 1 0 16\"\n  })));\n};\n\nvar _path$m;\nfunction _extends$m() { _extends$m = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$m.apply(this, arguments); }\nvar SvgSelect = function SvgSelect(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$m({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$m || (_path$m = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1m-12 7h9l-4.5 6z\"\n  })));\n};\n\nvar _path$l;\nfunction _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); }\nvar SvgSeparator = function SvgSeparator(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$l({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$l || (_path$l = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M26.293 16.293a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 18.414l-3.293 3.293a1 1 0 0 1-1.414-1.414zM9 26h36v2H9zm13.293 7.707 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 35.586l-3.293-3.293a1 1 0 0 0-1.414 1.414\"\n  })));\n};\n\nvar _path$k;\nfunction _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$k.apply(this, arguments); }\nvar SvgSpacer = function SvgSpacer(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$k({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$k || (_path$k = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M9 15v2h36v-2zm0 22v2h36v-2zm17.293-17.707a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 21.414l-3.293 3.293a1 1 0 0 1-1.414-1.414zm-4 11.414 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 32.586l-3.293-3.293a1 1 0 0 0-1.414 1.414\"\n  })));\n};\n\nvar _path$j;\nfunction _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$j.apply(this, arguments); }\nvar SvgDynamicList = function SvgDynamicList(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$j({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$j || (_path$j = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M2.7 43.296v1.254c0 .746.604 1.35 1.35 1.35h1.275v-1.795q.074.211.075.445v-1.254h-.075V43.2H4.05c.177 0 .347.034.502.096zm2.7-2.507v-2.507H2.7v2.507zm0-5.014v-2.507H2.7v2.507zm0-5.014v-2.507H2.7v2.507zm0-5.015V23.24H2.7v2.507h2.7Zm0-5.014v-2.507H2.7v2.507zm0-5.014V13.21H2.7v2.507zm-2.7-5.014h1.852a1.4 1.4 0 0 1-.502.096h1.275v-.096H5.4V9.45q0 .235-.075.445V8.1H4.05A1.35 1.35 0 0 0 2.7 9.45zm5.175.096h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1 0h2.55V8.1h-2.55zm5.1-2.7v1.795a1.4 1.4 0 0 1-.075-.445v1.254h.075v.096h1.275a1.4 1.4 0 0 1-.502-.096H51.3V9.45a1.35 1.35 0 0 0-1.35-1.35zm-.075 5.11v2.508h2.7V13.21zm0 5.015v2.507h2.7v-2.507zm0 5.014v2.507h2.7V23.24zm0 5.015v2.507h2.7v-2.507zm0 5.014v2.507h2.7v-2.507zm0 5.014v2.507h2.7v-2.507zm2.7 5.014h-1.852a1.4 1.4 0 0 1 .502-.096h-1.275v.096H48.6v1.254q0-.235.075-.445V45.9h1.275a1.35 1.35 0 0 0 1.35-1.35zm-5.175-.096h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zm-5.1 0h-2.55v2.7h2.55zM16.2 17.55a4.05 4.05 0 0 1 4.05 4.05v1.35A4.05 4.05 0 0 1 16.2 27h-1.35a4.05 4.05 0 0 1-4.05-4.05V21.6a4.05 4.05 0 0 1 4.05-4.05zm0 2.7h-1.35a1.35 1.35 0 0 0-1.35 1.35v1.35c0 .746.604 1.35 1.35 1.35h1.35a1.35 1.35 0 0 0 1.35-1.35V21.6a1.35 1.35 0 0 0-1.35-1.35m27 1.35a4.05 4.05 0 0 0-4.05-4.05H29.7a4.05 4.05 0 0 0-4.05 4.05v1.35A4.05 4.05 0 0 0 29.7 27h9.45a4.05 4.05 0 0 0 4.05-4.05zm-13.5-1.35h9.45c.746 0 1.35.604 1.35 1.35v1.35a1.35 1.35 0 0 1-1.35 1.35H29.7a1.35 1.35 0 0 1-1.35-1.35V21.6c0-.746.604-1.35 1.35-1.35M43.2 37.8a4.05 4.05 0 0 0-4.05-4.05H29.7a4.05 4.05 0 0 0-4.05 4.05v1.35h2.7V37.8c0-.746.604-1.35 1.35-1.35h9.45c.746 0 1.35.604 1.35 1.35v1.35h2.7zm-27-4.05a4.05 4.05 0 0 1 4.05 4.05v1.35h-2.7V37.8a1.35 1.35 0 0 0-1.35-1.35h-1.35a1.35 1.35 0 0 0-1.35 1.35v1.35h-2.7V37.8a4.05 4.05 0 0 1 4.05-4.05z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$i;\nfunction _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }\nvar SvgText = function SvgText(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$i({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$i || (_path$i = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M20.58 33.77h-3l-1.18-3.08H11l-1.1 3.08H7l5.27-13.54h2.89zm-5-5.36-1.86-5-1.83 5zM22 20.23h5.41a15.5 15.5 0 0 1 2.4.14 3.4 3.4 0 0 1 1.41.55 3.5 3.5 0 0 1 1 1.14 3 3 0 0 1 .42 1.58 3.26 3.26 0 0 1-1.91 2.94 3.63 3.63 0 0 1 1.91 1.22 3.28 3.28 0 0 1 .66 2 4 4 0 0 1-.43 1.8 3.6 3.6 0 0 1-1.09 1.4 3.9 3.9 0 0 1-1.83.65q-.69.07-3.3.09H22zm2.73 2.25v3.13h3.8a1.8 1.8 0 0 0 1.1-.49 1.4 1.4 0 0 0 .41-1 1.5 1.5 0 0 0-.35-1 1.54 1.54 0 0 0-1-.48c-.27 0-1.05-.05-2.34-.05zm0 5.39v3.62h2.57a11.5 11.5 0 0 0 1.88-.09 1.65 1.65 0 0 0 1-.54 1.6 1.6 0 0 0 .38-1.14 1.75 1.75 0 0 0-.29-1 1.7 1.7 0 0 0-.86-.62 9.3 9.3 0 0 0-2.41-.23zm19.62.92 2.65.84a5.94 5.94 0 0 1-2 3.29A5.74 5.74 0 0 1 41.38 34a5.87 5.87 0 0 1-4.44-1.84 7.1 7.1 0 0 1-1.73-5A7.43 7.43 0 0 1 37 21.87 6 6 0 0 1 41.54 20a5.64 5.64 0 0 1 4 1.47A5.33 5.33 0 0 1 47 24l-2.7.65a2.8 2.8 0 0 0-2.86-2.27A3.09 3.09 0 0 0 39 23.42a5.3 5.3 0 0 0-.93 3.5 5.62 5.62 0 0 0 .93 3.65 3 3 0 0 0 2.4 1.09 2.72 2.72 0 0 0 1.82-.66 4 4 0 0 0 1.13-2.21\"\n  })));\n};\n\nvar _path$h;\nfunction _extends$h() { _extends$h = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$h.apply(this, arguments); }\nvar SvgHtml = function SvgHtml(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$h({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$h || (_path$h = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M47.008 12.15c1.625 0 2.942 1.36 2.942 3.039v23.622c0 1.678-1.317 3.039-2.942 3.039H6.992c-1.625 0-2.942-1.36-2.942-3.039V15.189c0-1.678 1.317-3.039 2.942-3.039zm0 2.026H6.992c-.542 0-.98.454-.98 1.013V16.2h-.004v2.7h.003v19.911c0 .56.44 1.013.98 1.013h40.017c.542 0 .98-.453.98-1.013V18.9h.005v-2.7h-.004v-1.011c0-.56-.44-1.013-.98-1.013M14.934 26.055v-3.78h2.194v9.45h-2.194v-3.78h-3.29v3.78H9.45v-9.45h2.194v3.78zm4.388-1.89h2.194v7.56h2.193v-7.56h2.194v-1.89h-6.581zm14.26-1.89h2.193v9.45h-2.194V25.11l-1.645 3.78-1.645-3.78v6.615h-2.194v-9.45h2.194l1.645 3.78zm4.387 0h2.194v7.56h4.387v1.89h-6.581z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$g;\nfunction _extends$g() { _extends$g = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$g.apply(this, arguments); }\nvar SvgExpressionField = function SvgExpressionField(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$g({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$g || (_path$g = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    fillRule: \"evenodd\",\n    d: \"M12.78 16.2v6.75c0 1.619-.635 3.059-1.618 4.05.983.991 1.618 2.431 1.618 4.05v6.75h3.51v2.7h-3.51c-1.289 0-2.34-1.213-2.34-2.7v-6.75c0-1.487-1.051-2.7-2.34-2.7v-2.7c1.289 0 2.34-1.213 2.34-2.7V16.2c0-1.487 1.051-2.7 2.34-2.7h3.51v2.7zm30.78 0v6.75c0 1.487 1.051 2.7 2.34 2.7v2.7c-1.289 0-2.34 1.213-2.34 2.7v6.75c0 1.487-1.051 2.7-2.34 2.7h-3.51v-2.7h3.51v-6.75c0-1.619.635-3.059 1.618-4.05-.983-.991-1.618-2.431-1.618-4.05V16.2h-3.51v-2.7h3.51c1.289 0 2.34 1.213 2.34 2.7M21.8 34.531q.7-.569.959-1.758l1.788-8.34h1.585l.387-1.828h-1.585l.405-1.878h1.585l.387-1.827H25.69q-1.271 0-1.972.569-.681.569-.94 1.758l-.294 1.378H21.34l-.387 1.827h1.142l-1.898 8.841h-1.585l-.387 1.827h1.622q1.272 0 1.953-.569m7.248-7.686-3.797 4.808h2.599l2.12-3.016h.22l.885 3.016h2.599l-1.677-4.36 3.778-4.688h-2.599l-2.12 2.947h-.22l-.885-2.947h-2.599z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$f;\nfunction _extends$f() { _extends$f = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$f.apply(this, arguments); }\nvar SvgTextfield = function SvgTextfield(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$f({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$f || (_path$f = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1m-32 4v10h-2V22z\"\n  })));\n};\n\nvar _path$e;\nfunction _extends$e() { _extends$e = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$e.apply(this, arguments); }\nvar SvgTextarea = function SvgTextarea(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$e({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$e || (_path$e = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M45 13a3 3 0 0 1 3 3v22a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V16a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V16a1 1 0 0 0-1-1m-1.136 15.5.849.849-6.364 6.364-.849-.849zm.264 3.5.849.849-2.828 2.828-.849-.849zM13 19v10h-2V19z\"\n  })));\n};\n\nvar _path$d;\nfunction _extends$d() { _extends$d = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$d.apply(this, arguments); }\nvar SvgIFrame = function SvgIFrame(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$d({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"none\"\n  }, props), _path$d || (_path$d = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    d: \"M45.658 9.45c1.625 0 2.942 1.36 2.942 3.039V22.95h-1.961v-4.383H7.36V41.51c0 .56.44 1.013.98 1.013H27v2.026H8.342c-1.625 0-2.942-1.36-2.942-3.039V12.489c0-1.678 1.317-3.039 2.942-3.039zm0 2.026H8.342c-.542 0-.98.454-.98 1.013v4.052h39.277v-4.052c0-.56-.44-1.013-.98-1.013ZM31.05 35.775A8.77 8.77 0 0 1 39.825 27a8.77 8.77 0 0 1 8.775 8.775 8.77 8.77 0 0 1-8.775 8.775 8.77 8.77 0 0 1-8.775-8.775m12.388-.516h3.097c-.206-2.581-1.858-4.646-4.026-5.678.62 1.548.93 3.613.93 5.678Zm-5.162 2.065c.207 3.303 1.136 4.955 1.549 5.161.413-.206 1.239-1.858 1.445-5.161zm1.446-8.26c-.31.207-1.342 2.272-1.446 6.195h2.994c-.103-3.923-1.135-5.988-1.548-6.194Zm-3.51 6.195c.103-2.065.31-4.13.929-5.678-2.168 1.032-3.82 3.097-4.026 5.678zm0 2.065h-2.89c.515 2.064 1.96 3.82 3.819 4.645-.516-1.342-.826-2.994-.93-4.645Zm7.226 0q-.155 2.632-.929 4.645c1.858-.826 3.304-2.58 3.923-4.645z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$c, _path2$1;\nfunction _extends$c() { _extends$c = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$c.apply(this, arguments); }\nvar SvgImage = function SvgImage(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$c({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 54,\n    height: 54,\n    fill: \"currentcolor\"\n  }, props), _path$c || (_path$c = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M34.636 21.91A3.818 3.818 0 1 1 27 21.908a3.818 3.818 0 0 1 7.636 0Zm-2 0A1.818 1.818 0 1 1 29 21.908a1.818 1.818 0 0 1 3.636 0Z\",\n    clipRule: \"evenodd\"\n  })), _path2$1 || (_path2$1 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M15 13a2 2 0 0 0-2 2v24a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V15a2 2 0 0 0-2-2zm24 2H15v12.45l4.71-4.709a1.91 1.91 0 0 1 2.702 0l6.695 6.695 2.656-1.77a1.91 1.91 0 0 1 2.411.239L39 32.73zM15 39v-8.754a1 1 0 0 0 .168-.135l5.893-5.893 6.684 6.685a1.91 1.91 0 0 0 2.41.238l2.657-1.77 6.02 6.02q.078.077.168.135V39z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$b;\nfunction _extends$b() { _extends$b = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$b.apply(this, arguments); }\nvar SvgTable = function SvgTable(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$b({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 54 54\"\n  }, props), _path$b || (_path$b = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    fillRule: \"evenodd\",\n    d: \"M42.545 12.273A2.455 2.455 0 0 1 45 14.727v24.546a2.455 2.455 0 0 1-2.455 2.454h-31.09A2.455 2.455 0 0 1 9 39.273V14.727a2.455 2.455 0 0 1 2.455-2.454zM27.818 40.09h14.727a.82.82 0 0 0 .819-.818v-4.91H27.818Zm-1.636-5.727v5.727H11.455a.82.82 0 0 1-.819-.818v-4.91zm1.636-1.637h15.546V27H27.818ZM26.182 27v5.727H10.636V27zm1.636-1.636h15.546v-5.728H27.818Zm-1.636-5.728v5.728H10.636v-5.728z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nconst iconsByType = type => {\n  return {\n    button: SvgButton,\n    checkbox: SvgCheckbox,\n    checklist: SvgChecklist,\n    columns: SvgGroup,\n    datetime: SvgDatetime,\n    group: SvgGroup,\n    iframe: SvgIFrame,\n    image: SvgImage,\n    number: SvgNumber,\n    expression: SvgExpressionField,\n    radio: SvgRadio,\n    select: SvgSelect,\n    separator: SvgSeparator,\n    spacer: SvgSpacer,\n    dynamiclist: SvgDynamicList,\n    taglist: SvgTaglist,\n    text: SvgText,\n    html: SvgHtml,\n    textfield: SvgTextfield,\n    textarea: SvgTextarea,\n    table: SvgTable,\n    default: SvgForm\n  }[type];\n};\n\nconst type$c = 'image';\nfunction Image(props) {\n  const {\n    field\n  } = props;\n  const {\n    alt,\n    id,\n    source\n  } = field;\n  const Icon = iconsByType(field.type);\n  const evaluatedImageSource = useSingleLineTemplateEvaluation(source, {\n    debug: true\n  });\n  const safeSource = useMemo(() => sanitizeImageSource(evaluatedImageSource), [evaluatedImageSource]);\n  const altText = useSingleLineTemplateEvaluation(alt, {\n    debug: true\n  });\n  const {\n    formId\n  } = useContext(FormContext);\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$c),\n    children: [safeSource && jsx(\"div\", {\n      class: \"fjs-image-container\",\n      children: jsx(\"img\", {\n        alt: altText,\n        src: safeSource,\n        class: \"fjs-image\",\n        id: prefixId(id, formId)\n      })\n    }), !safeSource && jsx(\"div\", {\n      class: \"fjs-image-placeholder\",\n      children: jsx(\"span\", {\n        class: \"fjs-image-placeholder-inner\",\n        children: jsx(Icon, {\n          alt: \"This is an image placeholder\",\n          width: \"32\",\n          height: \"32\",\n          viewBox: \"0 0 56 56\"\n        })\n      })\n    })]\n  });\n}\nImage.config = {\n  type: type$c,\n  keyed: false,\n  label: 'Image view',\n  group: 'presentation',\n  create: (options = {}) => ({\n    ...options\n  })\n};\n\nfunction TemplatedInputAdorner(props) {\n  const {\n    pre,\n    post\n  } = props;\n  const evaluatedPre = useSingleLineTemplateEvaluation(pre, {\n    debug: true\n  });\n  const evaluatedPost = useSingleLineTemplateEvaluation(post, {\n    debug: true\n  });\n  return jsx(InputAdorner, {\n    ...props,\n    pre: evaluatedPre,\n    post: evaluatedPost\n  });\n}\n\nvar _path$a;\nfunction _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$a.apply(this, arguments); }\nvar SvgAngelDown = function SvgAngelDown(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$a({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 8,\n    height: 8\n  }, props), _path$a || (_path$a = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    stroke: \"currentColor\",\n    strokeWidth: 0.5,\n    d: \"M7.75 1.336 4 6.125.258 1.335 0 1.54l4 5.125L8 1.54Zm0 0\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$9;\nfunction _extends$9() { _extends$9 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$9.apply(this, arguments); }\nvar SvgAngelUp = function SvgAngelUp(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$9({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 8,\n    height: 8\n  }, props), _path$9 || (_path$9 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    stroke: \"currentColor\",\n    strokeWidth: 0.5,\n    d: \"M7.75 6.664 4 1.875.258 6.665 0 6.46l4-5.125L8 6.46Zm0 0\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nfunction countDecimals(number) {\n  const num = Big(number);\n  if (num.toString() === num.toFixed(0)) return 0;\n  return num.toFixed().split('.')[1].length || 0;\n}\nfunction isValidNumber(value) {\n  return (typeof value === 'number' || typeof value === 'string') && value !== '' && !isNaN(Number(value));\n}\nfunction willKeyProduceValidNumber(key, previousValue, caretIndex, selectionWidth, decimalDigits) {\n  if (previousValue === 'NaN') {\n    return false;\n  }\n\n  // Dot and comma are both treated as dot\n  previousValue = previousValue.replace(',', '.');\n  const isFirstDot = !previousValue.includes('.') && (key === '.' || key === ',');\n  const isFirstMinus = !previousValue.includes('-') && key === '-' && caretIndex === 0;\n  const keypressIsNumeric = /^[0-9]$/i.test(key);\n  const dotIndex = previousValue === undefined ? -1 : previousValue.indexOf('.');\n\n  // If the caret is positioned after a dot, and the current decimal digits count is equal or greater to the maximum, disallow the key press\n  const overflowsDecimalSpace = typeof decimalDigits === 'number' && selectionWidth === 0 && dotIndex !== -1 && previousValue.includes('.') && previousValue.split('.')[1].length >= decimalDigits && caretIndex > dotIndex;\n  const keypressIsAllowedChar = keypressIsNumeric || decimalDigits !== 0 && isFirstDot || isFirstMinus;\n  return keypressIsAllowedChar && !overflowsDecimalSpace;\n}\nfunction isNullEquivalentValue(value) {\n  return value === undefined || value === null || value === '';\n}\n\nconst type$b = 'number';\nfunction Numberfield(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    value,\n    readonly\n  } = props;\n  const {\n    description,\n    label,\n    appearance = {},\n    validate = {},\n    decimalDigits,\n    increment: incrementValue\n  } = field;\n  const {\n    prefixAdorner,\n    suffixAdorner\n  } = appearance;\n  const {\n    required\n  } = validate;\n  const inputRef = useRef();\n  const [cachedValue, setCachedValue] = useState(value);\n  const [displayValue, setDisplayValue] = useState(value);\n  const sanitize = useCallback(value => Numberfield.config.sanitizeValue({\n    value,\n    formField: field\n  }), [field]);\n  const [debouncedOnChange, flushOnChange] = useFlushDebounce(props.onChange);\n  const previousCachedValue = usePrevious(value);\n  if (previousCachedValue !== cachedValue) {\n    debouncedOnChange({\n      field,\n      value: cachedValue\n    });\n  }\n  const onInputBlur = () => {\n    flushOnChange && flushOnChange();\n    onBlur && onBlur();\n  };\n  const onInputFocus = () => {\n    onFocus && onFocus();\n  };\n\n  // all value changes must go through this function\n  const setValue = useCallback(stringValue => {\n    if (isNullEquivalentValue(stringValue)) {\n      setDisplayValue('');\n      setCachedValue(null);\n      return;\n    }\n\n    // converts automatically for countries where the comma is used as a decimal separator\n    stringValue = stringValue.replaceAll(',', '.');\n    if (stringValue === '-') {\n      setDisplayValue('-');\n      return;\n    }\n\n    // provides feedback for invalid numbers entered via pasting as opposed to just ignoring the paste\n    if (isNaN(Number(stringValue))) {\n      setDisplayValue('NaN');\n      setCachedValue(null);\n      return;\n    }\n    setDisplayValue(stringValue);\n    setCachedValue(sanitize(stringValue));\n  }, [sanitize]);\n\n  // when external changes occur independently of the input, we update the display and cache values of the component\n  const previousValue = usePrevious(value);\n  const outerValueChanged = previousValue != value;\n  const outerValueEqualsCache = sanitize(value) === sanitize(cachedValue);\n  if (outerValueChanged && !outerValueEqualsCache) {\n    setValue(value && value.toString() || '');\n  }\n\n  // caches the value an increment/decrement operation will be based on\n  const incrementAmount = useMemo(() => {\n    if (incrementValue) return Big(incrementValue);\n    if (decimalDigits) return Big(`1e-${decimalDigits}`);\n    return Big('1');\n  }, [decimalDigits, incrementValue]);\n  const increment = () => {\n    if (readonly) {\n      return;\n    }\n    const base = isValidNumber(cachedValue) ? Big(cachedValue) : Big(0);\n    const stepFlooredValue = base.minus(base.mod(incrementAmount));\n\n    // note: toFixed() behaves differently in big.js\n    setValue(stepFlooredValue.plus(incrementAmount).toFixed());\n  };\n  const decrement = () => {\n    if (readonly) {\n      return;\n    }\n    const base = isValidNumber(cachedValue) ? Big(cachedValue) : Big(0);\n    const offset = base.mod(incrementAmount);\n    if (offset.cmp(0) === 0) {\n      // if we're already on a valid step, decrement\n      setValue(base.minus(incrementAmount).toFixed());\n    } else {\n      // otherwise floor to the step\n      const stepFlooredValue = base.minus(base.mod(incrementAmount));\n      setValue(stepFlooredValue.toFixed());\n    }\n  };\n  const onKeyDown = e => {\n    // delete the NaN state all at once on backspace or delete\n    if (displayValue === 'NaN' && (e.code === 'Backspace' || e.code === 'Delete')) {\n      setValue('');\n      e.preventDefault();\n      return;\n    }\n    if (e.code === 'ArrowUp') {\n      increment();\n      e.preventDefault();\n      return;\n    }\n    if (e.code === 'ArrowDown') {\n      decrement();\n      e.preventDefault();\n      return;\n    }\n  };\n\n  // intercept key presses which would lead to an invalid number\n  const onKeyPress = e => {\n    const caretIndex = inputRef.current.selectionStart;\n    const selectionWidth = inputRef.current.selectionStart - inputRef.current.selectionEnd;\n    const previousValue = inputRef.current.value;\n    if (!willKeyProduceValidNumber(e.key, previousValue, caretIndex, selectionWidth, decimalDigits)) {\n      e.preventDefault();\n    }\n  };\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$b, {\n      errors,\n      disabled,\n      readonly\n    }),\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      required: required\n    }), jsx(TemplatedInputAdorner, {\n      disabled: disabled,\n      readonly: readonly,\n      pre: prefixAdorner,\n      post: suffixAdorner,\n      children: jsxs(\"div\", {\n        class: classNames('fjs-vertical-group', {\n          'fjs-disabled': disabled,\n          'fjs-readonly': readonly\n        }, {\n          hasErrors: errors.length\n        }),\n        children: [jsx(\"input\", {\n          ref: inputRef,\n          class: \"fjs-input\",\n          disabled: disabled,\n          readOnly: readonly,\n          id: domId,\n          onKeyDown: onKeyDown,\n          onKeyPress: onKeyPress,\n          onBlur: onInputBlur,\n          onFocus: onInputFocus\n          // @ts-ignore\n          ,\n          onInput: e => setValue(e.target.value, true),\n          onPaste: e => displayValue === 'NaN' && e.preventDefault(),\n          type: \"text\",\n          autoComplete: \"off\",\n          step: incrementAmount,\n          value: displayValue,\n          \"aria-describedby\": [descriptionId, errorMessageId].join(' '),\n          required: required,\n          \"aria-invalid\": errors.length > 0\n        }), jsxs(\"div\", {\n          class: classNames('fjs-number-arrow-container', {\n            'fjs-disabled': disabled,\n            'fjs-readonly': readonly\n          }),\n          children: [jsx(\"button\", {\n            type: \"button\",\n            class: \"fjs-number-arrow-up\",\n            \"aria-label\": \"Increment\",\n            onClick: () => increment(),\n            tabIndex: -1,\n            children: jsx(SvgAngelUp, {})\n          }), jsx(\"div\", {\n            class: \"fjs-number-arrow-separator\"\n          }), jsx(\"button\", {\n            type: \"button\",\n            class: \"fjs-number-arrow-down\",\n            \"aria-label\": \"Decrement\",\n            onClick: () => decrement(),\n            tabIndex: -1,\n            children: jsx(SvgAngelDown, {})\n          })]\n        })]\n      })\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nNumberfield.config = {\n  type: type$b,\n  keyed: true,\n  label: 'Number',\n  group: 'basic-input',\n  emptyValue: null,\n  sanitizeValue: ({\n    value,\n    formField\n  }) => {\n    // invalid value types are sanitized to null\n    if (isNullEquivalentValue(value) || !isValidNumber(value)) return null;\n\n    // otherwise, we return a string or a number depending on the form field configuration\n    return formField.serializeToString ? value.toString() : Number(value);\n  },\n  create: (options = {}) => ({\n    ...options\n  })\n};\n\nconst type$a = 'radio';\nfunction Radio(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value\n  } = props;\n  const {\n    description,\n    label,\n    validate = {}\n  } = field;\n  const outerDivRef = useRef();\n  const {\n    required\n  } = validate;\n  const onChange = v => {\n    props.onChange({\n      value: v\n    });\n  };\n  const onRadioBlur = e => {\n    if (outerDivRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onBlur && onBlur();\n  };\n  const onRadioFocus = e => {\n    if (outerDivRef.current.contains(e.relatedTarget)) {\n      return;\n    }\n    onFocus && onFocus();\n  };\n  const {\n    loadState,\n    options\n  } = useOptionsAsync(field);\n  useCleanupSingleSelectValue({\n    field,\n    loadState,\n    options,\n    value,\n    onChange: props.onChange\n  });\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$a, {\n      errors,\n      disabled,\n      readonly\n    }),\n    ref: outerDivRef,\n    children: [jsx(Label, {\n      label: label,\n      required: required\n    }), loadState == LOAD_STATES.LOADED && options.map((option, index) => {\n      const itemDomId = `${domId}-${index}`;\n      const isChecked = isEqual(option.value, value);\n      return jsx(Label, {\n        htmlFor: itemDomId,\n        label: option.label,\n        class: classNames({\n          'fjs-checked': isChecked\n        }),\n        required: false,\n        children: jsx(\"input\", {\n          checked: isChecked,\n          class: \"fjs-input\",\n          disabled: disabled,\n          readOnly: readonly,\n          id: itemDomId,\n          type: \"radio\",\n          onClick: () => onChange(option.value),\n          onBlur: onRadioBlur,\n          onFocus: onRadioFocus,\n          \"aria-describedby\": [descriptionId, errorMessageId].join(' '),\n          required: required,\n          \"aria-invalid\": errors.length > 0\n        })\n      }, index);\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nRadio.config = {\n  type: type$a,\n  keyed: true,\n  label: 'Radio group',\n  group: 'selection',\n  emptyValue: null,\n  sanitizeValue: sanitizeSingleSelectValue,\n  create: createEmptyOptions\n};\n\nvar _path$8;\nfunction _extends$8() { _extends$8 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$8.apply(this, arguments); }\nvar SvgXMark = function SvgXMark(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$8({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 8,\n    height: 8\n  }, props), _path$8 || (_path$8 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    fillRule: \"evenodd\",\n    stroke: \"currentColor\",\n    strokeWidth: 0.5,\n    d: \"M4 3.766 7.43.336l.234.234L4.234 4l3.43 3.43-.234.234L4 4.234.57 7.664.336 7.43 3.766 4 .336.57.57.336Zm0 0\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nfunction SearchableSelect(props) {\n  const {\n    domId,\n    disabled,\n    errors,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value\n  } = props;\n  const [filter, setFilter] = useState('');\n  const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);\n  const [isFilterActive, setIsFilterActive] = useState(true);\n  const [isEscapeClosed, setIsEscapeClose] = useState(false);\n  const searchbarRef = useRef();\n  const eventBus = useService('eventBus');\n  const {\n    loadState,\n    options\n  } = useOptionsAsync(field);\n  useCleanupSingleSelectValue({\n    field,\n    loadState,\n    options,\n    value,\n    onChange: props.onChange\n  });\n  const getLabelCorrelation = useGetLabelCorrelation(options);\n  const label = useMemo(() => value && getLabelCorrelation(value), [value, getLabelCorrelation]);\n\n  // whenever we change the underlying value, set the label to it\n  useEffect(() => {\n    setFilter(label || '');\n  }, [label]);\n  const filteredOptions = useMemo(() => {\n    if (loadState !== LOAD_STATES.LOADED) {\n      return [];\n    }\n    if (!filter || !isFilterActive) {\n      return options;\n    }\n    return options.filter(o => o.label && o.value && o.label.toLowerCase().includes(filter.toLowerCase()));\n  }, [filter, loadState, options, isFilterActive]);\n  const setValue = useCallback(option => {\n    setFilter(option && option.label || '');\n    props.onChange({\n      value: option && option.value || null\n    });\n  }, [props]);\n  const displayState = useMemo(() => {\n    const ds = {};\n    ds.componentReady = !disabled && !readonly && loadState === LOAD_STATES.LOADED;\n    ds.displayCross = ds.componentReady && value !== null && value !== undefined;\n    ds.displayDropdown = !disabled && !readonly && isDropdownExpanded && !isEscapeClosed;\n    return ds;\n  }, [disabled, isDropdownExpanded, isEscapeClosed, loadState, readonly, value]);\n  const onAngelMouseDown = useCallback(e => {\n    setIsEscapeClose(false);\n    setIsDropdownExpanded(!isDropdownExpanded);\n    const searchbar = searchbarRef.current;\n    isDropdownExpanded ? searchbar.blur() : searchbar.focus();\n    e.preventDefault();\n  }, [isDropdownExpanded]);\n  const onInputChange = ({\n    target\n  }) => {\n    setIsEscapeClose(false);\n    setIsDropdownExpanded(true);\n    setIsFilterActive(true);\n    setFilter(target.value || '');\n    eventBus.fire('formField.search', {\n      formField: field,\n      value: target.value || ''\n    });\n  };\n  const onInputKeyDown = useCallback(keyDownEvent => {\n    switch (keyDownEvent.key) {\n      case 'ArrowUp':\n        keyDownEvent.preventDefault();\n        break;\n      case 'ArrowDown':\n        {\n          if (!isDropdownExpanded) {\n            setIsDropdownExpanded(true);\n            setIsFilterActive(false);\n          }\n          keyDownEvent.preventDefault();\n          break;\n        }\n      case 'Escape':\n        setIsEscapeClose(true);\n        break;\n      case 'Enter':\n        if (isEscapeClosed) {\n          setIsEscapeClose(false);\n        }\n        break;\n    }\n  }, [isDropdownExpanded, isEscapeClosed]);\n  const onInputMouseDown = useCallback(() => {\n    setIsEscapeClose(false);\n    setIsDropdownExpanded(true);\n    setIsFilterActive(false);\n  }, []);\n  const onInputFocus = useCallback(() => {\n    setIsEscapeClose(false);\n    setIsDropdownExpanded(true);\n    onFocus && onFocus();\n  }, [onFocus]);\n  const onInputBlur = useCallback(() => {\n    setIsDropdownExpanded(false);\n    setFilter(label || '');\n    onBlur && onBlur();\n  }, [onBlur, label]);\n  return jsxs(Fragment, {\n    children: [jsxs(\"div\", {\n      class: classNames('fjs-input-group', {\n        disabled: disabled,\n        readonly: readonly\n      }, {\n        hasErrors: errors.length\n      }),\n      children: [jsx(\"input\", {\n        disabled: disabled,\n        readOnly: readonly,\n        class: \"fjs-input\",\n        ref: searchbarRef,\n        id: domId,\n        onChange: onInputChange,\n        type: \"text\",\n        value: filter,\n        placeholder: 'Search',\n        autoComplete: \"off\",\n        onKeyDown: onInputKeyDown,\n        onMouseDown: onInputMouseDown,\n        onFocus: onInputFocus,\n        onBlur: onInputBlur,\n        \"aria-describedby\": props['aria-describedby']\n      }), displayState.displayCross && jsxs(\"span\", {\n        class: \"fjs-select-cross\",\n        onMouseDown: e => {\n          setValue(null);\n          e.preventDefault();\n        },\n        children: [jsx(SvgXMark, {}), ' ']\n      }), jsx(\"span\", {\n        class: \"fjs-select-arrow\",\n        onMouseDown: e => onAngelMouseDown(e),\n        children: displayState.displayDropdown ? jsx(SvgAngelUp, {}) : jsx(SvgAngelDown, {})\n      })]\n    }), jsx(\"div\", {\n      class: \"fjs-select-anchor\",\n      children: displayState.displayDropdown && jsx(DropdownList, {\n        values: filteredOptions,\n        getLabel: o => o.label,\n        onValueSelected: o => {\n          setValue(o);\n          setIsDropdownExpanded(false);\n        },\n        listenerElement: searchbarRef.current\n      })\n    })]\n  });\n}\n\nfunction SimpleSelect(props) {\n  const {\n    domId,\n    disabled,\n    errors,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value\n  } = props;\n  const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);\n  const selectRef = useRef();\n  const inputRef = useRef();\n  const {\n    loadState,\n    options\n  } = useOptionsAsync(field);\n  useCleanupSingleSelectValue({\n    field,\n    loadState,\n    options,\n    value,\n    onChange: props.onChange\n  });\n  const getLabelCorrelation = useGetLabelCorrelation(options);\n  const valueLabel = useMemo(() => value && getLabelCorrelation(value), [value, getLabelCorrelation]);\n  const setValue = useCallback(option => {\n    props.onChange({\n      value: option && option.value || null\n    });\n  }, [props]);\n  const displayState = useMemo(() => {\n    const ds = {};\n    ds.componentReady = !disabled && !readonly && loadState === LOAD_STATES.LOADED;\n    ds.displayCross = ds.componentReady && value !== null && value !== undefined;\n    ds.displayDropdown = !disabled && !readonly && isDropdownExpanded;\n    return ds;\n  }, [disabled, isDropdownExpanded, loadState, readonly, value]);\n  const onMouseDown = useCallback(e => {\n    const input = inputRef.current;\n    if (disabled || !input) {\n      return;\n    }\n    setIsDropdownExpanded(!isDropdownExpanded);\n    if (isDropdownExpanded) {\n      input.blur();\n    } else {\n      input.focus();\n    }\n    e.preventDefault();\n  }, [disabled, isDropdownExpanded]);\n  const initialFocusIndex = useMemo(() => value && findIndex(options, o => o.value === value) || 0, [options, value]);\n  const onInputFocus = useCallback(() => {\n    if (!readonly) {\n      setIsDropdownExpanded(true);\n      onFocus && onFocus();\n    }\n  }, [onFocus, readonly]);\n  const onInputBlur = useCallback(() => {\n    if (!readonly) {\n      setIsDropdownExpanded(false);\n      onBlur && onBlur();\n    }\n  }, [onBlur, readonly]);\n  return jsxs(Fragment, {\n    children: [jsxs(\"div\", {\n      ref: selectRef,\n      class: classNames('fjs-input-group', {\n        disabled,\n        readonly\n      }, {\n        hasErrors: errors.length\n      }),\n      onFocus: onInputFocus,\n      onBlur: onInputBlur,\n      onMouseDown: onMouseDown,\n      children: [jsx(\"div\", {\n        class: classNames('fjs-select-display', {\n          'fjs-select-placeholder': !value\n        }),\n        id: `${domId}-display`,\n        children: valueLabel || 'Select'\n      }), !disabled && jsx(\"input\", {\n        ref: inputRef,\n        id: domId,\n        class: \"fjs-select-hidden-input\",\n        value: valueLabel,\n        onFocus: onInputFocus,\n        onBlur: onInputBlur,\n        \"aria-describedby\": props['aria-describedby']\n      }), displayState.displayCross && jsx(\"span\", {\n        class: \"fjs-select-cross\",\n        onMouseDown: e => {\n          setValue(null);\n          e.stopPropagation();\n        },\n        children: jsx(SvgXMark, {})\n      }), jsx(\"span\", {\n        class: \"fjs-select-arrow\",\n        children: displayState.displayDropdown ? jsx(SvgAngelUp, {}) : jsx(SvgAngelDown, {})\n      })]\n    }), jsx(\"div\", {\n      class: \"fjs-select-anchor\",\n      children: displayState.displayDropdown && jsx(DropdownList, {\n        values: options,\n        getLabel: o => o.label,\n        initialFocusIndex: initialFocusIndex,\n        onValueSelected: o => {\n          setValue(o);\n          setIsDropdownExpanded(false);\n        },\n        listenerElement: selectRef.current\n      })\n    })]\n  });\n}\n\nconst type$9 = 'select';\nfunction Select(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    onChange,\n    readonly,\n    value\n  } = props;\n  const {\n    description,\n    label,\n    searchable = false,\n    validate = {}\n  } = field;\n  const {\n    required\n  } = validate;\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  const selectProps = {\n    domId,\n    disabled,\n    errors,\n    onBlur,\n    onFocus,\n    field,\n    value,\n    onChange,\n    readonly,\n    required,\n    'aria-invalid': errors.length > 0,\n    'aria-describedby': [descriptionId, errorMessageId].join(' ')\n  };\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$9, {\n      errors,\n      disabled,\n      readonly\n    }),\n    onKeyDown: event => {\n      if (event.key === 'Enter') {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    },\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      required: required\n    }), searchable ? jsx(SearchableSelect, {\n      ...selectProps\n    }) : jsx(SimpleSelect, {\n      ...selectProps\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nSelect.config = {\n  type: type$9,\n  keyed: true,\n  label: 'Select',\n  group: 'selection',\n  emptyValue: null,\n  sanitizeValue: sanitizeSingleSelectValue,\n  create: createEmptyOptions\n};\n\nconst type$8 = 'separator';\nfunction Separator() {\n  return jsx(\"div\", {\n    class: formFieldClasses(type$8),\n    children: jsx(\"hr\", {})\n  });\n}\nSeparator.config = {\n  type: type$8,\n  keyed: false,\n  label: 'Separator',\n  group: 'presentation',\n  create: (options = {}) => ({\n    ...options\n  })\n};\n\nconst type$7 = 'spacer';\nfunction Spacer(props) {\n  const {\n    field\n  } = props;\n  const {\n    height = 60\n  } = field;\n  return jsx(\"div\", {\n    class: formFieldClasses(type$7),\n    style: {\n      height: height\n    }\n  });\n}\nSpacer.config = {\n  type: type$7,\n  keyed: false,\n  label: 'Spacer',\n  group: 'presentation',\n  create: (options = {}) => ({\n    height: 60,\n    ...options\n  })\n};\n\nfunction DynamicList(props) {\n  const {\n    field,\n    domId,\n    readonly\n  } = props;\n  const {\n    label,\n    type,\n    showOutline\n  } = field;\n  const {\n    Empty\n  } = useContext(FormRenderContext);\n  const fullProps = {\n    ...props,\n    Empty\n  };\n  return jsxs(\"div\", {\n    className: classNames(formFieldClasses(type, {\n      readonly\n    }), 'fjs-form-field-grouplike', {\n      'fjs-outlined': showOutline\n    }),\n    role: \"group\",\n    \"aria-labelledby\": domId,\n    children: [jsx(Label, {\n      id: domId,\n      label: label\n    }), jsx(ChildrenRenderer, {\n      ...fullProps\n    })]\n  });\n}\nDynamicList.config = {\n  type: 'dynamiclist',\n  pathed: true,\n  repeatable: true,\n  label: 'Dynamic list',\n  group: 'container',\n  create: (options = {}) => ({\n    components: [],\n    showOutline: true,\n    isRepeating: true,\n    allowAddRemove: true,\n    defaultRepetitions: 1,\n    ...options\n  })\n};\n\nfunction SkipLink(props) {\n  const {\n    className,\n    label,\n    onSkip\n  } = props;\n  const onKeyDown = useCallback(event => {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      onSkip();\n    }\n  }, [onSkip]);\n  return jsx(\"a\", {\n    href: \"#\",\n    class: classNames('fjs-skip-link', className),\n    onKeyDown: onKeyDown,\n    children: label\n  });\n}\n\nconst type$6 = 'taglist';\nfunction Taglist(props) {\n  const {\n    disabled,\n    errors = [],\n    onFocus,\n    domId,\n    onBlur,\n    field,\n    readonly,\n    value\n  } = props;\n  const {\n    description,\n    label,\n    validate = {}\n  } = field;\n  const {\n    required\n  } = validate;\n  const [filter, setFilter] = useState('');\n  const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);\n  const [isEscapeClosed, setIsEscapeClose] = useState(false);\n  const focusScopeRef = useRef();\n  const inputRef = useRef();\n  const eventBus = useService('eventBus');\n  const {\n    loadState,\n    options\n  } = useOptionsAsync(field);\n\n  // ensures we render based on array content instead of reference\n  const values = useDeepCompareMemoize(value || []);\n  useCleanupMultiSelectValue({\n    field,\n    loadState,\n    options,\n    values,\n    onChange: props.onChange\n  });\n  const getLabelCorrelation = useGetLabelCorrelation(options);\n  const hasOptionsLeft = useMemo(() => options.length > values.length, [options.length, values.length]);\n  const filteredOptions = useMemo(() => {\n    if (loadState !== LOAD_STATES.LOADED) {\n      return [];\n    }\n    const isValidFilteredOption = option => {\n      const filterMatches = option.label.toLowerCase().includes(filter.toLowerCase());\n      return filterMatches && !hasEqualValue(option.value, values);\n    };\n    return options.filter(isValidFilteredOption);\n  }, [filter, options, values, loadState]);\n  const selectValue = value => {\n    setFilter('');\n\n    // Ensure values cannot be double selected due to latency\n    if (values.at(-1) === value) {\n      return;\n    }\n    props.onChange({\n      value: [...values, value]\n    });\n  };\n  const deselectValue = value => {\n    const newValues = values.filter(v => !isEqual(v, value));\n    props.onChange({\n      value: newValues\n    });\n  };\n  const onInputChange = ({\n    target\n  }) => {\n    setIsEscapeClose(false);\n    setFilter(target.value || '');\n    eventBus.fire('formField.search', {\n      formField: field,\n      value: target.value || ''\n    });\n  };\n  const onInputKeyDown = e => {\n    switch (e.key) {\n      case 'ArrowUp':\n      case 'ArrowDown':\n        // We do not want the cursor to seek in the search field when we press up and down\n        e.preventDefault();\n        break;\n      case 'Backspace':\n        if (!filter && values.length) {\n          deselectValue(values[values.length - 1]);\n        }\n        break;\n      case 'Escape':\n        setIsEscapeClose(true);\n        break;\n      case 'Enter':\n        if (isEscapeClosed) {\n          setIsEscapeClose(false);\n        }\n        break;\n    }\n  };\n  const onElementBlur = e => {\n    if (focusScopeRef.current.contains(e.relatedTarget)) return;\n    onBlur && onBlur();\n  };\n  const onElementFocus = e => {\n    if (focusScopeRef.current.contains(e.relatedTarget)) return;\n    onFocus && onFocus();\n  };\n  const onInputBlur = e => {\n    if (!readonly) {\n      setIsDropdownExpanded(false);\n      setFilter('');\n    }\n    onElementBlur(e);\n  };\n  const onInputFocus = e => {\n    if (!readonly) {\n      setIsDropdownExpanded(true);\n    }\n    onElementFocus(e);\n  };\n  const onTagRemoveClick = (event, value) => {\n    const {\n      target\n    } = event;\n    deselectValue(value);\n\n    // restore focus if there is no next sibling to focus\n    const nextTag = target.closest('.fjs-taglist-tag').nextSibling;\n    if (!nextTag) {\n      inputRef.current.focus();\n    }\n  };\n  const onSkipToSearch = () => {\n    inputRef.current.focus();\n  };\n  const shouldDisplayDropdown = useMemo(() => !disabled && loadState === LOAD_STATES.LOADED && isDropdownExpanded && !isEscapeClosed, [disabled, isDropdownExpanded, isEscapeClosed, loadState]);\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    ref: focusScopeRef,\n    class: formFieldClasses(type$6, {\n      errors,\n      disabled,\n      readonly\n    }),\n    onKeyDown: event => {\n      if (event.key === 'Enter') {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    },\n    children: [jsx(Label, {\n      label: label,\n      required: required,\n      htmlFor: domId\n    }), !disabled && !readonly && !!values.length && jsx(SkipLink, {\n      className: \"fjs-taglist-skip-link\",\n      label: \"Skip to search\",\n      onSkip: onSkipToSearch\n    }), jsxs(\"div\", {\n      class: classNames('fjs-taglist', {\n        'fjs-disabled': disabled,\n        'fjs-readonly': readonly\n      }),\n      children: [loadState === LOAD_STATES.LOADED && jsx(\"div\", {\n        class: \"fjs-taglist-tags\",\n        children: values.map(v => {\n          return jsxs(\"div\", {\n            class: classNames('fjs-taglist-tag', {\n              'fjs-disabled': disabled,\n              'fjs-readonly': readonly\n            }),\n            onMouseDown: e => e.preventDefault(),\n            children: [jsx(\"span\", {\n              class: \"fjs-taglist-tag-label\",\n              children: getLabelCorrelation(v)\n            }), !disabled && !readonly && jsx(\"button\", {\n              type: \"button\",\n              title: \"Remove tag\",\n              class: \"fjs-taglist-tag-remove\",\n              onFocus: onElementFocus,\n              onBlur: onElementBlur,\n              onClick: event => onTagRemoveClick(event, v),\n              children: jsx(SvgXMark, {})\n            })]\n          });\n        })\n      }), jsx(\"input\", {\n        disabled: disabled,\n        readOnly: readonly,\n        class: \"fjs-taglist-input\",\n        ref: inputRef,\n        id: domId,\n        onChange: onInputChange,\n        type: \"text\",\n        value: filter,\n        placeholder: disabled || readonly ? undefined : 'Search',\n        autoComplete: \"off\",\n        onKeyDown: onInputKeyDown,\n        onMouseDown: () => setIsEscapeClose(false),\n        onFocus: onInputFocus,\n        onBlur: onInputBlur,\n        \"aria-describedby\": [descriptionId, errorMessageId].join(' '),\n        required: required,\n        \"aria-invalid\": errors.length > 0\n      })]\n    }), jsx(\"div\", {\n      class: \"fjs-taglist-anchor\",\n      children: shouldDisplayDropdown && jsx(DropdownList, {\n        values: filteredOptions,\n        getLabel: o => o.label,\n        onValueSelected: o => selectValue(o.value),\n        emptyListMessage: hasOptionsLeft ? 'No results' : 'All values selected',\n        listenerElement: inputRef.current\n      })\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nTaglist.config = {\n  type: type$6,\n  keyed: true,\n  label: 'Tag list',\n  group: 'selection',\n  emptyValue: [],\n  sanitizeValue: sanitizeMultiSelectValue,\n  create: createEmptyOptions\n};\n\nconst NODE_TYPE_TEXT = 3,\n  NODE_TYPE_ELEMENT = 1;\nconst ALLOWED_NODES = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'em', 'a', 'p', 'div', 'ul', 'ol', 'li', 'hr', 'blockquote', 'img', 'pre', 'code', 'br', 'strong', 'table', 'thead', 'tbody', 'tr', 'th', 'td'];\nconst ALLOWED_ATTRIBUTES = ['align', 'alt', 'class', 'href', 'id', 'name', 'rel', 'target', 'src'];\nconst ALLOWED_URI_PATTERN = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst ATTR_WHITESPACE_PATTERN = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g; // eslint-disable-line no-control-regex\n\nconst FORM_ELEMENT = document.createElement('form');\n\n/**\n * Sanitize a HTML string and return the cleaned, safe version.\n *\n * @param {string} html\n * @return {string}\n */\n\n// see https://github.com/developit/snarkdown/issues/70\nfunction sanitizeHTML(html) {\n  const doc = new DOMParser().parseFromString(`<!DOCTYPE html>\\n<html><body><div>${html}`, 'text/html');\n  doc.normalize();\n  const element = doc.body.firstChild;\n  if (element) {\n    sanitizeNode( /** @type Element */element);\n    return /** @type Element */element.innerHTML;\n  } else {\n    // handle the case that document parsing\n    // does not work at all, due to HTML gibberish\n    return '';\n  }\n}\n\n/**\n * Recursively sanitize a HTML node, potentially\n * removing it, its children or attributes.\n *\n * Inspired by https://github.com/developit/snarkdown/issues/70\n * and https://github.com/cure53/DOMPurify. Simplified\n * for our use-case.\n *\n * @param {Element} node\n */\nfunction sanitizeNode(node) {\n  // allow text nodes\n  if (node.nodeType === NODE_TYPE_TEXT) {\n    return;\n  }\n\n  // disallow all other nodes but Element\n  if (node.nodeType !== NODE_TYPE_ELEMENT) {\n    return node.remove();\n  }\n  const lcTag = node.tagName.toLowerCase();\n\n  // disallow non-whitelisted tags\n  if (!ALLOWED_NODES.includes(lcTag)) {\n    return node.remove();\n  }\n  const attributes = node.attributes;\n\n  // clean attributes\n  for (let i = attributes.length; i--;) {\n    const attribute = attributes[i];\n    const name = attribute.name;\n    const lcName = name.toLowerCase();\n\n    // normalize node value\n    const value = attribute.value.trim();\n    node.removeAttribute(name);\n    const valid = isValidAttribute(lcTag, lcName, value);\n    if (valid) {\n      node.setAttribute(name, value);\n    }\n  }\n\n  // force noopener on target=\"_blank\" links\n  if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\n    node.setAttribute('rel', 'noopener');\n  }\n  for (let i = node.childNodes.length; i--;) {\n    sanitizeNode( /** @type Element */node.childNodes[i]);\n  }\n}\n\n/**\n * Validates attributes for validity.\n *\n * @param {string} lcTag\n * @param {string} lcName\n * @param {string} value\n * @return {boolean}\n */\nfunction isValidAttribute(lcTag, lcName, value) {\n  // disallow most attributes based on whitelist\n  if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\n    return false;\n  }\n\n  // disallow \"DOM clobbering\" / polution of document and wrapping form elements\n  if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\n    return false;\n  }\n  if (lcName === 'target' && value !== '_blank') {\n    return false;\n  }\n\n  // allow valid url links only\n  if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\n    return false;\n  }\n  return true;\n}\n\nconst type$5 = 'text';\nfunction Text(props) {\n  const form = useService('form');\n  const {\n    textLinkTarget\n  } = form._getState().properties;\n  const {\n    field,\n    disableLinks\n  } = props;\n  const {\n    text = '',\n    strict = false\n  } = field;\n  const markdownRenderer = useService('markdownRenderer');\n\n  // feelers => pure markdown\n  const markdown = useTemplateEvaluation(text, {\n    debug: true,\n    strict\n  });\n\n  // markdown => html\n  const html = useMemo(() => markdownRenderer.render(markdown), [markdownRenderer, markdown]);\n  const sanitizeAndTransformLinks = useCallback(unsafeHtml => {\n    const html = sanitizeHTML(unsafeHtml);\n    const tempDiv = document.createElement('div');\n    tempDiv.innerHTML = html;\n    const links = tempDiv.querySelectorAll('a');\n    links.forEach(link => {\n      if (disableLinks) {\n        link.setAttribute('class', 'fjs-disabled-link');\n        link.setAttribute('tabIndex', '-1');\n      }\n      if (textLinkTarget) {\n        link.setAttribute('target', textLinkTarget);\n      }\n    });\n    return tempDiv.innerHTML;\n  }, [disableLinks, textLinkTarget]);\n  const dangerouslySetInnerHTML = useDangerousHTMLWrapper({\n    html,\n    transform: sanitizeAndTransformLinks,\n    sanitize: false,\n    sanitizeStyleTags: false\n  });\n  return jsx(\"div\", {\n    class: formFieldClasses(type$5),\n    dangerouslySetInnerHTML: dangerouslySetInnerHTML\n  });\n}\nText.config = {\n  type: type$5,\n  keyed: false,\n  label: 'Text view',\n  group: 'presentation',\n  create: (options = {}) => ({\n    text: '# Text',\n    ...options\n  })\n};\n\nconst type$4 = 'html';\nfunction Html(props) {\n  const form = useService('form');\n  const {\n    textLinkTarget\n  } = form._getState().properties;\n  const {\n    field,\n    disableLinks,\n    domId\n  } = props;\n  const {\n    content = '',\n    strict = false\n  } = field;\n  const styleScope = `${domId}-style-scope`;\n\n  // we escape HTML within the template evaluation to prevent clickjacking attacks\n  const html = useTemplateEvaluation(content, {\n    debug: true,\n    strict,\n    sanitizer: escapeHTML\n  });\n  const transform = useCallback(html => {\n    const tempDiv = document.createElement('div');\n    tempDiv.innerHTML = html;\n\n    // (1) apply modifications to links\n\n    const links = tempDiv.querySelectorAll('a');\n    links.forEach(link => {\n      if (disableLinks) {\n        link.setAttribute('class', 'fjs-disabled-link');\n        link.setAttribute('tabIndex', '-1');\n      }\n      if (textLinkTarget) {\n        link.setAttribute('target', textLinkTarget);\n      }\n    });\n\n    // (2) scope styles to the root div\n    wrapCSSStyles(tempDiv, `.${styleScope}`);\n    return tempDiv.innerHTML;\n  }, [disableLinks, styleScope, textLinkTarget]);\n  const dangerouslySetInnerHTML = useDangerousHTMLWrapper({\n    html,\n    transform,\n    sanitize: true,\n    sanitizeStyleTags: false\n  });\n  return jsx(\"div\", {\n    class: classNames(formFieldClasses(type$4), styleScope),\n    dangerouslySetInnerHTML: dangerouslySetInnerHTML\n  });\n}\nHtml.config = {\n  type: type$4,\n  keyed: false,\n  label: 'HTML view',\n  group: 'presentation',\n  create: (options = {}) => ({\n    content: '',\n    ...options\n  })\n};\n\nconst type$3 = 'expression';\nfunction ExpressionField(props) {\n  const {\n    field,\n    onChange,\n    value\n  } = props;\n  const {\n    computeOn,\n    expression\n  } = field;\n  const evaluation = useExpressionEvaluation(expression);\n  const evaluationMemo = useDeepCompareMemoize(evaluation);\n  const eventBus = useService('eventBus');\n  const expressionLoopPreventer = useService('expressionLoopPreventer');\n  const sendValue = useCallback(() => {\n    onChange && onChange({\n      field,\n      value: evaluationMemo,\n      shouldNotRecompute: true\n    });\n  }, [field, evaluationMemo, onChange]);\n  useEffect(() => {\n    if (computeOn !== 'change' || isEqual$1(evaluationMemo, value) || !expressionLoopPreventer.registerExpressionExecution(this)) {\n      return;\n    }\n    sendValue();\n  });\n  useEffect(() => {\n    if (computeOn === 'presubmit') {\n      eventBus.on('presubmit', sendValue);\n      return () => eventBus.off('presubmit', sendValue);\n    }\n  }, [computeOn, sendValue, eventBus]);\n  return null;\n}\nExpressionField.config = {\n  type: type$3,\n  label: 'Expression',\n  group: 'basic-input',\n  keyed: true,\n  emptyValue: null,\n  escapeGridRender: true,\n  create: (options = {}) => ({\n    computeOn: 'change',\n    ...options\n  })\n};\n\nconst type$2 = 'textfield';\nfunction Textfield(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value = ''\n  } = props;\n  const {\n    description,\n    label,\n    appearance = {},\n    validate = {}\n  } = field;\n  const {\n    prefixAdorner,\n    suffixAdorner\n  } = appearance;\n  const {\n    required\n  } = validate;\n  const [onInputChange, flushOnChange] = useFlushDebounce(({\n    target\n  }) => {\n    props.onChange({\n      value: target.value\n    });\n  });\n  const onInputBlur = () => {\n    flushOnChange && flushOnChange();\n    onBlur && onBlur();\n  };\n  const onInputFocus = () => {\n    onFocus && onFocus();\n  };\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$2, {\n      errors,\n      disabled,\n      readonly\n    }),\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      required: required\n    }), jsx(TemplatedInputAdorner, {\n      disabled: disabled,\n      readonly: readonly,\n      pre: prefixAdorner,\n      post: suffixAdorner,\n      children: jsx(\"input\", {\n        class: \"fjs-input\",\n        disabled: disabled,\n        readOnly: readonly,\n        id: domId,\n        onInput: onInputChange,\n        onBlur: onInputBlur,\n        onFocus: onInputFocus,\n        type: \"text\",\n        value: value,\n        \"aria-describedby\": [descriptionId, errorMessageId].join(' '),\n        required: required,\n        \"aria-invalid\": errors.length > 0\n      })\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nTextfield.config = {\n  type: type$2,\n  keyed: true,\n  label: 'Text field',\n  group: 'basic-input',\n  emptyValue: '',\n  sanitizeValue: ({\n    value\n  }) => {\n    if (isArray(value) || isObject(value) || isNil(value)) {\n      return '';\n    }\n\n    // sanitize newlines to spaces\n    if (typeof value === 'string') {\n      return value.replace(/[\\r\\n\\t]/g, ' ');\n    }\n    return String(value);\n  },\n  create: (options = {}) => ({\n    ...options\n  })\n};\n\nconst type$1 = 'textarea';\nfunction Textarea(props) {\n  const {\n    disabled,\n    errors = [],\n    domId,\n    onBlur,\n    onFocus,\n    field,\n    readonly,\n    value = ''\n  } = props;\n  const {\n    description,\n    label,\n    validate = {}\n  } = field;\n  const {\n    required\n  } = validate;\n  const textareaRef = useRef();\n  const [onChange, flushOnChange] = useFlushDebounce(({\n    target\n  }) => {\n    props.onChange({\n      value: target.value\n    });\n  });\n  const onInputBlur = () => {\n    flushOnChange && flushOnChange();\n    onBlur && onBlur();\n  };\n  const onInputFocus = () => {\n    onFocus && onFocus();\n  };\n  const onInputChange = event => {\n    onChange({\n      target: event.target\n    });\n    autoSizeTextarea(textareaRef.current);\n  };\n  useLayoutEffect(() => {\n    autoSizeTextarea(textareaRef.current);\n  }, [value]);\n  useEffect(() => {\n    autoSizeTextarea(textareaRef.current);\n  }, []);\n  const descriptionId = `${domId}-description`;\n  const errorMessageId = `${domId}-error-message`;\n  return jsxs(\"div\", {\n    class: formFieldClasses(type$1, {\n      errors,\n      disabled,\n      readonly\n    }),\n    children: [jsx(Label, {\n      htmlFor: domId,\n      label: label,\n      required: required\n    }), jsx(\"textarea\", {\n      class: \"fjs-textarea\",\n      disabled: disabled,\n      readonly: readonly,\n      id: domId,\n      onInput: onInputChange,\n      onBlur: onInputBlur,\n      onFocus: onInputFocus,\n      value: value,\n      ref: textareaRef,\n      \"aria-describedby\": [descriptionId, errorMessageId].join(' '),\n      required: required,\n      \"aria-invalid\": errors.length > 0\n    }), jsx(Description, {\n      id: descriptionId,\n      description: description\n    }), jsx(Errors, {\n      id: errorMessageId,\n      errors: errors\n    })]\n  });\n}\nTextarea.config = {\n  type: type$1,\n  keyed: true,\n  label: 'Text area',\n  group: 'basic-input',\n  emptyValue: '',\n  sanitizeValue: ({\n    value\n  }) => isArray(value) || isObject(value) || isNil(value) ? '' : String(value),\n  create: (options = {}) => ({\n    ...options\n  })\n};\nconst autoSizeTextarea = textarea => {\n  // Ensures the textarea shrinks back, and improves resizing behavior consistency\n  textarea.style.height = '0px';\n  const computed = window.getComputedStyle(textarea);\n  const heightFromLines = () => {\n    const lineHeight = parseInt(computed.getPropertyValue('line-height').replace('px', '')) || 0;\n    const lines = textarea.value ? textarea.value.toString().split('\\n').length : 0;\n    return lines * lineHeight;\n  };\n  const calculatedHeight = parseInt(computed.getPropertyValue('border-top-width')) + parseInt(computed.getPropertyValue('padding-top')) + (textarea.scrollHeight || heightFromLines()) + parseInt(computed.getPropertyValue('padding-bottom')) + parseInt(computed.getPropertyValue('border-bottom-width'));\n  const minHeight = 75;\n  const maxHeight = 350;\n  const displayHeight = Math.max(Math.min(calculatedHeight || 0, maxHeight), minHeight);\n  textarea.style.height = `${displayHeight}px`;\n\n  // Overflow is hidden by default to hide scrollbar flickering\n  textarea.style.overflow = calculatedHeight > maxHeight ? 'visible' : 'hidden';\n};\n\nvar _path$7;\nfunction _extends$7() { _extends$7 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$7.apply(this, arguments); }\nvar SvgArrowDown = function SvgArrowDown(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$7({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 32 32\"\n  }, props), _path$7 || (_path$7 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"M24.59 16.59 17 24.17V4h-2v20.17l-7.59-7.58L6 18l10 10 10-10z\"\n  })));\n};\n\nvar _path$6;\nfunction _extends$6() { _extends$6 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$6.apply(this, arguments); }\nvar SvgArrowUp = function SvgArrowUp(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$6({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 32 32\"\n  }, props), _path$6 || (_path$6 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"M16 4 6 14l1.41 1.41L15 7.83V28h2V7.83l7.59 7.58L26 14z\"\n  })));\n};\n\nvar _path$5;\nfunction _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5.apply(this, arguments); }\nvar SvgCaretLeft = function SvgCaretLeft(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$5({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    xmlSpace: \"preserve\",\n    viewBox: \"0 0 32 32\"\n  }, props), _path$5 || (_path$5 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"m20 24-10-8 10-8z\"\n  })));\n};\n\nvar _path$4;\nfunction _extends$4() { _extends$4 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$4.apply(this, arguments); }\nvar SvgCaretRight = function SvgCaretRight(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$4({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    xmlSpace: \"preserve\",\n    viewBox: \"0 0 32 32\"\n  }, props), _path$4 || (_path$4 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"m12 8 10 8-10 8z\"\n  })));\n};\n\nconst type = 'table';\n\n/**\n * @typedef {('asc'|'desc')} Direction\n *\n * @typedef Sorting\n * @property {string} key\n * @property {Direction} direction\n *\n * @typedef Column\n * @property {string} label\n * @property {string} key\n *\n * @typedef Field\n * @property {string} id\n * @property {Array<Column>} [columns]\n * @property {string} [columnsExpression]\n * @property {string} [label]\n * @property {number} [rowCount]\n * @property {string} [dataSource]\n *\n * @typedef Props\n * @property {Field} field\n *\n * @param {Props} props\n * @returns {import(\"preact\").JSX.Element}\n */\nfunction Table(props) {\n  const {\n    field\n  } = props;\n  const {\n    columns = [],\n    columnsExpression,\n    dataSource = '',\n    rowCount,\n    id,\n    label\n  } = field;\n\n  /** @type {[(null|Sorting), import(\"preact/hooks\").StateUpdater<null|Sorting>]} */\n  const [sortBy, setSortBy] = useState(null);\n  const evaluatedColumns = useEvaluatedColumns(columnsExpression || '', columns);\n  const columnKeys = evaluatedColumns.map(({\n    key\n  }) => key);\n  const evaluatedDataSource = useExpressionEvaluation(dataSource);\n  const data = Array.isArray(evaluatedDataSource) ? evaluatedDataSource.filter(i => i !== undefined) : [];\n  const sortedData = sortBy === null ? data : sortByColumn(data, sortBy.key, sortBy.direction);\n\n  /** @type {unknown[][]} */\n  const chunkedData = isNumber(rowCount) ? chunk(sortedData, rowCount) : [sortedData];\n  const [currentPage, setCurrentPage] = useState(0);\n  const currentChunk = chunkedData[currentPage] || [];\n  useEffect(() => {\n    setCurrentPage(0);\n  }, [rowCount, sortBy]);\n\n  /** @param {string} key */\n  function toggleSortBy(key) {\n    setSortBy(current => {\n      if (current === null || current.key !== key) {\n        return {\n          key,\n          direction: 'asc'\n        };\n      }\n      if (current.direction === 'desc') {\n        return null;\n      }\n      return {\n        key,\n        direction: 'desc'\n      };\n    });\n  }\n  return jsxs(\"div\", {\n    class: formFieldClasses(type),\n    children: [jsx(Label, {\n      htmlFor: prefixId(id),\n      label: label\n    }), jsxs(\"div\", {\n      class: classNames('fjs-table-middle-container', {\n        'fjs-table-empty': evaluatedColumns.length === 0\n      }),\n      children: [evaluatedColumns.length === 0 ? 'Nothing to show.' : jsx(\"div\", {\n        class: \"fjs-table-inner-container\",\n        children: jsxs(\"table\", {\n          class: \"fjs-table\",\n          id: prefixId(id),\n          children: [jsx(\"thead\", {\n            class: \"fjs-table-head\",\n            children: jsx(\"tr\", {\n              class: \"fjs-table-tr\",\n              children: evaluatedColumns.map(({\n                key,\n                label\n              }) => {\n                const displayLabel = label || key;\n                return jsx(\"th\", {\n                  tabIndex: 0,\n                  class: \"fjs-table-th\",\n                  onClick: () => {\n                    toggleSortBy(key);\n                  },\n                  onKeyDown: event => {\n                    if (['Enter', 'Space'].includes(event.code)) {\n                      toggleSortBy(key);\n                    }\n                  },\n                  \"aria-label\": getHeaderAriaLabel(sortBy, key, displayLabel),\n                  children: jsxs(\"span\", {\n                    class: \"fjs-table-th-label\",\n                    children: [displayLabel, sortBy !== null && sortBy.key === key ? jsx(Fragment, {\n                      children: sortBy.direction === 'asc' ? jsx(SvgArrowUp, {\n                        class: \"fjs-table-sort-icon-asc\"\n                      }) : jsx(SvgArrowDown, {\n                        class: \"fjs-table-sort-icon-desc\"\n                      })\n                    }) : null]\n                  })\n                }, key);\n              })\n            })\n          }), currentChunk.length === 0 ? jsx(\"tbody\", {\n            class: \"fjs-table-body\",\n            children: jsx(\"tr\", {\n              class: \"fjs-table-tr\",\n              children: jsx(\"td\", {\n                class: \"fjs-table-td\",\n                colSpan: evaluatedColumns.length,\n                children: \"Nothing to show.\"\n              })\n            })\n          }) : jsx(\"tbody\", {\n            class: \"fjs-table-body\",\n            children: currentChunk.map((row, index) => jsx(\"tr\", {\n              class: \"fjs-table-tr\",\n              children: columnKeys.map(key => jsx(\"td\", {\n                class: \"fjs-table-td\",\n                children: row[key]\n              }, key))\n            }, index))\n          })]\n        })\n      }), isNumber(rowCount) && chunkedData.length > 1 && evaluatedColumns.length > 0 ? jsxs(\"nav\", {\n        class: \"fjs-table-nav\",\n        children: [jsxs(\"span\", {\n          class: \"fjs-table-nav-label\",\n          children: [currentPage + 1, \" of \", chunkedData.length]\n        }), jsx(\"button\", {\n          type: \"button\",\n          class: \"fjs-table-nav-button\",\n          onClick: () => {\n            setCurrentPage(page => Math.max(page - 1, 0));\n          },\n          disabled: currentPage === 0,\n          \"aria-label\": \"Previous page\",\n          children: jsx(SvgCaretLeft, {})\n        }), jsx(\"button\", {\n          type: \"button\",\n          class: \"fjs-table-nav-button\",\n          onClick: () => {\n            setCurrentPage(page => Math.min(page + 1, chunkedData.length - 1));\n          },\n          disabled: currentPage >= chunkedData.length - 1,\n          \"aria-label\": \"Next page\",\n          children: jsx(SvgCaretRight, {})\n        })]\n      }) : null]\n    })]\n  });\n}\nTable.config = {\n  type,\n  keyed: false,\n  label: 'Table',\n  group: 'presentation',\n  create: (options = {}) => {\n    const {\n      id,\n      columnsExpression,\n      columns,\n      rowCount,\n      ...remainingOptions\n    } = options;\n    if (isDefined(id) && isNumber(rowCount)) {\n      remainingOptions['rowCount'] = rowCount;\n    }\n    if (isString(columnsExpression)) {\n      return {\n        ...remainingOptions,\n        id,\n        columnsExpression\n      };\n    }\n    if (Array.isArray(columns) && columns.every(isColumn)) {\n      return {\n        ...remainingOptions,\n        id,\n        columns\n      };\n    }\n    return {\n      ...remainingOptions,\n      rowCount: 10,\n      columns: [{\n        label: 'ID',\n        key: 'id'\n      }, {\n        label: 'Name',\n        key: 'name'\n      }, {\n        label: 'Date',\n        key: 'date'\n      }]\n    };\n  },\n  /**\n   * @experimental\n   *\n   * A function that generates demo data for a new field on the form playground.\n   * @param {Field} field\n   */\n  generateInitialDemoData: field => {\n    const demoData = [{\n      id: 1,\n      name: 'John Doe',\n      date: '31.01.2023'\n    }, {\n      id: 2,\n      name: 'Erika Muller',\n      date: '20.02.2023'\n    }, {\n      id: 3,\n      name: 'Dominic Leaf',\n      date: '11.03.2023'\n    }];\n    const demoDataKeys = Object.keys(demoData[0]);\n    const {\n      columns,\n      id,\n      dataSource\n    } = field;\n    if (!Array.isArray(columns) || columns.length === 0 || dataSource !== `=${id}`) {\n      return;\n    }\n    if (!columns.map(({\n      key\n    }) => key).every(key => demoDataKeys.includes(key))) {\n      return;\n    }\n    return demoData;\n  }\n};\n\n// helpers /////////////////////////////\n\n/**\n * @param {string|void} columnsExpression\n * @param {Column[]} fallbackColumns\n * @returns {Column[]}\n */\nfunction useEvaluatedColumns(columnsExpression, fallbackColumns) {\n  /** @type {Column[]|null} */\n  const evaluation = useExpressionEvaluation(columnsExpression || '');\n  return Array.isArray(evaluation) && evaluation.every(isColumn) ? evaluation : fallbackColumns;\n}\n\n/**\n * @param {any} column\n * @returns {column is Column}\n */\nfunction isColumn(column) {\n  return isObject(column) && isString(column['label']) && isString(column['key']);\n}\n\n/**\n * @param {Array} array\n * @param {number} size\n * @returns {Array}\n */\nfunction chunk(array, size) {\n  return array.reduce((chunks, item, index) => {\n    if (index % size === 0) {\n      chunks.push([item]);\n    } else {\n      chunks[chunks.length - 1].push(item);\n    }\n    return chunks;\n  }, []);\n}\n\n/**\n * @param {unknown[]} array\n * @param {string} key\n * @param {Direction} direction\n * @returns {unknown[]}\n */\nfunction sortByColumn(array, key, direction) {\n  return [...array].sort((a, b) => {\n    if (!isObject(a) || !isObject(b)) {\n      return 0;\n    }\n    if (direction === 'asc') {\n      return a[key] > b[key] ? 1 : -1;\n    }\n    return a[key] < b[key] ? 1 : -1;\n  });\n}\n\n/**\n * @param {null|Sorting} sortBy\n * @param {string} key\n * @param {string} label\n */\nfunction getHeaderAriaLabel(sortBy, key, label) {\n  if (sortBy === null || sortBy.key !== key) {\n    return `Click to sort by ${label} descending`;\n  }\n  if (sortBy.direction === 'asc') {\n    return 'Click to remove sorting';\n  }\n  return `Click to sort by ${label} ascending`;\n}\n\n/**\n * This file must not be changed or exchanged.\n *\n * @see http://bpmn.io/license for more information.\n */\nfunction Logo() {\n  return jsxs(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 14.02 5.57\",\n    width: \"53\",\n    height: \"21\",\n    style: \"vertical-align:middle\",\n    children: [jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M1.88.92v.14c0 .41-.13.68-.4.8.33.14.46.44.46.86v.33c0 .61-.33.95-.95.95H0V0h.95c.65 0 .93.3.93.92zM.63.57v1.06h.24c.24 0 .38-.1.38-.43V.98c0-.28-.1-.4-.32-.4zm0 1.63v1.22h.36c.2 0 .32-.1.32-.39v-.35c0-.37-.12-.48-.4-.48H.63zM4.18.99v.52c0 .64-.31.98-.94.98h-.3V4h-.62V0h.92c.63 0 .94.35.94.99zM2.94.57v1.35h.3c.2 0 .3-.09.3-.37v-.6c0-.29-.1-.38-.3-.38h-.3zm2.89 2.27L6.25 0h.88v4h-.6V1.12L6.1 3.99h-.6l-.46-2.82v2.82h-.55V0h.87zM8.14 1.1V4h-.56V0h.79L9 2.4V0h.56v4h-.64zm2.49 2.29v.6h-.6v-.6zM12.12 1c0-.63.33-1 .95-1 .61 0 .95.37.95 1v2.04c0 .64-.34 1-.95 1-.62 0-.95-.37-.95-1zm.62 2.08c0 .28.13.39.33.39s.32-.1.32-.4V.98c0-.29-.12-.4-.32-.4s-.33.11-.33.4z\"\n    }), jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M0 4.53h14.02v1.04H0zM11.08 0h.63v.62h-.63zm.63 4V1h-.63v2.98z\"\n    })]\n  });\n}\nfunction Lightbox(props) {\n  const {\n    open\n  } = props;\n  if (!open) {\n    return null;\n  }\n  return jsxs(\"div\", {\n    class: \"fjs-powered-by-lightbox\",\n    style: \"z-index: 100; position: fixed; top: 0; left: 0;right: 0; bottom: 0\",\n    children: [jsx(\"div\", {\n      class: \"backdrop\",\n      style: \"width: 100%; height: 100%; background: rgba(40 40 40 / 20%)\",\n      onClick: props.onBackdropClick\n    }), jsxs(\"div\", {\n      class: \"notice\",\n      style: \"position: absolute; left: 50%; top: 40%; transform: translate(-50%); width: 260px; padding: 10px; background: white; box-shadow: 0  1px 4px rgba(0 0 0 / 30%); font-family: Helvetica, Arial, sans-serif; font-size: 14px; display: flex; line-height: 1.3\",\n      children: [jsx(\"a\", {\n        href: \"https://bpmn.io\",\n        target: \"_blank\",\n        rel: \"noopener\",\n        style: \"margin: 15px 20px 15px 10px; align-self: center; color: var(--cds-icon-primary, #404040)\",\n        children: jsx(Logo, {})\n      }), jsxs(\"span\", {\n        children: [\"Web-based tooling for BPMN, DMN, and forms powered by\", ' ', jsx(\"a\", {\n          href: \"https://bpmn.io\",\n          target: \"_blank\",\n          rel: \"noopener\",\n          children: \"bpmn.io\"\n        }), \".\"]\n      })]\n    })]\n  });\n}\nfunction Link(props) {\n  return jsx(\"div\", {\n    class: \"fjs-powered-by fjs-form-field\",\n    style: \"text-align: right\",\n    children: jsx(\"a\", {\n      href: \"https://bpmn.io\",\n      target: \"_blank\",\n      rel: \"noopener\",\n      class: \"fjs-powered-by-link\",\n      title: \"Powered by bpmn.io\",\n      style: \"color: var(--cds-text-primary, #404040)\",\n      onClick: props.onClick,\n      children: jsx(Logo, {})\n    })\n  });\n}\nfunction PoweredBy(props) {\n  const [open, setOpen] = useState(false);\n  function toggleOpen(open) {\n    return event => {\n      event.preventDefault();\n      setOpen(open);\n    };\n  }\n  return jsxs(Fragment$1, {\n    children: [createPortal(jsx(Lightbox, {\n      open: open,\n      onBackdropClick: toggleOpen(false)\n    }), document.body), jsx(Link, {\n      onClick: toggleOpen(true)\n    })]\n  });\n}\n\nconst noop = () => {};\nfunction FormComponent(props) {\n  const form = useService('form');\n  const {\n    schema,\n    properties\n  } = form._getState();\n  const {\n    ariaLabel\n  } = properties;\n  const {\n    onSubmit = noop,\n    onReset = noop,\n    onChange = noop\n  } = props;\n  const handleSubmit = event => {\n    event.preventDefault();\n    onSubmit();\n  };\n  const handleReset = event => {\n    event.preventDefault();\n    onReset();\n  };\n  const filteredFormData = useFilteredFormData();\n  const localExpressionContext = useMemo(() => ({\n    data: filteredFormData,\n    parent: null,\n    this: filteredFormData,\n    i: []\n  }), [filteredFormData]);\n  return jsxs(\"form\", {\n    class: \"fjs-form\",\n    onSubmit: handleSubmit,\n    onReset: handleReset,\n    \"aria-label\": ariaLabel,\n    noValidate: true,\n    children: [jsx(LocalExpressionContext.Provider, {\n      value: localExpressionContext,\n      children: jsx(FormField, {\n        field: schema,\n        onChange: onChange\n      })\n    }), jsx(PoweredBy, {})]\n  });\n}\n\nconst formFields = [/* Input */\nTextfield, Textarea, Numberfield, Datetime, ExpressionField, /* Selection */\nCheckbox, Checklist, Radio, Select, Taglist, /* Presentation */\nText, Image, Table, Html, Spacer, Separator, /* Containers */\nGroup, DynamicList, IFrame, /* Other */\nButton, Default];\n\nclass FormFields {\n  constructor() {\n    this._formFields = {};\n    formFields.forEach(formField => {\n      this.register(formField.config.type, formField);\n    });\n  }\n  register(type, formField) {\n    this._formFields[type] = formField;\n  }\n  get(type) {\n    return this._formFields[type];\n  }\n}\n\nconst EXPRESSION_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'conditional.hide', 'description', 'label', 'source', 'readonly', 'text', 'validate.min', 'validate.max', 'validate.minLength', 'validate.maxLength', 'valuesExpression', 'url', 'dataSource', 'columnsExpression', 'expression'];\nconst TEMPLATE_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'description', 'label', 'source', 'text', 'content', 'url'];\n\n/**\n * @typedef { import('../types').Schema } Schema\n */\n\n/**\n * Parse the schema for variables a form might make use of.\n *\n * @example\n *\n * // retrieve variables from schema\n * const variables = getSchemaVariables(schema);\n *\n * @example\n *\n * // retrieve input variables from schema\n * const inputVariables = getSchemaVariables(schema, { outputs: false });\n *\n * @example\n *\n * // retrieve output variables from schema\n * const outputVariables = getSchemaVariables(schema, { inputs: false });\n *\n * @param {Schema} schema\n * @param {object} [options]\n * @param {any} [options.expressionLanguage]\n * @param {any} [options.templating]\n * @param {any} [options.formFields]\n * @param {boolean} [options.inputs=true]\n * @param {boolean} [options.outputs=true]\n *\n * @return {string[]}\n */\nfunction getSchemaVariables(schema, options = {}) {\n  const {\n    formFields = new FormFields(),\n    expressionLanguage = new FeelExpressionLanguage(null),\n    templating = new FeelersTemplating(),\n    inputs = true,\n    outputs = true\n  } = options;\n  if (!schema.components) {\n    return [];\n  }\n  const getAllComponents = node => {\n    const components = [];\n    if (node.components) {\n      node.components.forEach(component => {\n        components.push(component);\n        components.push(...getAllComponents(component));\n      });\n    }\n    return components;\n  };\n  const variables = getAllComponents(schema).reduce((variables, component) => {\n    const {\n      valuesKey\n    } = component;\n\n    // collect input-only variables\n    if (inputs) {\n      if (valuesKey) {\n        variables = [...variables, valuesKey];\n      }\n      EXPRESSION_PROPERTIES.forEach(prop => {\n        const property = get(component, prop.split('.'));\n        if (property && expressionLanguage.isExpression(property)) {\n          const expressionVariables = expressionLanguage.getVariableNames(property, {\n            type: 'expression'\n          });\n          variables = [...variables, ...expressionVariables];\n        }\n      });\n      TEMPLATE_PROPERTIES.forEach(prop => {\n        const property = get(component, prop.split('.'));\n        if (property && !expressionLanguage.isExpression(property) && templating.isTemplate(property)) {\n          const templateVariables = templating.getVariableNames(property);\n          variables = [...variables, ...templateVariables];\n        }\n      });\n    }\n    return variables.filter(variable => typeof variable === 'string');\n  }, []);\n  const getBindingVariables = node => {\n    const bindingVariable = [];\n    const formField = formFields.get(node.type);\n    if (formField && formField.config.keyed && node.key) {\n      return [node.key.split('.')[0]];\n    } else if (formField && formField.config.pathed && node.path) {\n      return [node.path.split('.')[0]];\n    } else if (node.components) {\n      node.components.forEach(component => {\n        bindingVariable.push(...getBindingVariables(component));\n      });\n    }\n    return bindingVariable;\n  };\n\n  // collect binding variables\n  if (inputs || outputs) {\n    variables.push(...getBindingVariables(schema));\n  }\n\n  // remove duplicates\n  return Array.from(new Set(variables));\n}\n\n/**\n * Get the ancestry list of a form field.\n *\n * @param {string} formFieldId\n * @param {import('../core/FormFieldRegistry').FormFieldRegistry} formFieldRegistry\n *\n * @return {Array<string>} ancestry list\n */\nconst getAncestryList = (formFieldId, formFieldRegistry) => {\n  const ids = [];\n  let currentFormField = formFieldRegistry.get(formFieldId);\n  while (currentFormField) {\n    ids.push(currentFormField.id);\n    currentFormField = formFieldRegistry.get(currentFormField._parent);\n  }\n  return ids;\n};\n\n/**\n * @typedef {object} Condition\n * @property {string} [hide]\n */\n\nclass ConditionChecker {\n  constructor(formFieldRegistry, pathRegistry, eventBus) {\n    this._formFieldRegistry = formFieldRegistry;\n    this._pathRegistry = pathRegistry;\n    this._eventBus = eventBus;\n  }\n\n  /**\n   * For given data, remove properties based on condition.\n   *\n   * @param {Object<string, any>} data\n   * @param {Object<string, any>} contextData\n   * @param {Object} [options]\n   * @param {Function} [options.getFilterPath]\n   * @param {boolean} [options.leafNodeDeletionOnly]\n   */\n  applyConditions(data, contextData = {}, options = {}) {\n    const workingData = clone(data);\n    const {\n      getFilterPath = (field, indexes) => this._pathRegistry.getValuePath(field, {\n        indexes\n      })\n    } = options;\n    const _applyConditionsWithinScope = (rootField, scopeContext, startHidden = false) => {\n      const {\n        indexes = {},\n        expressionIndexes = [],\n        scopeData = contextData,\n        parentScopeData = null\n      } = scopeContext;\n      this._pathRegistry.executeRecursivelyOnFields(rootField, ({\n        field,\n        isClosed,\n        isRepeatable,\n        context\n      }) => {\n        const {\n          conditional,\n          components,\n          id\n        } = field;\n\n        // build the expression context in the right format\n        const localExpressionContext = buildExpressionContext({\n          this: scopeData,\n          data: contextData,\n          i: expressionIndexes,\n          parent: parentScopeData\n        });\n        context.isHidden = startHidden || context.isHidden || conditional && this._checkHideCondition(conditional, localExpressionContext);\n\n        // if a field is repeatable and visible, we need to implement custom recursion on its children\n        if (isRepeatable && !context.isHidden) {\n          // prevent the regular recursion behavior of executeRecursivelyOnFields\n          context.preventRecursion = true;\n          const repeaterValuePath = this._pathRegistry.getValuePath(field, {\n            indexes\n          });\n          const repeaterValue = get(contextData, repeaterValuePath);\n\n          // quit early if there are no children or data associated with the repeater\n          if (!Array.isArray(repeaterValue) || !repeaterValue.length || !Array.isArray(components) || !components.length) {\n            return;\n          }\n          for (let i = 0; i < repeaterValue.length; i++) {\n            // create a new scope context for each index\n            const newScopeContext = {\n              indexes: {\n                ...indexes,\n                [id]: i\n              },\n              expressionIndexes: [...expressionIndexes, i + 1],\n              scopeData: repeaterValue[i],\n              parentScopeData: scopeData\n            };\n\n            // for each child component, apply conditions within the new repetition scope\n            components.forEach(component => {\n              _applyConditionsWithinScope(component, newScopeContext, context.isHidden);\n            });\n          }\n        }\n\n        // if we have a hidden repeatable field, and the data structure allows, we clear it directly at the root and stop recursion\n        if (context.isHidden && isRepeatable) {\n          context.preventRecursion = true;\n          this._cleanlyClearDataAtPath(getFilterPath(field, indexes), workingData);\n        }\n\n        // for simple leaf fields, we always clear\n        if (context.isHidden && isClosed) {\n          this._cleanlyClearDataAtPath(getFilterPath(field, indexes), workingData);\n        }\n      });\n    };\n\n    // apply conditions starting with the root of the form\n    const form = this._formFieldRegistry.getForm();\n    if (!form) {\n      throw new Error('form field registry has no form');\n    }\n    _applyConditionsWithinScope(form, {\n      scopeData: contextData\n    });\n    return workingData;\n  }\n\n  /**\n   * Check if given condition is met. Returns null for invalid/missing conditions.\n   *\n   * @param {string} condition\n   * @param {import('../../types').Data} [data]\n   *\n   * @returns {boolean|null}\n   */\n  check(condition, data = {}) {\n    if (!condition) {\n      return null;\n    }\n    if (!isString(condition) || !condition.startsWith('=')) {\n      return null;\n    }\n    try {\n      // cut off initial '='\n      const result = unaryTest(condition.slice(1), data);\n      return result;\n    } catch (error) {\n      this._eventBus.fire('error', {\n        error\n      });\n      return null;\n    }\n  }\n\n  /**\n   * Check if hide condition is met.\n   *\n   * @param {Condition} condition\n   * @param {Object<string, any>} data\n   * @returns {boolean}\n   */\n  _checkHideCondition(condition, data) {\n    if (!condition.hide) {\n      return false;\n    }\n    const result = this.check(condition.hide, data);\n    return result === true;\n  }\n  _cleanlyClearDataAtPath(valuePath, obj) {\n    const workingValuePath = [...valuePath];\n    let recurse = false;\n    do {\n      set(obj, workingValuePath, undefined);\n      workingValuePath.pop();\n      const parentObject = get(obj, workingValuePath);\n      recurse = !!workingValuePath.length && (this._isEmptyObject(parentObject) || this._isEmptyArray(parentObject));\n    } while (recurse);\n  }\n  _isEmptyObject(parentObject) {\n    return isObject(parentObject) && !values(parentObject).length;\n  }\n  _isEmptyArray(parentObject) {\n    return Array.isArray(parentObject) && (!parentObject.length || parentObject.every(item => item === undefined));\n  }\n}\nConditionChecker.$inject = ['formFieldRegistry', 'pathRegistry', 'eventBus'];\n\nconst ExpressionLanguageModule = {\n  __init__: ['expressionLanguage', 'templating', 'conditionChecker'],\n  expressionLanguage: ['type', FeelExpressionLanguage],\n  templating: ['type', FeelersTemplating],\n  conditionChecker: ['type', ConditionChecker]\n};\n\nclass ExpressionLoopPreventer {\n  constructor(eventBus) {\n    this._computedExpressions = [];\n    eventBus.on('field.updated', ({\n      shouldNotRecompute\n    }) => {\n      if (shouldNotRecompute) {\n        return;\n      }\n      this.reset();\n    });\n    eventBus.on('import.done', this.reset.bind(this));\n    eventBus.on('reset', this.reset.bind(this));\n  }\n\n  /**\n   * Checks if the expression field has already been computed, and registers it if not.\n   *\n   * @param {any} expressionField\n   * @returns {boolean} - whether the expression field has already been computed within the current cycle\n   */\n  registerExpressionExecution(expressionField) {\n    if (this._computedExpressions.includes(expressionField)) {\n      return false;\n    }\n    this._computedExpressions.push(expressionField);\n    return true;\n  }\n\n  /**\n   * Resets the list of computed expressions.\n   */\n  reset() {\n    this._computedExpressions = [];\n  }\n}\nExpressionLoopPreventer.$inject = ['eventBus'];\n\nconst ExpressionFieldModule = {\n  __init__: ['expressionLoopPreventer'],\n  expressionLoopPreventer: ['type', ExpressionLoopPreventer]\n};\n\nclass MarkdownRenderer {\n  /**\n   * Render markdown to HTML.\n   *\n   * @param {string} markdown - The markdown to render\n   *\n   * @returns {string} HTML\n   */\n  render(markdown) {\n    // @ts-expect-error\n    return marked.parse(markdown, {\n      gfm: true,\n      breaks: true\n    });\n  }\n}\nMarkdownRenderer.$inject = [];\n\nconst MarkdownRendererModule = {\n  __init__: ['markdownRenderer'],\n  markdownRenderer: ['type', MarkdownRenderer]\n};\n\n/**\n * @typedef {import('didi').Injector} Injector\n *\n * @typedef {import('../core/Types').ElementLike} ElementLike\n *\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import('./CommandHandler').default} CommandHandler\n *\n * @typedef { any } CommandContext\n * @typedef { {\n *   new (...args: any[]) : CommandHandler\n * } } CommandHandlerConstructor\n * @typedef { {\n *   [key: string]: CommandHandler;\n * } } CommandHandlerMap\n * @typedef { {\n *   command: string;\n *   context: any;\n *   id?: any;\n * } } CommandStackAction\n * @typedef { {\n *   actions: CommandStackAction[];\n *   dirty: ElementLike[];\n *   trigger: 'execute' | 'undo' | 'redo' | 'clear' | null;\n *   atomic?: boolean;\n * } } CurrentExecution\n */\n\n/**\n * A service that offers un- and redoable execution of commands.\n *\n * The command stack is responsible for executing modeling actions\n * in a un- and redoable manner. To do this it delegates the actual\n * command execution to {@link CommandHandler}s.\n *\n * Command handlers provide {@link CommandHandler#execute(ctx)} and\n * {@link CommandHandler#revert(ctx)} methods to un- and redo a command\n * identified by a command context.\n *\n *\n * ## Life-Cycle events\n *\n * In the process the command stack fires a number of life-cycle events\n * that other components to participate in the command execution.\n *\n *    * preExecute\n *    * preExecuted\n *    * execute\n *    * executed\n *    * postExecute\n *    * postExecuted\n *    * revert\n *    * reverted\n *\n * A special event is used for validating, whether a command can be\n * performed prior to its execution.\n *\n *    * canExecute\n *\n * Each of the events is fired as `commandStack.{eventName}` and\n * `commandStack.{commandName}.{eventName}`, respectively. This gives\n * components fine grained control on where to hook into.\n *\n * The event object fired transports `command`, the name of the\n * command and `context`, the command context.\n *\n *\n * ## Creating Command Handlers\n *\n * Command handlers should provide the {@link CommandHandler#execute(ctx)}\n * and {@link CommandHandler#revert(ctx)} methods to implement\n * redoing and undoing of a command.\n *\n * A command handler _must_ ensure undo is performed properly in order\n * not to break the undo chain. It must also return the shapes that\n * got changed during the `execute` and `revert` operations.\n *\n * Command handlers may execute other modeling operations (and thus\n * commands) in their `preExecute(d)` and `postExecute(d)` phases. The command\n * stack will properly group all commands together into a logical unit\n * that may be re- and undone atomically.\n *\n * Command handlers must not execute other commands from within their\n * core implementation (`execute`, `revert`).\n *\n *\n * ## Change Tracking\n *\n * During the execution of the CommandStack it will keep track of all\n * elements that have been touched during the command's execution.\n *\n * At the end of the CommandStack execution it will notify interested\n * components via an 'elements.changed' event with all the dirty\n * elements.\n *\n * The event can be picked up by components that are interested in the fact\n * that elements have been changed. One use case for this is updating\n * their graphical representation after moving / resizing or deletion.\n *\n * @see CommandHandler\n *\n * @param {EventBus} eventBus\n * @param {Injector} injector\n */\nfunction CommandStack(eventBus, injector) {\n  /**\n   * A map of all registered command handlers.\n   *\n   * @type {CommandHandlerMap}\n   */\n  this._handlerMap = {};\n\n  /**\n   * A stack containing all re/undoable actions on the diagram\n   *\n   * @type {CommandStackAction[]}\n   */\n  this._stack = [];\n\n  /**\n   * The current index on the stack\n   *\n   * @type {number}\n   */\n  this._stackIdx = -1;\n\n  /**\n   * Current active commandStack execution\n   *\n   * @type {CurrentExecution}\n   */\n  this._currentExecution = {\n    actions: [],\n    dirty: [],\n    trigger: null\n  };\n\n  /**\n   * @type {Injector}\n   */\n  this._injector = injector;\n\n  /**\n   * @type EventBus\n   */\n  this._eventBus = eventBus;\n\n  /**\n   * @type { number }\n   */\n  this._uid = 1;\n  eventBus.on(['diagram.destroy', 'diagram.clear'], function () {\n    this.clear(false);\n  }, this);\n}\nCommandStack.$inject = ['eventBus', 'injector'];\n\n/**\n * Execute a command.\n *\n * @param {string} command The command to execute.\n * @param {CommandContext} context The context with which to execute the command.\n */\nCommandStack.prototype.execute = function (command, context) {\n  if (!command) {\n    throw new Error('command required');\n  }\n  this._currentExecution.trigger = 'execute';\n  const action = {\n    command: command,\n    context: context\n  };\n  this._pushAction(action);\n  this._internalExecute(action);\n  this._popAction();\n};\n\n/**\n * Check whether a command can be executed.\n *\n * Implementors may hook into the mechanism on two ways:\n *\n *   * in event listeners:\n *\n *     Users may prevent the execution via an event listener.\n *     It must prevent the default action for `commandStack.(<command>.)canExecute` events.\n *\n *   * in command handlers:\n *\n *     If the method {@link CommandHandler#canExecute} is implemented in a handler\n *     it will be called to figure out whether the execution is allowed.\n *\n * @param {string} command The command to execute.\n * @param {CommandContext} context The context with which to execute the command.\n *\n * @return {boolean} Whether the command can be executed with the given context.\n */\nCommandStack.prototype.canExecute = function (command, context) {\n  const action = {\n    command: command,\n    context: context\n  };\n  const handler = this._getHandler(command);\n  let result = this._fire(command, 'canExecute', action);\n\n  // handler#canExecute will only be called if no listener\n  // decided on a result already\n  if (result === undefined) {\n    if (!handler) {\n      return false;\n    }\n    if (handler.canExecute) {\n      result = handler.canExecute(context);\n    }\n  }\n  return result;\n};\n\n/**\n * Clear the command stack, erasing all undo / redo history.\n *\n * @param {boolean} [emit=true] Whether to fire an event. Defaults to `true`.\n */\nCommandStack.prototype.clear = function (emit) {\n  this._stack.length = 0;\n  this._stackIdx = -1;\n  if (emit !== false) {\n    this._fire('changed', {\n      trigger: 'clear'\n    });\n  }\n};\n\n/**\n * Undo last command(s)\n */\nCommandStack.prototype.undo = function () {\n  let action = this._getUndoAction(),\n    next;\n  if (action) {\n    this._currentExecution.trigger = 'undo';\n    this._pushAction(action);\n    while (action) {\n      this._internalUndo(action);\n      next = this._getUndoAction();\n      if (!next || next.id !== action.id) {\n        break;\n      }\n      action = next;\n    }\n    this._popAction();\n  }\n};\n\n/**\n * Redo last command(s)\n */\nCommandStack.prototype.redo = function () {\n  let action = this._getRedoAction(),\n    next;\n  if (action) {\n    this._currentExecution.trigger = 'redo';\n    this._pushAction(action);\n    while (action) {\n      this._internalExecute(action, true);\n      next = this._getRedoAction();\n      if (!next || next.id !== action.id) {\n        break;\n      }\n      action = next;\n    }\n    this._popAction();\n  }\n};\n\n/**\n * Register a handler instance with the command stack.\n *\n * @param {string} command Command to be executed.\n * @param {CommandHandler} handler Handler to execute the command.\n */\nCommandStack.prototype.register = function (command, handler) {\n  this._setHandler(command, handler);\n};\n\n/**\n * Register a handler type with the command stack  by instantiating it and\n * injecting its dependencies.\n *\n * @param {string} command Command to be executed.\n * @param {CommandHandlerConstructor} handlerCls Constructor to instantiate a {@link CommandHandler}.\n */\nCommandStack.prototype.registerHandler = function (command, handlerCls) {\n  if (!command || !handlerCls) {\n    throw new Error('command and handlerCls must be defined');\n  }\n  const handler = this._injector.instantiate(handlerCls);\n  this.register(command, handler);\n};\n\n/**\n * @return {boolean}\n */\nCommandStack.prototype.canUndo = function () {\n  return !!this._getUndoAction();\n};\n\n/**\n * @return {boolean}\n */\nCommandStack.prototype.canRedo = function () {\n  return !!this._getRedoAction();\n};\n\n// stack access  //////////////////////\n\nCommandStack.prototype._getRedoAction = function () {\n  return this._stack[this._stackIdx + 1];\n};\nCommandStack.prototype._getUndoAction = function () {\n  return this._stack[this._stackIdx];\n};\n\n// internal functionality //////////////////////\n\nCommandStack.prototype._internalUndo = function (action) {\n  const command = action.command,\n    context = action.context;\n  const handler = this._getHandler(command);\n\n  // guard against illegal nested command stack invocations\n  this._atomicDo(() => {\n    this._fire(command, 'revert', action);\n    if (handler.revert) {\n      this._markDirty(handler.revert(context));\n    }\n    this._revertedAction(action);\n    this._fire(command, 'reverted', action);\n  });\n};\nCommandStack.prototype._fire = function (command, qualifier, event) {\n  if (arguments.length < 3) {\n    event = qualifier;\n    qualifier = null;\n  }\n  const names = qualifier ? [command + '.' + qualifier, qualifier] : [command];\n  let result;\n  event = this._eventBus.createEvent(event);\n  for (const name of names) {\n    result = this._eventBus.fire('commandStack.' + name, event);\n    if (event.cancelBubble) {\n      break;\n    }\n  }\n  return result;\n};\nCommandStack.prototype._createId = function () {\n  return this._uid++;\n};\nCommandStack.prototype._atomicDo = function (fn) {\n  const execution = this._currentExecution;\n  execution.atomic = true;\n  try {\n    fn();\n  } finally {\n    execution.atomic = false;\n  }\n};\nCommandStack.prototype._internalExecute = function (action, redo) {\n  const command = action.command,\n    context = action.context;\n  const handler = this._getHandler(command);\n  if (!handler) {\n    throw new Error('no command handler registered for <' + command + '>');\n  }\n  this._pushAction(action);\n  if (!redo) {\n    this._fire(command, 'preExecute', action);\n    if (handler.preExecute) {\n      handler.preExecute(context);\n    }\n    this._fire(command, 'preExecuted', action);\n  }\n\n  // guard against illegal nested command stack invocations\n  this._atomicDo(() => {\n    this._fire(command, 'execute', action);\n    if (handler.execute) {\n      // actual execute + mark return results as dirty\n      this._markDirty(handler.execute(context));\n    }\n\n    // log to stack\n    this._executedAction(action, redo);\n    this._fire(command, 'executed', action);\n  });\n  if (!redo) {\n    this._fire(command, 'postExecute', action);\n    if (handler.postExecute) {\n      handler.postExecute(context);\n    }\n    this._fire(command, 'postExecuted', action);\n  }\n  this._popAction();\n};\nCommandStack.prototype._pushAction = function (action) {\n  const execution = this._currentExecution,\n    actions = execution.actions;\n  const baseAction = actions[0];\n  if (execution.atomic) {\n    throw new Error('illegal invocation in <execute> or <revert> phase (action: ' + action.command + ')');\n  }\n  if (!action.id) {\n    action.id = baseAction && baseAction.id || this._createId();\n  }\n  actions.push(action);\n};\nCommandStack.prototype._popAction = function () {\n  const execution = this._currentExecution,\n    trigger = execution.trigger,\n    actions = execution.actions,\n    dirty = execution.dirty;\n  actions.pop();\n  if (!actions.length) {\n    this._eventBus.fire('elements.changed', {\n      elements: uniqueBy('id', dirty.reverse())\n    });\n    dirty.length = 0;\n    this._fire('changed', {\n      trigger: trigger\n    });\n    execution.trigger = null;\n  }\n};\nCommandStack.prototype._markDirty = function (elements) {\n  const execution = this._currentExecution;\n  if (!elements) {\n    return;\n  }\n  elements = isArray(elements) ? elements : [elements];\n  execution.dirty = execution.dirty.concat(elements);\n};\nCommandStack.prototype._executedAction = function (action, redo) {\n  const stackIdx = ++this._stackIdx;\n  if (!redo) {\n    this._stack.splice(stackIdx, this._stack.length, action);\n  }\n};\nCommandStack.prototype._revertedAction = function (action) {\n  this._stackIdx--;\n};\nCommandStack.prototype._getHandler = function (command) {\n  return this._handlerMap[command];\n};\nCommandStack.prototype._setHandler = function (command, handler) {\n  if (!command || !handler) {\n    throw new Error('command and handler required');\n  }\n  if (this._handlerMap[command]) {\n    throw new Error('overriding handler for command <' + command + '>');\n  }\n  this._handlerMap[command] = handler;\n};\n\n/**\n * @type { import('didi').ModuleDeclaration }\n */\nvar commandModule = {\n  commandStack: ['type', CommandStack]\n};\n\n/**\n * @deprecated\n */\nclass UpdateFieldValidationHandler {\n  constructor(form, validator) {\n    this._form = form;\n    this._validator = validator;\n  }\n  execute(context) {\n    const {\n      field,\n      value,\n      indexes\n    } = context;\n    const {\n      errors\n    } = this._form._getState();\n    context.oldErrors = clone(errors);\n    const fieldErrors = this._validator.validateField(field, value);\n    const updatedErrors = set(errors, [field.id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);\n    this._form._setState({\n      errors: updatedErrors\n    });\n  }\n  revert(context) {\n    this._form._setState({\n      errors: context.oldErrors\n    });\n  }\n}\nUpdateFieldValidationHandler.$inject = ['form', 'validator'];\n\nclass UpdateFieldInstanceValidationHandler {\n  constructor(form, validator) {\n    this._form = form;\n    this._validator = validator;\n  }\n  execute(context) {\n    const {\n      fieldInstance,\n      value\n    } = context;\n    const {\n      id,\n      indexes\n    } = fieldInstance;\n    const {\n      errors\n    } = this._form._getState();\n    context.oldErrors = clone(errors);\n    const fieldErrors = this._validator.validateFieldInstance(fieldInstance, value);\n    const updatedErrors = set(errors, [id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);\n    this._form._setState({\n      errors: updatedErrors\n    });\n  }\n  revert(context) {\n    this._form._setState({\n      errors: context.oldErrors\n    });\n  }\n}\nUpdateFieldInstanceValidationHandler.$inject = ['form', 'validator'];\n\nclass ViewerCommands {\n  constructor(commandStack, eventBus) {\n    this._commandStack = commandStack;\n    eventBus.on('form.init', () => {\n      this.registerHandlers();\n    });\n  }\n  registerHandlers() {\n    Object.entries(this.getHandlers()).forEach(([id, handler]) => {\n      this._commandStack.registerHandler(id, handler);\n    });\n  }\n  getHandlers() {\n    return {\n      'formField.validation.update': UpdateFieldValidationHandler,\n      'formFieldInstance.validation.update': UpdateFieldInstanceValidationHandler\n    };\n  }\n\n  /**\n   * @deprecated\n   */\n  updateFieldValidation(field, value, indexes) {\n    const context = {\n      field,\n      value,\n      indexes\n    };\n    this._commandStack.execute('formField.validation.update', context);\n  }\n  updateFieldInstanceValidation(fieldInstance, value) {\n    const context = {\n      fieldInstance,\n      value\n    };\n    this._commandStack.execute('formFieldInstance.validation.update', context);\n  }\n}\nViewerCommands.$inject = ['commandStack', 'eventBus'];\n\nconst ViewerCommandsModule = {\n  __depends__: [commandModule],\n  __init__: ['viewerCommands'],\n  viewerCommands: ['type', ViewerCommands]\n};\n\nvar _path$3;\nfunction _extends$3() { _extends$3 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); }\nvar SvgExpand = function SvgExpand(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$3({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M2 9h5.5v3.086l-1.293-1.293-.707.707L8 14l2.5-2.5-.707-.707L8.5 12.086V9H14V8H2zm11-7H3a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1m0 3H3V3h10z\"\n  })));\n};\n\nvar _path$2;\nfunction _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }\nvar SvgCollapse = function SvgCollapse(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$2({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), _path$2 || (_path$2 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M13 10H3a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1m0 3H3v-2h10zM8.5 3.914l1.293 1.293.707-.707L8 2 5.5 4.5l.707.707L7.5 3.914V7H2v1h12V7H8.5z\"\n  })));\n};\n\nvar _path$1, _path2;\nfunction _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }\nvar SvgAdd = function SvgAdd(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$1({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M8 2c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6 2.7-6 6-6m0-1C4.15 1 1 4.15 1 8s3.15 7 7 7 7-3.15 7-7-3.15-7-7-7\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M12 7.5H8.5V4h-1v3.5H4v1h3.5V12h1V8.5H12z\"\n  })));\n};\n\nvar _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nvar SvgDelete = function SvgDelete(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"\n  })));\n};\n\n// disable react hook rules as the linter is confusing the functional components within a class as class components\n/* eslint-disable react-hooks/rules-of-hooks */\n\nclass RepeatRenderManager {\n  constructor(form, formFields, formFieldRegistry, pathRegistry) {\n    this._form = form;\n    this._formFields = formFields;\n    this._formFieldRegistry = formFieldRegistry;\n    this._pathRegistry = pathRegistry;\n    this.Repeater = this.Repeater.bind(this);\n    this.RepeatFooter = this.RepeatFooter.bind(this);\n  }\n\n  /**\n   * Checks whether a field is currently repeating its children.\n   *\n   * @param {string} id - The id of the field to check\n   * @returns {boolean} - True if repeatable, false otherwise\n   */\n  isFieldRepeating(id) {\n    if (!id) {\n      return false;\n    }\n    const formField = this._formFieldRegistry.get(id);\n    const formFieldDefinition = this._formFields.get(formField.type);\n    return formFieldDefinition.config.repeatable && formField.isRepeating;\n  }\n  Repeater(props) {\n    const {\n      RowsRenderer,\n      indexes,\n      useSharedState,\n      ...restProps\n    } = props;\n    const [sharedRepeatState] = useSharedState;\n    const {\n      data\n    } = this._form._getState();\n    const repeaterField = props.field;\n    const dataPath = this._pathRegistry.getValuePath(repeaterField, {\n      indexes\n    });\n    const values = get(data, dataPath) || [];\n    const nonCollapsedItems = this._getNonCollapsedItems(repeaterField);\n    const collapseEnabled = !repeaterField.disableCollapse && values.length > nonCollapsedItems;\n    const isCollapsed = collapseEnabled && sharedRepeatState.isCollapsed;\n    const hasChildren = repeaterField.components && repeaterField.components.length > 0;\n    const showRemove = repeaterField.allowAddRemove && hasChildren;\n    const displayValues = isCollapsed ? values.slice(0, nonCollapsedItems) : values;\n    const onDeleteItem = index => {\n      const updatedValues = values.slice();\n      updatedValues.splice(index, 1);\n      props.onChange({\n        field: repeaterField,\n        value: updatedValues,\n        indexes\n      });\n    };\n    const parentExpressionContextInfo = useContext(LocalExpressionContext);\n    return jsx(Fragment, {\n      children: displayValues.map((itemValue, itemIndex) => jsx(RepetitionScaffold, {\n        itemIndex: itemIndex,\n        itemValue: itemValue,\n        parentExpressionContextInfo: parentExpressionContextInfo,\n        repeaterField: repeaterField,\n        RowsRenderer: RowsRenderer,\n        indexes: indexes,\n        onDeleteItem: onDeleteItem,\n        showRemove: showRemove,\n        ...restProps\n      }, itemIndex))\n    });\n  }\n  RepeatFooter(props) {\n    const addButtonRef = useRef(null);\n    const {\n      useSharedState,\n      indexes,\n      field: repeaterField,\n      readonly,\n      disabled\n    } = props;\n    const [sharedRepeatState, setSharedRepeatState] = useSharedState;\n    const {\n      data\n    } = this._form._getState();\n    const dataPath = this._pathRegistry.getValuePath(repeaterField, {\n      indexes\n    });\n    const values = get(data, dataPath) || [];\n    const nonCollapsedItems = this._getNonCollapsedItems(repeaterField);\n    const collapseEnabled = !repeaterField.disableCollapse && values.length > nonCollapsedItems;\n    const isCollapsed = collapseEnabled && sharedRepeatState.isCollapsed;\n    const hasChildren = repeaterField.components && repeaterField.components.length > 0;\n    const showAdd = repeaterField.allowAddRemove && hasChildren;\n    const toggle = () => {\n      setSharedRepeatState(state => ({\n        ...state,\n        isCollapsed: !isCollapsed\n      }));\n    };\n    const shouldScroll = useRef(false);\n    const onAddItem = () => {\n      const updatedValues = values.slice();\n      const newItem = this._form._getInitializedFieldData(this._form._getState().data, {\n        container: repeaterField,\n        indexes: {\n          ...indexes,\n          [repeaterField.id]: updatedValues.length\n        }\n      });\n      updatedValues.push(newItem);\n      shouldScroll.current = true;\n      props.onChange({\n        value: updatedValues\n      });\n      setSharedRepeatState(state => ({\n        ...state,\n        isCollapsed: false\n      }));\n    };\n    useScrollIntoView(addButtonRef, [values.length], {\n      align: 'bottom',\n      behavior: 'auto',\n      offset: 20\n    }, [shouldScroll]);\n    return jsxs(\"div\", {\n      className: classNames('fjs-repeat-render-footer', {\n        'fjs-remove-allowed': repeaterField.allowAddRemove\n      }),\n      children: [showAdd ? jsx(\"button\", {\n        type: \"button\",\n        readOnly: readonly,\n        disabled: disabled || readonly,\n        class: \"fjs-repeat-render-add\",\n        ref: addButtonRef,\n        onClick: onAddItem,\n        children: jsxs(Fragment, {\n          children: [jsx(SvgAdd, {}), \" \", 'Add new']\n        })\n      }) : null, collapseEnabled ? jsx(\"button\", {\n        type: \"button\",\n        class: \"fjs-repeat-render-collapse\",\n        onClick: toggle,\n        children: isCollapsed ? jsxs(Fragment, {\n          children: [jsx(SvgExpand, {}), \" \", `Expand all (${values.length})`]\n        }) : jsxs(Fragment, {\n          children: [jsx(SvgCollapse, {}), \" \", 'Collapse']\n        })\n      }) : null]\n    });\n  }\n  _getNonCollapsedItems(field) {\n    const DEFAULT_NON_COLLAPSED_ITEMS = 5;\n    const {\n      nonCollapsedItems\n    } = field;\n    return nonCollapsedItems ? nonCollapsedItems : DEFAULT_NON_COLLAPSED_ITEMS;\n  }\n}\n\n/**\n * Individual repetition of a repeated field and context scaffolding.\n *\n * @param {Object} props\n * @param {number} props.itemIndex\n * @param {Object} props.itemValue\n * @param {Object} props.parentExpressionContextInfo\n * @param {Object} props.repeaterField\n * @param {Function} props.RowsRenderer\n * @param {Object} props.indexes\n * @param {Function} props.onDeleteItem\n * @param {boolean} props.showRemove\n */\n\nconst RepetitionScaffold = props => {\n  const {\n    itemIndex,\n    itemValue,\n    parentExpressionContextInfo,\n    repeaterField,\n    RowsRenderer,\n    indexes,\n    onDeleteItem,\n    showRemove,\n    ...restProps\n  } = props;\n  const elementProps = useMemo(() => ({\n    ...restProps,\n    indexes: {\n      ...(indexes || {}),\n      [repeaterField.id]: itemIndex\n    }\n  }), [itemIndex, indexes, repeaterField.id, restProps]);\n  const localExpressionContextInfo = useMemo(() => ({\n    data: parentExpressionContextInfo.data,\n    this: itemValue,\n    parent: buildExpressionContext({\n      ...parentExpressionContextInfo,\n      data: parentExpressionContextInfo.this\n    }),\n    i: [...parentExpressionContextInfo.i, itemIndex + 1]\n  }), [itemIndex, parentExpressionContextInfo, itemValue]);\n  return !showRemove ? jsx(LocalExpressionContext.Provider, {\n    value: localExpressionContextInfo,\n    children: jsx(RowsRenderer, {\n      ...elementProps\n    })\n  }) : jsxs(\"div\", {\n    class: \"fjs-repeat-row-container\",\n    children: [jsx(\"div\", {\n      class: \"fjs-repeat-row-rows\",\n      children: jsx(LocalExpressionContext.Provider, {\n        value: localExpressionContextInfo,\n        children: jsx(RowsRenderer, {\n          ...elementProps\n        })\n      })\n    }), jsx(\"button\", {\n      type: \"button\",\n      class: \"fjs-repeat-row-remove\",\n      \"aria-label\": `Remove list item ${itemIndex + 1}`,\n      onClick: () => onDeleteItem(itemIndex),\n      children: jsx(\"div\", {\n        class: \"fjs-repeat-row-remove-icon-container\",\n        children: jsx(SvgDelete, {})\n      })\n    })]\n  });\n};\nRepeatRenderManager.$inject = ['form', 'formFields', 'formFieldRegistry', 'pathRegistry'];\n\nconst RepeatRenderModule = {\n  __init__: ['repeatRenderManager'],\n  repeatRenderManager: ['type', RepeatRenderManager]\n};\n\nvar FN_REF = '__fn';\nvar DEFAULT_PRIORITY = 1000;\nvar slice = Array.prototype.slice;\n\n/**\n * @typedef { {\n *   stopPropagation(): void;\n *   preventDefault(): void;\n *   cancelBubble: boolean;\n *   defaultPrevented: boolean;\n *   returnValue: any;\n * } } Event\n */\n\n/**\n * @template E\n *\n * @typedef { (event: E & Event, ...any) => any } EventBusEventCallback\n */\n\n/**\n * @typedef { {\n *  priority: number;\n *  next: EventBusListener | null;\n *  callback: EventBusEventCallback<any>;\n * } } EventBusListener\n */\n\n/**\n * A general purpose event bus.\n *\n * This component is used to communicate across a diagram instance.\n * Other parts of a diagram can use it to listen to and broadcast events.\n *\n *\n * ## Registering for Events\n *\n * The event bus provides the {@link EventBus#on} and {@link EventBus#once}\n * methods to register for events. {@link EventBus#off} can be used to\n * remove event registrations. Listeners receive an instance of {@link Event}\n * as the first argument. It allows them to hook into the event execution.\n *\n * ```javascript\n *\n * // listen for event\n * eventBus.on('foo', function(event) {\n *\n *   // access event type\n *   event.type; // 'foo'\n *\n *   // stop propagation to other listeners\n *   event.stopPropagation();\n *\n *   // prevent event default\n *   event.preventDefault();\n * });\n *\n * // listen for event with custom payload\n * eventBus.on('bar', function(event, payload) {\n *   console.log(payload);\n * });\n *\n * // listen for event returning value\n * eventBus.on('foobar', function(event) {\n *\n *   // stop event propagation + prevent default\n *   return false;\n *\n *   // stop event propagation + return custom result\n *   return {\n *     complex: 'listening result'\n *   };\n * });\n *\n *\n * // listen with custom priority (default=1000, higher is better)\n * eventBus.on('priorityfoo', 1500, function(event) {\n *   console.log('invoked first!');\n * });\n *\n *\n * // listen for event and pass the context (`this`)\n * eventBus.on('foobar', function(event) {\n *   this.foo();\n * }, this);\n * ```\n *\n *\n * ## Emitting Events\n *\n * Events can be emitted via the event bus using {@link EventBus#fire}.\n *\n * ```javascript\n *\n * // false indicates that the default action\n * // was prevented by listeners\n * if (eventBus.fire('foo') === false) {\n *   console.log('default has been prevented!');\n * };\n *\n *\n * // custom args + return value listener\n * eventBus.on('sum', function(event, a, b) {\n *   return a + b;\n * });\n *\n * // you can pass custom arguments + retrieve result values.\n * var sum = eventBus.fire('sum', 1, 2);\n * console.log(sum); // 3\n * ```\n *\n * @template [EventMap=null]\n */\nfunction EventBus() {\n  /**\n   * @type { Record<string, EventBusListener> }\n   */\n  this._listeners = {};\n\n  // cleanup on destroy on lowest priority to allow\n  // message passing until the bitter end\n  this.on('diagram.destroy', 1, this._destroy, this);\n}\n\n/**\n * @overlord\n *\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @template T\n *\n * @param {string|string[]} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<T>} callback\n * @param {any} [that] callback context\n */\n/**\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @template {keyof EventMap} EventName\n *\n * @param {EventName} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<EventMap[EventName]>} callback\n * @param {any} [that] callback context\n */\nEventBus.prototype.on = function (events, priority, callback, that) {\n  events = isArray(events) ? events : [events];\n  if (isFunction(priority)) {\n    that = callback;\n    callback = priority;\n    priority = DEFAULT_PRIORITY;\n  }\n  if (!isNumber(priority)) {\n    throw new Error('priority must be a number');\n  }\n  var actualCallback = callback;\n  if (that) {\n    actualCallback = bind(callback, that);\n\n    // make sure we remember and are able to remove\n    // bound callbacks via {@link #off} using the original\n    // callback\n    actualCallback[FN_REF] = callback[FN_REF] || callback;\n  }\n  var self = this;\n  events.forEach(function (e) {\n    self._addListener(e, {\n      priority: priority,\n      callback: actualCallback,\n      next: null\n    });\n  });\n};\n\n/**\n * @overlord\n *\n * Register an event listener that is called only once.\n *\n * @template T\n *\n * @param {string|string[]} events to subscribe to\n * @param {number} [priority=1000] the listen priority\n * @param {EventBusEventCallback<T>} callback\n * @param {any} [that] callback context\n */\n/**\n * Register an event listener that is called only once.\n *\n * @template {keyof EventMap} EventName\n *\n * @param {EventName} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<EventMap[EventName]>} callback\n * @param {any} [that] callback context\n */\nEventBus.prototype.once = function (events, priority, callback, that) {\n  var self = this;\n  if (isFunction(priority)) {\n    that = callback;\n    callback = priority;\n    priority = DEFAULT_PRIORITY;\n  }\n  if (!isNumber(priority)) {\n    throw new Error('priority must be a number');\n  }\n  function wrappedCallback() {\n    wrappedCallback.__isTomb = true;\n    var result = callback.apply(that, arguments);\n    self.off(events, wrappedCallback);\n    return result;\n  }\n\n  // make sure we remember and are able to remove\n  // bound callbacks via {@link #off} using the original\n  // callback\n  wrappedCallback[FN_REF] = callback;\n  this.on(events, priority, wrappedCallback);\n};\n\n/**\n * Removes event listeners by event and callback.\n *\n * If no callback is given, all listeners for a given event name are being removed.\n *\n * @param {string|string[]} events\n * @param {EventBusEventCallback} [callback]\n */\nEventBus.prototype.off = function (events, callback) {\n  events = isArray(events) ? events : [events];\n  var self = this;\n  events.forEach(function (event) {\n    self._removeListener(event, callback);\n  });\n};\n\n/**\n * Create an event recognized be the event bus.\n *\n * @param {Object} data Event data.\n *\n * @return {Event} An event that will be recognized by the event bus.\n */\nEventBus.prototype.createEvent = function (data) {\n  var event = new InternalEvent();\n  event.init(data);\n  return event;\n};\n\n/**\n * Fires an event.\n *\n * @example\n *\n * ```javascript\n * // fire event by name\n * events.fire('foo');\n *\n * // fire event object with nested type\n * var event = { type: 'foo' };\n * events.fire(event);\n *\n * // fire event with explicit type\n * var event = { x: 10, y: 20 };\n * events.fire('element.moved', event);\n *\n * // pass additional arguments to the event\n * events.on('foo', function(event, bar) {\n *   alert(bar);\n * });\n *\n * events.fire({ type: 'foo' }, 'I am bar!');\n * ```\n *\n * @param {string} [type] event type\n * @param {Object} [data] event or event data\n * @param {...any} [args] additional arguments the callback will be called with.\n *\n * @return {any} The return value. Will be set to `false` if the default was prevented.\n */\nEventBus.prototype.fire = function (type, data) {\n  var event, firstListener, returnValue, args;\n  args = slice.call(arguments);\n  if (typeof type === 'object') {\n    data = type;\n    type = data.type;\n  }\n  if (!type) {\n    throw new Error('no event type specified');\n  }\n  firstListener = this._listeners[type];\n  if (!firstListener) {\n    return;\n  }\n\n  // we make sure we fire instances of our home made\n  // events here. We wrap them only once, though\n  if (data instanceof InternalEvent) {\n    // we are fine, we alread have an event\n    event = data;\n  } else {\n    event = this.createEvent(data);\n  }\n\n  // ensure we pass the event as the first parameter\n  args[0] = event;\n\n  // original event type (in case we delegate)\n  var originalType = event.type;\n\n  // update event type before delegation\n  if (type !== originalType) {\n    event.type = type;\n  }\n  try {\n    returnValue = this._invokeListeners(event, args, firstListener);\n  } finally {\n    // reset event type after delegation\n    if (type !== originalType) {\n      event.type = originalType;\n    }\n  }\n\n  // set the return value to false if the event default\n  // got prevented and no other return value exists\n  if (returnValue === undefined && event.defaultPrevented) {\n    returnValue = false;\n  }\n  return returnValue;\n};\n\n/**\n * Handle an error by firing an event.\n *\n * @param {Error} error The error to be handled.\n *\n * @return {boolean} Whether the error was handled.\n */\nEventBus.prototype.handleError = function (error) {\n  return this.fire('error', {\n    error: error\n  }) === false;\n};\nEventBus.prototype._destroy = function () {\n  this._listeners = {};\n};\n\n/**\n * @param {Event} event\n * @param {any[]} args\n * @param {EventBusListener} listener\n *\n * @return {any}\n */\nEventBus.prototype._invokeListeners = function (event, args, listener) {\n  var returnValue;\n  while (listener) {\n    // handle stopped propagation\n    if (event.cancelBubble) {\n      break;\n    }\n    returnValue = this._invokeListener(event, args, listener);\n    listener = listener.next;\n  }\n  return returnValue;\n};\n\n/**\n * @param {Event} event\n * @param {any[]} args\n * @param {EventBusListener} listener\n *\n * @return {any}\n */\nEventBus.prototype._invokeListener = function (event, args, listener) {\n  var returnValue;\n  if (listener.callback.__isTomb) {\n    return returnValue;\n  }\n  try {\n    // returning false prevents the default action\n    returnValue = invokeFunction(listener.callback, args);\n\n    // stop propagation on return value\n    if (returnValue !== undefined) {\n      event.returnValue = returnValue;\n      event.stopPropagation();\n    }\n\n    // prevent default on return false\n    if (returnValue === false) {\n      event.preventDefault();\n    }\n  } catch (error) {\n    if (!this.handleError(error)) {\n      console.error('unhandled error in event listener', error);\n      throw error;\n    }\n  }\n  return returnValue;\n};\n\n/**\n * Add new listener with a certain priority to the list\n * of listeners (for the given event).\n *\n * The semantics of listener registration / listener execution are\n * first register, first serve: New listeners will always be inserted\n * after existing listeners with the same priority.\n *\n * Example: Inserting two listeners with priority 1000 and 1300\n *\n *    * before: [ 1500, 1500, 1000, 1000 ]\n *    * after: [ 1500, 1500, (new=1300), 1000, 1000, (new=1000) ]\n *\n * @param {string} event\n * @param {EventBusListener} newListener\n */\nEventBus.prototype._addListener = function (event, newListener) {\n  var listener = this._getListeners(event),\n    previousListener;\n\n  // no prior listeners\n  if (!listener) {\n    this._setListeners(event, newListener);\n    return;\n  }\n\n  // ensure we order listeners by priority from\n  // 0 (high) to n > 0 (low)\n  while (listener) {\n    if (listener.priority < newListener.priority) {\n      newListener.next = listener;\n      if (previousListener) {\n        previousListener.next = newListener;\n      } else {\n        this._setListeners(event, newListener);\n      }\n      return;\n    }\n    previousListener = listener;\n    listener = listener.next;\n  }\n\n  // add new listener to back\n  previousListener.next = newListener;\n};\n\n/**\n * @param {string} name\n *\n * @return {EventBusListener}\n */\nEventBus.prototype._getListeners = function (name) {\n  return this._listeners[name];\n};\n\n/**\n * @param {string} name\n * @param {EventBusListener} listener\n */\nEventBus.prototype._setListeners = function (name, listener) {\n  this._listeners[name] = listener;\n};\nEventBus.prototype._removeListener = function (event, callback) {\n  var listener = this._getListeners(event),\n    nextListener,\n    previousListener,\n    listenerCallback;\n  if (!callback) {\n    // clear listeners\n    this._setListeners(event, null);\n    return;\n  }\n  while (listener) {\n    nextListener = listener.next;\n    listenerCallback = listener.callback;\n    if (listenerCallback === callback || listenerCallback[FN_REF] === callback) {\n      if (previousListener) {\n        previousListener.next = nextListener;\n      } else {\n        // new first listener\n        this._setListeners(event, nextListener);\n      }\n    }\n    previousListener = listener;\n    listener = nextListener;\n  }\n};\n\n/**\n * A event that is emitted via the event bus.\n */\nfunction InternalEvent() {}\nInternalEvent.prototype.stopPropagation = function () {\n  this.cancelBubble = true;\n};\nInternalEvent.prototype.preventDefault = function () {\n  this.defaultPrevented = true;\n};\nInternalEvent.prototype.init = function (data) {\n  assign(this, data || {});\n};\n\n/**\n * Invoke function. Be fast...\n *\n * @param {Function} fn\n * @param {any[]} args\n *\n * @return {any}\n */\nfunction invokeFunction(fn, args) {\n  return fn.apply(null, args);\n}\n\nconst EMAIL_PATTERN = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nconst PHONE_PATTERN = /(\\+|00)(297|93|244|1264|358|355|376|971|54|374|1684|1268|61|43|994|257|32|229|226|880|359|973|1242|387|590|375|501|1441|591|55|1246|673|975|267|236|1|61|41|56|86|225|237|243|242|682|57|269|238|506|53|5999|61|1345|357|420|49|253|1767|45|1809|1829|1849|213|593|20|291|212|34|372|251|358|679|500|33|298|691|241|44|995|44|233|350|224|590|220|245|240|30|1473|299|502|594|1671|592|852|504|385|509|36|62|44|91|246|353|98|964|354|972|39|1876|44|962|81|76|77|254|996|855|686|1869|82|383|965|856|961|231|218|1758|423|94|266|370|352|371|853|590|212|377|373|261|960|52|692|389|223|356|95|382|976|1670|258|222|1664|596|230|265|60|262|264|687|227|672|234|505|683|31|47|977|674|64|968|92|507|64|51|63|680|675|48|1787|1939|850|351|595|970|689|974|262|40|7|250|966|249|221|65|500|4779|677|232|503|378|252|508|381|211|239|597|421|386|46|268|1721|248|963|1649|235|228|66|992|690|993|670|676|1868|216|90|688|886|255|256|380|598|1|998|3906698|379|1784|58|1284|1340|84|678|681|685|967|27|260|263)(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{4,20}$/;\nconst VALIDATE_FEEL_PROPERTIES = ['min', 'max', 'minLength', 'maxLength'];\nclass Validator {\n  constructor(expressionLanguage, conditionChecker, form, formFieldRegistry) {\n    this._expressionLanguage = expressionLanguage;\n    this._conditionChecker = conditionChecker;\n    this._form = form;\n    this._formFieldRegistry = formFieldRegistry;\n  }\n\n  /**\n   * Validate against a field definition, does not support proper expression evaluation.\n   *\n   * @deprecated use validateFieldInstance instead\n   */\n  validateField(field, value) {\n    const {\n      type,\n      validate\n    } = field;\n    let errors = [];\n    if (type === 'number') {\n      errors = [...errors, ...runNumberValidation(field, value)];\n    }\n    if (!validate) {\n      return errors;\n    }\n    const evaluatedValidation = oldEvaluateFEELValues(validate, this._expressionLanguage, this._conditionChecker, this._form);\n    errors = [...errors, ...runPresetValidation(field, evaluatedValidation, value)];\n    return errors;\n  }\n\n  /**\n   * Validate a field instance.\n   *\n   * @param {Object} fieldInstance\n   * @param {string} value\n   *\n   * @returns {Array<string>}\n   */\n  validateFieldInstance(fieldInstance, value) {\n    const {\n      id,\n      expressionContextInfo\n    } = fieldInstance;\n    const field = this._formFieldRegistry.get(id);\n    if (!field) {\n      return [];\n    }\n    const {\n      type,\n      validate\n    } = field;\n    let errors = [];\n    if (type === 'number') {\n      errors = [...errors, ...runNumberValidation(field, value)];\n    }\n    if (!validate) {\n      return errors;\n    }\n    const evaluatedValidation = evaluateFEELValues(validate, this._expressionLanguage, expressionContextInfo);\n    errors = [...errors, ...runPresetValidation(field, evaluatedValidation, value)];\n    return errors;\n  }\n}\nValidator.$inject = ['expressionLanguage', 'conditionChecker', 'form', 'formFieldRegistry'];\n\n// helpers //////////\n\nfunction runNumberValidation(field, value) {\n  const {\n    decimalDigits,\n    increment\n  } = field;\n  const errors = [];\n  if (value === 'NaN') {\n    errors.push('Value is not a number.');\n  } else if (value) {\n    if (decimalDigits >= 0 && countDecimals(value) > decimalDigits) {\n      errors.push('Value is expected to ' + (decimalDigits === 0 ? 'be an integer' : `have at most ${decimalDigits} decimal digit${decimalDigits > 1 ? 's' : ''}`) + '.');\n    }\n    if (increment) {\n      const bigValue = Big(value);\n      const bigIncrement = Big(increment);\n      const offset = bigValue.mod(bigIncrement);\n      if (offset.cmp(0) !== 0) {\n        const previousValue = bigValue.minus(offset);\n        const nextValue = previousValue.plus(bigIncrement);\n        errors.push(`Please select a valid value, the two nearest valid values are ${previousValue} and ${nextValue}.`);\n      }\n    }\n  }\n  return errors;\n}\nfunction runPresetValidation(field, validation, value) {\n  const errors = [];\n  if (validation.pattern && value && !new RegExp(validation.pattern).test(value)) {\n    errors.push(`Field must match pattern ${validation.pattern}.`);\n  }\n  if (validation.required) {\n    const isUncheckedCheckbox = field.type === 'checkbox' && value === false;\n    const isUnsetValue = isNil(value) || value === '';\n    const isEmptyMultiselect = Array.isArray(value) && value.length === 0;\n    if (isUncheckedCheckbox || isUnsetValue || isEmptyMultiselect) {\n      errors.push('Field is required.');\n    }\n  }\n  if ('min' in validation && (value || value === 0) && value < validation.min) {\n    errors.push(`Field must have minimum value of ${validation.min}.`);\n  }\n  if ('max' in validation && (value || value === 0) && value > validation.max) {\n    errors.push(`Field must have maximum value of ${validation.max}.`);\n  }\n  if ('minLength' in validation && value && value.trim().length < validation.minLength) {\n    errors.push(`Field must have minimum length of ${validation.minLength}.`);\n  }\n  if ('maxLength' in validation && value && value.trim().length > validation.maxLength) {\n    errors.push(`Field must have maximum length of ${validation.maxLength}.`);\n  }\n  if ('validationType' in validation && value && validation.validationType === 'phone' && !PHONE_PATTERN.test(value)) {\n    errors.push('Field must be a valid  international phone number. (e.g. +4930664040900)');\n  }\n  if ('validationType' in validation && value && validation.validationType === 'email' && !EMAIL_PATTERN.test(value)) {\n    errors.push('Field must be a valid email.');\n  }\n  return errors;\n}\nfunction evaluateFEELValues(validate, expressionLanguage, expressionContextInfo) {\n  const evaluatedValidate = {\n    ...validate\n  };\n  VALIDATE_FEEL_PROPERTIES.forEach(property => {\n    const path = property.split('.');\n    const value = get(evaluatedValidate, path);\n    const evaluatedValue = runExpressionEvaluation(expressionLanguage, value, expressionContextInfo);\n    set(evaluatedValidate, path, evaluatedValue === null ? undefined : evaluatedValue);\n  });\n  return evaluatedValidate;\n}\nfunction oldEvaluateFEELValues(validate, expressionLanguage, conditionChecker, form) {\n  const evaluatedValidate = {\n    ...validate\n  };\n  VALIDATE_FEEL_PROPERTIES.forEach(property => {\n    const path = property.split('.');\n    const value = get(evaluatedValidate, path);\n\n    // mirroring FEEL evaluation of our hooks\n    if (!expressionLanguage || !expressionLanguage.isExpression(value)) {\n      return value;\n    }\n    const {\n      initialData,\n      data\n    } = form._getState();\n    const newData = conditionChecker ? conditionChecker.applyConditions(data, data) : data;\n    const filteredData = {\n      ...initialData,\n      ...newData\n    };\n    const evaluatedValue = expressionLanguage.evaluate(value, filteredData);\n\n    // replace validate property with evaluated value\n    if (evaluatedValue) {\n      set(evaluatedValidate, path, evaluatedValue);\n    }\n  });\n  return evaluatedValidate;\n}\n\nclass Importer {\n  /**\n   * @constructor\n   * @param { import('./FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   * @param { import('./PathRegistry').PathRegistry } pathRegistry\n   * @param { import('./FieldFactory').FieldFactory } fieldFactory\n   * @param { import('./FormLayouter').FormLayouter } formLayouter\n   */\n  constructor(formFieldRegistry, pathRegistry, fieldFactory, formLayouter) {\n    this._formFieldRegistry = formFieldRegistry;\n    this._pathRegistry = pathRegistry;\n    this._fieldFactory = fieldFactory;\n    this._formLayouter = formLayouter;\n  }\n\n  /**\n   * Import schema creating rows, fields, attaching additional\n   * information to each field and adding fields to the\n   * field registry.\n   *\n   * Additional information attached:\n   *\n   *   * `id` (unless present)\n   *   * `_parent`\n   *   * `_path`\n   *\n   * @param {any} schema\n   *\n   * @typedef {{ warnings: Error[], schema: any }} ImportResult\n   * @returns {ImportResult}\n   */\n  importSchema(schema) {\n    // TODO: Add warnings\n    const warnings = [];\n    try {\n      this._cleanup();\n      const importedSchema = this.importFormField(clone(schema));\n      this._formLayouter.calculateLayout(clone(importedSchema));\n      return {\n        schema: importedSchema,\n        warnings\n      };\n    } catch (err) {\n      this._cleanup();\n      err.warnings = warnings;\n      throw err;\n    }\n  }\n  _cleanup() {\n    this._formLayouter.clear();\n    this._formFieldRegistry.clear();\n    this._pathRegistry.clear();\n  }\n\n  /**\n   * @param {{[x: string]: any}} fieldAttrs\n   * @param {String} [parentId]\n   * @param {number} [index]\n   *\n   * @return {any} field\n   */\n  importFormField(fieldAttrs, parentId, index) {\n    const {\n      components\n    } = fieldAttrs;\n    let parent, path;\n    if (parentId) {\n      parent = this._formFieldRegistry.get(parentId);\n    }\n\n    // set form field path\n    path = parent ? [...parent._path, 'components', index] : [];\n    const field = this._fieldFactory.create({\n      ...fieldAttrs,\n      _path: path,\n      _parent: parentId\n    }, false);\n    this._formFieldRegistry.add(field);\n    if (components) {\n      field.components = this.importFormFields(components, field.id);\n    }\n    return field;\n  }\n\n  /**\n   * @param {Array<any>} components\n   * @param {string} parentId\n   *\n   * @return {Array<any>} imported components\n   */\n  importFormFields(components, parentId) {\n    return components.map((component, index) => {\n      return this.importFormField(component, parentId, index);\n    });\n  }\n}\nImporter.$inject = ['formFieldRegistry', 'pathRegistry', 'fieldFactory', 'formLayouter'];\n\nclass FieldFactory {\n  /**\n   * @constructor\n   *\n   * @param  formFieldRegistry\n   * @param  formFields\n   */\n  constructor(formFieldRegistry, pathRegistry, formFields) {\n    this._formFieldRegistry = formFieldRegistry;\n    this._pathRegistry = pathRegistry;\n    this._formFields = formFields;\n  }\n  create(attrs, applyDefaults = true) {\n    const {\n      id,\n      type,\n      key,\n      path,\n      _parent\n    } = attrs;\n    const fieldDefinition = this._formFields.get(type);\n    if (!fieldDefinition) {\n      throw new Error(`form field of type <${type}> not supported`);\n    }\n    const {\n      config\n    } = fieldDefinition;\n    if (!config) {\n      throw new Error(`form field of type <${type}> has no config`);\n    }\n    if (id && this._formFieldRegistry._ids.assigned(id)) {\n      throw new Error(`form field with id <${id}> already exists`);\n    }\n\n    // ensure that we can claim the path\n\n    const parent = _parent && this._formFieldRegistry.get(_parent);\n    const parentPath = parent && this._pathRegistry.getValuePath(parent) || [];\n    const knownAncestorIds = getAncestryList(_parent, this._formFieldRegistry);\n    if (config.keyed && key && !this._pathRegistry.canClaimPath([...parentPath, ...key.split('.')], {\n      isClosed: true,\n      knownAncestorIds\n    })) {\n      throw new Error(`binding path '${[...parentPath, key].join('.')}' is already claimed`);\n    }\n    if (config.pathed && path && !this._pathRegistry.canClaimPath([...parentPath, ...path.split('.')], {\n      isRepeatable: config.repeatable,\n      knownAncestorIds\n    })) {\n      throw new Error(`binding path '${[...parentPath, ...path.split('.')].join('.')}' is already claimed`);\n    }\n    const labelAttrs = applyDefaults && config.label ? {\n      label: config.label\n    } : {};\n    const field = config.create({\n      ...labelAttrs,\n      ...attrs\n    });\n    this._ensureId(field);\n    if (config.keyed) {\n      this._ensureKey(field);\n      this._pathRegistry.claimPath(this._pathRegistry.getValuePath(field), {\n        isClosed: true,\n        claimerId: field.id,\n        knownAncestorIds: getAncestryList(_parent, this._formFieldRegistry)\n      });\n    }\n    if (config.pathed) {\n      if (config.repeatable) {\n        this._enforceDefaultPath(field);\n      }\n      this._pathRegistry.claimPath(this._pathRegistry.getValuePath(field), {\n        isRepeatable: config.repeatable,\n        claimerId: field.id,\n        knownAncestorIds: getAncestryList(_parent, this._formFieldRegistry)\n      });\n    }\n    return field;\n  }\n  _ensureId(field) {\n    if (field.id) {\n      this._formFieldRegistry._ids.claim(field.id, field);\n      return;\n    }\n    let prefix = 'Field';\n    if (field.type === 'default') {\n      prefix = 'Form';\n    }\n    field.id = this._formFieldRegistry._ids.nextPrefixed(`${prefix}_`, field);\n  }\n  _ensureKey(field) {\n    if (!field.key) {\n      field.key = this._getUniqueKeyPath(field);\n    }\n  }\n  _enforceDefaultPath(field) {\n    if (!field.path) {\n      field.path = this._getUniqueKeyPath(field);\n    }\n  }\n  _getUniqueKeyPath(field) {\n    let random;\n    const parent = this._formFieldRegistry.get(field._parent);\n\n    // ensure key uniqueness at level\n    do {\n      random = Math.random().toString(36).substring(7);\n    } while (parent && parent.components.some(child => child.key === random));\n    return `${field.type}_${random}`;\n  }\n}\nFieldFactory.$inject = ['formFieldRegistry', 'pathRegistry', 'formFields'];\n\n/**\n * The PathRegistry class manages a hierarchical structure of paths associated with form fields.\n * It enables claiming, unclaiming, and validating paths within this structure.\n *\n * Example Tree Structure:\n *\n *   [\n *     {\n *       segment: 'root',\n *       claimCount: 1,\n *       children: [\n *         {\n *           segment: 'child1',\n *           claimCount: 2,\n *           children: null  // A leaf node (closed path)\n *         },\n *         {\n *           segment: 'child2',\n *           claimCount: 1,\n *           children: [\n *             {\n *               segment: 'subChild1',\n *               claimCount: 1,\n *               children: []  // An open node (open path)\n *             }\n *           ]\n *         }\n *       ]\n *     }\n *   ]\n */\nclass PathRegistry {\n  constructor(formFieldRegistry, formFields, injector) {\n    this._formFieldRegistry = formFieldRegistry;\n    this._formFields = formFields;\n    this._injector = injector;\n    this._dataPaths = [];\n  }\n  canClaimPath(path, options = {}) {\n    const {\n      isClosed = false,\n      isRepeatable = false,\n      skipAncestryCheck = false,\n      claimerId = null,\n      knownAncestorIds = []\n    } = options;\n    let node = {\n      children: this._dataPaths\n    };\n\n    // (1) if we reach a leaf node, we cannot claim it, if we reach an open node, we can\n    // if we reach a repeatable node, we need to ensure that the claimer is (or will be) an ancestor of the repeater\n    for (const segment of path) {\n      node = _getNextSegment(node, segment);\n      if (!node) {\n        return true;\n      }\n      if (node.isRepeatable && !skipAncestryCheck) {\n        if (!(claimerId || knownAncestorIds.length)) {\n          throw new Error('cannot claim a path that contains a repeater without specifying a claimerId or knownAncestorIds');\n        }\n        const isValidRepeatClaim = knownAncestorIds.includes(node.repeaterId) || claimerId && getAncestryList(claimerId, this._formFieldRegistry).includes(node.repeaterId);\n        if (!isValidRepeatClaim) {\n          return false;\n        }\n      }\n      if (node.children === null) {\n        return false;\n      }\n    }\n\n    // (2) if the path lands in the middle of the tree, we can only claim an open, non-repeatable path\n    return !(isClosed || isRepeatable);\n  }\n  claimPath(path, options = {}) {\n    const {\n      isClosed = false,\n      isRepeatable = false,\n      claimerId = null,\n      knownAncestorIds = []\n    } = options;\n    if (!this.canClaimPath(path, {\n      isClosed,\n      isRepeatable,\n      claimerId,\n      knownAncestorIds\n    })) {\n      throw new Error(`cannot claim path '${path.join('.')}'`);\n    }\n    let node = {\n      children: this._dataPaths\n    };\n    for (const segment of path) {\n      let child = _getNextSegment(node, segment);\n      if (!child) {\n        child = {\n          segment,\n          claimCount: 1,\n          children: []\n        };\n        node.children.push(child);\n      } else {\n        child.claimCount++;\n      }\n      node = child;\n    }\n    if (isClosed) {\n      node.children = null;\n    }\n\n    // add some additional info when we make a repeatable path claim\n    if (isRepeatable) {\n      node.isRepeatable = true;\n      node.repeaterId = claimerId;\n    }\n  }\n  unclaimPath(path) {\n    // verification Pass\n    let node = {\n      children: this._dataPaths\n    };\n    for (const segment of path) {\n      const child = _getNextSegment(node, segment);\n      if (!child) {\n        throw new Error(`no open path found for '${path.join('.')}'`);\n      }\n      node = child;\n    }\n\n    // mutation Pass\n    node = {\n      children: this._dataPaths\n    };\n    for (const segment of path) {\n      const child = _getNextSegment(node, segment);\n      child.claimCount--;\n      if (child.claimCount === 0) {\n        node.children.splice(node.children.indexOf(child), 1);\n        break; // Abort early if claimCount reaches zero\n      }\n      node = child;\n    }\n  }\n\n  /**\n   * Applies a function (fn) recursively on a given field and its children.\n   *\n   * - `field`: Starting field object.\n   * - `fn`: Function to apply.\n   * - `context`: Optional object for passing data between calls.\n   *\n   * Stops early if `fn` returns `false`. Useful for traversing the form field tree.\n   *\n   * @returns {boolean} Success status based on function execution.\n   */\n  executeRecursivelyOnFields(field, fn, context = {}) {\n    let result = true;\n    const formFieldConfig = this._formFields.get(field.type).config;\n    if (formFieldConfig.keyed) {\n      const callResult = fn({\n        field,\n        isClosed: true,\n        isRepeatable: false,\n        context\n      });\n      return result && callResult;\n    } else if (formFieldConfig.pathed) {\n      const callResult = fn({\n        field,\n        isClosed: false,\n        isRepeatable: formFieldConfig.repeatable,\n        context\n      });\n      result = result && callResult;\n    }\n\n    // stop executing if false is specifically returned or if preventing recursion\n    if (result === false || context.preventRecursion) {\n      return result;\n    }\n    if (Array.isArray(field.components)) {\n      for (const child of field.components) {\n        const callResult = this.executeRecursivelyOnFields(child, fn, clone(context));\n        result = result && callResult;\n\n        // stop executing if false is specifically returned\n        if (result === false) {\n          return result;\n        }\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Generates an array representing the binding path to an underlying data object for a form field.\n   *\n   * @param {Object} field - The field object with properties: `key`, `path`, `id`, and optionally `_parent`.\n   * @param {Object} [options={}] - Configuration options.\n   * @param {Object} [options.replacements={}] - A map of field IDs to alternative path arrays.\n   * @param {Object} [options.indexes=null] - A map of parent IDs to the index of the field within said parent, leave null to get an unindexed path.\n   * @param {Object} [options.cutoffNode] - The ID of the parent field at which to stop generating the path.\n   *\n   * @returns {(Array<string>|undefined)} An array of strings representing the binding path, or undefined if not determinable.\n   */\n  getValuePath(field, options = {}) {\n    const {\n      replacements = {},\n      indexes = null,\n      cutoffNode = null\n    } = options;\n    let localValuePath = [];\n    const hasReplacement = Object.prototype.hasOwnProperty.call(replacements, field.id);\n    const formFieldConfig = this._formFields.get(field.type).config;\n\n    // uses path overrides instead of true path to calculate a potential value path\n    if (hasReplacement) {\n      const replacement = replacements[field.id];\n      if (replacement === null || replacement === undefined || replacement === '') {\n        localValuePath = [];\n      } else if (typeof replacement === 'string') {\n        localValuePath = replacement.split('.');\n      } else if (Array.isArray(replacement)) {\n        localValuePath = replacement;\n      } else {\n        throw new Error(`replacements for field ${field.id} must be a string, array or null/undefined`);\n      }\n    } else if (formFieldConfig.keyed) {\n      localValuePath = field.key.split('.');\n    } else if (formFieldConfig.pathed && field.path) {\n      localValuePath = field.path.split('.');\n    }\n\n    // add potential indexes of repeated fields\n    if (indexes) {\n      localValuePath = this._addIndexes(localValuePath, field, indexes);\n    }\n\n    // if parent exists and isn't cutoff node, add parent's value path\n    if (field._parent && field._parent !== cutoffNode) {\n      const parent = this._formFieldRegistry.get(field._parent);\n      return [...(this.getValuePath(parent, options) || []), ...localValuePath];\n    }\n    return localValuePath;\n  }\n  clear() {\n    this._dataPaths = [];\n  }\n  _addIndexes(localValuePath, field, indexes) {\n    const repeatRenderManager = this._injector.get('repeatRenderManager', false);\n    if (repeatRenderManager && repeatRenderManager.isFieldRepeating(field._parent)) {\n      return [indexes[field._parent], ...localValuePath];\n    }\n    return localValuePath;\n  }\n}\nconst _getNextSegment = (node, segment) => {\n  if (isArray(node.children)) {\n    return node.children.find(node => node.segment === segment) || null;\n  }\n  return null;\n};\nPathRegistry.$inject = ['formFieldRegistry', 'formFields', 'injector'];\n\n/**\n * @typedef { { id: String, components: Array<String> } } FormRow\n * @typedef { { formFieldId: String, rows: Array<FormRow> } } FormRows\n */\n\n/**\n * Maintains the Form layout in a given structure, for example\n *\n *  [\n *    {\n *      formFieldId: 'FormField_1',\n *      rows: [\n *        { id: 'Row_1', components: [ 'Text_1', 'Textdield_1', ... ]  }\n *      ]\n *    }\n *  ]\n *\n */\nclass FormLayouter {\n  constructor(eventBus) {\n    /** @type Array<FormRows>  */\n    this._rows = [];\n    this._ids = new Ids([32, 36, 1]);\n    this._eventBus = eventBus;\n  }\n\n  /**\n   * @param {FormRow} row\n   */\n  addRow(formFieldId, row) {\n    let rowsPerComponent = this._rows.find(r => r.formFieldId === formFieldId);\n    if (!rowsPerComponent) {\n      rowsPerComponent = {\n        formFieldId,\n        rows: []\n      };\n      this._rows.push(rowsPerComponent);\n    }\n    rowsPerComponent.rows.push(row);\n  }\n\n  /**\n   * @param {String} id\n   * @returns {FormRow}\n   */\n  getRow(id) {\n    const rows = allRows(this._rows);\n    return rows.find(r => r.id === id);\n  }\n\n  /**\n   * @param {any} formField\n   * @returns {FormRow}\n   */\n  getRowForField(formField) {\n    return allRows(this._rows).find(r => {\n      const {\n        components\n      } = r;\n      return components.includes(formField.id);\n    });\n  }\n\n  /**\n   * @param {String} formFieldId\n   * @returns { Array<FormRow> }\n   */\n  getRows(formFieldId) {\n    const rowsForField = this._rows.find(r => formFieldId === r.formFieldId);\n    if (!rowsForField) {\n      return [];\n    }\n    return rowsForField.rows;\n  }\n\n  /**\n   * @returns {string}\n   */\n  nextRowId() {\n    return this._ids.nextPrefixed('Row_');\n  }\n\n  /**\n   * @param {any} formField\n   */\n  calculateLayout(formField) {\n    const {\n      type,\n      components\n    } = formField;\n    if (!['default', 'group', 'dynamiclist'].includes(type) || !components) {\n      return;\n    }\n\n    // (1) calculate rows order (by component order)\n    const rowsInOrder = groupByRow(components, this._ids);\n    Object.entries(rowsInOrder).forEach(([id, components]) => {\n      // (2) add fields to rows\n      this.addRow(formField.id, {\n        id: id,\n        components: components.map(c => c.id)\n      });\n    });\n\n    // (3) traverse through nested components\n    components.forEach(field => this.calculateLayout(field));\n\n    // (4) fire event to notify interested parties\n    this._eventBus.fire('form.layoutCalculated', {\n      rows: this._rows\n    });\n  }\n  clear() {\n    this._rows = [];\n    this._ids.clear();\n\n    // fire event to notify interested parties\n    this._eventBus.fire('form.layoutCleared');\n  }\n}\nFormLayouter.$inject = ['eventBus'];\n\n// helpers //////\n\nfunction groupByRow(components, ids) {\n  return groupBy(components, c => {\n    // mitigate missing row by creating new (handle legacy)\n    const {\n      layout\n    } = c;\n    if (!layout || !layout.row) {\n      return ids.nextPrefixed('Row_');\n    }\n    return layout.row;\n  });\n}\n\n/**\n * @param {Array<FormRows>} formRows\n * @returns {Array<FormRow>}\n */\nfunction allRows(formRows) {\n  return formRows.map(r => r.rows).flat();\n}\n\nclass FormFieldRegistry {\n  constructor(eventBus) {\n    this._eventBus = eventBus;\n    this._formFields = {};\n    eventBus.on('form.clear', () => this.clear());\n    this._ids = new Ids([32, 36, 1]);\n  }\n  add(formField) {\n    const {\n      id\n    } = formField;\n    if (this._formFields[id]) {\n      throw new Error(`form field with ID ${id} already exists`);\n    }\n    this._eventBus.fire('formField.add', {\n      formField\n    });\n    this._formFields[id] = formField;\n  }\n  remove(formField) {\n    const {\n      id\n    } = formField;\n    if (!this._formFields[id]) {\n      return;\n    }\n    this._eventBus.fire('formField.remove', {\n      formField\n    });\n    delete this._formFields[id];\n  }\n  get(id) {\n    return this._formFields[id];\n  }\n  getAll() {\n    return Object.values(this._formFields);\n  }\n  getForm() {\n    return this.getAll().find(formField => formField.type === 'default');\n  }\n  forEach(callback) {\n    this.getAll().forEach(formField => callback(formField));\n  }\n  clear() {\n    this._formFields = {};\n    this._ids.clear();\n  }\n}\nFormFieldRegistry.$inject = ['eventBus'];\n\nclass FormFieldInstanceRegistry {\n  constructor(eventBus, formFieldRegistry, formFields) {\n    this._eventBus = eventBus;\n    this._formFieldRegistry = formFieldRegistry;\n    this._formFields = formFields;\n    this._formFieldInstances = {};\n    eventBus.on('form.clear', () => this.clear());\n  }\n  add(instance) {\n    const {\n      id,\n      expressionContextInfo,\n      valuePath,\n      indexes\n    } = instance;\n    const instanceId = [id, ...Object.values(indexes || {})].join('_');\n    if (this._formFieldInstances[instanceId]) {\n      throw new Error('this form field instance is already registered');\n    }\n    this._formFieldInstances[instanceId] = {\n      id,\n      instanceId,\n      expressionContextInfo,\n      valuePath,\n      indexes\n    };\n    this._eventBus.fire('formFieldInstanceRegistry.changed', {\n      instanceId,\n      action: 'added'\n    });\n    return instanceId;\n  }\n  remove(instanceId) {\n    if (!this._formFieldInstances[instanceId]) {\n      return;\n    }\n    delete this._formFieldInstances[instanceId];\n    this._eventBus.fire('formFieldInstanceRegistry.changed', {\n      instanceId,\n      action: 'removed'\n    });\n  }\n  getAll() {\n    return Object.values(this._formFieldInstances);\n  }\n  getAllKeyed() {\n    return this.getAll().filter(({\n      id\n    }) => {\n      const formFieldDefinition = this._formFieldRegistry.get(id);\n      if (!formFieldDefinition) {\n        return false;\n      }\n      const {\n        type\n      } = formFieldDefinition;\n      const {\n        config\n      } = this._formFields.get(type);\n      return config.keyed;\n    });\n  }\n  clear() {\n    this._formFieldInstances = {};\n  }\n}\nFormFieldInstanceRegistry.$inject = ['eventBus', 'formFieldRegistry', 'formFields'];\n\nfunction Renderer(config, eventBus, form, injector) {\n  const App = () => {\n    const [state, setState] = useState(form._getState());\n    const formContext = {\n      getService(type, strict = true) {\n        return injector.get(type, strict);\n      },\n      formId: form._id\n    };\n    eventBus.on('changed', newState => {\n      setState(newState);\n    });\n    const onChange = useCallback(update => form._update(update), []);\n    const {\n      properties\n    } = state;\n    const {\n      readOnly\n    } = properties;\n    const onSubmit = useCallback(() => {\n      if (!readOnly) {\n        form.submit();\n      }\n    }, [readOnly]);\n    const onReset = useCallback(() => form.reset(), []);\n    const {\n      schema\n    } = state;\n    if (!schema) {\n      return null;\n    }\n    return jsx(FormContext.Provider, {\n      value: formContext,\n      children: jsx(FormComponent, {\n        onChange: onChange,\n        onSubmit: onSubmit,\n        onReset: onReset\n      })\n    });\n  };\n  const {\n    container\n  } = config;\n  eventBus.on('form.init', () => {\n    render(jsx(App, {}), container);\n  });\n  eventBus.on('form.destroy', () => {\n    render(null, container);\n  });\n}\nRenderer.$inject = ['config.renderer', 'eventBus', 'form', 'injector'];\n\nconst RenderModule = {\n  __init__: ['formFields', 'renderer'],\n  formFields: ['type', FormFields],\n  renderer: ['type', Renderer]\n};\n\nconst CoreModule = {\n  __depends__: [RenderModule],\n  eventBus: ['type', EventBus],\n  importer: ['type', Importer],\n  fieldFactory: ['type', FieldFactory],\n  formFieldRegistry: ['type', FormFieldRegistry],\n  formFieldInstanceRegistry: ['type', FormFieldInstanceRegistry],\n  pathRegistry: ['type', PathRegistry],\n  formLayouter: ['type', FormLayouter],\n  validator: ['type', Validator]\n};\n\n/**\n * @typedef { import('./types').Injector } Injector\n * @typedef { import('./types').Data } Data\n * @typedef { import('./types').Errors } Errors\n * @typedef { import('./types').Schema } Schema\n * @typedef { import('./types').FormProperties } FormProperties\n * @typedef { import('./types').FormProperty } FormProperty\n * @typedef { import('./types').FormEvent } FormEvent\n * @typedef { import('./types').FormOptions } FormOptions\n *\n * @typedef { {\n *   data: Data,\n *   initialData: Data,\n *   errors: Errors,\n *   properties: FormProperties,\n *   schema: Schema\n * } } State\n *\n * @typedef { (type:FormEvent, priority:number, handler:Function) => void } OnEventWithPriority\n * @typedef { (type:FormEvent, handler:Function) => void } OnEventWithOutPriority\n * @typedef { OnEventWithPriority & OnEventWithOutPriority } OnEventType\n */\n\nconst ids = new Ids([32, 36, 1]);\n\n/**\n * The form.\n */\nclass Form {\n  /**\n   * @constructor\n   * @param {FormOptions} options\n   */\n  constructor(options = {}) {\n    /**\n     * @public\n     * @type {OnEventType}\n     */\n    this.on = this._onEvent;\n\n    /**\n     * @public\n     * @type {String}\n     */\n    this._id = ids.next();\n\n    /**\n     * @private\n     * @type {Element}\n     */\n    this._container = createFormContainer();\n    const {\n      container,\n      injector = this._createInjector(options, this._container),\n      properties = {}\n    } = options;\n\n    /**\n     * @private\n     * @type {State}\n     */\n    this._state = {\n      initialData: null,\n      data: null,\n      properties,\n      errors: {},\n      schema: null\n    };\n    this.get = injector.get;\n    this.invoke = injector.invoke;\n    this.get('eventBus').fire('form.init');\n    if (container) {\n      this.attachTo(container);\n    }\n  }\n  clear() {\n    // clear diagram services (e.g. EventBus)\n    this._emit('diagram.clear');\n\n    // clear form services\n    this._emit('form.clear');\n  }\n\n  /**\n   * Destroy the form, removing it from DOM,\n   * if attached.\n   */\n  destroy() {\n    // destroy form services\n    this.get('eventBus').fire('form.destroy');\n\n    // destroy diagram services (e.g. EventBus)\n    this.get('eventBus').fire('diagram.destroy');\n    this._detach(false);\n  }\n\n  /**\n   * Open a form schema with the given initial data.\n   *\n   * @param {Schema} schema\n   * @param {Data} [data]\n   *\n   * @return Promise<{ warnings: Array<any> }>\n   */\n  importSchema(schema, data = {}) {\n    return new Promise((resolve, reject) => {\n      try {\n        this.clear();\n        const {\n          schema: importedSchema,\n          warnings\n        } = this.get('importer').importSchema(schema);\n        const initializedData = this._getInitializedFieldData(clone(data));\n        this._setState({\n          data: initializedData,\n          errors: {},\n          schema: importedSchema,\n          initialData: clone(initializedData)\n        });\n        this._emit('import.done', {\n          warnings\n        });\n        return resolve({\n          warnings\n        });\n      } catch (error) {\n        this._emit('import.done', {\n          error,\n          warnings: error.warnings || []\n        });\n        return reject(error);\n      }\n    });\n  }\n\n  /**\n   * Submit the form, triggering all field validations.\n   *\n   * @returns { { data: Data, errors: Errors } }\n   */\n  submit() {\n    const {\n      properties\n    } = this._getState();\n    if (properties.readOnly || properties.disabled) {\n      throw new Error('form is read-only');\n    }\n    this._emit('presubmit');\n    const data = this._getSubmitData();\n    const errors = this.validate();\n    const result = {\n      data,\n      errors\n    };\n    this._emit('submit', result);\n    return result;\n  }\n  reset() {\n    this._emit('reset');\n    this._setState({\n      data: clone(this._state.initialData),\n      errors: {}\n    });\n  }\n\n  /**\n   * @returns {Errors}\n   */\n  validate() {\n    const formFieldRegistry = this.get('formFieldRegistry'),\n      formFieldInstanceRegistry = this.get('formFieldInstanceRegistry'),\n      validator = this.get('validator');\n    const {\n      data\n    } = this._getState();\n    const errors = {};\n    const getErrorPath = (id, indexes) => [id, ...Object.values(indexes || {})];\n    formFieldInstanceRegistry.getAllKeyed().forEach(fieldInstance => {\n      const {\n        id,\n        valuePath,\n        indexes\n      } = fieldInstance;\n      const field = formFieldRegistry.get(id);\n\n      // (1) Skip disabled fields\n      if (field.disabled) {\n        return;\n      }\n\n      // (2) Validate the field instance\n      const value = get(data, valuePath);\n      const fieldErrors = validator.validateFieldInstance(fieldInstance, value);\n      if (fieldErrors.length) {\n        set(errors, getErrorPath(field.id, indexes), fieldErrors);\n      }\n    });\n    this._setState({\n      errors\n    });\n\n    // @ts-ignore\n    return errors;\n  }\n\n  /**\n   * @param {Element|string} parentNode\n   */\n  attachTo(parentNode) {\n    if (!parentNode) {\n      throw new Error('parentNode required');\n    }\n    this.detach();\n    if (isString(parentNode)) {\n      parentNode = document.querySelector(parentNode);\n    }\n    const container = this._container;\n    parentNode.appendChild(container);\n    this._emit('attach');\n  }\n  detach() {\n    this._detach();\n  }\n\n  /**\n   * @private\n   *\n   * @param {boolean} [emit]\n   */\n  _detach(emit = true) {\n    const container = this._container,\n      parentNode = container.parentNode;\n    if (!parentNode) {\n      return;\n    }\n    if (emit) {\n      this._emit('detach');\n    }\n    parentNode.removeChild(container);\n  }\n\n  /**\n   * @param {FormProperty} property\n   * @param {any} value\n   */\n  setProperty(property, value) {\n    const properties = set(this._getState().properties, [property], value);\n    this._setState({\n      properties\n    });\n  }\n\n  /**\n   * @param {FormEvent} type\n   * @param {Function} handler\n   */\n  off(type, handler) {\n    this.get('eventBus').off(type, handler);\n  }\n\n  /**\n   * @private\n   *\n   * @param {FormOptions} options\n   * @param {Element} container\n   *\n   * @returns {Injector}\n   */\n  _createInjector(options, container) {\n    const {\n      modules = this._getModules(),\n      additionalModules = [],\n      ...config\n    } = options;\n    const enrichedConfig = {\n      ...config,\n      renderer: {\n        container\n      }\n    };\n    return createInjector([{\n      config: ['value', enrichedConfig]\n    }, {\n      form: ['value', this]\n    }, CoreModule, ...modules, ...additionalModules]);\n  }\n\n  /**\n   * @private\n   */\n  _emit(type, data) {\n    this.get('eventBus').fire(type, data);\n  }\n\n  /**\n   * @internal\n   *\n   * @param { { fieldInstance: any, value: any } } update\n   */\n  _update(update) {\n    const {\n      fieldInstance,\n      value\n    } = update;\n    const {\n      id,\n      valuePath,\n      indexes\n    } = fieldInstance;\n    const {\n      data,\n      errors\n    } = this._getState();\n    const validator = this.get('validator');\n    const fieldErrors = validator.validateFieldInstance(fieldInstance, value);\n    set(data, valuePath, value);\n    set(errors, [id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);\n    this._emit('field.updated', update);\n    this._setState({\n      data: clone(data),\n      errors: clone(errors)\n    });\n  }\n\n  /**\n   * @internal\n   */\n  _getState() {\n    return this._state;\n  }\n\n  /**\n   * @internal\n   */\n  _setState(state) {\n    this._state = {\n      ...this._state,\n      ...state\n    };\n    this._emit('changed', this._getState());\n  }\n\n  /**\n   * @internal\n   */\n  _getModules() {\n    return [ExpressionLanguageModule, ExpressionFieldModule, MarkdownRendererModule, ViewerCommandsModule, RepeatRenderModule];\n  }\n\n  /**\n   * @internal\n   */\n  _onEvent(type, priority, handler) {\n    this.get('eventBus').on(type, priority, handler);\n  }\n\n  /**\n   * @internal\n   */\n  _getSubmitData() {\n    const formFieldRegistry = this.get('formFieldRegistry');\n    const formFieldInstanceRegistry = this.get('formFieldInstanceRegistry');\n    const formData = this._getState().data;\n    const submitData = {};\n    formFieldInstanceRegistry.getAllKeyed().forEach(formFieldInstance => {\n      const {\n        id,\n        valuePath\n      } = formFieldInstance;\n      const {\n        disabled\n      } = formFieldRegistry.get(id);\n      if (disabled) {\n        return;\n      }\n      const value = get(formData, valuePath);\n      set(submitData, valuePath, value);\n    });\n    return submitData;\n  }\n\n  /**\n   * @internal\n   */\n  _getInitializedFieldData(data, options = {}) {\n    const formFieldRegistry = this.get('formFieldRegistry');\n    const formFields = this.get('formFields');\n    const pathRegistry = this.get('pathRegistry');\n    function initializeFieldDataRecursively(initializedData, formField, indexes) {\n      const {\n        defaultValue,\n        type,\n        isRepeating\n      } = formField;\n      const {\n        config: fieldConfig\n      } = formFields.get(type);\n      const valuePath = pathRegistry.getValuePath(formField, {\n        indexes\n      });\n      let valueData = get(data, valuePath);\n\n      // (1) Process keyed fields\n      if (fieldConfig.keyed) {\n        // (a) Retrieve and sanitize data from input\n        if (!isUndefined(valueData) && fieldConfig.sanitizeValue) {\n          valueData = fieldConfig.sanitizeValue({\n            formField,\n            data,\n            value: valueData\n          });\n        }\n\n        // (b) Initialize field value in output data\n        const initializedFieldValue = !isUndefined(valueData) ? valueData : !isUndefined(defaultValue) ? defaultValue : fieldConfig.emptyValue;\n        set(initializedData, valuePath, initializedFieldValue);\n      }\n\n      // (2) Process parents\n      if (!Array.isArray(formField.components)) {\n        return;\n      }\n      if (fieldConfig.repeatable && isRepeating) {\n        // (a) Sanitize repeatable parents data if it is not an array\n        if (!valueData || !Array.isArray(valueData)) {\n          valueData = new Array(isUndefined(formField.defaultRepetitions) ? 1 : formField.defaultRepetitions).fill().map(_ => ({})) || [];\n        }\n\n        // (b) Ensure all elements of the array are objects\n        valueData = valueData.map(val => isObject(val) ? val : {});\n\n        // (c) Initialize field value in output data\n        set(initializedData, valuePath, valueData);\n\n        // (d) If indexed ahead of time, recurse repeatable simply across the children\n        if (!isUndefined(indexes[formField.id])) {\n          formField.components.forEach(component => initializeFieldDataRecursively(initializedData, component, {\n            ...indexes\n          }));\n          return;\n        }\n\n        // (e1) Recurse repeatable parents both across the indexes of repetition and the children\n        valueData.forEach((_, index) => {\n          formField.components.forEach(component => initializeFieldDataRecursively(initializedData, component, {\n            ...indexes,\n            [formField.id]: index\n          }));\n        });\n        return;\n      }\n\n      // (e2) Recurse non-repeatable parents only across the children\n      formField.components.forEach(component => initializeFieldDataRecursively(initializedData, component, indexes));\n    }\n\n    // allows definition of a specific subfield to generate the data for\n    const container = options.container || formFieldRegistry.getForm();\n    const indexes = options.indexes || {};\n    const basePath = pathRegistry.getValuePath(container, {\n      indexes\n    }) || [];\n\n    // if indexing ahead of time, we must add this index to the data path at the end\n    const path = !isUndefined(indexes[container.id]) ? [...basePath, indexes[container.id]] : basePath;\n    const workingData = clone(data);\n    initializeFieldDataRecursively(workingData, container, indexes);\n    return get(workingData, path, {});\n  }\n}\n\nconst schemaVersion = 16;\n\n/**\n * @typedef { import('./types').CreateFormOptions } CreateFormOptions\n */\n\n/**\n * Create a form.\n *\n * @param {CreateFormOptions} options\n *\n * @return {Promise<Form>}\n */\nfunction createForm(options) {\n  const {\n    data,\n    schema,\n    ...formOptions\n  } = options;\n  const form = new Form(formOptions);\n  return form.importSchema(schema, data).then(function () {\n    return form;\n  });\n}\n\nexport { ALLOW_ATTRIBUTE, Button, Checkbox, Checklist, ConditionChecker, DATETIME_SUBTYPES, DATETIME_SUBTYPES_LABELS, DATETIME_SUBTYPE_PATH, DATE_DISALLOW_PAST_PATH, DATE_LABEL_PATH, Datetime, Default, Description, DynamicList, Errors, ExpressionField, ExpressionFieldModule, ExpressionLanguageModule, ExpressionLoopPreventer, FeelExpressionLanguage, FeelersTemplating, FieldFactory, Form, FormComponent, FormContext, FormField, FormFieldRegistry, FormFields, FormLayouter, FormRenderContext, Group, Html, IFrame, Image, Importer, Label, LocalExpressionContext, MINUTES_IN_DAY, MarkdownRenderer, MarkdownRendererModule, Numberfield, OPTIONS_SOURCES, OPTIONS_SOURCES_DEFAULTS, OPTIONS_SOURCES_LABELS, OPTIONS_SOURCES_PATHS, OPTIONS_SOURCE_DEFAULT, PathRegistry, Radio, RenderModule, RepeatRenderManager, RepeatRenderModule, SANDBOX_ATTRIBUTE, SECURITY_ATTRIBUTES_DEFINITIONS, Select, Separator, Spacer, TIME_INTERVAL_PATH, TIME_LABEL_PATH, TIME_SERIALISINGFORMAT_LABELS, TIME_SERIALISING_FORMATS, TIME_SERIALISING_FORMAT_PATH, TIME_USE24H_PATH, Table, Taglist, Text, Textarea, Textfield, ViewerCommands, ViewerCommandsModule, buildExpressionContext, clone, createForm, createFormContainer, createInjector, escapeHTML, formFields, generateIdForType, generateIndexForType, getAncestryList, getOptionsSource, getSchemaVariables, getScrollContainer, hasEqualValue, iconsByType, isRequired, pathParse, pathsEqual, runExpressionEvaluation, runRecursively, sanitizeDateTimePickerValue, sanitizeHTML, sanitizeIFrameSource, sanitizeImageSource, sanitizeMultiSelectValue, sanitizeSingleSelectValue, schemaVersion, useExpressionEvaluation, useSingleLineTemplateEvaluation, useTemplateEvaluation, wrapCSSStyles, wrapObjectKeysWithUnderscores };\n//# sourceMappingURL=index.es.js.map\n","function _e(t) {\n  return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, \"default\") ? t.default : t;\n}\nvar Ne = function(n, o) {\n  return Array.prototype.slice.call(n, o);\n}, Be = typeof setImmediate == \"function\", z;\nBe ? z = function(t) {\n  setImmediate(t);\n} : z = function(t) {\n  setTimeout(t, 0);\n};\nvar Me = z, Xe = Me, Ie = function(n, o, l) {\n  n && Xe(function() {\n    n.apply(l || null, o || []);\n  });\n}, ee = Ne, Te = Ie, Ye = function(n, o) {\n  var l = o || {}, c = {};\n  return n === void 0 && (n = {}), n.on = function(d, h) {\n    return c[d] ? c[d].push(h) : c[d] = [h], n;\n  }, n.once = function(d, h) {\n    return h._once = !0, n.on(d, h), n;\n  }, n.off = function(d, h) {\n    var S = arguments.length;\n    if (S === 1)\n      delete c[d];\n    else if (S === 0)\n      c = {};\n    else {\n      var C = c[d];\n      if (!C)\n        return n;\n      C.splice(C.indexOf(h), 1);\n    }\n    return n;\n  }, n.emit = function() {\n    var d = ee(arguments);\n    return n.emitterSnapshot(d.shift()).apply(this, d);\n  }, n.emitterSnapshot = function(d) {\n    var h = (c[d] || []).slice(0);\n    return function() {\n      var S = ee(arguments), C = this || n;\n      if (d === \"error\" && l.throws !== !1 && !h.length)\n        throw S.length === 1 ? S[0] : S;\n      return h.forEach(function(E) {\n        l.async ? Te(E, S, C) : E.apply(C, S), E._once && n.off(d, E);\n      }), n;\n    };\n  }, n;\n};\nconst Le = /* @__PURE__ */ _e(Ye), te = {}, xe = \"(?:^|\\\\s)\", Re = \"(?:\\\\s|$)\";\nfunction le(t) {\n  let n = te[t];\n  return n ? n.lastIndex = 0 : te[t] = n = new RegExp(xe + t + Re, \"g\"), n;\n}\nfunction Y(t, n) {\n  const o = t.className;\n  o.length ? le(n).test(o) || (t.className += \" \" + n) : t.className = n;\n}\nfunction L(t, n) {\n  t.className = t.className.replace(le(n), \" \").trim();\n}\nconst ke = (t, n) => ({\n  containers: n,\n  moves: () => !0,\n  accepts: () => !0,\n  invalid: () => !1,\n  isContainer: () => !1,\n  transformOffset: (o) => o,\n  copy: !1,\n  copySortSource: !1,\n  revertOnSpill: !1,\n  removeOnSpill: !1,\n  direction: \"vertical\",\n  ignoreInputTextSelection: !0,\n  mirrorContainer: document.body,\n  ...t\n});\nfunction ne(t) {\n  if (t.touches !== void 0)\n    return t.touches.length;\n  if (t.which !== void 0 && t.which !== 0)\n    return t.which;\n  if (t.buttons !== void 0)\n    return t.buttons;\n  const n = t.button;\n  if (n !== void 0)\n    return n & 1 ? 1 : n & 2 ? 3 : n & 4 ? 2 : 0;\n}\nconst Ae = (t) => {\n  const n = t.getBoundingClientRect();\n  return {\n    left: n.left + re(\"scrollLeft\", \"pageXOffset\"),\n    top: n.top + re(\"scrollTop\", \"pageYOffset\")\n  };\n}, re = (t, n) => typeof global[n] < \"u\" ? global[n] : document.documentElement.clientHeight ? document.documentElement[t] : document.body[t], ie = (t = {}, n, o) => {\n  const l = t.className || \"\";\n  t.className += \" gu-hide\";\n  const c = document.elementFromPoint(n, o);\n  return t.className = l, c;\n}, oe = (t) => t.width || t.right - t.left, ce = (t) => t.height || t.bottom - t.top, v = (t) => t.parentNode === document ? null : t.parentNode, ue = (t) => [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(t.tagName) || se(t), se = (t) => !t || t.contentEditable === \"false\" ? !1 : t.contentEditable === \"true\" ? !0 : se(v(t)), T = (t) => {\n  const n = () => {\n    let o = t;\n    do\n      o = o.nextSibling;\n    while (o && o.nodeType !== 1);\n    return o;\n  };\n  return t.nextElementSibling || n();\n};\nwindow.global || (window.global = window);\nconst fe = document, M = fe.documentElement;\nfunction De(t = [], n = {}) {\n  Array.isArray(t) || (n = t, t = []);\n  let o, l, c, d, h, S, C, X, E, a, x, N, I;\n  const s = ke(n, t), f = Le({\n    containers: s.containers,\n    start: ve,\n    end: G,\n    cancel: q,\n    remove: W,\n    destroy: ae,\n    canMove: ge,\n    dragging: !1\n  });\n  return s.removeOnSpill && f.on(\"over\", he).on(\"out\", be), j(), f;\n  function R(e) {\n    return f.containers.indexOf(e) !== -1 || s.isContainer(e);\n  }\n  function j(e) {\n    const r = e ? \"removeEventListener\" : \"addEventListener\";\n    M[r](\"pointerdown\", me, !0), M[r](\"pointerup\", D, !0);\n  }\n  function k(e) {\n    M[e ? \"removeEventListener\" : \"addEventListener\"](\"pointermove\", pe, !0);\n  }\n  function H(e) {\n    M[e ? \"removeEventListener\" : \"addEventListener\"](\"click\", de, !0);\n  }\n  function ae() {\n    j(!0), D({});\n  }\n  function de(e) {\n    I && e.preventDefault();\n  }\n  function me(e) {\n    if (S = e.clientX, C = e.clientY, ne(e) !== 1 || e.metaKey || e.ctrlKey)\n      return;\n    const i = e.target, u = A(i);\n    u && (I = u, k(), e.type === \"pointerdown\" && (ue(i) ? i.focus() : e.preventDefault()));\n  }\n  function pe(e) {\n    if (!I)\n      return;\n    if (ne(e) === 0) {\n      D({});\n      return;\n    }\n    if (e.clientX !== void 0 && Math.abs(e.clientX - S) <= (s.slideFactorX || 0) && e.clientY !== void 0 && Math.abs(e.clientY - C) <= (s.slideFactorY || 0))\n      return;\n    if (s.ignoreInputTextSelection) {\n      const {\n        clientX: O = 0,\n        clientY: m = 0\n      } = e, w = fe.elementFromPoint(O, m);\n      if (ue(w))\n        return;\n    }\n    const r = I;\n    k(!0), H(), G(), K(r);\n    const i = Ae(c), u = s.transformOffset(i, e, c), {\n      pageX: g = 0,\n      pageY: p = 0\n    } = e;\n    d = g - u.left, h = p - u.top, Y(a || c, \"gu-transit\"), ye(), $(e);\n  }\n  function A(e) {\n    if (f.dragging && o || R(e))\n      return;\n    const r = e;\n    for (; v(e) && R(v(e)) === !1; )\n      if (s.invalid(e, r) || (e = v(e), !e))\n        return;\n    const i = v(e);\n    if (!(!i || s.invalid(e, r) || !s.moves(e, i, r, T(e))))\n      return {\n        item: e,\n        source: i\n      };\n  }\n  function ge(e) {\n    return !!A(e);\n  }\n  function ve(e) {\n    const r = A(e);\n    r && K(r);\n  }\n  function K(e) {\n    Ee(e.item, e.source) && (a = e.item.cloneNode(!0), f.emit(\"cloned\", a, e.item, \"copy\")), l = e.source, c = e.item, X = E = T(e.item), f.dragging = !0, f.emit(\"drag\", c, l);\n  }\n  function G() {\n    if (!f.dragging)\n      return;\n    const e = a || c;\n    V(e, v(e));\n  }\n  function U() {\n    I = !1, k(!0), H(!0);\n  }\n  function D(e) {\n    if (U(), !f.dragging)\n      return;\n    const r = a || c, {\n      clientX: i = 0,\n      clientY: u = 0\n    } = e, g = ie(o, i, u), p = J(g, i, u);\n    p && (a && s.copySortSource || !a || p !== l) ? V(r, p) : s.removeOnSpill ? W() : q();\n  }\n  function V(e, r) {\n    const i = v(e);\n    a && s.copySortSource && r === l && i.removeChild(c), P(r) ? f.emit(\"cancel\", e, l, l) : f.emit(\"drop\", e, r, l, E), F();\n  }\n  function W() {\n    if (!f.dragging)\n      return;\n    const e = a || c, r = v(e);\n    r && r.removeChild(e), f.emit(a ? \"cancel\" : \"remove\", e, r, l), F();\n  }\n  function q(e) {\n    if (!f.dragging)\n      return;\n    const r = arguments.length > 0 ? e : s.revertOnSpill, i = a || c, u = v(i), g = P(u);\n    g === !1 && r && (a ? u && u.removeChild(a) : l.insertBefore(i, X)), g || r ? f.emit(\"cancel\", i, l, l) : f.emit(\"drop\", i, u, l, E), F();\n  }\n  function F() {\n    const e = a || c;\n    U(), Se(), e && L(e, \"gu-transit\"), x && clearTimeout(x), f.dragging = !1, N && f.emit(\"out\", e, N, l), f.emit(\"dragend\", e), l = c = a = X = E = x = N = null;\n  }\n  function P(e, r) {\n    let i;\n    return r !== void 0 ? i = r : o ? i = E : i = T(a || c), e === l && i === X;\n  }\n  function J(e, r, i) {\n    let u = e;\n    for (; u && !g(); )\n      u = v(u);\n    return u;\n    function g() {\n      if (R(u) === !1)\n        return !1;\n      const O = Q(u, e), m = Z(u, O, r, i);\n      return P(u, m) ? !0 : s.accepts(c, u, l, m);\n    }\n  }\n  function $(e) {\n    if (!o)\n      return;\n    e.preventDefault();\n    const {\n      clientX: r = 0,\n      clientY: i = 0\n    } = e, u = r - d, g = i - h;\n    o.style.left = u + \"px\", o.style.top = g + \"px\";\n    const p = a || c, O = ie(o, r, i);\n    let m = J(O, r, i);\n    const w = m !== null && m !== N;\n    (w || m === null) && (we(), N = m, Ce());\n    const b = v(p);\n    if (m === l && a && !s.copySortSource) {\n      b && b.removeChild(p);\n      return;\n    }\n    let y;\n    const B = Q(m, O);\n    if (B !== null)\n      y = Z(m, B, r, i);\n    else if (s.revertOnSpill === !0 && !a)\n      y = X, m = l;\n    else {\n      a && b && b.removeChild(p);\n      return;\n    }\n    (y === null && w || y !== p && y !== T(p)) && (E = y, m.insertBefore(p, y), f.emit(\"shadow\", p, m, l));\n    function _(Oe) {\n      f.emit(Oe, p, N, l);\n    }\n    function Ce() {\n      w && _(\"over\");\n    }\n    function we() {\n      N && _(\"out\");\n    }\n  }\n  function he(e) {\n    L(e, \"gu-hide\");\n  }\n  function be(e) {\n    f.dragging && Y(e, \"gu-hide\");\n  }\n  function ye() {\n    if (o)\n      return;\n    const e = c.getBoundingClientRect();\n    o = c.cloneNode(!0), o.style.width = oe(e) + \"px\", o.style.height = ce(e) + \"px\", L(o, \"gu-transit\"), Y(o, \"gu-mirror\"), s.mirrorContainer.appendChild(o), M.addEventListener(\"pointermove\", $), Y(s.mirrorContainer, \"gu-unselectable\"), f.emit(\"cloned\", o, c, \"mirror\");\n  }\n  function Se() {\n    o && (L(s.mirrorContainer, \"gu-unselectable\"), M.removeEventListener(\"pointermove\", $), v(o).removeChild(o), o = null);\n  }\n  function Q(e, r) {\n    let i = r;\n    for (; i !== e && v(i) !== e; )\n      i = v(i);\n    return i === M ? null : i;\n  }\n  function Z(e, r, i, u) {\n    const g = (typeof s.direction == \"function\" ? s.direction(c, e, l) : s.direction) === \"horizontal\";\n    return r !== e ? m() : O();\n    function O() {\n      const b = e.children.length;\n      let y, B, _;\n      for (y = 0; y < b; y++)\n        if (B = e.children[y], _ = B.getBoundingClientRect(), g && _.left + _.width / 2 > i || !g && _.top + _.height / 2 > u)\n          return B;\n      return null;\n    }\n    function m() {\n      const b = r.getBoundingClientRect();\n      return w(g ? i > b.left + oe(b) / 2 : u > b.top + ce(b) / 2);\n    }\n    function w(b) {\n      return b ? T(r) : r;\n    }\n  }\n  function Ee(e, r) {\n    return typeof s.copy == \"boolean\" ? s.copy : s.copy(e, r);\n  }\n}\nexport {\n  De as default\n};\n","function _mergeNamespaces(n, m) {\n  m.forEach(function (e) {\n    e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n      if (k !== 'default' && !(k in n)) {\n        var d = Object.getOwnPropertyDescriptor(e, k);\n        Object.defineProperty(n, k, d.get ? d : {\n          enumerable: true,\n          get: function () { return e[k]; }\n        });\n      }\n    });\n  });\n  return Object.freeze(n);\n}\n\n/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n  return obj === undefined;\n}\n\nfunction isArray(obj) {\n  return nativeToString.call(obj) === '[object Array]';\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n  return nativeHasOwnProperty.call(target, key);\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n  let val,\n      result;\n\n  if (isUndefined(collection)) {\n    return;\n  }\n\n  const convertKey = isArray(collection) ? toNum : identity;\n\n  for (let key in collection) {\n\n    if (has(collection, key)) {\n      val = collection[key];\n\n      result = iterator(val, convertKey(key));\n\n      if (result === false) {\n        return val;\n      }\n    }\n  }\n}\n\n\nfunction identity(arg) {\n  return arg;\n}\n\nfunction toNum(arg) {\n  return Number(arg);\n}\n\n/**\n * Assigns style attributes in a style-src compliant way.\n *\n * @param {Element} element\n * @param {...Object} styleSources\n *\n * @return {Element} the element\n */\nfunction assign(element, ...styleSources) {\n  const target = element.style;\n\n  forEach(styleSources, function(style) {\n    if (!style) {\n      return;\n    }\n\n    forEach(style, function(value, key) {\n      target[key] = value;\n    });\n  });\n\n  return element;\n}\n\n/**\n * Set attribute `name` to `val`, or get attr `name`.\n *\n * @param {Element} el\n * @param {String} name\n * @param {String} [val]\n * @api public\n */\nfunction attr(el, name, val) {\n\n  // get\n  if (arguments.length == 2) {\n    return el.getAttribute(name);\n  }\n\n  // remove\n  if (val === null) {\n    return el.removeAttribute(name);\n  }\n\n  // set\n  el.setAttribute(name, val);\n\n  return el;\n}\n\n/**\n * Taken from https://github.com/component/classes\n *\n * Without the component bits.\n */\n\n/**\n * toString reference.\n */\n\nconst toString = Object.prototype.toString;\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nfunction classes(el) {\n  return new ClassList(el);\n}\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n  if (!el || !el.nodeType) {\n    throw new Error('A DOM element reference is required');\n  }\n  this.el = el;\n  this.list = el.classList;\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function(name) {\n  this.list.add(name);\n  return this;\n};\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function(name) {\n  if ('[object RegExp]' == toString.call(name)) {\n    return this.removeMatching(name);\n  }\n\n  this.list.remove(name);\n  return this;\n};\n\n/**\n * Remove all classes matching `re`.\n *\n * @param {RegExp} re\n * @return {ClassList}\n * @api private\n */\n\nClassList.prototype.removeMatching = function(re) {\n  const arr = this.array();\n  for (let i = 0; i < arr.length; i++) {\n    if (re.test(arr[i])) {\n      this.remove(arr[i]);\n    }\n  }\n  return this;\n};\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function(name, force) {\n  if ('undefined' !== typeof force) {\n    if (force !== this.list.toggle(name, force)) {\n      this.list.toggle(name); // toggle again to correct\n    }\n  } else {\n    this.list.toggle(name);\n  }\n  return this;\n};\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function() {\n  return Array.from(this.list);\n};\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has =\nClassList.prototype.contains = function(name) {\n  return this.list.contains(name);\n};\n\n/**\n * Clear utility\n */\n\n/**\n * Removes all children from the given element\n *\n * @param {Element} element\n *\n * @return {Element} the element (for chaining)\n */\nfunction clear(element) {\n  var child;\n\n  while ((child = element.firstChild)) {\n    element.removeChild(child);\n  }\n\n  return element;\n}\n\n/**\n * Closest\n *\n * @param {Element} el\n * @param {string} selector\n * @param {boolean} checkYourSelf (optional)\n */\nfunction closest(element, selector, checkYourSelf) {\n  var actualElement = checkYourSelf ? element : element.parentNode;\n\n  return actualElement && typeof actualElement.closest === 'function' && actualElement.closest(selector) || null;\n}\n\nvar componentEvent = {};\n\nvar bind$1, unbind$1, prefix;\n\nfunction detect () {\n  bind$1 = window.addEventListener ? 'addEventListener' : 'attachEvent';\n  unbind$1 = window.removeEventListener ? 'removeEventListener' : 'detachEvent';\n  prefix = bind$1 !== 'addEventListener' ? 'on' : '';\n}\n\n/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nvar bind_1 = componentEvent.bind = function(el, type, fn, capture){\n  if (!bind$1) detect();\n  el[bind$1](prefix + type, fn, capture || false);\n  return fn;\n};\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nvar unbind_1 = componentEvent.unbind = function(el, type, fn, capture){\n  if (!unbind$1) detect();\n  el[unbind$1](prefix + type, fn, capture || false);\n  return fn;\n};\n\nvar event = /*#__PURE__*/_mergeNamespaces({\n  __proto__: null,\n  bind: bind_1,\n  unbind: unbind_1,\n  'default': componentEvent\n}, [componentEvent]);\n\n/**\n * Module dependencies.\n */\n\n/**\n * Delegate event `type` to `selector`\n * and invoke `fn(e)`. A callback function\n * is returned which may be passed to `.unbind()`.\n *\n * @param {Element} el\n * @param {String} selector\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\n// Some events don't bubble, so we want to bind to the capture phase instead\n// when delegating.\nvar forceCaptureEvents = [ 'focus', 'blur' ];\n\nfunction bind(el, selector, type, fn, capture) {\n  if (forceCaptureEvents.indexOf(type) !== -1) {\n    capture = true;\n  }\n\n  return event.bind(el, type, function(e) {\n    var target = e.target || e.srcElement;\n    e.delegateTarget = closest(target, selector, true);\n    if (e.delegateTarget) {\n      fn.call(el, e);\n    }\n  }, capture);\n}\n\n/**\n * Unbind event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\nfunction unbind(el, type, fn, capture) {\n  if (forceCaptureEvents.indexOf(type) !== -1) {\n    capture = true;\n  }\n\n  return event.unbind(el, type, fn, capture);\n}\n\nvar delegate = {\n  bind,\n  unbind\n};\n\n/**\n * Expose `parse`.\n */\n\nvar domify = parse;\n\n/**\n * Tests for browser support.\n */\n\nvar innerHTMLBug = false;\nvar bugTestDiv;\nif (typeof document !== 'undefined') {\n  bugTestDiv = document.createElement('div');\n  // Setup\n  bugTestDiv.innerHTML = '  <link/><table></table><a href=\"/a\">a</a><input type=\"checkbox\"/>';\n  // Make sure that link elements get serialized correctly by innerHTML\n  // This requires a wrapper element in IE\n  innerHTMLBug = !bugTestDiv.getElementsByTagName('link').length;\n  bugTestDiv = undefined;\n}\n\n/**\n * Wrap map from jquery.\n */\n\nvar map = {\n  legend: [1, '<fieldset>', '</fieldset>'],\n  tr: [2, '<table><tbody>', '</tbody></table>'],\n  col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n  // for script/link/style tags to work in IE6-8, you have to wrap\n  // in a div with a non-whitespace character in front, ha!\n  _default: innerHTMLBug ? [1, 'X<div>', '</div>'] : [0, '', '']\n};\n\nmap.td =\nmap.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nmap.option =\nmap.optgroup = [1, '<select multiple=\"multiple\">', '</select>'];\n\nmap.thead =\nmap.tbody =\nmap.colgroup =\nmap.caption =\nmap.tfoot = [1, '<table>', '</table>'];\n\nmap.polyline =\nmap.ellipse =\nmap.polygon =\nmap.circle =\nmap.text =\nmap.line =\nmap.path =\nmap.rect =\nmap.g = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">','</svg>'];\n\n/**\n * Parse `html` and return a DOM Node instance, which could be a TextNode,\n * HTML DOM Node of some kind (<div> for example), or a DocumentFragment\n * instance, depending on the contents of the `html` string.\n *\n * @param {String} html - HTML string to \"domify\"\n * @param {Document} doc - The `document` instance to create the Node for\n * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance\n * @api private\n */\n\nfunction parse(html, doc) {\n  if ('string' != typeof html) throw new TypeError('String expected');\n\n  // default to the global `document` object\n  if (!doc) doc = document;\n\n  // tag name\n  var m = /<([\\w:]+)/.exec(html);\n  if (!m) return doc.createTextNode(html);\n\n  html = html.replace(/^\\s+|\\s+$/g, ''); // Remove leading/trailing whitespace\n\n  var tag = m[1];\n\n  // body support\n  if (tag == 'body') {\n    var el = doc.createElement('html');\n    el.innerHTML = html;\n    return el.removeChild(el.lastChild);\n  }\n\n  // wrap map\n  var wrap = Object.prototype.hasOwnProperty.call(map, tag) ? map[tag] : map._default;\n  var depth = wrap[0];\n  var prefix = wrap[1];\n  var suffix = wrap[2];\n  var el = doc.createElement('div');\n  el.innerHTML = prefix + html + suffix;\n  while (depth--) el = el.lastChild;\n\n  // one element\n  if (el.firstChild == el.lastChild) {\n    return el.removeChild(el.firstChild);\n  }\n\n  // several elements\n  var fragment = doc.createDocumentFragment();\n  while (el.firstChild) {\n    fragment.appendChild(el.removeChild(el.firstChild));\n  }\n\n  return fragment;\n}\n\nvar domify$1 = domify;\n\n/**\n * @param { HTMLElement } element\n * @param { String } selector\n *\n * @return { boolean }\n */\nfunction matches(element, selector) {\n  return element && typeof element.matches === 'function' && element.matches(selector) || false;\n}\n\nfunction query(selector, el) {\n  el = el || document;\n\n  return el.querySelector(selector);\n}\n\nfunction all(selector, el) {\n  el = el || document;\n\n  return el.querySelectorAll(selector);\n}\n\nfunction remove(el) {\n  el.parentNode && el.parentNode.removeChild(el);\n}\n\nexport { assign as assignStyle, attr, classes, clear, closest, delegate, domify$1 as domify, event, matches, query, all as queryAll, remove };\n//# sourceMappingURL=index.esm.js.map\n","'use strict';\n\nconst arrayMoveMutate = (array, from, to) => {\n\tconst startIndex = from < 0 ? array.length + from : from;\n\n\tif (startIndex >= 0 && startIndex < array.length) {\n\t\tconst endIndex = to < 0 ? array.length + to : to;\n\n\t\tconst [item] = array.splice(from, 1);\n\t\tarray.splice(endIndex, 0, item);\n\t}\n};\n\nconst arrayMove = (array, from, to) => {\n\tarray = [...array];\n\tarrayMoveMutate(array, from, to);\n\treturn array;\n};\n\nmodule.exports = arrayMove;\nmodule.exports.mutate = arrayMoveMutate;\n","import { parser, trackVariables } from 'lezer-feel';\nimport { syntaxTree, LRLanguage, indentNodeProp, delimitedIndent, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { snippetCompletion as snippetCompletion$1, completeFromList, ifNotIn } from '@codemirror/autocomplete';\n\n/**\n * A collection of FEEL-related [snippets](#autocomplete.snippet).\n */\nconst snippets = [snippetCompletion$1('function(${params}) ${body}', {\n  label: 'function',\n  detail: 'definition',\n  type: 'keyword'\n}), snippetCompletion$1('for ${var} in ${collection} return ${value}', {\n  label: 'for',\n  detail: 'expression',\n  type: 'keyword'\n}), snippetCompletion$1('every ${var} in ${collection} satisfies ${condition}', {\n  label: 'every',\n  detail: 'quantified expression',\n  type: 'keyword'\n}), snippetCompletion$1('some ${var} in ${collection} satisfies ${condition}', {\n  label: 'some',\n  detail: 'quantified expression',\n  type: 'keyword'\n}), snippetCompletion$1('if ${condition} then ${value} else ${other value}', {\n  label: 'if',\n  detail: 'block',\n  type: 'keyword'\n}), snippetCompletion$1('{ ${key}: ${value} }', {\n  label: 'context',\n  detail: 'block',\n  type: 'keyword'\n})];\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\nfunction contextualKeyword(options) {\n  const {\n    context: nodes,\n    after,\n    before,\n    keyword\n  } = options;\n  return ifInside({\n    nodes,\n    before,\n    after,\n    keyword\n  }, completeFromList([{\n    label: keyword,\n    type: 'keyword',\n    boost: 10\n  }]));\n}\nconst keywordCompletions = [contextualKeyword({\n  context: 'InExpression',\n  keyword: 'in'\n}), contextualKeyword({\n  context: 'IfExpression',\n  keyword: 'then',\n  after: 'if',\n  before: 'else'\n}), contextualKeyword({\n  context: 'IfExpression',\n  keyword: 'else',\n  after: 'then'\n}), contextualKeyword({\n  context: 'QuantifiedExpression',\n  keyword: 'satisfies'\n}), contextualKeyword({\n  context: 'ForExpression',\n  after: 'InExpressions',\n  keyword: 'return'\n})];\nconst dontComplete = ['StringLiteral', 'Identifier', 'LineComment', 'BlockComment'];\nfunction snippetCompletion(snippets) {\n  return ifNotIn(dontComplete, completeFromList(snippets.map(s => _extends({}, s, {\n    type: 'text'\n  }))));\n}\nfunction matchLeft(node, position, nodes) {\n  return matchChildren(node, position, nodes, -1);\n}\nfunction matchRight(node, position, nodes) {\n  return matchChildren(node, position, nodes, 1);\n}\nfunction matchChildren(node, position, nodes, direction) {\n  let child = node[direction > 0 ? 'childAfter' : 'childBefore'](position);\n  while (child) {\n    if (nodes.includes(child.name)) {\n      return child;\n    }\n    if (child.type.isError && child.firstChild) {\n      if (nodes.includes(child.firstChild.name)) {\n        return child.firstChild;\n      }\n    }\n    child = child[direction > 0 ? 'nextSibling' : 'prevSibling'];\n  }\n  return null;\n}\nfunction matchUp(node, nodeNames) {\n  if (!Array.isArray(nodeNames)) {\n    nodeNames = [nodeNames];\n  }\n  for (; node; node = node.parent) {\n    if (nodeNames.includes(node.name)) {\n      return node;\n    }\n    if (node.type.isTop) {\n      break;\n    }\n  }\n  return null;\n}\nfunction ifInside(options, source) {\n  const {\n    nodes,\n    before,\n    after,\n    keyword\n  } = options;\n  return context => {\n    const {\n      state,\n      pos\n    } = context;\n    const node = matchUp(syntaxTree(state).resolveInner(pos, -1), nodes);\n    if (!node) {\n      return null;\n    }\n    if (matchLeft(node, pos, [keyword, before])) {\n      return null;\n    }\n    if (matchRight(node, pos, [keyword, after])) {\n      return null;\n    }\n    if (after && !matchLeft(node, pos, [after])) {\n      return null;\n    }\n    return source(context);\n  };\n}\n\n/**\n * A FEEL language provider based on the\n * [Lezer FEEL parser](https://github.com/nikku/lezer-feel),\n * extended with highlighting and indentation information.\n */\nconst feelLanguage = LRLanguage.define({\n  parser: parser.configure({\n    props: [indentNodeProp.add({\n      'Context': delimitedIndent({\n        closing: '}'\n      }),\n      'List FilterExpression': delimitedIndent({\n        closing: ']'\n      }),\n      'ParenthesizedExpression FunctionInvocation': continuedIndent({\n        except: /^\\s*\\)/\n      }),\n      'ForExpression QuantifiedExpression IfExpression': continuedIndent({\n        except: /^\\s*(then|else|return|satisfies)\\b/\n      }),\n      'FunctionDefinition': continuedIndent({\n        except: /^\\s*(\\(|\\))/\n      })\n    }), foldNodeProp.add({\n      Context: foldInside,\n      List: foldInside,\n      ParenthesizedExpression: foldInside,\n      FunctionDefinition(node) {\n        const last = node.getChild(')');\n        if (!last) return null;\n        return {\n          from: last.to,\n          to: node.to\n        };\n      }\n    })]\n  }),\n  languageData: {\n    indentOnInput: /^\\s*(\\)|\\}|\\]|then|else|return|satisfies)$/,\n    commentTokens: {\n      line: '//',\n      block: {\n        open: '/*',\n        close: '*/'\n      }\n    }\n  }\n});\n/**\n * A language provider for FEEL Unary Tests\n */\nconst unaryTestsLanguage = feelLanguage.configure({\n  top: 'UnaryTests'\n});\n/**\n * Language provider for FEEL Expression\n */\nconst expressionLanguage = feelLanguage.configure({\n  top: 'Expression'\n});\n/**\n * Feel language support for CodeMirror.\n *\n * Includes [snippet](#lang-feel.snippets)\n */\nfunction feel(config = {}) {\n  const lang = config.dialect === 'unaryTests' ? unaryTestsLanguage : expressionLanguage;\n  const contextualLang = lang.configure({\n    contextTracker: trackVariables(config.context)\n  });\n  const completions = config.completions || [snippetCompletion(snippets), keywordCompletions].flat();\n  return new LanguageSupport(contextualLang, [...completions.map(autocomplete => feelLanguage.data.of({\n    autocomplete\n  }))]);\n}\n\nexport { contextualKeyword, dontComplete, expressionLanguage, feel, feelLanguage, ifInside, keywordCompletions, matchChildren, matchLeft, matchRight, snippetCompletion, snippets, unaryTestsLanguage };\n//# sourceMappingURL=index.js.map\n","import { snippetCompletion, autocompletion as autocompletion$1, completeFromList, closeBrackets } from '@codemirror/autocomplete';\nimport { defaultKeymap } from '@codemirror/commands';\nimport { syntaxTree, LanguageSupport, syntaxHighlighting, HighlightStyle, bracketMatching, indentOnInput } from '@codemirror/language';\nimport { linter as linter$1, setDiagnosticsEffect } from '@codemirror/lint';\nimport { Facet, Compartment, EditorState } from '@codemirror/state';\nimport { EditorView, tooltips, keymap, placeholder } from '@codemirror/view';\nimport { snippets, keywordCompletions, feelLanguage } from 'lang-feel';\nimport { domify } from 'min-dom';\nimport { cmFeelLinter } from '@bpmn-io/feel-lint';\nimport { tags as tags$1 } from '@lezer/highlight';\n\n// helpers ///////////////////////////////\n\nfunction isNodeEmpty(node) {\n  return node.from === node.to;\n}\n\nfunction isPathExpression(node) {\n  if (!node) {\n    return false;\n  }\n\n  if (node.name === 'PathExpression') {\n    return true;\n  }\n\n  return isPathExpression(node.parent);\n}\n\nvar tags = [\n\t{\n\t\tname: \"not(negand)\",\n\t\tdescription: \"<p>Returns the logical negation of the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">not(negand: boolean): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">not(true)\\n// false\\n\\nnot(null)\\n// null\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"is defined(value)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Checks if a given value is not <code>null</code>. If the value is <code>null</code> then the function returns <code>false</code>.\\nOtherwise, the function returns <code>true</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">is defined(value: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">is defined(1)\\n// true\\n\\nis defined(null)\\n// false\\n\\nis defined(x)\\n// false - if no variable &quot;x&quot; exists\\n\\nis defined(x.y)\\n// false - if no variable &quot;x&quot; exists or it doesn&#39;t have a property &quot;y&quot;\\n</code></pre>\\n<p>:::caution Breaking change</p>\\n<p>This function worked differently in previous versions. It returned <code>true</code> if the value was <code>null</code>.\\nSince this version, the function returns <code>false</code> if the value is <code>null</code>.</p>\\n<p>:::</p>\\n\"\n\t},\n\t{\n\t\tname: \"get or else(value, default)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Return the provided value parameter if not <code>null</code>, otherwise return the default parameter</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">get or else(value: Any, default: Any): Any\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">get or else(&quot;this&quot;, &quot;default&quot;)\\n// &quot;this&quot;\\n\\nget or else(null, &quot;default&quot;)\\n// &quot;default&quot;\\n\\nget or else(null, null)\\n// null\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"assert(value, condition)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Verify that the given condition is met. If the condition is <code>true</code>, the function returns the value.\\nOtherwise, the evaluation fails with an error.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">assert(value: Any, condition: Any)\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">assert(x, x != null)\\n// &quot;value&quot; - if x is &quot;value&quot;\\n// error - if x is null or doesn&#39;t exist\\n\\nassert(x, x &gt;= 0)\\n// 4 - if x is 4\\n// error - if x is less than zero\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"assert(value, condition, cause)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Verify that the given condition is met. If the condition is <code>true</code>, the function returns the value.\\nOtherwise, the evaluation fails with an error containing the given message.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">assert(value: Any, condition: Any, cause: String)\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">assert(x, x != null, &quot;&#39;x&#39; should not be null&quot;)\\n// &quot;value&quot; - if x is &quot;value&quot;\\n// error(&#39;x&#39; should not be null) - if x is null or doesn&#39;t exist\\n\\nassert(x, x &gt;= 0, &quot;&#39;x&#39; should be positive&quot;)\\n// 4 - if x is 4\\n// error(&#39;x&#39; should be positive) - if x is less than zero\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"get value(context, key)\",\n\t\tdescription: \"<p>Returns the value of the context entry with the given key.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">get value(context: context, key: string): Any\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">get value({foo: 123}, &quot;foo&quot;)\\n// 123\\n\\nget value({a: 1}, &quot;b&quot;)\\n// null\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"get value(context, keys)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Returns the value of the context entry for a context path defined by the given keys.</p>\\n<p>If <code>keys</code> contains the keys <code>[k1, k2]</code> then it returns the value at the nested entry <code>k1.k2</code> of the context.</p>\\n<p>If <code>keys</code> are empty or the nested entry defined by the keys doesn&#39;t exist in the context, it returns <code>null</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">get value(context: context, keys: list&lt;string&gt;): Any\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">get value({x:1, y: {z:0}}, [&quot;y&quot;, &quot;z&quot;])\\n// 0\\n\\nget value({x: {y: {z:0}}}, [&quot;x&quot;, &quot;y&quot;])\\n// {z:0}\\n\\nget value({a: {b: 3}}, [&quot;b&quot;])\\n// null\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"get entries(context)\",\n\t\tdescription: \"<p>Returns the entries of the context as a list of key-value-pairs.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">get entries(context: context): list&lt;context&gt;\\n</code></pre>\\n<p>The return value is a list of contexts. Each context contains two entries for &quot;key&quot; and &quot;value&quot;.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">get entries({foo: 123})\\n// [{key: &quot;foo&quot;, value: 123}]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"context put(context, key, value)\",\n\t\tdescription: \"<p>Adds a new entry with the given key and value to the context. Returns a new context that includes the entry.</p>\\n<p>If an entry for the same key already exists in the context, it overrides the value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">context put(context: context, key: string, value: Any): context\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">context put({x:1}, &quot;y&quot;, 2)\\n// {x:1, y:2}\\n</code></pre>\\n<p>:::info\\nThe function <code>context put()</code> replaced the previous function <code>put()</code> (Camunda Extension). The\\nprevious function is deprecated and should not be used anymore.\\n:::</p>\\n\"\n\t},\n\t{\n\t\tname: \"context put(context, keys, value)\",\n\t\tdescription: \"<p>Adds a new entry with the given value to the context. The path of the entry is defined by the keys. Returns a new context that includes the entry.</p>\\n<p>If <code>keys</code> contains the keys <code>[k1, k2]</code> then it adds the nested entry <code>k1.k2 = value</code> to the context.</p>\\n<p>If an entry for the same keys already exists in the context, it overrides the value.</p>\\n<p>If <code>keys</code> are empty, it returns <code>null</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">context put(context: context, keys: list&lt;string&gt;, value: Any): context\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">context put({x:1}, [&quot;y&quot;], 2)\\n// {x:1, y:2}\\n\\ncontext put({x:1, y: {z:0}}, [&quot;y&quot;, &quot;z&quot;], 2)\\n// {x:1, y: {z:2}}\\n\\ncontext put({x:1}, [&quot;y&quot;, &quot;z&quot;], 2)\\n// {x:1, y: {z:2}}\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"context merge(contexts)\",\n\t\tdescription: \"<p>Union the given contexts. Returns a new context that includes all entries of the given contexts.</p>\\n<p>If an entry for the same key already exists in a context, it overrides the value. The entries are overridden in the same order as in the list of contexts.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">context merge(contexts: list&lt;context&gt;): context\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">context merge([{x:1}, {y:2}])\\n// {x:1, y:2}\\n\\ncontext merge([{x:1, y: 0}, {y:2}])\\n// {x:1, y:2}\\n</code></pre>\\n<p>:::info\\nThe function <code>context merge()</code> replaced the previous function <code>put all()</code> (Camunda Extension). The\\nprevious function is deprecated and should not be used anymore.\\n:::</p>\\n\"\n\t},\n\t{\n\t\tname: \"string(from)\",\n\t\tdescription: \"<p>Returns the given value as a string representation.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">string(from: Any): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">string(1.1)\\n// &quot;1.1&quot;\\n\\nstring(date(&quot;2012-12-25&quot;))\\n// &quot;2012-12-25&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"number(from)\",\n\t\tdescription: \"<p>Parses the given string to a number.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">number(from: string): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">number(&quot;1500.5&quot;)\\n// 1500.5\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"context(entries)\",\n\t\tdescription: \"<p>Constructs a context of the given list of key-value pairs. It is the reverse function to <a href=\\\"feel-built-in-functions-context.md#get-entriescontext\\\">get entries()</a>.</p>\\n<p>Each key-value pair must be a context with two entries: <code>key</code> and <code>value</code>. The entry with name <code>key</code> must have a value of the type <code>string</code>.</p>\\n<p>It might override context entries if the keys are equal. The entries are overridden in the same order as the contexts in the given list.</p>\\n<p>Returns <code>null</code> if one of the entries is not a context or if a context doesn&#39;t contain the required entries.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">context(entries: list&lt;context&gt;): context\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">context([{&quot;key&quot;:&quot;a&quot;, &quot;value&quot;:1}, {&quot;key&quot;:&quot;b&quot;, &quot;value&quot;:2}])\\n// {a:1, b:2}\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"date(from)\",\n\t\tdescription: \"<p>Returns a date from the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">date(from: string): date\\n</code></pre>\\n<p>Parses the given string into a date.</p>\\n<pre><code class=\\\"language-feel\\\">date(from: date and time): date\\n</code></pre>\\n<p>Extracts the date component from the given date and time.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">date(&quot;2018-04-29&quot;)\\n// date(&quot;2018-04-29&quot;)\\n\\ndate(date and time(&quot;2012-12-25T11:00:00&quot;))\\n// date(&quot;2012-12-25&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"date(year, month, day)\",\n\t\tdescription: \"<p>Returns a date from the given components.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">date(year: number, month: number, day: number): date\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">date(2012, 12, 25)\\n// date(&quot;2012-12-25&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"time(from)\",\n\t\tdescription: \"<p>Returns a time from the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(from: string): time\\n</code></pre>\\n<p>Parses the given string into a time.</p>\\n<pre><code class=\\\"language-feel\\\">time(from: date and time): time\\n</code></pre>\\n<p>Extracts the time component from the given date and time.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(&quot;12:00:00&quot;)\\n// time(&quot;12:00:00&quot;)\\n\\ntime(date and time(&quot;2012-12-25T11:00:00&quot;))\\n// time(&quot;11:00:00&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"time(hour, minute, second)\",\n\t\tdescription: \"<p>Returns a time from the given components.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(hour: number, minute: number, second: number): time\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(23, 59, 0)\\n// time(&quot;23:59:00&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"time(hour, minute, second, offset)\",\n\t\tdescription: \"<p>Returns a time from the given components, including a timezone offset.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(hour: number, minute: number, second: number, offset: days and time duration): time\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">time(14, 30, 0, duration(&quot;PT1H&quot;))\\n// time(&quot;14:30:00+01:00&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"date and time(from)\",\n\t\tdescription: \"<p>Parses the given string into a date and time.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(from: string): date and time\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(&quot;2018-04-29T009:30:00&quot;)\\n// date and time(&quot;2018-04-29T009:30:00&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"date and time(date, time)\",\n\t\tdescription: \"<p>Returns a date and time from the given components.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(date: date, time: time): date and time\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">date and time(date: date and time, time: time): date and time\\n</code></pre>\\n<p>Returns a date and time value that consists of the date component of <code>date</code> combined with <code>time</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(date(&quot;2012-12-24&quot;),time(&quot;T23:59:00&quot;))\\n// date and time(&quot;2012-12-24T23:59:00&quot;)\\n\\ndate and time(date and time(&quot;2012-12-25T11:00:00&quot;),time(&quot;T23:59:00&quot;))\\n// date and time(&quot;2012-12-25T23:59:00&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"date and time(date, timezone)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Returns the given date and time value at the given timezone.</p>\\n<p>If <code>date</code> has a different timezone than <code>timezone</code> then it adjusts the time to match the local time of <code>timezone</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(date: date and time, timezone: string): date and time\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">date and time(@&quot;2020-07-31T14:27:30@Europe/Berlin&quot;, &quot;America/Los_Angeles&quot;)\\n// date and time(&quot;2020-07-31T05:27:30@America/Los_Angeles&quot;)\\n\\ndate and time(@&quot;2020-07-31T14:27:30&quot;, &quot;Z&quot;)\\n// date and time(&quot;2020-07-31T12:27:30Z&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"duration(from)\",\n\t\tdescription: \"<p>Parses the given string into a duration. The duration is either a days and time duration or a years and months duration.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">duration(from: string): days and time duration\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">duration(from: string): years and months duration\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">duration(&quot;P5D&quot;)\\n// duration(&quot;P5D&quot;)\\n\\nduration(&quot;P32Y&quot;)\\n// duration(&quot;P32Y&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"years and months duration(from, to)\",\n\t\tdescription: \"<p>Returns the years and months duration between <code>from</code> and <code>to</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">years and months duration(from: date, to: date): years and months duration\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">years and months duration(date(&quot;2011-12-22&quot;), date(&quot;2013-08-24&quot;))\\n// duration(&quot;P1Y8M&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"list contains(list, element)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given list contains the element. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">list contains(list: list, element: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">list contains([1,2,3], 2)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"count(list)\",\n\t\tdescription: \"<p>Returns the number of elements of the given list.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">count(list: list): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">count([1,2,3])\\n// 3\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"min(list)\",\n\t\tdescription: \"<p>Returns the minimum of the given list.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">min(list: list): Any\\n</code></pre>\\n<p>All elements in <code>list</code> should have the same type and be comparable.</p>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">min([1,2,3])\\n// 1\\n\\nmin(1,2,3)\\n// 1\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"max(list)\",\n\t\tdescription: \"<p>Returns the maximum of the given list.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">max(list: list): Any\\n</code></pre>\\n<p>All elements in <code>list</code> should have the same type and be comparable.</p>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">max([1,2,3])\\n// 3\\n\\nmax(1,2,3)\\n// 3\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"sum(list)\",\n\t\tdescription: \"<p>Returns the sum of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">sum(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">sum([1,2,3])\\n// 6\\n\\nsum(1,2,3)\\n// 6\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"product(list)\",\n\t\tdescription: \"<p>Returns the product of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">product(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">product([2, 3, 4])\\n// 24\\n\\nproduct(2, 3, 4)\\n// 24\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"mean(list)\",\n\t\tdescription: \"<p>Returns the arithmetic mean (i.e. average) of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">mean(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">mean([1,2,3])\\n// 2\\n\\nmean(1,2,3)\\n// 2\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"median(list)\",\n\t\tdescription: \"<p>Returns the median element of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">median(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">median(8, 2, 5, 3, 4)\\n// 4\\n\\nmedian([6, 1, 2, 3])\\n// 2.5\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"stddev(list)\",\n\t\tdescription: \"<p>Returns the standard deviation of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">stddev(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">stddev(2, 4, 7, 5)\\n// 2.0816659994661326\\n\\nstddev([2, 4, 7, 5])\\n// 2.0816659994661326\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"mode(list)\",\n\t\tdescription: \"<p>Returns the mode of the given list of numbers.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">mode(list: list&lt;number&gt;): number\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">mode(6, 3, 9, 6, 6)\\n// [6]\\n\\nmode([6, 1, 9, 6, 1])\\n// [1, 6]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"all(list)\",\n\t\tdescription: \"<p>Returns <code>false</code> if any element of the given list is <code>false</code>. Otherwise, returns <code>true</code>.</p>\\n<p>If the given list is empty, it returns <code>true</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">all(list: list&lt;boolean&gt;): boolean\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">all([true,false])\\n// false\\n\\nall(false,null,true)\\n// false\\n</code></pre>\\n<p>:::info\\nThe function <code>all()</code> replaced the previous function <code>and()</code>. The previous function is deprecated and\\nshould not be used anymore.\\n:::</p>\\n\"\n\t},\n\t{\n\t\tname: \"any(list)\",\n\t\tdescription: \"<p>Returns <code>true</code> if any element of the given list is <code>true</code>. Otherwise, returns <code>false</code>.</p>\\n<p>If the given list is empty, it returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">any(list: list&lt;boolean&gt;): boolean\\n</code></pre>\\n<p>The parameter <code>list</code> can be passed as a list or as a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">any([false,true])\\n// true\\n\\nany(false,null,true)\\n// true\\n</code></pre>\\n<p>:::info\\nThe function <code>any()</code> replaced the previous function <code>or()</code>. The previous function is deprecated and\\nshould not be used anymore.\\n:::</p>\\n\"\n\t},\n\t{\n\t\tname: \"sublist(list, start position)\",\n\t\tdescription: \"<p>Returns a partial list of the given value starting at <code>start position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">sublist(list: list, start position: number): list\\n</code></pre>\\n<p>The <code>start position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">sublist([1,2,3], 2)\\n// [2,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"sublist(list, start position, length)\",\n\t\tdescription: \"<p>Returns a partial list of the given value starting at <code>start position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">sublist(list: list, start position: number, length: number): list\\n</code></pre>\\n<p>The <code>start position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">sublist([1,2,3], 1, 2)\\n// [1,2]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"append(list, items)\",\n\t\tdescription: \"<p>Returns the given list with all <code>items</code> appended.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">append(list: list, items: Any): list\\n</code></pre>\\n<p>The parameter <code>items</code> can be a single element or a sequence of elements.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">append([1], 2, 3)\\n// [1,2,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"concatenate(lists)\",\n\t\tdescription: \"<p>Returns a list that includes all elements of the given lists.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">concatenate(lists: list): list\\n</code></pre>\\n<p>The parameter <code>lists</code> is a sequence of lists.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">concatenate([1,2],[3])\\n// [1,2,3]\\n\\nconcatenate([1],[2],[3])\\n// [1,2,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"insert before(list, position, newItem)\",\n\t\tdescription: \"<p>Returns the given list with <code>newItem</code> inserted at <code>position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">insert before(list: list, position: number, newItem: Any): list\\n</code></pre>\\n<p>The <code>position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">insert before([1,3],1,2)\\n// [2,1,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"remove(list, position)\",\n\t\tdescription: \"<p>Returns the given list without the element at <code>position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">remove(list: list, position: number): list\\n</code></pre>\\n<p>The <code>position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">remove([1,2,3], 2)\\n// [1,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"reverse(list)\",\n\t\tdescription: \"<p>Returns the given list in revered order.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">reverse(list: list): list\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">reverse([1,2,3])\\n// [3,2,1]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"index of(list, match)\",\n\t\tdescription: \"<p>Returns an ascending list of positions containing <code>match</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">index of(list: list, match: Any): list&lt;number&gt;\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">index of([1,2,3,2],2)\\n// [2,4]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"union(list)\",\n\t\tdescription: \"<p>Returns a list that includes all elements of the given lists without duplicates.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">union(list: list): list\\n</code></pre>\\n<p>The parameter <code>list</code> is a sequence of lists.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">union([1,2],[2,3])\\n// [1,2,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"distinct values(list)\",\n\t\tdescription: \"<p>Returns the given list without duplicates.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">distinct values(list: list): list\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">distinct values([1,2,3,2,1])\\n// [1,2,3]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"duplicate values(list)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Returns all duplicate values of the given list.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">duplicate values(list: list): list\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">duplicate values([1,2,3,2,1])\\n// [1,2]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"flatten(list)\",\n\t\tdescription: \"<p>Returns a list that includes all elements of the given list without nested lists.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">flatten(list: list): list\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">flatten([[1,2],[[3]], 4])\\n// [1,2,3,4]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"sort(list, precedes)\",\n\t\tdescription: \"<p>Returns the given list sorted by the <code>precedes</code> function.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">sort(list: list, precedes: function&lt;(Any, Any) -&gt; boolean&gt;): list\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">sort(list: [3,1,4,5,2], precedes: function(x,y) x &lt; y)\\n// [1,2,3,4,5]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"string join(list)\",\n\t\tdescription: \"<p>Joins a list of strings into a single string. This is similar to\\nJava&#39;s <a href=\\\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Collectors.html#joining(java.lang.CharSequence,java.lang.CharSequence,java.lang.CharSequence)\\\">joining</a>\\nfunction.</p>\\n<p>If an item of the list is <code>null</code>, the item is ignored for the result string. If an item is\\nneither a string nor <code>null</code>, the function returns <code>null</code> instead of a string.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join(list: list&lt;string&gt;): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join([&quot;a&quot;,&quot;b&quot;,&quot;c&quot;])\\n// &quot;abc&quot;\\n\\nstring join([&quot;a&quot;,null,&quot;c&quot;])\\n// &quot;ac&quot;\\n\\nstring join([])\\n// &quot;&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"string join(list, delimiter)\",\n\t\tdescription: \"<p>Joins a list of strings into a single string. This is similar to\\nJava&#39;s <a href=\\\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Collectors.html#joining(java.lang.CharSequence,java.lang.CharSequence,java.lang.CharSequence)\\\">joining</a>\\nfunction.</p>\\n<p>If an item of the list is <code>null</code>, the item is ignored for the result string. If an item is\\nneither a string nor <code>null</code>, the function returns <code>null</code> instead of a string.</p>\\n<p>The resulting string contains a <code>delimiter</code> between each element.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join(list: list&lt;string&gt;, delimiter: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join([&quot;a&quot;], &quot;X&quot;)\\n// &quot;a&quot;\\n\\nstring join([&quot;a&quot;,&quot;b&quot;,&quot;c&quot;], &quot;, &quot;)\\n// &quot;a, b, c&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"string join(list, delimiter, prefix, suffix)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Joins a list of strings into a single string. This is similar to\\nJava&#39;s <a href=\\\"https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Collectors.html#joining(java.lang.CharSequence,java.lang.CharSequence,java.lang.CharSequence)\\\">joining</a>\\nfunction.</p>\\n<p>If an item of the list is <code>null</code>, the item is ignored for the result string. If an item is\\nneither a string nor <code>null</code>, the function returns <code>null</code> instead of a string.</p>\\n<p>The resulting string starts with <code>prefix</code>, contains a <code>delimiter</code> between each element, and ends\\nwith <code>suffix</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join(list: list&lt;string&gt;, delimiter: string, prefix: string, suffix: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">string join([&quot;a&quot;,&quot;b&quot;,&quot;c&quot;], &quot;, &quot;, &quot;[&quot;, &quot;]&quot;)\\n// &quot;[a, b, c]&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"decimal(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">decimal(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">decimal(1/3, 2)\\n// .33\\n\\ndecimal(1.5, 0)\\n// 2\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"floor(n)\",\n\t\tdescription: \"<p>Rounds the given value with rounding mode flooring.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">floor(n: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">floor(1.5)\\n// 1\\n\\nfloor(-1.5)\\n// -2\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"floor(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with rounding mode flooring at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">floor(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">floor(-1.56, 1)\\n// -1.6\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"ceiling(n)\",\n\t\tdescription: \"<p>Rounds the given value with rounding mode ceiling.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">ceiling(n: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">ceiling(1.5)\\n// 2\\n\\nceiling(-1.5)\\n// -1\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"ceiling(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with rounding mode ceiling at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">ceiling(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">ceiling(-1.56, 1)\\n// -1.5\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"round up(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with the rounding mode round-up at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">round up(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">round up(5.5)\\n// 6\\n\\nround up(-5.5)\\n// -6\\n\\nround up(1.121, 2)\\n// 1.13\\n\\nround up(-1.126, 2)\\n// -1.13\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"round down(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with the rounding mode round-down at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">round down(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">round down(5.5, 0)\\n// 5\\n\\nround down (-5.5, 0)\\n// -5\\n\\nround down (1.121, 2)\\n// 1.12\\n\\nround down (-1.126, 2)\\n// -1.12\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"round half up(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with the rounding mode round-half-up at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">round half up(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">round half up(5.5, 0)\\n// 6\\n\\nround half up(-5.5, 0)\\n// -6\\n\\nround half up(1.121, 2)\\n// 1.12\\n\\nround half up(-1.126, 2)\\n// -1.13\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"round half down(n, scale)\",\n\t\tdescription: \"<p>Rounds the given value with the rounding mode round-half-down at the given scale.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">round half down(n: number, scale: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">round half down (5.5, 0)\\n// 5\\n\\nround half down (-5.5, 0)\\n// -5\\n\\nround half down (1.121, 2)\\n// 1.12\\n\\nround half down (-1.126, 2)\\n// -1.13\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"abs(number)\",\n\t\tdescription: \"<p>Returns the absolute value of the given numeric value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">abs(number: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">abs(10)\\n// 10\\n\\nabs(-10)\\n// 10\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"modulo(dividend, divisor)\",\n\t\tdescription: \"<p>Returns the remainder of the division of dividend by divisor.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">modulo(dividend: number, divisor: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">modulo(12, 5)\\n// 2\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"sqrt(number)\",\n\t\tdescription: \"<p>Returns the square root of the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">sqrt(number: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">sqrt(16)\\n// 4\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"log(number)\",\n\t\tdescription: \"<p>Returns the natural logarithm (base e) of the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">log(number: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">log(10)\\n// 2.302585092994046\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"exp(number)\",\n\t\tdescription: \"<p>Returns the Euler’s number e raised to the power of the given number .</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">exp(number: number): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">exp(5)\\n// 148.4131591025766\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"odd(number)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value is odd. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">odd(number: number): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">odd(5)\\n// true\\n\\nodd(2)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"even(number)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given is even. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">even(number: number): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">even(5)\\n// false\\n\\neven(2)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"random number()\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Returns a random number between <code>0</code> and <code>1</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">random number(): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">random number()\\n// 0.9701618132579795\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"before(point1, point2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(point1: Any, point2: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(1, 10)\\n// true\\n\\nbefore(10, 1)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"before(range, point)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(range: range, point: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">before([1..5], 10)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"before(point, range)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(point: Any, range: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(1, [2..5])\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"before(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">before(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">before([1..5], [6..10])\\n// true\\n\\nbefore([1..5),[5..10])\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"after(point1, point2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(point1: Any, point2: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(10, 1)\\n// true\\n\\nafter(1, 10)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"after(range, point)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(range: range, point: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">after([1..5], 10)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"after(point, range)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(point: Any, range: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(12, [2..5])\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"after(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">after(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">after([6..10], [1..5])\\n// true\\n\\nafter([5..10], [1..5))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"meets(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">meets(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">meets([1..5], [5..10])\\n// true\\n\\nmeets([1..3], [4..6])\\n// false\\n\\nmeets([1..3], [3..5])\\n// true\\n\\nmeets([1..5], (5..8])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"met by(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">met by(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">met by([5..10], [1..5])\\n// true\\n\\nmet by([3..4], [1..2])\\n// false\\n\\nmet by([3..5], [1..3])\\n// true\\n\\nmet by((5..8], [1..5))\\n// false\\n\\nmet by([5..10], [1..5))\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"overlaps(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps([5..10], [1..6])\\n// true\\n\\noverlaps((3..7], [1..4])\\n// true\\n\\noverlaps([1..3], (3..6])\\n// false\\n\\noverlaps((5..8], [1..5))\\n// false\\n\\noverlaps([4..10], [1..5))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"overlaps before(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps before(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps before([1..5], [4..10])\\n// true\\n\\noverlaps before([3..4], [1..2])\\n// false\\n\\noverlaps before([1..3], (3..5])\\n// false\\n\\noverlaps before([1..5), (3..8])\\n// true\\n\\noverlaps before([1..5), [5..10])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"overlaps after(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps after(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">overlaps after([4..10], [1..5])\\n// true\\n\\noverlaps after([3..4], [1..2])\\n// false\\n\\noverlaps after([3..5], [1..3))\\n// false\\n\\noverlaps after((5..8], [1..5))\\n// false\\n\\noverlaps after([4..10], [1..5))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"finishes(point, range)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">finishes(point: Any, range: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">finishes(5, [1..5])\\n// true\\n\\nfinishes(10, [1..7])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"finishes(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">finishes(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">finishes([3..5], [1..5])\\n// true\\n\\nfinishes((1..5], [1..5))\\n// false\\n\\nfinishes([5..10], [1..10))\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"finished by(range, point)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">finished by(range: range, point: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">finished by([5..10], 10)\\n// true\\n\\nfinished by([3..4], 2)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"finished by(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">finished by(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">finished by([1..5], [3..5])\\n// true\\n\\nfinished by((5..8], [1..5))\\n// false\\n\\nfinished by([5..10], (1..10))\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"includes(range, point)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">includes(range: range, point: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">includes([5..10], 6)\\n// true\\n\\nincludes([3..4], 5)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"includes(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">includes(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">includes([1..10], [4..6])\\n// true\\n\\nincludes((5..8], [1..5))\\n// false\\n\\nincludes([1..10], [1..5))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"during(point, range)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">during(point: Any, range: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">during(5, [1..10])\\n// true\\n\\nduring(12, [1..10])\\n// false\\n\\nduring(1, (1..10])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"during(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">during(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">during([4..6], [1..10))\\n// true\\n\\nduring((1..5], (1..10])\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"starts(point, range)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts(point: Any, range: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts(1, [1..5])\\n// true\\n\\nstarts(1, (1..8])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"starts(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts((1..5], [1..5])\\n// false\\n\\nstarts([1..10], [1..5])\\n// false\\n\\nstarts((1..5), (1..10))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"started by(range, point)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">started by(range: range, point: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">started by([1..10], 1)\\n// true\\n\\nstarted by((1..10], 1)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"started by(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">started by(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">started by([1..10], [1..5])\\n// true\\n\\nstarted by((1..10], [1..5))\\n// false\\n\\nstarted by([1..10], [1..10))\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"coincides(point1, point2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">coincides(point1: Any, point2: Any): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">coincides(5, 5)\\n// true\\n\\ncoincides(3, 4)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"coincides(range1, range2)\",\n\t\tdescription: \"<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">coincides(range1: range, range2: range): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">coincides([1..5], [1..5])\\n// true\\n\\ncoincides((1..5], [1..5))\\n// false\\n\\ncoincides([1..5], [2..6])\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"substring(string, start position)\",\n\t\tdescription: \"<p>Returns a substring of the given value starting at <code>start position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring(string: string, start position: number): string\\n</code></pre>\\n<p>The <code>start position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring(&quot;foobar&quot;, 3)\\n// &quot;obar&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"substring(string, start position, length)\",\n\t\tdescription: \"<p>Returns a substring of the given value starting at <code>start position</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring(string: string, start position: number, length: number): string\\n</code></pre>\\n<p>The <code>start position</code> starts at the index <code>1</code>. The last position is <code>-1</code>.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring(&quot;foobar&quot;, 3, 3)\\n// &quot;oba&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"string length(string)\",\n\t\tdescription: \"<p>Returns the number of characters in the given value.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">string length(string: string): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">string length(&quot;foo&quot;)\\n// 3\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"upper case(string)\",\n\t\tdescription: \"<p>Returns the given value with all characters are uppercase.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">upper case(string: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">upper case(&quot;aBc4&quot;)\\n// &quot;ABC4&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"lower case(string)\",\n\t\tdescription: \"<p>Returns the given value with all characters are lowercase.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">lower case(string: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">lower case(&quot;aBc4&quot;)\\n// &quot;abc4&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"substring before(string, match)\",\n\t\tdescription: \"<p>Returns a substring of the given value that contains all characters before <code>match</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring before(string: string, match: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring before(&quot;foobar&quot;, &quot;bar&quot;)\\n// &quot;foo&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"substring after(string, match)\",\n\t\tdescription: \"<p>Returns a substring of the given value that contains all characters after <code>match</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring after(string: string, match: string): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">substring after(&quot;foobar&quot;, &quot;ob&quot;)\\n// &quot;ar&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"contains(string, match)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value contains the substring <code>match</code>. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">contains(string: string, match: string): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">contains(&quot;foobar&quot;, &quot;of&quot;)\\n// false\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"starts with(string, match)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value starts with the substring <code>match</code>. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts with(string: string, match: string): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">starts with(&quot;foobar&quot;, &quot;fo&quot;)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"ends with(string, match)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value ends with the substring <code>match</code>. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">ends with(string: string, match: string): boolean\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">ends with(&quot;foobar&quot;, &quot;r&quot;)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"matches(input, pattern)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value matches the <code>pattern</code>. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">matches(input: string, pattern: string): boolean\\n</code></pre>\\n<p>The <code>pattern</code> is a string that contains a regular expression.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">matches(&quot;foobar&quot;, &quot;^fo*bar&quot;)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"matches(input, pattern, flags)\",\n\t\tdescription: \"<p>Returns <code>true</code> if the given value matches the <code>pattern</code>. Otherwise, returns <code>false</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">matches(input: string, pattern: string, flags: string): boolean\\n</code></pre>\\n<p>The <code>pattern</code> is a string that contains a regular expression.</p>\\n<p>The <code>flags</code> can contain one or more of the following characters:</p>\\n<ul>\\n<li><code>s</code> (dot-all)</li>\\n<li><code>m</code> (multi-line)</li>\\n<li><code>i</code> (case insensitive)</li>\\n<li><code>x</code> (comments)</li>\\n</ul>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">matches(&quot;FooBar&quot;, &quot;foo&quot;, &quot;i&quot;)\\n// true\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"replace(input, pattern, replacement)\",\n\t\tdescription: \"<p>Returns the resulting string after replacing all occurrences of <code>pattern</code> with <code>replacement</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">replace(input: string, pattern: string, replacement: string): string\\n</code></pre>\\n<p>The <code>pattern</code> is a string that contains a regular expression.</p>\\n<p>The <code>replacement</code> can access the match groups by using <code>$</code> and the number of the group, for example,\\n<code>$1</code> to access the first group.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">replace(&quot;abcd&quot;, &quot;(ab)|(a)&quot;, &quot;[1=$1][2=$2]&quot;)\\n// &quot;[1=ab][2=]cd&quot;\\n\\nreplace(&quot;0123456789&quot;, &quot;(\\\\d{3})(\\\\d{3})(\\\\d{4})&quot;, &quot;($1) $2-$3&quot;)\\n// &quot;(012) 345-6789&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"replace(input, pattern, replacement, flags)\",\n\t\tdescription: \"<p>Returns the resulting string after replacing all occurrences of <code>pattern</code> with <code>replacement</code>.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">replace(input: string, pattern: string, replacement: string, flags: string): string\\n</code></pre>\\n<p>The <code>pattern</code> is a string that contains a regular expression.</p>\\n<p>The <code>replacement</code> can access the match groups by using <code>$</code> and the number of the group, for example,\\n<code>$1</code> to access the first group.</p>\\n<p>The <code>flags</code> can contain one or more of the following characters:</p>\\n<ul>\\n<li><code>s</code> (dot-all)</li>\\n<li><code>m</code> (multi-line)</li>\\n<li><code>i</code> (case insensitive)</li>\\n<li><code>x</code> (comments)</li>\\n</ul>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">replace(&quot;How do you feel?&quot;, &quot;Feel&quot;, &quot;FEEL&quot;, &quot;i&quot;)\\n// &quot;How do you FEEL?&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"split(string, delimiter)\",\n\t\tdescription: \"<p>Splits the given value into a list of substrings, breaking at each occurrence of the <code>delimiter</code> pattern.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">split(string: string, delimiter: string): list&lt;string&gt;\\n</code></pre>\\n<p>The <code>delimiter</code> is a string that contains a regular expression.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">split(&quot;John Doe&quot;, &quot;\\\\s&quot; )\\n// [&quot;John&quot;, &quot;Doe&quot;]\\n\\nsplit(&quot;a;b;c;;&quot;, &quot;;&quot;)\\n// [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;&quot;, &quot;&quot;]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"extract(string, pattern)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Returns all matches of the pattern in the given string. Returns an empty list if the pattern doesn&#39;t\\nmatch.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">extract(string: string, pattern: string): list&lt;string&gt;\\n</code></pre>\\n<p>The <code>pattern</code> is a string that contains a regular expression.</p>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">extract(&quot;references are 1234, 1256, 1378&quot;, &quot;12[0-9]*&quot;)\\n// [&quot;1234&quot;,&quot;1256&quot;]\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"now()\",\n\t\tdescription: \"<p>Returns the current date and time including the timezone.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">now(): date and time\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">now()\\n// date and time(&quot;2020-07-31T14:27:30@Europe/Berlin&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"today()\",\n\t\tdescription: \"<p>Returns the current date.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">today(): date\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">today()\\n// date(&quot;2020-07-31&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"day of week(date)\",\n\t\tdescription: \"<p>Returns the day of the week according to the Gregorian calendar. Note that it always returns the English name of the day.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">day of week(date: date): string\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">day of week(date: date and time): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">day of week(date(&quot;2019-09-17&quot;))\\n// &quot;Tuesday&quot;\\n\\nday of week(date and time(&quot;2019-09-17T12:00:00&quot;))\\n// &quot;Tuesday&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"day of year(date)\",\n\t\tdescription: \"<p>Returns the Gregorian number of the day within the year.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">day of year(date: date): number\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">day of year(date: date and time): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">day of year(date(&quot;2019-09-17&quot;))\\n// 260\\n\\nday of year(date and time(&quot;2019-09-17T12:00:00&quot;))\\n// 260\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"week of year(date)\",\n\t\tdescription: \"<p>Returns the Gregorian number of the week within the year, according to ISO 8601.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">week of year(date: date): number\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">week of year(date: date and time): number\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">week of year(date(&quot;2019-09-17&quot;))\\n// 38\\n\\nweek of year(date and time(&quot;2019-09-17T12:00:00&quot;))\\n// 38\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"month of year(date)\",\n\t\tdescription: \"<p>Returns the month of the year according to the Gregorian calendar. Note that it always returns the English name of the month.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">month of year(date: date): string\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">month of year(date: date and time): string\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">month of year(date(&quot;2019-09-17&quot;))\\n// &quot;September&quot;\\n\\nmonth of year(date and time(&quot;2019-09-17T12:00:00&quot;))\\n// &quot;September&quot;\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"abs(n)\",\n\t\tdescription: \"<p>Returns the absolute value of a given duration.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">abs(n: days and time duration): days and time duration\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">abs(n: years and months duration): years and months duration\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">abs(duration(&quot;-PT5H&quot;))\\n// &quot;duration(&quot;PT5H&quot;)&quot;\\n\\nabs(duration(&quot;PT5H&quot;))\\n// &quot;duration(&quot;PT5H&quot;)&quot;\\n\\nabs(duration(&quot;-P2M&quot;))\\n// duration(&quot;P2M&quot;)\\n</code></pre>\\n\"\n\t},\n\t{\n\t\tname: \"last day of month(date)\",\n\t\tdescription: \"<p><em>Camunda Extension</em></p>\\n<p>Takes the month of the given date or date-time value and returns the last day of this month.</p>\\n<p><strong>Function signature</strong></p>\\n<pre><code class=\\\"language-feel\\\">last day of month(date: date): date\\n</code></pre>\\n<pre><code class=\\\"language-feel\\\">last day of month(date: date and time): date\\n</code></pre>\\n<p><strong>Examples</strong></p>\\n<pre><code class=\\\"language-feel\\\">last day of month(date(&quot;2022-10-01&quot;))\\n// date(&quot;2022-10-31&quot;))\\n\\nlast day of month(date and time(&quot;2022-10-16T12:00:00&quot;))\\n// date(&quot;2022-10-31&quot;))\\n</code></pre>\\n\"\n\t}\n];\n\nconst options = tags.map(tag => {\n  const match = tag.name.match(/^([\\w\\s]+)\\((.*)\\)$/);\n  const functionName = match[1];\n  const functionArguments = match[2];\n\n  const placeHolders = functionArguments\n    .split(', ')\n    .map((arg) => `\\${${arg}}`)\n    .join(', ');\n\n  return snippetCompletion(\n    `${functionName}(${placeHolders})`,\n    {\n      label: tag.name,\n      type: 'function',\n      info: () => {\n        const html = domify(`<div class=\"description\">${tag.description}<div>`);\n        return html;\n      },\n      boost: -1\n    }\n  );\n});\n\nvar builtins = context => {\n\n  let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n  // For the special case of empty nodes, we need to check the current node\n  // as well. The previous node could be part of another token, e.g.\n  // when typing functions \"abs(\".\n  let nextNode = nodeBefore.nextSibling;\n  const isInEmptyNode =\n        isNodeEmpty(nodeBefore) ||\n        nextNode && nextNode.from === context.pos && isNodeEmpty(nextNode);\n\n  if (isInEmptyNode) {\n    return context.explicit ? {\n      from: context.pos,\n      options: options\n    } : null;\n  }\n\n  // Don't auto-complete on path expressions/context keys/...\n  if ((nodeBefore.parent && nodeBefore.parent.name !== 'VariableName') || isPathExpression(nodeBefore)) {\n    return null;\n  }\n\n  return {\n    from: nodeBefore.from,\n    options: options\n  };\n};\n\n/**\n * @type {Facet<import('..').Variable[]>} Variable\n */\nconst variablesFacet = Facet.define();\n\nvar pathExpression = context => {\n  const variables = context.state.facet(variablesFacet)[0];\n  const nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n  if (!isPathExpression(nodeBefore)) {\n    return;\n  }\n\n  const expression = findPathExpression(nodeBefore);\n\n  // if the cursor is directly after the `.`, variable starts at the cursor position\n  const from = nodeBefore === expression ? context.pos : nodeBefore.from;\n\n  const path = getPath(expression, context);\n\n  let options = variables;\n  for (var i = 0; i < path.length - 1; i++) {\n    var childVar = options.find(val => val.name === path[i].name);\n\n    if (!childVar) {\n      return null;\n    }\n\n    // only suggest if variable type matches\n    if (\n      childVar.isList !== 'optional' &&\n      !!childVar.isList !== path[i].isList\n    ) {\n      return;\n    }\n\n    options = childVar.entries;\n  }\n\n  if (!options) return;\n\n  options = options.map(v => ({\n    label: v.name,\n    type: 'variable',\n    info: v.info,\n    detail: v.detail\n  }));\n\n  const result = {\n    from: from,\n    options: options\n  };\n\n  return result;\n};\n\n\nfunction findPathExpression(node) {\n  while (node) {\n    if (node.name === 'PathExpression') {\n      return node;\n    }\n    node = node.parent;\n  }\n}\n\n// parses the path expression into a list of variable names with type information\n// e.g. foo[0].bar => [ { name: 'foo', isList: true }, { name: 'bar', isList: false } ]\nfunction getPath(node, context) {\n  let path = [];\n\n  for (let child = node.firstChild; child; child = child.nextSibling) {\n    if (child.name === 'PathExpression') {\n      path.push(...getPath(child, context));\n    } else if (child.name === 'FilterExpression') {\n      path.push(...getFilter(child, context));\n    }\n    else {\n      path.push({\n        name: getNodeContent(child, context),\n        isList: false\n      });\n    }\n  }\n  return path;\n}\n\nfunction getFilter(node, context) {\n  const list = node.firstChild;\n\n  if (list.name === 'PathExpression') {\n    const path = getPath(list, context);\n    const last = path[path.length - 1];\n    last.isList = true;\n\n    return path;\n  }\n\n  return [ {\n    name: getNodeContent(list, context),\n    isList: true\n  } ];\n}\n\nfunction getNodeContent(node, context) {\n  return context.state.sliceDoc(node.from, node.to);\n}\n\n/**\n * @type {import('@codemirror/autocomplete').CompletionSource}\n */\nvar variables = context => {\n\n  const variables = context.state.facet(variablesFacet)[0];\n\n  const options = variables.map(v => createVariableSuggestion(v));\n\n  // In most cases, use what is typed before the cursor\n  let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n  // For the special case of empty nodes, we need to check the current node\n  // as well. The previous node could be part of another token, e.g.\n  // when typing functions \"abs(\".\n  let nextNode = nodeBefore.nextSibling;\n  const isInEmptyNode =\n        isNodeEmpty(nodeBefore) ||\n        nextNode && nextNode.from === context.pos && isNodeEmpty(nextNode);\n\n  if (isInEmptyNode) {\n    return context.explicit ? {\n      from: context.pos,\n      options: options\n    } : null;\n  }\n\n  const result = {\n    from: nodeBefore.from,\n    options: options\n  };\n\n  // Only auto-complete variables\n  if ((nodeBefore.parent && nodeBefore.parent.name !== 'VariableName') || isPathExpression(nodeBefore)) {\n    return null;\n  }\n\n  return result;\n};\n\n/**\n * @param {import('..').Variable} variable\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createVariableSuggestion(variable) {\n  if (variable.type === 'function') {\n    return createFunctionVariable(variable);\n  }\n\n  return {\n    label: variable.name,\n    type: 'variable',\n    info: variable.info,\n    detail: variable.detail\n  };\n}\n\n/**\n * @param {import('..').Variable} variable\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createFunctionVariable(variable) {\n  const {\n    name,\n    info,\n    detail,\n    params = []\n  } = variable;\n\n  const paramsWithNames = params.map(({ name, type }, index) => ({\n    name: name || `param ${index + 1}`,\n    type\n  }));\n\n  const template = `${name}(${paramsWithNames.map(p => '${' + p.name + '}').join(', ')})`;\n\n  const paramsSignature = paramsWithNames.map(({ name, type }) => (\n    type ? `${name}: ${type}` : name\n  )).join(', ');\n  const label = `${name}(${paramsSignature})`;\n\n  return snippetCompletion(template, {\n    label,\n    type: 'function',\n    info,\n    detail\n  });\n}\n\nfunction autocompletion() {\n  return [\n    autocompletion$1({\n      override: [\n        variables,\n        builtins,\n        completeFromList(snippets.map(s => ({ ...s, boost: -1 }))),\n        pathExpression,\n        ...keywordCompletions\n      ]\n    })\n  ];\n}\n\nfunction language() {\n  return new LanguageSupport(feelLanguage, [ ]);\n}\n\nvar linter = [ linter$1(cmFeelLinter()) ];\n\nconst baseTheme = EditorView.theme({\n  '& .cm-content': {\n    padding: '0px',\n  },\n  '& .cm-line': {\n    padding: '0px',\n  },\n  '&.cm-editor.cm-focused': {\n    outline: 'none',\n  },\n  '& .cm-completionInfo': {\n    whiteSpace: 'pre-wrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  },\n\n  // Don't wrap whitespace for custom HTML\n  '& .cm-completionInfo > *': {\n    whiteSpace: 'normal'\n  },\n  '& .cm-completionInfo ul': {\n    margin: 0,\n    paddingLeft: '15px'\n  },\n  '& .cm-completionInfo pre': {\n    marginBottom: 0,\n    whiteSpace: 'pre-wrap'\n  },\n  '& .cm-completionInfo p': {\n    marginTop: 0,\n  },\n  '& .cm-completionInfo p:not(:last-of-type)': {\n    marginBottom: 0,\n  }\n});\n\nconst highlightTheme = EditorView.baseTheme({\n  '& .variableName': {\n    color: '#10f'\n  },\n  '& .number': {\n    color: '#164'\n  },\n  '& .string': {\n    color: '#a11'\n  },\n  '& .bool': {\n    color: '#219'\n  },\n  '& .function': {\n    color: '#aa3731',\n    fontWeight: 'bold'\n  },\n  '& .control': {\n    color: '#708'\n  }\n});\n\nconst syntaxClasses = syntaxHighlighting(\n  HighlightStyle.define([\n    { tag: tags$1.variableName, class: 'variableName' },\n    { tag: tags$1.name, class: 'variableName' },\n    { tag: tags$1.number, class: 'number' },\n    { tag: tags$1.string, class: 'string' },\n    { tag: tags$1.bool, class: 'bool' },\n    { tag: tags$1.function(tags$1.variableName), class: 'function' },\n    { tag: tags$1.function(tags$1.special(tags$1.variableName)), class: 'function' },\n    { tag: tags$1.controlKeyword, class: 'control' },\n    { tag: tags$1.operatorKeyword, class: 'control' }\n  ])\n);\n\nvar theme = [ baseTheme, highlightTheme, syntaxClasses ];\n\n/**\n * @typedef {object} Variable\n * @property {string} name name or key of the variable\n * @property {string} [info] short information about the variable, e.g. type\n * @property {string} [detail] longer description of the variable content\n * @property {boolean} [isList] whether the variable is a list\n * @property {Array<Variable>} [schema] array of child variables if the variable is a context or list\n * @property {'function'|'variable'} [type] type of the variable\n * @property {Array<{name: string, type: string}>} [params] function parameters\n */\n\nconst autocompletionConf = new Compartment();\nconst placeholderConf = new Compartment();\n\n\n/**\n * Creates a FEEL editor in the supplied container\n *\n * @param {Object} config\n * @param {DOMNode} config.container\n * @param {Extension[]} [config.extensions]\n * @param {DOMNode|String} [config.tooltipContainer]\n * @param {Function} [config.onChange]\n * @param {Function} [config.onKeyDown]\n * @param {Function} [config.onLint]\n * @param {Boolean} [config.readOnly]\n * @param {String} [config.value]\n * @param {Variable[]} [config.variables]\n *\n * @returns {Object} editor\n */\nfunction FeelEditor({\n  extensions: editorExtensions = [],\n  container,\n  contentAttributes = {},\n  tooltipContainer,\n  onChange = () => {},\n  onKeyDown = () => {},\n  onLint = () => {},\n  placeholder: placeholder$1 = '',\n  readOnly = false,\n  value = '',\n  variables = []\n}) {\n\n  const changeHandler = EditorView.updateListener.of((update) => {\n    if (update.docChanged) {\n      onChange(update.state.doc.toString());\n    }\n  });\n\n  const lintHandler = EditorView.updateListener.of((update) => {\n    const diagnosticEffects = update.transactions\n      .flatMap(t => t.effects)\n      .filter(effect => effect.is(setDiagnosticsEffect));\n\n    if (!diagnosticEffects.length) {\n      return;\n    }\n\n    const messages = diagnosticEffects.flatMap(effect => effect.value);\n\n    onLint(messages);\n  });\n\n  const keyHandler = EditorView.domEventHandlers(\n    {\n      keydown: onKeyDown\n    }\n  );\n\n  if (typeof tooltipContainer === 'string') {\n    tooltipContainer = document.querySelector(tooltipContainer);\n  }\n\n  const tooltipLayout = tooltipContainer ? tooltips({\n    tooltipSpace: function() {\n      return tooltipContainer.getBoundingClientRect();\n    }\n  }) : [];\n\n  const extensions = [\n    autocompletionConf.of(variablesFacet.of(variables)),\n    autocompletion(),\n    bracketMatching(),\n    changeHandler,\n    closeBrackets(),\n    EditorView.contentAttributes.of(contentAttributes),\n    indentOnInput(),\n    keyHandler,\n    keymap.of([\n      ...defaultKeymap,\n    ]),\n    language(),\n    linter,\n    lintHandler,\n    placeholderConf.of(placeholder(placeholder$1)),\n    tooltipLayout,\n    theme,\n    ...editorExtensions\n  ];\n\n  if (readOnly) {\n    extensions.push(EditorView.editable.of(false));\n  }\n\n  this._cmEditor = new EditorView({\n    state: EditorState.create({\n      doc: value,\n      extensions: extensions\n    }),\n    parent: container\n  });\n\n  return this;\n}\n\n/**\n * Replaces the content of the Editor\n *\n * @param {String} value\n */\nFeelEditor.prototype.setValue = function(value) {\n  this._cmEditor.dispatch({\n    changes: {\n      from: 0,\n      to: this._cmEditor.state.doc.length,\n      insert: value,\n    }\n  });\n};\n\n/**\n * Sets the focus in the editor.\n */\nFeelEditor.prototype.focus = function(position) {\n  const cmEditor = this._cmEditor;\n\n  // the Codemirror `focus` method always calls `focus` with `preventScroll`,\n  // so we have to focus + scroll manually\n  cmEditor.contentDOM.focus();\n  cmEditor.focus();\n\n  if (typeof position === 'number') {\n    const end = cmEditor.state.doc.length;\n    cmEditor.dispatch({ selection: { anchor: position <= end ? position : end } });\n  }\n};\n\n/**\n * Returns the current selection ranges. If no text is selected, a single\n * range with the start and end index at the cursor position will be returned.\n *\n * @returns {Object} selection\n * @returns {Array} selection.ranges\n */\nFeelEditor.prototype.getSelection = function() {\n  return this._cmEditor.state.selection;\n};\n\n/**\n * Set variables to be used for autocompletion.\n * @param {Variable[]} variables\n * @returns {void}\n */\nFeelEditor.prototype.setVariables = function(variables) {\n  this._cmEditor.dispatch({\n    effects: autocompletionConf.reconfigure(variablesFacet.of(variables))\n  });\n};\n\n/**\n * Update placeholder text.\n * @param {string} placeholder\n * @returns {void}\n */\nFeelEditor.prototype.setPlaceholder = function(placeholder$1) {\n  this._cmEditor.dispatch({\n    effects: placeholderConf.reconfigure(placeholder(placeholder$1))\n  });\n};\n\nexport { FeelEditor as default };\n","/*!\n* tabbable 6.2.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n//  `:not([inert], [inert] *)` (Feb 2023)\n// CAREFUL: JSDom does not support `:not([inert] *)` as a selector; using it causes\n//  the entire query to fail, resulting in no nodes found, which will break a lot\n//  of things... so we have to rely on JS to identify nodes inside an inert container\nvar candidateSelectors = ['input:not([inert])', 'select:not([inert])', 'textarea:not([inert])', 'a[href]:not([inert])', 'button:not([inert])', '[tabindex]:not(slot):not([inert])', 'audio[controls]:not([inert])', 'video[controls]:not([inert])', '[contenteditable]:not([contenteditable=\"false\"]):not([inert])', 'details>summary:first-of-type:not([inert])', 'details:not([inert])'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n  var _element$getRootNode;\n  return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n  return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Element} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n *  see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n *  False if `node` is falsy.\n */\nvar isInert = function isInert(node, lookUp) {\n  var _node$getAttribute;\n  if (lookUp === void 0) {\n    lookUp = true;\n  }\n  // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n  //  JS API property; we have to check the attribute, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's an active element\n  var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n  var inert = inertAtt === '' || inertAtt === 'true';\n\n  // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n  //  if it weren't for `matches()` not being a function on shadow roots; the following\n  //  code works for any kind of node\n  // CAREFUL: JSDom does not appear to support certain selectors like `:not([inert] *)`\n  //  so it likely would not support `:is([inert] *)` either...\n  var result = inert || lookUp && node && isInert(node.parentNode); // recursive\n\n  return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n  var _node$getAttribute2;\n  // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n  //  to use the attribute directly to check for this, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's a non-editable element\n  var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n  return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n  // even if `includeContainer=false`, we still have to check it for inertness because\n  //  if it's inert, all its children are inert\n  if (isInert(el)) {\n    return [];\n  }\n  var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n  if (includeContainer && matches.call(el, candidateSelector)) {\n    candidates.unshift(el);\n  }\n  candidates = candidates.filter(filter);\n  return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n *  if a function, implies shadow support is enabled and either returns the shadow root of an element\n *  or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n  var candidates = [];\n  var elementsToCheck = Array.from(elements);\n  while (elementsToCheck.length) {\n    var element = elementsToCheck.shift();\n    if (isInert(element, false)) {\n      // no need to look up since we're drilling down\n      // anything inside this container will also be inert\n      continue;\n    }\n    if (element.tagName === 'SLOT') {\n      // add shadow dom slot scope (slot itself cannot be focusable)\n      var assigned = element.assignedElements();\n      var content = assigned.length ? assigned : element.children;\n      var nestedCandidates = getCandidatesIteratively(content, true, options);\n      if (options.flatten) {\n        candidates.push.apply(candidates, nestedCandidates);\n      } else {\n        candidates.push({\n          scopeParent: element,\n          candidates: nestedCandidates\n        });\n      }\n    } else {\n      // check candidate element\n      var validCandidate = matches.call(element, candidateSelector);\n      if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n        candidates.push(element);\n      }\n\n      // iterate over shadow content if possible\n      var shadowRoot = element.shadowRoot ||\n      // check for an undisclosed shadow\n      typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n      // no inert look up because we're already drilling down and checking for inertness\n      //  on the way down, so all containers to this root node should have already been\n      //  vetted as non-inert\n      var validShadowRoot = !isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n      if (shadowRoot && validShadowRoot) {\n        // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n        //  shadow exists, so look at light dom children as fallback BUT create a scope for any\n        //  child candidates found because they're likely slotted elements (elements that are\n        //  children of the web component element (which has the shadow), in the light dom, but\n        //  slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n        //  _after_ we return from this recursive call\n        var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n        if (options.flatten) {\n          candidates.push.apply(candidates, _nestedCandidates);\n        } else {\n          candidates.push({\n            scopeParent: element,\n            candidates: _nestedCandidates\n          });\n        }\n      } else {\n        // there's not shadow so just dig into the element's (light dom) children\n        //  __without__ giving the element special scope treatment\n        elementsToCheck.unshift.apply(elementsToCheck, element.children);\n      }\n    }\n  }\n  return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n  return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (node.tabIndex < 0) {\n    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n    // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n    // yet they are still part of the regular tab order; in FF, they get a default\n    // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n    // order, consider their tab index to be 0.\n    // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n    // so if they don't have a tabindex attribute specifically set, assume it's 0.\n    if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) {\n      return 0;\n    }\n  }\n  return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n *  has tabIndex -1, but needs to be sorted by document order in order for its content to be\n *  inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nvar getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {\n  var tabIndex = getTabIndex(node);\n  if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n    return 0;\n  }\n  return tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n  return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n  return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n  return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n  var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n    return child.tagName === 'SUMMARY';\n  });\n  return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n  for (var i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n  if (!node.name) {\n    return true;\n  }\n  var radioScope = node.form || getRootNode(node);\n  var queryRadios = function queryRadios(name) {\n    return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n  };\n  var radioSet;\n  if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n    radioSet = queryRadios(window.CSS.escape(node.name));\n  } else {\n    try {\n      radioSet = queryRadios(node.name);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n      return false;\n    }\n  }\n  var checked = getCheckedRadio(radioSet, node.form);\n  return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n  return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n  return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n  var _nodeRoot;\n  // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n  //  (but NOT _the_ document; see second 'If' comment below for more).\n  // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n  //  is attached, and the one we need to check if it's in the document or not (because the\n  //  shadow, and all nodes it contains, is never considered in the document since shadows\n  //  behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n  //  is hidden, or is not in the document itself but is detached, it will affect the shadow's\n  //  visibility, including all the nodes it contains). The host could be any normal node,\n  //  or a custom element (i.e. web component). Either way, that's the one that is considered\n  //  part of the document, not the shadow root, nor any of its children (i.e. the node being\n  //  tested).\n  // To further complicate things, we have to look all the way up until we find a shadow HOST\n  //  that is attached (or find none) because the node might be in nested shadows...\n  // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n  //  document (per the docs) and while it's a Document-type object, that document does not\n  //  appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n  //  to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n  //  using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n  //  node is actually detached.\n  // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n  //  if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n  //  from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n  //  `ownerDocument` will be `null`, hence the optional chaining on it.\n  var nodeRoot = node && getRootNode(node);\n  var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;\n\n  // in some cases, a detached node will return itself as the root instead of a document or\n  //  shadow root object, in which case, we shouldn't try to look further up the host chain\n  var attached = false;\n  if (nodeRoot && nodeRoot !== node) {\n    var _nodeRootHost, _nodeRootHost$ownerDo, _node$ownerDocument;\n    attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));\n    while (!attached && nodeRootHost) {\n      var _nodeRoot2, _nodeRootHost2, _nodeRootHost2$ownerD;\n      // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n      //  which means we need to get the host's host and check if that parent host is contained\n      //  in (i.e. attached to) the document\n      nodeRoot = getRootNode(nodeRootHost);\n      nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;\n      attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));\n    }\n  }\n  return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n  var _node$getBoundingClie = node.getBoundingClientRect(),\n    width = _node$getBoundingClie.width,\n    height = _node$getBoundingClie.height;\n  return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n  var displayCheck = _ref.displayCheck,\n    getShadowRoot = _ref.getShadowRoot;\n  // NOTE: visibility will be `undefined` if node is detached from the document\n  //  (see notes about this further down), which means we will consider it visible\n  //  (this is legacy behavior from a very long way back)\n  // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n  //  _visibility_ check, not a _display_ check\n  if (getComputedStyle(node).visibility === 'hidden') {\n    return true;\n  }\n  var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n  var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n  if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n    return true;\n  }\n  if (!displayCheck || displayCheck === 'full' || displayCheck === 'legacy-full') {\n    if (typeof getShadowRoot === 'function') {\n      // figure out if we should consider the node to be in an undisclosed shadow and use the\n      //  'non-zero-area' fallback\n      var originalNode = node;\n      while (node) {\n        var parentElement = node.parentElement;\n        var rootNode = getRootNode(node);\n        if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n        ) {\n          // node has an undisclosed shadow which means we can only treat it as a black box, so we\n          //  fall back to a non-zero-area test\n          return isZeroArea(node);\n        } else if (node.assignedSlot) {\n          // iterate up slot\n          node = node.assignedSlot;\n        } else if (!parentElement && rootNode !== node.ownerDocument) {\n          // cross shadow boundary\n          node = rootNode.host;\n        } else {\n          // iterate up normal dom\n          node = parentElement;\n        }\n      }\n      node = originalNode;\n    }\n    // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n    //  (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n    //  it might be a falsy value, which means shadow DOM support is disabled\n\n    // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n    //  now we can just test to see if it would normally be visible or not, provided it's\n    //  attached to the main document.\n    // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n    //  `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n    if (isNodeAttached(node)) {\n      // this works wherever the node is: if there's at least one client rect, it's\n      //  somehow displayed; it also covers the CSS 'display: contents' case where the\n      //  node itself is hidden in place of its contents; and there's no need to search\n      //  up the hierarchy either\n      return !node.getClientRects().length;\n    }\n\n    // Else, the node isn't attached to the document, which means the `getClientRects()`\n    //  API will __always__ return zero rects (this can happen, for example, if React\n    //  is used to render nodes onto a detached tree, as confirmed in this thread:\n    //  https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n    //\n    // It also means that even window.getComputedStyle(node).display will return `undefined`\n    //  because styles are only computed for nodes that are in the document.\n    //\n    // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n    //  somehow. Though it was never stated officially, anyone who has ever used tabbable\n    //  APIs on nodes in detached containers has actually implicitly used tabbable in what\n    //  was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n    //  considering __everything__ to be visible because of the innability to determine styles.\n    //\n    // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n    //  nodes as visible with the 'none' fallback.__\n    if (displayCheck !== 'legacy-full') {\n      return true; // hidden\n    }\n    // else, fallback to 'none' mode and consider the node visible\n  } else if (displayCheck === 'non-zero-area') {\n    // NOTE: Even though this tests that the node's client rect is non-zero to determine\n    //  whether it's displayed, and that a detached node will __always__ have a zero-area\n    //  client rect, we don't special-case for whether the node is attached or not. In\n    //  this mode, we do want to consider nodes that have a zero area to be hidden at all\n    //  times, and that includes attached or not.\n    return isZeroArea(node);\n  }\n\n  // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n  //  it's visible\n  return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n//  unless they are in the _first_ <legend> element of the top-most disabled\n//  fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n  if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n    var parentNode = node.parentElement;\n    // check if `node` is contained in a disabled <fieldset>\n    while (parentNode) {\n      if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n        // look for the first <legend> among the children of the disabled <fieldset>\n        for (var i = 0; i < parentNode.children.length; i++) {\n          var child = parentNode.children.item(i);\n          // when the first <legend> (in document order) is found\n          if (child.tagName === 'LEGEND') {\n            // if its parent <fieldset> is not nested in another disabled <fieldset>,\n            // return whether `node` is a descendant of its first <legend>\n            return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n          }\n        }\n        // the disabled <fieldset> containing `node` has no <legend>\n        return true;\n      }\n      parentNode = parentNode.parentElement;\n    }\n  }\n\n  // else, node's tabbable/focusable state should not be affected by a fieldset's\n  //  enabled/disabled state\n  return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n  if (node.disabled ||\n  // we must do an inert look up to filter out any elements inside an inert ancestor\n  //  because we're limited in the type of selectors we can use in JSDom (see related\n  //  note related to `candidateSelectors`)\n  isInert(node) || isHiddenInput(node) || isHidden(node, options) ||\n  // For a details element with a summary, the summary element gets the focus\n  isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n    return false;\n  }\n  return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n  if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n    return false;\n  }\n  return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable(shadowHostNode) {\n  var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n  if (isNaN(tabIndex) || tabIndex >= 0) {\n    return true;\n  }\n  // If a custom element has an explicit negative tabindex,\n  // browsers will not allow tab targeting said element's children.\n  return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar sortByOrder = function sortByOrder(candidates) {\n  var regularTabbables = [];\n  var orderedTabbables = [];\n  candidates.forEach(function (item, i) {\n    var isScope = !!item.scopeParent;\n    var element = isScope ? item.scopeParent : item;\n    var candidateTabindex = getSortOrderTabIndex(element, isScope);\n    var elements = isScope ? sortByOrder(item.candidates) : element;\n    if (candidateTabindex === 0) {\n      isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        item: item,\n        isScope: isScope,\n        content: elements\n      });\n    }\n  });\n  return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n    sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n    return acc;\n  }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorTabbable.bind(null, options),\n      flatten: false,\n      getShadowRoot: options.getShadowRoot,\n      shadowRootFilter: isValidShadowRootTabbable\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n  }\n  return sortByOrder(candidates);\n};\nvar focusable = function focusable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorFocusable.bind(null, options),\n      flatten: true,\n      getShadowRoot: options.getShadowRoot\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n  }\n  return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, candidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe').join(',');\nvar isFocusable = function isFocusable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, focusableCandidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, getTabIndex, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n* focus-trap 7.5.4\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { isFocusable, tabbable, focusable, isTabbable, getTabIndex } from 'tabbable';\n\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _toPrimitive(input, hint) {\n  if (typeof input !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (typeof res !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar activeFocusTraps = {\n  activateTrap: function activateTrap(trapStack, trap) {\n    if (trapStack.length > 0) {\n      var activeTrap = trapStack[trapStack.length - 1];\n      if (activeTrap !== trap) {\n        activeTrap.pause();\n      }\n    }\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex === -1) {\n      trapStack.push(trap);\n    } else {\n      // move this existing trap to the front of the queue\n      trapStack.splice(trapIndex, 1);\n      trapStack.push(trap);\n    }\n  },\n  deactivateTrap: function deactivateTrap(trapStack, trap) {\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex !== -1) {\n      trapStack.splice(trapIndex, 1);\n    }\n    if (trapStack.length > 0) {\n      trapStack[trapStack.length - 1].unpause();\n    }\n  }\n};\nvar isSelectableInput = function isSelectableInput(node) {\n  return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\nvar isEscapeEvent = function isEscapeEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Escape' || (e === null || e === void 0 ? void 0 : e.key) === 'Esc' || (e === null || e === void 0 ? void 0 : e.keyCode) === 27;\n};\nvar isTabEvent = function isTabEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Tab' || (e === null || e === void 0 ? void 0 : e.keyCode) === 9;\n};\n\n// checks for TAB by default\nvar isKeyForward = function isKeyForward(e) {\n  return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nvar isKeyBackward = function isKeyBackward(e) {\n  return isTabEvent(e) && e.shiftKey;\n};\nvar delay = function delay(fn) {\n  return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n//  of Array.findIndex() for our needs\nvar findIndex = function findIndex(arr, fn) {\n  var idx = -1;\n  arr.every(function (value, i) {\n    if (fn(value)) {\n      idx = i;\n      return false; // break\n    }\n\n    return true; // next\n  });\n\n  return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n *  the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nvar valueOrHandler = function valueOrHandler(value) {\n  for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    params[_key - 1] = arguments[_key];\n  }\n  return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget(event) {\n  // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n  //  shadow host. However, event.target.composedPath() will be an array of\n  //  nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n  //  outer-most (the host HTML document). If we have access to composedPath(),\n  //  then use its first element; otherwise, fall back to event.target (and\n  //  this only works for an _open_ shadow DOM; otherwise,\n  //  composedPath()[0] === event.target always).\n  return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n//  current instance use the same stack if `userOptions.trapStack` isn't specified\nvar internalTrapStack = [];\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n  // SSR: a live trap shouldn't be created in this type of environment so this\n  //  should be safe code to execute if the `document` option isn't specified\n  var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n  var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;\n  var config = _objectSpread2({\n    returnFocusOnDeactivate: true,\n    escapeDeactivates: true,\n    delayInitialFocus: true,\n    isKeyForward: isKeyForward,\n    isKeyBackward: isKeyBackward\n  }, userOptions);\n  var state = {\n    // containers given to createFocusTrap()\n    // @type {Array<HTMLElement>}\n    containers: [],\n    // list of objects identifying tabbable nodes in `containers` in the trap\n    // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n    //  is active, but the trap should never get to a state where there isn't at least one group\n    //  with at least one tabbable node in it (that would lead to an error condition that would\n    //  result in an error being thrown)\n    // @type {Array<{\n    //   container: HTMLElement,\n    //   tabbableNodes: Array<HTMLElement>, // empty if none\n    //   focusableNodes: Array<HTMLElement>, // empty if none\n    //   posTabIndexesFound: boolean,\n    //   firstTabbableNode: HTMLElement|undefined,\n    //   lastTabbableNode: HTMLElement|undefined,\n    //   firstDomTabbableNode: HTMLElement|undefined,\n    //   lastDomTabbableNode: HTMLElement|undefined,\n    //   nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n    // }>}\n    containerGroups: [],\n    // same order/length as `containers` list\n\n    // references to objects in `containerGroups`, but only those that actually have\n    //  tabbable nodes in them\n    // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n    //  the same length\n    tabbableGroups: [],\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false,\n    // timer ID for when delayInitialFocus is true and initial focus in this trap\n    //  has been delayed during activation\n    delayInitialFocusTimer: undefined,\n    // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n    recentNavEvent: undefined\n  };\n  var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n  /**\n   * Gets a configuration option value.\n   * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n   *  value will be taken from this object. Otherwise, value will be taken from base configuration.\n   * @param {string} optionName Name of the option whose value is sought.\n   * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n   *  IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n   */\n  var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n    return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n  };\n\n  /**\n   * Finds the index of the container that contains the element.\n   * @param {HTMLElement} element\n   * @param {Event} [event] If available, and `element` isn't directly found in any container,\n   *  the event's composed path is used to see if includes any known trap containers in the\n   *  case where the element is inside a Shadow DOM.\n   * @returns {number} Index of the container in either `state.containers` or\n   *  `state.containerGroups` (the order/length of these lists are the same); -1\n   *  if the element isn't found.\n   */\n  var findContainerIndex = function findContainerIndex(element, event) {\n    var composedPath = typeof (event === null || event === void 0 ? void 0 : event.composedPath) === 'function' ? event.composedPath() : undefined;\n    // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n    //  nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n    //  and we still need to find the element in there\n    return state.containerGroups.findIndex(function (_ref) {\n      var container = _ref.container,\n        tabbableNodes = _ref.tabbableNodes;\n      return container.contains(element) || ( // fall back to explicit tabbable search which will take into consideration any\n      //  web components if the `tabbableOptions.getShadowRoot` option was used for\n      //  the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n      //  look inside web components even if open)\n      composedPath === null || composedPath === void 0 ? void 0 : composedPath.includes(container)) || tabbableNodes.find(function (node) {\n        return node === element;\n      });\n    });\n  };\n\n  /**\n   * Gets the node for the given option, which is expected to be an option that\n   *  can be either a DOM node, a string that is a selector to get a node, `false`\n   *  (if a node is explicitly NOT given), or a function that returns any of these\n   *  values.\n   * @param {string} optionName\n   * @returns {undefined | false | HTMLElement | SVGElement} Returns\n   *  `undefined` if the option is not specified; `false` if the option\n   *  resolved to `false` (node explicitly not given); otherwise, the resolved\n   *  DOM node.\n   * @throws {Error} If the option is set, not `false`, and is not, or does not\n   *  resolve to a node.\n   */\n  var getNodeForOption = function getNodeForOption(optionName) {\n    var optionValue = config[optionName];\n    if (typeof optionValue === 'function') {\n      for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        params[_key2 - 1] = arguments[_key2];\n      }\n      optionValue = optionValue.apply(void 0, params);\n    }\n    if (optionValue === true) {\n      optionValue = undefined; // use default value\n    }\n\n    if (!optionValue) {\n      if (optionValue === undefined || optionValue === false) {\n        return optionValue;\n      }\n      // else, empty string (invalid), null (invalid), 0 (invalid)\n\n      throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n    }\n    var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n    if (typeof optionValue === 'string') {\n      node = doc.querySelector(optionValue); // resolve to node, or null if fails\n      if (!node) {\n        throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n      }\n    }\n    return node;\n  };\n  var getInitialFocusNode = function getInitialFocusNode() {\n    var node = getNodeForOption('initialFocus');\n\n    // false explicitly indicates we want no initialFocus at all\n    if (node === false) {\n      return false;\n    }\n    if (node === undefined || !isFocusable(node, config.tabbableOptions)) {\n      // option not specified nor focusable: use fallback options\n      if (findContainerIndex(doc.activeElement) >= 0) {\n        node = doc.activeElement;\n      } else {\n        var firstTabbableGroup = state.tabbableGroups[0];\n        var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n        // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n        node = firstTabbableNode || getNodeForOption('fallbackFocus');\n      }\n    }\n    if (!node) {\n      throw new Error('Your focus-trap needs to have at least one focusable element');\n    }\n    return node;\n  };\n  var updateTabbableNodes = function updateTabbableNodes() {\n    state.containerGroups = state.containers.map(function (container) {\n      var tabbableNodes = tabbable(container, config.tabbableOptions);\n\n      // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n      //  are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n      //  are focusable but not tabbable\n      var focusableNodes = focusable(container, config.tabbableOptions);\n      var firstTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n      var lastTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : undefined;\n      var firstDomTabbableNode = focusableNodes.find(function (node) {\n        return isTabbable(node);\n      });\n      var lastDomTabbableNode = focusableNodes.slice().reverse().find(function (node) {\n        return isTabbable(node);\n      });\n      var posTabIndexesFound = !!tabbableNodes.find(function (node) {\n        return getTabIndex(node) > 0;\n      });\n      return {\n        container: container,\n        tabbableNodes: tabbableNodes,\n        focusableNodes: focusableNodes,\n        /** True if at least one node with positive `tabindex` was found in this container. */\n        posTabIndexesFound: posTabIndexesFound,\n        /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n        firstTabbableNode: firstTabbableNode,\n        /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n        lastTabbableNode: lastTabbableNode,\n        // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n        //  would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n        //  because that API doesn't work with Shadow DOM as well as it should (@see\n        //  https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n        //  to address an edge case related to positive tabindex support, this seems like a much easier,\n        //  \"close enough most of the time\" alternative for positive tabindexes which should generally\n        //  be avoided anyway...\n        /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n        firstDomTabbableNode: firstDomTabbableNode,\n        /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n        lastDomTabbableNode: lastDomTabbableNode,\n        /**\n         * Finds the __tabbable__ node that follows the given node in the specified direction,\n         *  in this container, if any.\n         * @param {HTMLElement} node\n         * @param {boolean} [forward] True if going in forward tab order; false if going\n         *  in reverse.\n         * @returns {HTMLElement|undefined} The next tabbable node, if any.\n         */\n        nextTabbableNode: function nextTabbableNode(node) {\n          var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n          var nodeIdx = tabbableNodes.indexOf(node);\n          if (nodeIdx < 0) {\n            // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n            //  since `node` should at least have been focusable, we assume that's the case and mimic\n            //  what browsers do, which is set focus to the next node in __document position order__,\n            //  regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n            //  above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n            //  basic DOM order\n            if (forward) {\n              return focusableNodes.slice(focusableNodes.indexOf(node) + 1).find(function (el) {\n                return isTabbable(el);\n              });\n            }\n            return focusableNodes.slice(0, focusableNodes.indexOf(node)).reverse().find(function (el) {\n              return isTabbable(el);\n            });\n          }\n          return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n        }\n      };\n    });\n    state.tabbableGroups = state.containerGroups.filter(function (group) {\n      return group.tabbableNodes.length > 0;\n    });\n\n    // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n    if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option\n    ) {\n      throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n    }\n\n    // NOTE: Positive tabindexes are only properly supported in single-container traps because\n    //  doing it across multiple containers where tabindexes could be all over the place\n    //  would require Tabbable to support multiple containers, would require additional\n    //  specialized Shadow DOM support, and would require Tabbable's multi-container support\n    //  to look at those containers in document position order rather than user-provided\n    //  order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n    //  https://github.com/focus-trap/focus-trap/issues/375 for more details.\n    if (state.containerGroups.find(function (g) {\n      return g.posTabIndexesFound;\n    }) && state.containerGroups.length > 1) {\n      throw new Error(\"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\");\n    }\n  };\n\n  /**\n   * Gets the current activeElement. If it's a web-component and has open shadow-root\n   * it will recursively search inside shadow roots for the \"true\" activeElement.\n   *\n   * @param {Document | ShadowRoot} el\n   *\n   * @returns {HTMLElement} The element that currently has the focus\n   **/\n  var getActiveElement = function getActiveElement(el) {\n    var activeElement = el.activeElement;\n    if (!activeElement) {\n      return;\n    }\n    if (activeElement.shadowRoot && activeElement.shadowRoot.activeElement !== null) {\n      return getActiveElement(activeElement.shadowRoot);\n    }\n    return activeElement;\n  };\n  var tryFocus = function tryFocus(node) {\n    if (node === false) {\n      return;\n    }\n    if (node === getActiveElement(document)) {\n      return;\n    }\n    if (!node || !node.focus) {\n      tryFocus(getInitialFocusNode());\n      return;\n    }\n    node.focus({\n      preventScroll: !!config.preventScroll\n    });\n    // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n    state.mostRecentlyFocusedNode = node;\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  };\n  var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n    var node = getNodeForOption('setReturnFocus', previousActiveElement);\n    return node ? node : node === false ? false : previousActiveElement;\n  };\n\n  /**\n   * Finds the next node (in either direction) where focus should move according to a\n   *  keyboard focus-in event.\n   * @param {Object} params\n   * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n   * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n   *  will be used to determine the `target`). Ignored if `target` is specified.\n   * @param {boolean} [params.isBackward] True if focus should move backward.\n   * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n   *  determined given the current state of the trap.\n   */\n  var findNextNavNode = function findNextNavNode(_ref2) {\n    var target = _ref2.target,\n      event = _ref2.event,\n      _ref2$isBackward = _ref2.isBackward,\n      isBackward = _ref2$isBackward === void 0 ? false : _ref2$isBackward;\n    target = target || getActualTarget(event);\n    updateTabbableNodes();\n    var destinationNode = null;\n    if (state.tabbableGroups.length > 0) {\n      // make sure the target is actually contained in a group\n      // NOTE: the target may also be the container itself if it's focusable\n      //  with tabIndex='-1' and was given initial focus\n      var containerIndex = findContainerIndex(target, event);\n      var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n      if (containerIndex < 0) {\n        // target not found in any group: quite possible focus has escaped the trap,\n        //  so bring it back into...\n        if (isBackward) {\n          // ...the last node in the last group\n          destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n        } else {\n          // ...the first node in the first group\n          destinationNode = state.tabbableGroups[0].firstTabbableNode;\n        }\n      } else if (isBackward) {\n        // REVERSE\n\n        // is the target the first tabbable node in a group?\n        var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) {\n          var firstTabbableNode = _ref3.firstTabbableNode;\n          return target === firstTabbableNode;\n        });\n        if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n          // an exception case where the target is either the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle shift+tab as if focus were on the container's\n          //  first tabbable node, and go to the last tabbable node of the LAST group\n          startOfGroupIndex = containerIndex;\n        }\n        if (startOfGroupIndex >= 0) {\n          // YES: then shift+tab should go to the last tabbable node in the\n          //  previous group (and wrap around to the last tabbable node of\n          //  the LAST group if it's the first tabbable node of the FIRST group)\n          var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n          var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? destinationGroup.lastTabbableNode : destinationGroup.lastDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target, false);\n        }\n      } else {\n        // FORWARD\n\n        // is the target the last tabbable node in a group?\n        var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref4) {\n          var lastTabbableNode = _ref4.lastTabbableNode;\n          return target === lastTabbableNode;\n        });\n        if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n          // an exception case where the target is the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle tab as if focus were on the container's\n          //  last tabbable node, and go to the first tabbable node of the FIRST group\n          lastOfGroupIndex = containerIndex;\n        }\n        if (lastOfGroupIndex >= 0) {\n          // YES: then tab should go to the first tabbable node in the next\n          //  group (and wrap around to the first tabbable node of the FIRST\n          //  group if it's the last tabbable node of the LAST group)\n          var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n          var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? _destinationGroup.firstTabbableNode : _destinationGroup.firstDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target);\n        }\n      }\n    } else {\n      // no groups available\n      // NOTE: the fallbackFocus option does not support returning false to opt-out\n      destinationNode = getNodeForOption('fallbackFocus');\n    }\n    return destinationNode;\n  };\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  var checkPointerDown = function checkPointerDown(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      // allow the click since it ocurred inside the trap\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      // immediately deactivate the trap\n      trap.deactivate({\n        // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n        //  which will result in the outside click setting focus to the node\n        //  that was clicked (and if not focusable, to \"nothing\"); by setting\n        //  `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n        //  on activation (or the configured `setReturnFocus` node), whether the\n        //  outside click was on a focusable node or not\n        returnFocus: config.returnFocusOnDeactivate\n      });\n      return;\n    }\n\n    // This is needed for mobile devices.\n    // (If we'll only let `click` events through,\n    // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      // allow the click outside the trap to take place\n      return;\n    }\n\n    // otherwise, prevent the click\n    e.preventDefault();\n  };\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n  //  scrolling if the node that got focused was out of view; there's nothing we can do to\n  //  prevent that from happening by the time we discover that focus escaped\n  var checkFocusIn = function checkFocusIn(event) {\n    var target = getActualTarget(event);\n    var targetContained = findContainerIndex(target, event) >= 0;\n\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (targetContained || target instanceof Document) {\n      if (targetContained) {\n        state.mostRecentlyFocusedNode = target;\n      }\n    } else {\n      // escaped! pull it back in to where it just left\n      event.stopImmediatePropagation();\n\n      // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n      //  it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n      //  toward a node with a positive tab index\n      var nextNode; // next node to focus, if we find one\n      var navAcrossContainers = true;\n      if (state.mostRecentlyFocusedNode) {\n        if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n          // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n          var mruContainerIdx = findContainerIndex(state.mostRecentlyFocusedNode);\n          // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n          //  and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n          //  with at least one tabbable node in order to function, so this could be the other container\n          //  with nothing tabbable in it)\n          var tabbableNodes = state.containerGroups[mruContainerIdx].tabbableNodes;\n          if (tabbableNodes.length > 0) {\n            // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n            var mruTabIdx = tabbableNodes.findIndex(function (node) {\n              return node === state.mostRecentlyFocusedNode;\n            });\n            if (mruTabIdx >= 0) {\n              if (config.isKeyForward(state.recentNavEvent)) {\n                if (mruTabIdx + 1 < tabbableNodes.length) {\n                  nextNode = tabbableNodes[mruTabIdx + 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              } else {\n                if (mruTabIdx - 1 >= 0) {\n                  nextNode = tabbableNodes[mruTabIdx - 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              }\n              // else, don't find in container order without considering direction too\n            }\n          }\n          // else, no tabbable nodes in that container (which means we must have at least one other\n          //  container with at least one tabbable node in it, otherwise focus-trap would've thrown\n          //  an error the last time updateTabbableNodes() was run): find next node among all known\n          //  containers\n        } else {\n          // check to see if there's at least one tabbable node with a positive tab index inside\n          //  the trap because focus seems to escape when navigating backward from a tabbable node\n          //  with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n          //  the greatest positive tab index like it should)\n          if (!state.containerGroups.some(function (g) {\n            return g.tabbableNodes.some(function (n) {\n              return getTabIndex(n) > 0;\n            });\n          })) {\n            // no containers with tabbable nodes with positive tab indexes which means the focus\n            //  escaped for some other reason and we should just execute the fallback to the\n            //  MRU node or initial focus node, if any\n            navAcrossContainers = false;\n          }\n        }\n      } else {\n        // no MRU node means we're likely in some initial condition when the trap has just\n        //  been activated and initial focus hasn't been given yet, in which case we should\n        //  fall through to trying to focus the initial focus node, which is what should\n        //  happen below at this point in the logic\n        navAcrossContainers = false;\n      }\n      if (navAcrossContainers) {\n        nextNode = findNextNavNode({\n          // move FROM the MRU node, not event-related node (which will be the node that is\n          //  outside the trap causing the focus escape we're trying to fix)\n          target: state.mostRecentlyFocusedNode,\n          isBackward: config.isKeyBackward(state.recentNavEvent)\n        });\n      }\n      if (nextNode) {\n        tryFocus(nextNode);\n      } else {\n        tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n      }\n    }\n    state.recentNavEvent = undefined; // clear\n  };\n\n  // Hijack key nav events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  var checkKeyNav = function checkKeyNav(event) {\n    var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    state.recentNavEvent = event;\n    var destinationNode = findNextNavNode({\n      event: event,\n      isBackward: isBackward\n    });\n    if (destinationNode) {\n      if (isTabEvent(event)) {\n        // since tab natively moves focus, we wouldn't have a destination node unless we\n        //  were on the edge of a container and had to move to the next/previous edge, in\n        //  which case we want to prevent default to keep the browser from moving focus\n        //  to where it normally would\n        event.preventDefault();\n      }\n      tryFocus(destinationNode);\n    }\n    // else, let the browser take care of [shift+]tab and move the focus\n  };\n\n  var checkKey = function checkKey(event) {\n    if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) {\n      event.preventDefault();\n      trap.deactivate();\n      return;\n    }\n    if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n      checkKeyNav(event, config.isKeyBackward(event));\n    }\n  };\n  var checkClick = function checkClick(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      return;\n    }\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  };\n\n  //\n  // EVENT LISTENERS\n  //\n\n  var addListeners = function addListeners() {\n    if (!state.active) {\n      return;\n    }\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trapStack, trap);\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () {\n      tryFocus(getInitialFocusNode());\n    }) : tryFocus(getInitialFocusNode());\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('touchstart', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('click', checkClick, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('keydown', checkKey, {\n      capture: true,\n      passive: false\n    });\n    return trap;\n  };\n  var removeListeners = function removeListeners() {\n    if (!state.active) {\n      return;\n    }\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkKey, true);\n    return trap;\n  };\n\n  //\n  // MUTATION OBSERVER\n  //\n\n  var checkDomRemoval = function checkDomRemoval(mutations) {\n    var isFocusedNodeRemoved = mutations.some(function (mutation) {\n      var removedNodes = Array.from(mutation.removedNodes);\n      return removedNodes.some(function (node) {\n        return node === state.mostRecentlyFocusedNode;\n      });\n    });\n\n    // If the currently focused is removed then browsers will move focus to the\n    // <body> element. If this happens, try to move focus back into the trap.\n    if (isFocusedNodeRemoved) {\n      tryFocus(getInitialFocusNode());\n    }\n  };\n\n  // Use MutationObserver - if supported - to detect if focused node is removed\n  // from the DOM.\n  var mutationObserver = typeof window !== 'undefined' && 'MutationObserver' in window ? new MutationObserver(checkDomRemoval) : undefined;\n  var updateObservedNodes = function updateObservedNodes() {\n    if (!mutationObserver) {\n      return;\n    }\n    mutationObserver.disconnect();\n    if (state.active && !state.paused) {\n      state.containers.map(function (container) {\n        mutationObserver.observe(container, {\n          subtree: true,\n          childList: true\n        });\n      });\n    }\n  };\n\n  //\n  // TRAP DEFINITION\n  //\n\n  trap = {\n    get active() {\n      return state.active;\n    },\n    get paused() {\n      return state.paused;\n    },\n    activate: function activate(activateOptions) {\n      if (state.active) {\n        return this;\n      }\n      var onActivate = getOption(activateOptions, 'onActivate');\n      var onPostActivate = getOption(activateOptions, 'onPostActivate');\n      var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n      if (!checkCanFocusTrap) {\n        updateTabbableNodes();\n      }\n      state.active = true;\n      state.paused = false;\n      state.nodeFocusedBeforeActivation = doc.activeElement;\n      onActivate === null || onActivate === void 0 || onActivate();\n      var finishActivation = function finishActivation() {\n        if (checkCanFocusTrap) {\n          updateTabbableNodes();\n        }\n        addListeners();\n        updateObservedNodes();\n        onPostActivate === null || onPostActivate === void 0 || onPostActivate();\n      };\n      if (checkCanFocusTrap) {\n        checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n        return this;\n      }\n      finishActivation();\n      return this;\n    },\n    deactivate: function deactivate(deactivateOptions) {\n      if (!state.active) {\n        return this;\n      }\n      var options = _objectSpread2({\n        onDeactivate: config.onDeactivate,\n        onPostDeactivate: config.onPostDeactivate,\n        checkCanReturnFocus: config.checkCanReturnFocus\n      }, deactivateOptions);\n      clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n      state.delayInitialFocusTimer = undefined;\n      removeListeners();\n      state.active = false;\n      state.paused = false;\n      updateObservedNodes();\n      activeFocusTraps.deactivateTrap(trapStack, trap);\n      var onDeactivate = getOption(options, 'onDeactivate');\n      var onPostDeactivate = getOption(options, 'onPostDeactivate');\n      var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n      var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate');\n      onDeactivate === null || onDeactivate === void 0 || onDeactivate();\n      var finishDeactivation = function finishDeactivation() {\n        delay(function () {\n          if (returnFocus) {\n            tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n          }\n          onPostDeactivate === null || onPostDeactivate === void 0 || onPostDeactivate();\n        });\n      };\n      if (returnFocus && checkCanReturnFocus) {\n        checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n        return this;\n      }\n      finishDeactivation();\n      return this;\n    },\n    pause: function pause(pauseOptions) {\n      if (state.paused || !state.active) {\n        return this;\n      }\n      var onPause = getOption(pauseOptions, 'onPause');\n      var onPostPause = getOption(pauseOptions, 'onPostPause');\n      state.paused = true;\n      onPause === null || onPause === void 0 || onPause();\n      removeListeners();\n      updateObservedNodes();\n      onPostPause === null || onPostPause === void 0 || onPostPause();\n      return this;\n    },\n    unpause: function unpause(unpauseOptions) {\n      if (!state.paused || !state.active) {\n        return this;\n      }\n      var onUnpause = getOption(unpauseOptions, 'onUnpause');\n      var onPostUnpause = getOption(unpauseOptions, 'onPostUnpause');\n      state.paused = false;\n      onUnpause === null || onUnpause === void 0 || onUnpause();\n      updateTabbableNodes();\n      addListeners();\n      updateObservedNodes();\n      onPostUnpause === null || onPostUnpause === void 0 || onPostUnpause();\n      return this;\n    },\n    updateContainerElements: function updateContainerElements(containerElements) {\n      var elementsAsArray = [].concat(containerElements).filter(Boolean);\n      state.containers = elementsAsArray.map(function (element) {\n        return typeof element === 'string' ? doc.querySelector(element) : element;\n      });\n      if (state.active) {\n        updateTabbableNodes();\n      }\n      updateObservedNodes();\n      return this;\n    }\n  };\n\n  // initialize container elements\n  trap.updateContainerElements(elements);\n  return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","import Ids from 'ids';\nimport { FormFieldRegistry as FormFieldRegistry$1, iconsByType, Label as Label$3, IFrame, Text as Text$1, Html, Table, ExpressionField, FormFields, sanitizeImageSource, getAncestryList, FormContext, FormRenderContext, FormComponent, getScrollContainer, Importer, PathRegistry, FormLayouter, FieldFactory, FeelExpressionLanguage, OPTIONS_SOURCES, OPTIONS_SOURCES_PATHS, clone, runRecursively, getSchemaVariables, DATETIME_SUBTYPES, DATE_LABEL_PATH, TIME_LABEL_PATH, DATETIME_SUBTYPE_PATH, DATETIME_SUBTYPES_LABELS, TIME_SERIALISING_FORMAT_PATH, TIME_SERIALISING_FORMATS, TIME_INTERVAL_PATH, TIME_USE24H_PATH, DATE_DISALLOW_PAST_PATH, TIME_SERIALISINGFORMAT_LABELS, getOptionsSource, OPTIONS_SOURCES_DEFAULTS, OPTIONS_SOURCES_LABELS, SECURITY_ATTRIBUTES_DEFINITIONS, createFormContainer, createInjector, MarkdownRendererModule, schemaVersion } from '@bpmn-io/form-js-viewer';\nexport { schemaVersion } from '@bpmn-io/form-js-viewer';\nimport { isArray, isFunction, isNumber, bind, assign, debounce, forEach, isString, uniqueBy, isObject, get, isDefined, set as set$1, reduce, without, isNil, has } from 'min-dash';\nimport classnames from 'classnames';\nimport { jsxs, jsx, Fragment as Fragment$1 } from 'preact/jsx-runtime';\nimport { useContext, useRef, useEffect, useMemo, useState, useCallback, useLayoutEffect } from 'preact/hooks';\nimport { createContext, Fragment, render, createElement } from 'preact';\nimport * as React from 'preact/compat';\nimport { createPortal, useRef as useRef$1, useContext as useContext$1, useEffect as useEffect$1, forwardRef } from 'preact/compat';\nimport dragula from '@bpmn-io/draggle';\nimport { classes, query, closest, event, matches, domify } from 'min-dom';\nimport { mutate } from 'array-move';\nimport { FeelersEditor } from 'feelers';\nimport FeelEditor from '@bpmn-io/feel-editor';\nimport { lineNumbers, EditorView } from '@codemirror/view';\nimport * as focusTrap from 'focus-trap';\nimport Big from 'big.js';\n\nvar FN_REF = '__fn';\nvar DEFAULT_PRIORITY$3 = 1000;\nvar slice = Array.prototype.slice;\n\n/**\n * @typedef { {\n *   stopPropagation(): void;\n *   preventDefault(): void;\n *   cancelBubble: boolean;\n *   defaultPrevented: boolean;\n *   returnValue: any;\n * } } Event\n */\n\n/**\n * @template E\n *\n * @typedef { (event: E & Event, ...any) => any } EventBusEventCallback\n */\n\n/**\n * @typedef { {\n *  priority: number;\n *  next: EventBusListener | null;\n *  callback: EventBusEventCallback<any>;\n * } } EventBusListener\n */\n\n/**\n * A general purpose event bus.\n *\n * This component is used to communicate across a diagram instance.\n * Other parts of a diagram can use it to listen to and broadcast events.\n *\n *\n * ## Registering for Events\n *\n * The event bus provides the {@link EventBus#on} and {@link EventBus#once}\n * methods to register for events. {@link EventBus#off} can be used to\n * remove event registrations. Listeners receive an instance of {@link Event}\n * as the first argument. It allows them to hook into the event execution.\n *\n * ```javascript\n *\n * // listen for event\n * eventBus.on('foo', function(event) {\n *\n *   // access event type\n *   event.type; // 'foo'\n *\n *   // stop propagation to other listeners\n *   event.stopPropagation();\n *\n *   // prevent event default\n *   event.preventDefault();\n * });\n *\n * // listen for event with custom payload\n * eventBus.on('bar', function(event, payload) {\n *   console.log(payload);\n * });\n *\n * // listen for event returning value\n * eventBus.on('foobar', function(event) {\n *\n *   // stop event propagation + prevent default\n *   return false;\n *\n *   // stop event propagation + return custom result\n *   return {\n *     complex: 'listening result'\n *   };\n * });\n *\n *\n * // listen with custom priority (default=1000, higher is better)\n * eventBus.on('priorityfoo', 1500, function(event) {\n *   console.log('invoked first!');\n * });\n *\n *\n * // listen for event and pass the context (`this`)\n * eventBus.on('foobar', function(event) {\n *   this.foo();\n * }, this);\n * ```\n *\n *\n * ## Emitting Events\n *\n * Events can be emitted via the event bus using {@link EventBus#fire}.\n *\n * ```javascript\n *\n * // false indicates that the default action\n * // was prevented by listeners\n * if (eventBus.fire('foo') === false) {\n *   console.log('default has been prevented!');\n * };\n *\n *\n * // custom args + return value listener\n * eventBus.on('sum', function(event, a, b) {\n *   return a + b;\n * });\n *\n * // you can pass custom arguments + retrieve result values.\n * var sum = eventBus.fire('sum', 1, 2);\n * console.log(sum); // 3\n * ```\n *\n * @template [EventMap=null]\n */\nfunction EventBus() {\n  /**\n   * @type { Record<string, EventBusListener> }\n   */\n  this._listeners = {};\n\n  // cleanup on destroy on lowest priority to allow\n  // message passing until the bitter end\n  this.on('diagram.destroy', 1, this._destroy, this);\n}\n\n/**\n * @overlord\n *\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @template T\n *\n * @param {string|string[]} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<T>} callback\n * @param {any} [that] callback context\n */\n/**\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @template {keyof EventMap} EventName\n *\n * @param {EventName} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<EventMap[EventName]>} callback\n * @param {any} [that] callback context\n */\nEventBus.prototype.on = function (events, priority, callback, that) {\n  events = isArray(events) ? events : [events];\n  if (isFunction(priority)) {\n    that = callback;\n    callback = priority;\n    priority = DEFAULT_PRIORITY$3;\n  }\n  if (!isNumber(priority)) {\n    throw new Error('priority must be a number');\n  }\n  var actualCallback = callback;\n  if (that) {\n    actualCallback = bind(callback, that);\n\n    // make sure we remember and are able to remove\n    // bound callbacks via {@link #off} using the original\n    // callback\n    actualCallback[FN_REF] = callback[FN_REF] || callback;\n  }\n  var self = this;\n  events.forEach(function (e) {\n    self._addListener(e, {\n      priority: priority,\n      callback: actualCallback,\n      next: null\n    });\n  });\n};\n\n/**\n * @overlord\n *\n * Register an event listener that is called only once.\n *\n * @template T\n *\n * @param {string|string[]} events to subscribe to\n * @param {number} [priority=1000] the listen priority\n * @param {EventBusEventCallback<T>} callback\n * @param {any} [that] callback context\n */\n/**\n * Register an event listener that is called only once.\n *\n * @template {keyof EventMap} EventName\n *\n * @param {EventName} events to subscribe to\n * @param {number} [priority=1000] listen priority\n * @param {EventBusEventCallback<EventMap[EventName]>} callback\n * @param {any} [that] callback context\n */\nEventBus.prototype.once = function (events, priority, callback, that) {\n  var self = this;\n  if (isFunction(priority)) {\n    that = callback;\n    callback = priority;\n    priority = DEFAULT_PRIORITY$3;\n  }\n  if (!isNumber(priority)) {\n    throw new Error('priority must be a number');\n  }\n  function wrappedCallback() {\n    wrappedCallback.__isTomb = true;\n    var result = callback.apply(that, arguments);\n    self.off(events, wrappedCallback);\n    return result;\n  }\n\n  // make sure we remember and are able to remove\n  // bound callbacks via {@link #off} using the original\n  // callback\n  wrappedCallback[FN_REF] = callback;\n  this.on(events, priority, wrappedCallback);\n};\n\n/**\n * Removes event listeners by event and callback.\n *\n * If no callback is given, all listeners for a given event name are being removed.\n *\n * @param {string|string[]} events\n * @param {EventBusEventCallback} [callback]\n */\nEventBus.prototype.off = function (events, callback) {\n  events = isArray(events) ? events : [events];\n  var self = this;\n  events.forEach(function (event) {\n    self._removeListener(event, callback);\n  });\n};\n\n/**\n * Create an event recognized be the event bus.\n *\n * @param {Object} data Event data.\n *\n * @return {Event} An event that will be recognized by the event bus.\n */\nEventBus.prototype.createEvent = function (data) {\n  var event = new InternalEvent();\n  event.init(data);\n  return event;\n};\n\n/**\n * Fires an event.\n *\n * @example\n *\n * ```javascript\n * // fire event by name\n * events.fire('foo');\n *\n * // fire event object with nested type\n * var event = { type: 'foo' };\n * events.fire(event);\n *\n * // fire event with explicit type\n * var event = { x: 10, y: 20 };\n * events.fire('element.moved', event);\n *\n * // pass additional arguments to the event\n * events.on('foo', function(event, bar) {\n *   alert(bar);\n * });\n *\n * events.fire({ type: 'foo' }, 'I am bar!');\n * ```\n *\n * @param {string} [type] event type\n * @param {Object} [data] event or event data\n * @param {...any} [args] additional arguments the callback will be called with.\n *\n * @return {any} The return value. Will be set to `false` if the default was prevented.\n */\nEventBus.prototype.fire = function (type, data) {\n  var event, firstListener, returnValue, args;\n  args = slice.call(arguments);\n  if (typeof type === 'object') {\n    data = type;\n    type = data.type;\n  }\n  if (!type) {\n    throw new Error('no event type specified');\n  }\n  firstListener = this._listeners[type];\n  if (!firstListener) {\n    return;\n  }\n\n  // we make sure we fire instances of our home made\n  // events here. We wrap them only once, though\n  if (data instanceof InternalEvent) {\n    // we are fine, we alread have an event\n    event = data;\n  } else {\n    event = this.createEvent(data);\n  }\n\n  // ensure we pass the event as the first parameter\n  args[0] = event;\n\n  // original event type (in case we delegate)\n  var originalType = event.type;\n\n  // update event type before delegation\n  if (type !== originalType) {\n    event.type = type;\n  }\n  try {\n    returnValue = this._invokeListeners(event, args, firstListener);\n  } finally {\n    // reset event type after delegation\n    if (type !== originalType) {\n      event.type = originalType;\n    }\n  }\n\n  // set the return value to false if the event default\n  // got prevented and no other return value exists\n  if (returnValue === undefined && event.defaultPrevented) {\n    returnValue = false;\n  }\n  return returnValue;\n};\n\n/**\n * Handle an error by firing an event.\n *\n * @param {Error} error The error to be handled.\n *\n * @return {boolean} Whether the error was handled.\n */\nEventBus.prototype.handleError = function (error) {\n  return this.fire('error', {\n    error: error\n  }) === false;\n};\nEventBus.prototype._destroy = function () {\n  this._listeners = {};\n};\n\n/**\n * @param {Event} event\n * @param {any[]} args\n * @param {EventBusListener} listener\n *\n * @return {any}\n */\nEventBus.prototype._invokeListeners = function (event, args, listener) {\n  var returnValue;\n  while (listener) {\n    // handle stopped propagation\n    if (event.cancelBubble) {\n      break;\n    }\n    returnValue = this._invokeListener(event, args, listener);\n    listener = listener.next;\n  }\n  return returnValue;\n};\n\n/**\n * @param {Event} event\n * @param {any[]} args\n * @param {EventBusListener} listener\n *\n * @return {any}\n */\nEventBus.prototype._invokeListener = function (event, args, listener) {\n  var returnValue;\n  if (listener.callback.__isTomb) {\n    return returnValue;\n  }\n  try {\n    // returning false prevents the default action\n    returnValue = invokeFunction(listener.callback, args);\n\n    // stop propagation on return value\n    if (returnValue !== undefined) {\n      event.returnValue = returnValue;\n      event.stopPropagation();\n    }\n\n    // prevent default on return false\n    if (returnValue === false) {\n      event.preventDefault();\n    }\n  } catch (error) {\n    if (!this.handleError(error)) {\n      console.error('unhandled error in event listener', error);\n      throw error;\n    }\n  }\n  return returnValue;\n};\n\n/**\n * Add new listener with a certain priority to the list\n * of listeners (for the given event).\n *\n * The semantics of listener registration / listener execution are\n * first register, first serve: New listeners will always be inserted\n * after existing listeners with the same priority.\n *\n * Example: Inserting two listeners with priority 1000 and 1300\n *\n *    * before: [ 1500, 1500, 1000, 1000 ]\n *    * after: [ 1500, 1500, (new=1300), 1000, 1000, (new=1000) ]\n *\n * @param {string} event\n * @param {EventBusListener} newListener\n */\nEventBus.prototype._addListener = function (event, newListener) {\n  var listener = this._getListeners(event),\n    previousListener;\n\n  // no prior listeners\n  if (!listener) {\n    this._setListeners(event, newListener);\n    return;\n  }\n\n  // ensure we order listeners by priority from\n  // 0 (high) to n > 0 (low)\n  while (listener) {\n    if (listener.priority < newListener.priority) {\n      newListener.next = listener;\n      if (previousListener) {\n        previousListener.next = newListener;\n      } else {\n        this._setListeners(event, newListener);\n      }\n      return;\n    }\n    previousListener = listener;\n    listener = listener.next;\n  }\n\n  // add new listener to back\n  previousListener.next = newListener;\n};\n\n/**\n * @param {string} name\n *\n * @return {EventBusListener}\n */\nEventBus.prototype._getListeners = function (name) {\n  return this._listeners[name];\n};\n\n/**\n * @param {string} name\n * @param {EventBusListener} listener\n */\nEventBus.prototype._setListeners = function (name, listener) {\n  this._listeners[name] = listener;\n};\nEventBus.prototype._removeListener = function (event, callback) {\n  var listener = this._getListeners(event),\n    nextListener,\n    previousListener,\n    listenerCallback;\n  if (!callback) {\n    // clear listeners\n    this._setListeners(event, null);\n    return;\n  }\n  while (listener) {\n    nextListener = listener.next;\n    listenerCallback = listener.callback;\n    if (listenerCallback === callback || listenerCallback[FN_REF] === callback) {\n      if (previousListener) {\n        previousListener.next = nextListener;\n      } else {\n        // new first listener\n        this._setListeners(event, nextListener);\n      }\n    }\n    previousListener = listener;\n    listener = nextListener;\n  }\n};\n\n/**\n * A event that is emitted via the event bus.\n */\nfunction InternalEvent() {}\nInternalEvent.prototype.stopPropagation = function () {\n  this.cancelBubble = true;\n};\nInternalEvent.prototype.preventDefault = function () {\n  this.defaultPrevented = true;\n};\nInternalEvent.prototype.init = function (data) {\n  assign(this, data || {});\n};\n\n/**\n * Invoke function. Be fast...\n *\n * @param {Function} fn\n * @param {any[]} args\n *\n * @return {any}\n */\nfunction invokeFunction(fn, args) {\n  return fn.apply(null, args);\n}\n\n/**\n * A factory to create a configurable debouncer.\n *\n * @param {number|boolean} [config=true]\n */\nfunction DebounceFactory(config = true) {\n  const timeout = typeof config === 'number' ? config : config ? 300 : 0;\n  if (timeout) {\n    return fn => debounce(fn, timeout);\n  } else {\n    return fn => fn;\n  }\n}\nDebounceFactory.$inject = ['config.debounce'];\n\nclass FormFieldRegistry extends FormFieldRegistry$1 {\n  /**\n   * Updates a form fields id.\n   *\n   * @param {Object} formField\n   * @param {string} newId\n   */\n  updateId(formField, newId) {\n    this._validateId(newId);\n    this._eventBus.fire('formField.updateId', {\n      formField,\n      newId: newId\n    });\n    this.remove(formField);\n    formField.id = newId;\n    this.add(formField);\n\n    // TODO(nikku): make this a proper object graph so we\n    // do not have to deal with IDs this way...\n    if ('components' in formField) {\n      for (const component of formField.components) {\n        component._parent = newId;\n      }\n    }\n  }\n\n  /**\n   * Validate the suitability of the given id and signals a problem\n   * with an exception.\n   *\n   * @param {string} id\n   *\n   * @throws {Error} if id is empty or already assigned\n   */\n  _validateId(id) {\n    if (!id) {\n      throw new Error('formField must have an id');\n    }\n    if (this.get(id)) {\n      throw new Error('formField with id ' + id + ' already added');\n    }\n  }\n}\n\nconst MAX_COLUMNS_PER_ROW = 16;\nconst MAX_COLUMNS = 16;\nconst MIN_COLUMNS = 2;\nconst MAX_FIELDS_PER_ROW = 4;\nclass FormLayoutValidator {\n  /**\n   * @constructor\n   *\n   * @param { import('./FormLayouter').FormLayouter } formLayouter\n   * @param { import('./FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   */\n  constructor(formLayouter, formFieldRegistry) {\n    this._formLayouter = formLayouter;\n    this._formFieldRegistry = formFieldRegistry;\n  }\n  validateField(field = {}, columns, row) {\n    // allow empty (auto columns)\n    if (Number.isInteger(columns)) {\n      // allow minimum cols\n      if (columns < MIN_COLUMNS) {\n        return `Minimum ${MIN_COLUMNS} columns are allowed`;\n      }\n\n      // allow maximum cols\n      if (columns > MAX_COLUMNS) {\n        return `Maximum ${MAX_COLUMNS} columns are allowed`;\n      }\n    }\n    if (!row) {\n      row = this._formLayouter.getRowForField(field);\n    }\n\n    // calculate columns with and without updated field\n    let sumColumns = parseInt(columns) || 0;\n    let sumFields = 1;\n    let sumAutoCols = columns ? 0 : 1;\n    row.components.forEach(id => {\n      if (field.id === id) {\n        return;\n      }\n      const component = this._formFieldRegistry.get(id);\n      const cols = (component.layout || {}).columns;\n      if (!cols) {\n        sumAutoCols++;\n      }\n      sumColumns += parseInt(cols) || 0;\n      sumFields++;\n    });\n\n    // do not allow overflows\n    if (sumColumns > MAX_COLUMNS_PER_ROW || sumAutoCols > 0 && sumColumns > calculateMaxColumnsWithAuto(sumAutoCols) || columns === MAX_COLUMNS_PER_ROW && sumFields > 1) {\n      return `New value exceeds the maximum of ${MAX_COLUMNS_PER_ROW} columns per row`;\n    }\n    if (sumFields > MAX_FIELDS_PER_ROW) {\n      return `Maximum ${MAX_FIELDS_PER_ROW} fields per row are allowed`;\n    }\n    return null;\n  }\n}\nFormLayoutValidator.$inject = ['formLayouter', 'formFieldRegistry'];\n\n// helper //////////////////////\n\n// on normal screen sizes, auto columns take minimum 2 columns\nfunction calculateMaxColumnsWithAuto(autoCols) {\n  return MAX_COLUMNS_PER_ROW - autoCols * 2;\n}\n\nconst emptyImage = createEmptyImage();\nfunction editorFormFieldClasses(type, {\n  disabled = false\n} = {}) {\n  if (!type) {\n    throw new Error('type required');\n  }\n  return classnames('fjs-form-field', `fjs-form-field-${type}`, {\n    'fjs-disabled': disabled\n  });\n}\n\n/**\n * Add a dragger that calls back the passed function with\n * { event, delta } on drag.\n *\n * @example\n *\n * function dragMove(event, delta) {\n *   // we are dragging (!!)\n * }\n *\n * domElement.addEventListener('dragstart', dragger(dragMove));\n *\n * @param {Function} fn\n *\n * @return {Function} drag start callback function\n */\nfunction createDragger$1(fn) {\n  let self;\n  let startX, startY;\n\n  /** drag start */\n  function onDragStart(event) {\n    self = this;\n    startX = event.clientX;\n    startY = event.clientY;\n\n    // (1) hide drag preview image\n    if (event.dataTransfer) {\n      event.dataTransfer.setDragImage(emptyImage, 0, 0);\n    }\n\n    // (2) setup drag listeners\n\n    // attach drag + cleanup event\n    document.addEventListener('dragover', onDrag);\n    document.addEventListener('dragend', onEnd);\n    document.addEventListener('drop', preventDefault$1);\n  }\n  function onDrag(event) {\n    const delta = {\n      x: event.clientX - startX,\n      y: event.clientY - startY\n    };\n\n    // call provided fn with event, delta\n    return fn.call(self, event, delta);\n  }\n  function onEnd() {\n    document.removeEventListener('dragover', onDrag);\n    document.removeEventListener('dragend', onEnd);\n    document.removeEventListener('drop', preventDefault$1);\n  }\n  return onDragStart;\n}\n\n/**\n * Throttle function call according UI update cycle.\n *\n * @param  {Function} fn\n *\n * @return {Function} throttled fn\n */\nfunction throttle(fn) {\n  let active = false;\n  let lastArgs = [];\n  let lastThis = undefined;\n  return function (...args) {\n    lastArgs = args;\n    lastThis = this;\n    if (active) {\n      return;\n    }\n    active = true;\n    fn.apply(lastThis, lastArgs);\n    window.requestAnimationFrame(function () {\n      lastArgs = lastThis = active = undefined;\n    });\n  };\n}\nfunction preventDefault$1(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction createEmptyImage() {\n  const img = new Image();\n  img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n  return img;\n}\n\nfunction EditorIFrame(props) {\n  const {\n    field,\n    domId\n  } = props;\n  const {\n    label\n  } = field;\n  const Icon = iconsByType(field.type);\n  return jsxs(\"div\", {\n    class: editorFormFieldClasses(field.type),\n    children: [jsx(Label$3, {\n      id: domId,\n      label: label\n    }), jsx(\"div\", {\n      class: \"fjs-iframe-placeholder\",\n      id: domId,\n      children: jsxs(\"p\", {\n        class: \"fjs-iframe-placeholder-text\",\n        children: [jsx(Icon, {\n          width: \"32\",\n          height: \"24\",\n          viewBox: \"0 0 56 56\"\n        }), \"iFrame\"]\n      })\n    })]\n  });\n}\nEditorIFrame.config = IFrame.config;\n\nconst DragAndDropContext = createContext({\n  drake: null\n});\n\n/**\n * @param {string} type\n * @param {boolean} [strict]\n *\n * @returns {any}\n */\nfunction getService$1(type, strict) {}\nconst FormEditorContext = createContext({\n  getService: getService$1\n});\n\nfunction useService$1(type, strict) {\n  const {\n    getService\n  } = useContext(FormEditorContext);\n  return getService(type, strict);\n}\n\nfunction usePrevious$1(value, defaultValue = null) {\n  const ref = useRef(defaultValue);\n  useEffect(() => ref.current = value, [value]);\n  return ref.current;\n}\n\n/**\n * @param {Function} fn - function to debounce\n */\nfunction useDebounce(fn) {\n  const debounce = useService$1('debounce');\n  const callback = useMemo(() => {\n    return debounce(fn);\n  }, [debounce, fn]);\n\n  // cleanup async side-effect if callback #flush is provided.\n  useEffect(() => {\n    return () => {\n      typeof callback.flush === 'function' && callback.flush();\n    };\n  }, [callback]);\n  return callback;\n}\n\nvar _path$5;\nfunction _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5.apply(this, arguments); }\nvar SvgClose = function SvgClose(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$5({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"currentColor\"\n  }, props), _path$5 || (_path$5 = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\",\n    clipRule: \"evenodd\"\n  })));\n};\n\nvar _path$4, _path2$1;\nfunction _extends$4() { _extends$4 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$4.apply(this, arguments); }\nvar SvgDelete = function SvgDelete(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$4({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), /*#__PURE__*/React.createElement(\"rect\", {\n    width: 16,\n    height: 16,\n    x: 0.536,\n    fill: \"#fff\",\n    rx: 3,\n    style: {\n      mixBlendMode: \"multiply\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#fff\",\n    d: \"M0 0h16v16H0z\",\n    style: {\n      mixBlendMode: \"multiply\"\n    },\n    transform: \"translate(.536)\"\n  }), _path$4 || (_path$4 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"M7.536 6h-1v6h1zm3 0h-1v6h1z\"\n  })), _path2$1 || (_path2$1 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentcolor\",\n    d: \"M2.536 3v1h1v10a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4h1V3zm2 11V4h8v10zm6-13h-4v1h4z\"\n  })));\n};\n\nvar _path$3;\nfunction _extends$3() { _extends$3 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); }\nvar SvgDraggable = function SvgDraggable(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$3({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    xmlSpace: \"preserve\",\n    width: 16,\n    height: 16,\n    fill: \"currentcolor\",\n    viewBox: \"0 0 32 32\"\n  }, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M10 6h4v4h-4zm8 0h4v4h-4zm-8 8h4v4h-4zm8 0h4v4h-4zm-8 8h4v4h-4zm8 0h4v4h-4z\"\n  })), /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M0 0h32v32H0z\",\n    style: {\n      fill: \"none\"\n    }\n  }));\n};\n\nvar _path$2;\nfunction _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }\nvar SvgSearch = function SvgSearch(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$2({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 15,\n    height: 15,\n    fill: \"none\"\n  }, props), _path$2 || (_path$2 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"m14.5 13.793-3.776-3.776a5.508 5.508 0 1 0-.707.707l3.776 3.776zM2 6.5a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0\"\n  })));\n};\n\nvar _path$1, _rect, _mask, _path2, _path3, _path4, _path5, _path6;\nfunction _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }\nvar SvgEmptyForm = function SvgEmptyForm(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends$1({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 126,\n    height: 96,\n    fill: \"none\"\n  }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#FF832B\",\n    fillRule: \"evenodd\",\n    d: \"M70 78v8a3 3 0 0 1-3 3h-8v-5h6v-6zm0-16h-5V46h5zm0-32h-5v-6h-6v-5h8a3 3 0 0 1 3 3zM43 19v5H27v-5zm-32 0v5H5v6H0v-8a3 3 0 0 1 3-3zM0 46h5v16H0zm0 32h5v6h6v5H3a3 3 0 0 1-3-3zm27 11v-5h16v5z\",\n    clipRule: \"evenodd\"\n  })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n    width: 70,\n    height: 70,\n    fill: \"#E5E5E5\",\n    rx: 3,\n    transform: \"matrix(-1 0 0 1 94 0)\"\n  })), _mask || (_mask = /*#__PURE__*/React.createElement(\"mask\", {\n    id: \"EmptyForm_svg__a\",\n    fill: \"#fff\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M87.085 88.684 75.43 45.185l43.499 11.656-11.044 8.072 8.557 8.556-12.728 12.728-8.557-8.556z\",\n    clipRule: \"evenodd\"\n  }))), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#393939\",\n    fillRule: \"evenodd\",\n    d: \"M87.085 88.684 75.43 45.185l43.499 11.656-11.044 8.072 8.557 8.556-12.728 12.728-8.557-8.556z\",\n    clipRule: \"evenodd\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#393939\",\n    d: \"M75.43 45.185 70.6 46.48l-2.241-8.365 8.365 2.242zm11.655 43.499 4.037 2.95-6.163 8.432-2.704-10.088zm31.844-31.843 1.294-4.83 10.088 2.703-8.432 6.163zm-11.044 8.072-3.535 3.535-4.128-4.127 4.713-3.445zm8.557 8.556 3.535-3.535 3.536 3.535-3.536 3.536zm-12.728 12.728 3.536 3.536-3.536 3.535-3.536-3.535zm-8.557-8.556-4.036-2.951 3.444-4.713 4.128 4.128zM80.26 43.89 91.915 87.39l-9.66 2.588L70.6 46.48zm37.375 17.78L74.136 50.014l2.588-9.66 43.499 11.656zm-12.699-.795 11.043-8.072 5.901 8.073-11.043 8.072zm7.971 16.129-8.556-8.557 7.071-7.07 8.556 8.556zm-12.728 5.657 12.728-12.728 7.071 7.07-12.727 12.729zm-1.485-8.557 8.557 8.557-7.072 7.07-8.556-8.556zM83.049 85.733 91.12 74.69l8.073 5.901-8.072 11.044z\",\n    mask: \"url(#EmptyForm_svg__a)\"\n  })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n    stroke: \"#000\",\n    strokeLinecap: \"round\",\n    strokeWidth: 3,\n    d: \"m69.431 39.163-9.192-9.192\"\n  })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n    stroke: \"#000\",\n    strokeLinecap: \"round\",\n    strokeWidth: 3,\n    d: \"M1.5-1.5h8\",\n    transform: \"matrix(-1 0 0 1 68.213 50.123)\"\n  })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n    stroke: \"#000\",\n    strokeLinecap: \"round\",\n    strokeWidth: 3,\n    d: \"M78.969 36.367v-8\"\n  })));\n};\n\nfunction EditorText(props) {\n  const {\n    type,\n    text = ''\n  } = props.field;\n  const Icon = iconsByType('text');\n  const templating = useService$1('templating');\n  const expressionLanguage = useService$1('expressionLanguage');\n  if (!text || !text.trim()) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Text view is empty\"]\n      })\n    });\n  }\n  if (expressionLanguage.isExpression(text)) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Text view is populated by an expression\"]\n      })\n    });\n  }\n  if (templating.isTemplate(text)) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Text view is templated\"]\n      })\n    });\n  }\n  return jsx(Text$1, {\n    ...props,\n    disableLinks: true\n  });\n}\nEditorText.config = Text$1.config;\n\nfunction EditorHtml(props) {\n  const {\n    type,\n    content = ''\n  } = props.field;\n  const Icon = iconsByType(type);\n  const templating = useService$1('templating');\n  const expressionLanguage = useService$1('expressionLanguage');\n  if (!content || !content.trim()) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Html view is empty\"]\n      })\n    });\n  }\n  if (expressionLanguage.isExpression(content)) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Html view is populated by an expression\"]\n      })\n    });\n  }\n  if (templating.isTemplate(content)) {\n    return jsx(\"div\", {\n      class: editorFormFieldClasses(type),\n      children: jsxs(\"div\", {\n        class: \"fjs-form-field-placeholder\",\n        children: [jsx(Icon, {\n          viewBox: \"0 0 54 54\"\n        }), \"Html view is templated\"]\n      })\n    });\n  }\n  return jsx(Html, {\n    ...props,\n    disableLinks: true\n  });\n}\nEditorHtml.config = Html.config;\n\nfunction EditorTable(props) {\n  const {\n    columnsExpression,\n    columns,\n    id,\n    label\n  } = props.field;\n  const shouldUseMockColumns = typeof columnsExpression === 'string' && columnsExpression.length > 0 || Array.isArray(columns) && columns.length === 0;\n  const editorColumns = shouldUseMockColumns ? [{\n    key: '1',\n    label: 'Column 1'\n  }, {\n    key: '2',\n    label: 'Column 2'\n  }, {\n    key: '3',\n    label: 'Column 3'\n  }] : columns;\n  const prefixId = `fjs-form-${id}`;\n  return jsxs(\"div\", {\n    class: editorFormFieldClasses('table', {\n      disabled: true\n    }),\n    children: [jsx(Label$3, {\n      id: prefixId,\n      label: label\n    }), jsx(\"div\", {\n      class: \"fjs-table-middle-container\",\n      children: jsx(\"div\", {\n        class: \"fjs-table-inner-container\",\n        children: jsxs(\"table\", {\n          class: classnames('fjs-table', 'fjs-disabled'),\n          id: prefixId,\n          children: [jsx(\"thead\", {\n            class: \"fjs-table-head\",\n            children: jsx(\"tr\", {\n              class: \"fjs-table-tr\",\n              children: editorColumns.map(({\n                key,\n                label\n              }) => jsx(\"th\", {\n                class: \"fjs-table-th\",\n                children: label\n              }, key))\n            })\n          }), jsx(\"tbody\", {\n            class: \"fjs-table-body\",\n            children: jsx(\"tr\", {\n              class: \"fjs-table-tr\",\n              children: editorColumns.map(({\n                key\n              }) => jsx(\"td\", {\n                class: \"fjs-table-td\",\n                children: \"Content\"\n              }, key))\n            })\n          })]\n        })\n      })\n    })]\n  });\n}\nEditorTable.config = Table.config;\n\nconst type = 'expression';\nfunction EditorExpressionField(props) {\n  const {\n    field\n  } = props;\n  const {\n    expression = '',\n    key\n  } = field;\n  const Icon = iconsByType('expression');\n  const expressionLanguage = useService$1('expressionLanguage');\n  let placeholderContent = 'Expression is empty';\n  if (expression.trim() && expressionLanguage.isExpression(expression)) {\n    placeholderContent = `Expression for '${key}'`;\n  }\n  return jsx(\"div\", {\n    class: editorFormFieldClasses(type),\n    children: jsxs(\"div\", {\n      class: \"fjs-form-field-placeholder\",\n      children: [jsx(Icon, {\n        viewBox: \"0 0 54 54\"\n      }), placeholderContent]\n    })\n  });\n}\nEditorExpressionField.config = {\n  ...ExpressionField.config,\n  escapeGridRender: false\n};\n\nconst editorFormFields = [EditorIFrame, EditorText, EditorHtml, EditorTable, EditorExpressionField];\n\nclass EditorFormFields extends FormFields {\n  constructor() {\n    super();\n    editorFormFields.forEach(formField => {\n      this.register(formField.config.type, formField);\n    });\n  }\n}\n\nconst ModularSection = props => {\n  const {\n    rootClass,\n    RootElement,\n    section,\n    children\n  } = props;\n  const eventBus = useService$1('eventBus');\n  const sectionConfig = useService$1(`config.${section}`);\n  const [parent, setParent] = useState(sectionConfig && sectionConfig.parent || null);\n  const [shouldRender, setShouldRender] = useState(true);\n  const ParentElement = useMemo(() => {\n    if (parent === null) {\n      return null;\n    }\n    if (typeof parent === 'string') {\n      const element = document.querySelector(parent);\n      if (!element) {\n        throw new Error(`Target root element with selector '${parent}' not found for section '${section}'`);\n      }\n      return document.querySelector(parent);\n    }\n\n    // @ts-ignore\n    if (!(parent instanceof Element)) {\n      throw new Error(`Target root element for section '${section}' must be a valid selector or DOM element`);\n    }\n    return parent;\n  }, [section, parent]);\n  useEffect(() => {\n    const onAttach = ({\n      container\n    }) => {\n      setParent(container);\n      setShouldRender(true);\n    };\n    const onDetach = () => {\n      setParent(null);\n      setShouldRender(false);\n    };\n    const onReset = () => {\n      setParent(null);\n      setShouldRender(true);\n    };\n    eventBus.on(`${section}.attach`, onAttach);\n    eventBus.on(`${section}.detach`, onDetach);\n    eventBus.on(`${section}.reset`, onReset);\n    eventBus.fire(`${section}.section.rendered`);\n    return () => {\n      eventBus.off(`${section}.attach`, onAttach);\n      eventBus.off(`${section}.detach`, onDetach);\n      eventBus.off(`${section}.reset`, onReset);\n      eventBus.fire(`${section}.section.destroyed`);\n    };\n  }, [eventBus, section]);\n  useEffect(() => {\n    if (shouldRender) {\n      eventBus.fire(`${section}.rendered`, {\n        element: ParentElement\n      });\n      return () => {\n        eventBus.fire(`${section}.destroyed`, {\n          element: ParentElement\n        });\n      };\n    }\n  }, [eventBus, section, shouldRender, ParentElement]);\n  const Root = useCallback(({\n    children\n  }) => RootElement ? jsx(RootElement, {\n    children: children\n  }) : jsx(\"div\", {\n    className: rootClass,\n    children: children\n  }), [rootClass, RootElement]);\n  return shouldRender ? parent ? createPortal(jsx(Root, {\n    children: children\n  }), ParentElement) : jsx(Root, {\n    children: children\n  }) : null;\n};\n\nconst FillContext = createContext({\n  addFill(uid, props) {\n    throw new Error('FillContext.addFill() uninitialized');\n  },\n  removeFill(uid) {\n    throw new Error('FillContext.addFill() uninitialized');\n  }\n});\n\nconst Fill = props => {\n  const uid = useRef$1(Symbol('fill_uid'));\n  const fillContext = useContext$1(FillContext);\n  useEffect$1(() => {\n    if (!fillContext) {\n      return;\n    }\n    fillContext.addFill({\n      id: uid,\n      ...props\n    });\n    return () => {\n      fillContext.removeFill(uid);\n    };\n  }, [fillContext, props]);\n  return null;\n};\n\nconst SlotContext = createContext({\n  fills: []\n});\n\nconst Slot = props => {\n  const {\n    name,\n    fillRoot = FillFragment,\n    groupFn = _groupByGroupName,\n    separatorFn = key => null,\n    limit\n  } = props;\n  const {\n    fills\n  } = useContext(SlotContext);\n  const filtered = useMemo(() => fills.filter(fill => fill.slot === name), [fills, name]);\n  const cropped = useMemo(() => limit ? filtered.slice(0, limit) : filtered, [filtered, limit]);\n  const groups = useMemo(() => groupFn(cropped), [cropped, groupFn]);\n  const fillsAndSeparators = useMemo(() => {\n    return buildFills(groups, fillRoot, separatorFn);\n  }, [groups, fillRoot, separatorFn]);\n  return fillsAndSeparators;\n};\n\n/**\n * Creates a Fragment for a fill.\n *\n * @param {Object} fill Fill to be rendered\n * @returns {Object} Preact Fragment containing fill's children\n */\nconst FillFragment = fill => jsx(Fragment, {\n  children: fill.children\n}, fill.id);\n\n/**\n * Creates an array of fills, with separators inserted between groups.\n *\n * @param {Array} groups Groups of fills\n * @param {Function} fillRenderer Function to create a fill\n * @param {Function} separatorRenderer Function to create a separator\n * @returns {Array} Array of fills and separators\n */\nconst buildFills = (groups, fillRenderer, separatorRenderer) => {\n  const result = [];\n  groups.forEach((array, idx) => {\n    if (idx !== 0) {\n      const separator = separatorRenderer(`__separator_${idx}`);\n      if (separator) {\n        result.push(separator);\n      }\n    }\n    array.forEach(fill => {\n      result.push(fillRenderer(fill));\n    });\n  });\n  return result;\n};\n\n/**\n * Groups fills by group name property.\n */\nconst _groupByGroupName = fills => {\n  const groups = [];\n  const groupsById = {};\n  fills.forEach(function (fill) {\n    const {\n      group: groupName = 'z_default'\n    } = fill;\n    let group = groupsById[groupName];\n    if (!group) {\n      groupsById[groupName] = group = [];\n      groups.push(group);\n    }\n    group.push(fill);\n  });\n  groups.forEach(group => group.sort(_comparePriority));\n  return Object.keys(groupsById).sort().map(id => groupsById[id]);\n};\n\n/**\n * Compares fills by priority.\n */\nconst _comparePriority = (a, b) => {\n  return (b.priority || 0) - (a.priority || 0);\n};\n\nconst noop = () => {};\nconst SlotFillRoot = props => {\n  const [fills, setFills] = useState([]);\n  const {\n    onSetFill = noop,\n    onRemoveFill = noop\n  } = props;\n  const fillContext = useMemo(() => ({\n    addFill: fill => {\n      setFills(fills => [...fills.filter(f => f.id !== fill.id), fill]);\n      onSetFill(fill);\n    },\n    removeFill: id => {\n      setFills(fills => fills.filter(f => f.id !== id));\n      onRemoveFill(id);\n    }\n  }), [onRemoveFill, onSetFill]);\n  const slotContext = useMemo(() => ({\n    fills\n  }), [fills]);\n  return jsx(SlotContext.Provider, {\n    value: slotContext,\n    children: jsx(FillContext.Provider, {\n      value: fillContext,\n      children: props.children\n    })\n  });\n};\n\nfunction PaletteEntry(props) {\n  const {\n    type,\n    label,\n    icon,\n    iconUrl,\n    getPaletteIcon\n  } = props;\n  const modeling = useService$1('modeling');\n  const formEditor = useService$1('formEditor');\n  const Icon = getPaletteIcon({\n    icon,\n    iconUrl,\n    label,\n    type\n  });\n  const onKeyDown = event => {\n    if (event.code === 'Enter') {\n      const {\n        fieldType: type\n      } = event.target.dataset;\n      const {\n        schema\n      } = formEditor._getState();\n\n      // add new form field to last position\n      modeling.addFormField({\n        type\n      }, schema, schema.components.length);\n    }\n  };\n  return jsxs(\"button\", {\n    type: \"button\",\n    class: \"fjs-palette-field fjs-drag-copy fjs-no-drop\",\n    \"data-field-type\": type,\n    title: `Create ${getIndefiniteArticle(type)} ${label} element`,\n    onKeyDown: onKeyDown,\n    children: [Icon ? jsx(Icon, {\n      class: \"fjs-palette-field-icon\",\n      width: \"36\",\n      height: \"36\",\n      viewBox: \"0 0 54 54\"\n    }) : null, jsx(\"span\", {\n      class: \"fjs-palette-field-text\",\n      children: label\n    })]\n  });\n}\n\n// helpers ///////////\n\nfunction getIndefiniteArticle(type) {\n  if (['image'].includes(type)) {\n    return 'an';\n  }\n  return 'a';\n}\n\nconst PALETTE_GROUPS = [{\n  label: 'Input',\n  id: 'basic-input'\n}, {\n  label: 'Selection',\n  id: 'selection'\n}, {\n  label: 'Presentation',\n  id: 'presentation'\n}, {\n  label: 'Containers',\n  id: 'container'\n}, {\n  label: 'Action',\n  id: 'action'\n}];\nfunction Palette(props) {\n  const formFields = useService$1('formFields');\n  const initialPaletteEntries = useRef(collectPaletteEntries(formFields));\n  const [paletteEntries, setPaletteEntries] = useState(initialPaletteEntries.current);\n  const [searchTerm, setSearchTerm] = useState('');\n  const inputRef = useRef();\n  const groups = groupEntries(paletteEntries);\n  const simplifyString = useCallback(str => {\n    return str.toLowerCase().replace(/\\s+/g, '');\n  }, []);\n  const filter = useCallback(entry => {\n    const simplifiedSearchTerm = simplifyString(searchTerm);\n    if (!simplifiedSearchTerm) {\n      return true;\n    }\n    const simplifiedEntryLabel = simplifyString(entry.label);\n    const simplifiedEntryType = simplifyString(entry.type);\n    return simplifiedEntryLabel.includes(simplifiedSearchTerm) || simplifiedEntryType.includes(simplifiedSearchTerm);\n  }, [searchTerm, simplifyString]);\n\n  // filter entries on search change\n  useEffect(() => {\n    const entries = initialPaletteEntries.current.filter(filter);\n    setPaletteEntries(entries);\n  }, [filter, searchTerm]);\n  const handleInput = useCallback(event => {\n    setSearchTerm(() => event.target.value);\n  }, [setSearchTerm]);\n  const handleClear = useCallback(event => {\n    setSearchTerm('');\n    inputRef.current.focus();\n  }, [inputRef, setSearchTerm]);\n  return jsxs(\"div\", {\n    class: \"fjs-palette\",\n    children: [jsx(\"div\", {\n      class: \"fjs-palette-header\",\n      title: \"Components\",\n      children: \"Components\"\n    }), jsxs(\"div\", {\n      class: \"fjs-palette-search-container\",\n      children: [jsx(\"span\", {\n        class: \"fjs-palette-search-icon\",\n        children: jsx(SvgSearch, {})\n      }), jsx(\"input\", {\n        class: \"fjs-palette-search\",\n        ref: inputRef,\n        type: \"text\",\n        placeholder: \"Search components\",\n        value: searchTerm,\n        onInput: handleInput\n      }), searchTerm && jsx(\"button\", {\n        type: \"button\",\n        title: \"Clear content\",\n        class: \"fjs-palette-search-clear\",\n        onClick: handleClear,\n        children: jsx(SvgClose, {})\n      })]\n    }), jsxs(\"div\", {\n      class: \"fjs-palette-entries\",\n      children: [groups.map(({\n        label,\n        entries,\n        id\n      }) => jsxs(\"div\", {\n        class: \"fjs-palette-group\",\n        \"data-group-id\": id,\n        children: [jsx(\"span\", {\n          class: \"fjs-palette-group-title\",\n          children: label\n        }), jsx(\"div\", {\n          class: \"fjs-palette-fields fjs-drag-container fjs-no-drop\",\n          children: entries.map(entry => {\n            return jsx(PaletteEntry, {\n              getPaletteIcon: getPaletteIcon,\n              ...entry\n            });\n          })\n        })]\n      })), groups.length == 0 && jsx(\"div\", {\n        class: \"fjs-palette-no-entries\",\n        children: \"No components found.\"\n      })]\n    }), jsx(\"div\", {\n      class: \"fjs-palette-footer\",\n      children: jsx(Slot, {\n        name: \"editor-palette__footer\",\n        fillRoot: FillRoot\n      })\n    })]\n  });\n}\nconst FillRoot = fill => jsx(\"div\", {\n  className: \"fjs-palette-footer-fill\",\n  children: fill.children\n});\n\n// helpers ///////\n\nfunction groupEntries(entries) {\n  const groups = PALETTE_GROUPS.map(group => {\n    return {\n      ...group,\n      entries: []\n    };\n  });\n  const getGroup = id => groups.find(group => id === group.id);\n  entries.forEach(entry => {\n    const {\n      group\n    } = entry;\n    getGroup(group).entries.push(entry);\n  });\n  return groups.filter(g => g.entries.length);\n}\n\n/**\n * Returns a list of palette entries.\n *\n * @param {FormFields} formFields\n * @returns {Array<PaletteEntry>}\n */\nfunction collectPaletteEntries(formFields) {\n  return Object.entries(formFields._formFields).map(([type, formField]) => {\n    const {\n      config: fieldConfig\n    } = formField;\n    return {\n      label: fieldConfig.label,\n      type: type,\n      group: fieldConfig.group,\n      icon: fieldConfig.icon,\n      iconUrl: fieldConfig.iconUrl\n    };\n  }).filter(({\n    type\n  }) => type !== 'default');\n}\n\n/**\n * There are various options to specify an icon for a palette entry.\n *\n * a) via `iconUrl` property in a form field config\n * b) via `icon` property in a form field config\n * c) via statically defined iconsByType (fallback)\n */\nfunction getPaletteIcon(entry) {\n  const {\n    icon,\n    iconUrl,\n    type,\n    label\n  } = entry;\n  let Icon;\n  if (iconUrl) {\n    Icon = () => jsx(\"img\", {\n      class: \"fjs-field-icon-image\",\n      width: 36,\n      style: {\n        margin: 'auto'\n      },\n      alt: label,\n      src: sanitizeImageSource(iconUrl)\n    });\n  } else {\n    Icon = icon || iconsByType(type);\n  }\n  return Icon;\n}\n\nconst InjectedRendersRoot = () => {\n  const renderInjector = useService$1('renderInjector');\n  const injectedRenderers = renderInjector.fetchRenderers();\n  const injectedProps = useMemo(() => ({\n    useService: useService$1,\n    components: {\n      Fill,\n      Slot\n    }\n  }), []);\n  return jsx(Fragment, {\n    children: injectedRenderers.map(({\n      Renderer\n    }) => jsx(Renderer, {\n      ...injectedProps\n    }))\n  });\n};\n\nconst CURSOR_CLS_PATTERN = /^fjs-cursor-.*$/;\nfunction set(mode) {\n  const classes$1 = classes(document.body);\n  classes$1.removeMatching(CURSOR_CLS_PATTERN);\n  if (mode) {\n    classes$1.add('fjs-cursor-' + mode);\n  }\n}\nfunction unset() {\n  set(null);\n}\n\nconst DRAG_CONTAINER_CLS = 'fjs-drag-container';\nconst DROP_CONTAINER_VERTICAL_CLS = 'fjs-drop-container-vertical';\nconst DROP_CONTAINER_HORIZONTAL_CLS = 'fjs-drop-container-horizontal';\nconst DRAG_MOVE_CLS = 'fjs-drag-move';\nconst DRAG_ROW_MOVE_CLS = 'fjs-drag-row-move';\nconst DRAG_COPY_CLS = 'fjs-drag-copy';\nconst DRAG_NO_DROP_CLS = 'fjs-no-drop';\nconst DRAG_NO_MOVE_CLS = 'fjs-no-move';\nconst ERROR_DROP_CLS = 'fjs-error-drop';\n\n/**\n * @typedef { { id: String, components: Array<any> } } FormRow\n */\n\nclass Dragging {\n  /**\n   * @constructor\n   *\n   * @param { import('../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   * @param { import('../../core/FormLayouter').FormLayouter } formLayouter\n   * @param { import('../../core/FormLayoutValidator').FormLayoutValidator } formLayoutValidator\n   * @param { import('../../core/EventBus').EventBus } eventBus\n   * @param { import('../modeling/Modeling').Modeling } modeling\n   * @param { import('@bpmn-io/form-js-viewer').PathRegistry } pathRegistry\n   */\n  constructor(formFieldRegistry, formLayouter, formLayoutValidator, eventBus, modeling, pathRegistry) {\n    this._formFieldRegistry = formFieldRegistry;\n    this._formLayouter = formLayouter;\n    this._formLayoutValidator = formLayoutValidator;\n    this._eventBus = eventBus;\n    this._modeling = modeling;\n    this._pathRegistry = pathRegistry;\n  }\n\n  /**\n   * Calculates position in form schema given the dropped place.\n   *\n   * @param { FormRow } targetRow\n   * @param { any } targetFormField\n   * @param { HTMLElement } sibling\n   * @returns { number }\n   */\n  getTargetIndex(targetRow, targetFormField, sibling) {\n    /** @type HTMLElement */\n    const siblingFormFieldNode = sibling && sibling.querySelector('.fjs-element');\n    const siblingFormField = siblingFormFieldNode && this._formFieldRegistry.get(siblingFormFieldNode.dataset.id);\n\n    // (1) dropped before existing field => place before\n    if (siblingFormField) {\n      return getFormFieldIndex$1(targetFormField, siblingFormField);\n    }\n\n    // (2) dropped in row => place at the end of row (after last field in row)\n    if (targetRow) {\n      return getFormFieldIndex$1(targetFormField, this._formFieldRegistry.get(targetRow.components[targetRow.components.length - 1])) + 1;\n    }\n\n    // (3) dropped as last item\n    return targetFormField.components.length;\n  }\n  validateDrop(element, target) {\n    const formFieldNode = element.querySelector('.fjs-element');\n    const targetRow = this._formLayouter.getRow(target.dataset.rowId);\n    let columns;\n    let formField;\n    let targetParentId;\n    if (formFieldNode) {\n      formField = this._formFieldRegistry.get(formFieldNode.dataset.id);\n      columns = (formField.layout || {}).columns;\n\n      // (1) check for row constraints\n      if (isRow(target)) {\n        targetParentId = getFormParent(target).dataset.id;\n        const rowError = this._formLayoutValidator.validateField(formField, columns, targetRow);\n        if (rowError) {\n          return rowError;\n        }\n      } else {\n        targetParentId = target.dataset.id;\n      }\n\n      // (2) check target is a valid parent\n      if (!targetParentId) {\n        return 'Drop is not a valid target';\n      }\n\n      // (3) check  for path collisions\n      const targetParentFormField = this._formFieldRegistry.get(targetParentId);\n      const currentParentFormField = this._formFieldRegistry.get(formField._parent);\n      if (targetParentFormField !== currentParentFormField) {\n        const targetParentPath = this._pathRegistry.getValuePath(targetParentFormField);\n        const currentParentPath = this._pathRegistry.getValuePath(currentParentFormField);\n        if (targetParentPath.join('.') !== currentParentPath.join('.')) {\n          const isDropAllowedByPathRegistry = this._pathRegistry.executeRecursivelyOnFields(formField, ({\n            field,\n            isClosed,\n            isRepeatable\n          }) => {\n            const options = {\n              cutoffNode: currentParentFormField.id\n            };\n            const fieldPath = this._pathRegistry.getValuePath(field, options);\n            return this._pathRegistry.canClaimPath([...targetParentPath, ...fieldPath], {\n              isClosed,\n              isRepeatable,\n              knownAncestorIds: getAncestryList(targetParentId, this._formFieldRegistry)\n            });\n          });\n          if (!isDropAllowedByPathRegistry) {\n            return 'Drop not allowed by path registry';\n          }\n        }\n      }\n    }\n  }\n  moveField(element, source, targetRow, targetFormField, targetIndex) {\n    const formFieldNode = element.querySelector('.fjs-element');\n    const formField = this._formFieldRegistry.get(formFieldNode.dataset.id);\n    const sourceParent = getFormParent(source);\n    const sourceFormField = this._formFieldRegistry.get(sourceParent.dataset.id);\n    const sourceIndex = getFormFieldIndex$1(sourceFormField, formField);\n    const sourceRow = this._formLayouter.getRowForField(formField);\n    this._modeling.moveFormField(formField, sourceFormField, targetFormField, sourceIndex, targetIndex, sourceRow, targetRow);\n  }\n  createNewField(element, targetRow, targetFormField, targetIndex) {\n    const type = element.dataset.fieldType;\n    let attrs = {\n      type\n    };\n    attrs = {\n      ...attrs,\n      _parent: targetFormField.id,\n      layout: {\n        row: targetRow ? targetRow.id : this._formLayouter.nextRowId(),\n        // enable auto columns\n        columns: null\n      }\n    };\n    this._modeling.addFormField(attrs, targetFormField, targetIndex);\n  }\n  handleRowDrop(el, target, source, sibling) {\n    const targetFormField = this._formFieldRegistry.get(target.dataset.id);\n    const rowNode = el.querySelector('.fjs-layout-row');\n    const row = this._formLayouter.getRow(rowNode.dataset.rowId);\n\n    // move each field in the row before first field of sibling row\n    row.components.forEach((id, index) => {\n      const formField = this._formFieldRegistry.get(id);\n      const sourceParent = getFormParent(source);\n      const sourceFormField = this._formFieldRegistry.get(sourceParent.dataset.id);\n      const siblingRowNode = sibling && sibling.querySelector('.fjs-layout-row');\n      const siblingRow = siblingRowNode && this._formLayouter.getRow(siblingRowNode.dataset.rowId);\n      const siblingFormField = sibling && this._formFieldRegistry.get(siblingRow.components[0]);\n      const sourceIndex = getFormFieldIndex$1(sourceFormField, formField);\n      const targetIndex = (siblingRowNode ? getFormFieldIndex$1(targetFormField, siblingFormField) : targetFormField.components.length) + index;\n      this._modeling.moveFormField(formField, sourceFormField, targetFormField, sourceIndex, targetIndex, row, row);\n    });\n  }\n  handleElementDrop(el, target, source, sibling, drake) {\n    // (1) detect drop target\n    const targetFormField = this._formFieldRegistry.get(getFormParent(target).dataset.id);\n    let targetRow;\n\n    // (2.1) dropped in existing row\n    if (isRow(target)) {\n      targetRow = this._formLayouter.getRow(target.dataset.rowId);\n    }\n\n    // (2.2) validate whether drop is allowed\n    const validationError = this.validateDrop(el, target);\n    if (validationError) {\n      return drake.cancel(true);\n    }\n    drake.remove();\n\n    // (3) detect position to drop field in schema order\n    const targetIndex = this.getTargetIndex(targetRow, targetFormField, sibling);\n\n    // (4) create new field or move existing\n    if (isPalette(source)) {\n      this.createNewField(el, targetRow, targetFormField, targetIndex);\n    } else {\n      this.moveField(el, source, targetRow, targetFormField, targetIndex);\n    }\n  }\n\n  /**\n   * @param { { container: Array<string>, direction: string, mirrorContainer: string } } options\n   */\n  createDragulaInstance(options) {\n    const {\n      container,\n      mirrorContainer\n    } = options || {};\n    let dragulaOptions = {\n      direction: function (el, target) {\n        if (isRow(target)) {\n          return 'horizontal';\n        }\n        return 'vertical';\n      },\n      mirrorContainer,\n      isContainer(el) {\n        return container.some(cls => el.classList.contains(cls));\n      },\n      moves(el, source, handle) {\n        return !handle.classList.contains(DRAG_NO_MOVE_CLS) && (el.classList.contains(DRAG_MOVE_CLS) || el.classList.contains(DRAG_COPY_CLS) || el.classList.contains(DRAG_ROW_MOVE_CLS));\n      },\n      copy(el) {\n        return el.classList.contains(DRAG_COPY_CLS);\n      },\n      accepts: (el, target) => {\n        unsetDropNotAllowed(target);\n\n        // allow dropping rows only between rows\n        if (el.classList.contains(DRAG_ROW_MOVE_CLS)) {\n          return !target.classList.contains(DROP_CONTAINER_HORIZONTAL_CLS);\n        }\n\n        // validate field drop\n        const validationError = this.validateDrop(el, target);\n        if (validationError) {\n          // set error feedback to row\n          setDropNotAllowed(target);\n        }\n        return !target.classList.contains(DRAG_NO_DROP_CLS);\n      },\n      slideFactorX: 10,\n      slideFactorY: 5\n    };\n    const dragulaInstance = dragula(dragulaOptions);\n\n    // bind life cycle events\n    dragulaInstance.on('drag', (element, source) => {\n      this.emit('drag.start', {\n        element,\n        source\n      });\n    });\n    dragulaInstance.on('dragend', element => {\n      this.emit('drag.end', {\n        element\n      });\n    });\n    dragulaInstance.on('drop', (element, target, source, sibling) => {\n      this.emit('drag.drop', {\n        element,\n        target,\n        source,\n        sibling\n      });\n    });\n    dragulaInstance.on('over', (element, container, source) => {\n      this.emit('drag.hover', {\n        element,\n        container,\n        source\n      });\n    });\n    dragulaInstance.on('out', (element, container, source) => {\n      this.emit('drag.out', {\n        element,\n        container,\n        source\n      });\n    });\n    dragulaInstance.on('cancel', (element, container, source) => {\n      this.emit('drag.cancel', {\n        element,\n        container,\n        source\n      });\n    });\n    dragulaInstance.on('drop', (el, target, source, sibling) => {\n      if (!target) {\n        dragulaInstance.remove();\n        return;\n      }\n\n      // (1) handle row drop\n      if (isDragRow(el)) {\n        this.handleRowDrop(el, target, source, sibling);\n      } else {\n        // (2) handle form field drop\n        this.handleElementDrop(el, target, source, sibling, dragulaInstance);\n      }\n    });\n    this.emit('dragula.created', dragulaInstance);\n    return dragulaInstance;\n  }\n  emit(event, context) {\n    this._eventBus.fire(event, context);\n  }\n}\nDragging.$inject = ['formFieldRegistry', 'formLayouter', 'formLayoutValidator', 'eventBus', 'modeling', 'pathRegistry'];\n\n// helper //////////\n\nfunction getFormFieldIndex$1(parent, formField) {\n  let fieldFormIndex = parent.components.length;\n  parent.components.forEach(({\n    id\n  }, index) => {\n    if (id === formField.id) {\n      fieldFormIndex = index;\n    }\n  });\n  return fieldFormIndex;\n}\nfunction isRow(node) {\n  return node.classList.contains('fjs-layout-row');\n}\nfunction isDragRow(node) {\n  return node.classList.contains(DRAG_ROW_MOVE_CLS);\n}\nfunction isPalette(node) {\n  return node.classList.contains('fjs-palette-fields');\n}\nfunction getFormParent(node) {\n  return node.closest('.fjs-element');\n}\nfunction setDropNotAllowed(node) {\n  node.classList.add(ERROR_DROP_CLS);\n  set('not-allowed');\n}\nfunction unsetDropNotAllowed(node) {\n  node.classList.remove(ERROR_DROP_CLS);\n  set('grabbing');\n}\n\nfunction FieldDragPreview(props) {\n  const {\n    class: className,\n    Icon,\n    label\n  } = props;\n  return jsxs(\"div\", {\n    class: classnames('fjs-field-preview', className),\n    children: [jsx(Icon, {\n      class: \"fjs-field-preview-icon\",\n      width: \"36\",\n      height: \"36\",\n      viewBox: \"0 0 54 54\"\n    }), jsx(\"span\", {\n      class: \"fjs-field-preview-text\",\n      children: label\n    })]\n  });\n}\n\nconst COLUMNS_REGEX = /^cds--col(-lg)?/;\nconst ELEMENT_RESIZING_CLS = 'fjs-element-resizing';\nconst GRID_OFFSET_PX = 16;\nfunction FieldResizer(props) {\n  const {\n    field,\n    position\n  } = props;\n  const ref = useRef(null);\n  const formLayoutValidator = useService$1('formLayoutValidator');\n  const modeling = useService$1('modeling');\n\n  // we can't use state as we need to\n  // manipulate this inside dragging events\n  const context = useRef({\n    startColumns: 0,\n    newColumns: 0\n  });\n  const onResize = throttle((_, delta) => {\n    const {\n      x: dx\n    } = delta;\n    const {\n      layout = {}\n    } = field;\n    const newColumns = calculateNewColumns(ref.current, layout.columns || context.current.startColumns, dx, position);\n    const errorMessage = formLayoutValidator.validateField(field, newColumns);\n    if (!errorMessage) {\n      context.current.newColumns = newColumns;\n\n      // make visual updates to preview change\n      const columnNode = ref.current.closest('.fjs-layout-column');\n      removeMatching(columnNode, COLUMNS_REGEX);\n      columnNode.classList.add(`cds--col-lg-${newColumns}`);\n    }\n  });\n  const onResizeStart = event => {\n    const target = getElementNode(field);\n    const parent = getParent(target);\n\n    // initialize drag handler\n    const onDragStart = createDragger$1(onResize);\n    onDragStart(event);\n\n    // mitigate auto columns on the grid that\n    // has a offset of 16px (1rem) to both side\n    const columnNode = getColumnNode(target);\n    const startWidth = columnNode.getBoundingClientRect().width + GRID_OFFSET_PX;\n    context.current.startColumns = asColumns(startWidth, parent);\n    setResizing(target, position);\n  };\n  const onResizeEnd = () => {\n    const {\n      layout = {}\n    } = field;\n    if (context.current.newColumns) {\n      modeling.editFormField(field, 'layout', {\n        ...layout,\n        columns: context.current.newColumns\n      });\n    }\n    const target = getElementNode(field);\n    unsetResizing(target, position);\n    context.current.newColumns = null;\n  };\n  if (field.type === 'default') {\n    return null;\n  }\n  return jsx(\"div\", {\n    ref: ref,\n    class: classnames('fjs-field-resize-handle', 'fjs-field-resize-handle-' + position, DRAG_NO_MOVE_CLS),\n    draggable: true,\n    onDragStart: onResizeStart,\n    onDragEnd: onResizeEnd\n  });\n}\n\n// helper //////\n\nfunction asColumns(width, parent) {\n  const totalWidth = parent.getBoundingClientRect().width;\n  const oneColumn = 1 / 16 * totalWidth;\n  return Math.round(width / oneColumn);\n}\nfunction calculateNewColumns(node, currentColumns, deltaX, position) {\n  const parent = getParent(node);\n\n  // invert delta if we are resizing from the left\n  if (position === 'left') {\n    deltaX = deltaX * -1;\n  }\n  const deltaColumns = asColumns(deltaX, parent);\n  return currentColumns + deltaColumns;\n}\nfunction getParent(node) {\n  return node.closest('.fjs-layout-row');\n}\nfunction removeMatching(node, regex) {\n  return classes(node).removeMatching(regex);\n}\nfunction getColumnNode(node) {\n  return node.closest('.fjs-layout-column');\n}\nfunction getElementNode(field) {\n  return query('.fjs-element[data-id=\"' + field.id + '\"]');\n}\nfunction setResizing(node, position) {\n  classes(node).add(ELEMENT_RESIZING_CLS + '-' + position);\n}\nfunction unsetResizing(node, position) {\n  classes(node).remove(ELEMENT_RESIZING_CLS + '-' + position);\n}\n\nfunction ContextPad(props) {\n  if (!props.children) {\n    return null;\n  }\n  return jsx(\"div\", {\n    class: \"fjs-context-pad\",\n    children: props.children\n  });\n}\nfunction EmptyGroup() {\n  return jsx(\"div\", {\n    class: \"fjs-empty-component\",\n    children: jsx(\"span\", {\n      class: \"fjs-empty-component-text\",\n      children: \"Drag and drop components here.\"\n    })\n  });\n}\nfunction EmptyForm() {\n  return jsx(\"div\", {\n    class: \"fjs-empty-editor\",\n    children: jsxs(\"div\", {\n      class: \"fjs-empty-editor-card\",\n      children: [jsx(SvgEmptyForm, {}), jsx(\"h2\", {\n        children: \"Build your form\"\n      }), jsx(\"span\", {\n        children: \"Drag and drop components here to start designing.\"\n      }), jsx(\"span\", {\n        children: \"Use the preview window to test your form.\"\n      })]\n    })\n  });\n}\nfunction Empty(props) {\n  if (['group', 'dynamiclist'].includes(props.field.type)) {\n    return jsx(EmptyGroup, {});\n  }\n  if (props.field.type === 'default') {\n    return jsx(EmptyForm, {});\n  }\n  return null;\n}\nfunction Element$1(props) {\n  const eventBus = useService$1('eventBus'),\n    formFieldRegistry = useService$1('formFieldRegistry'),\n    formFields = useService$1('formFields'),\n    modeling = useService$1('modeling'),\n    selection = useService$1('selection');\n  const {\n    hoverInfo\n  } = useContext(FormRenderContext);\n  const {\n    field\n  } = props;\n  const {\n    id,\n    type,\n    showOutline\n  } = field;\n  const ref = useRef();\n  const [hovered, setHovered] = useState(false);\n  useEffect(() => {\n    function scrollIntoView({\n      selection\n    }) {\n      const scrollContainer = getScrollContainer(ref.current);\n      if (!selection || selection.type === 'default' || selection.id !== id || !scrollContainer || !ref.current) {\n        return;\n      }\n      const elementBounds = ref.current.getBoundingClientRect();\n      const scrollContainerBounds = scrollContainer.getBoundingClientRect();\n      const isElementLarger = elementBounds.height > scrollContainerBounds.height;\n      const isNotFullyVisible = elementBounds.bottom > scrollContainerBounds.bottom || elementBounds.top < scrollContainerBounds.top;\n      if (isNotFullyVisible && !isElementLarger) {\n        ref.current.scrollIntoView({\n          behavior: 'auto',\n          block: 'nearest'\n        });\n      }\n    }\n    eventBus.on('selection.changed', scrollIntoView);\n    return () => eventBus.off('selection.changed', scrollIntoView);\n  }, [eventBus, id]);\n  useLayoutEffect(() => {\n    if (selection.isSelected(field)) {\n      ref.current.focus();\n    }\n  }, [selection, field]);\n  function onClick(event) {\n    event.stopPropagation();\n    selection.toggle(field);\n\n    // properly focus on field\n    ref.current.focus();\n  }\n  const isSelected = selection.isSelected(field);\n  const classString = useMemo(() => {\n    const classes = [];\n    if (props.class) {\n      classes.push(...props.class.split(' '));\n    }\n    if (isSelected) {\n      classes.push('fjs-editor-selected');\n    }\n    const grouplike = ['group', 'dynamiclist'].includes(type);\n    if (grouplike) {\n      classes.push(showOutline ? 'fjs-outlined' : 'fjs-dashed-outlined');\n    }\n    if (hovered) {\n      classes.push('fjs-editor-hovered');\n    }\n    return classes.join(' ');\n  }, [hovered, isSelected, props.class, showOutline, type]);\n  const onRemove = event => {\n    event.stopPropagation();\n    const parentField = formFieldRegistry.get(field._parent);\n    const index = getFormFieldIndex(parentField, field);\n    modeling.removeFormField(field, parentField, index);\n  };\n  const onKeyPress = event => {\n    if (event.key === 'Enter') {\n      event.stopPropagation();\n      selection.toggle(field);\n    }\n  };\n  return jsxs(\"div\", {\n    class: classString,\n    \"data-id\": id,\n    \"data-field-type\": type,\n    tabIndex: type === 'default' ? -1 : 0,\n    onClick: onClick,\n    onKeyPress: onKeyPress,\n    onMouseOver: e => {\n      if (hoverInfo.cleanup) {\n        hoverInfo.cleanup();\n      }\n      setHovered(true);\n      hoverInfo.cleanup = () => setHovered(false);\n      e.stopPropagation();\n    },\n    ref: ref,\n    children: [jsx(DebugColumns, {\n      field: field\n    }), jsx(ContextPad, {\n      children: selection.isSelected(field) && field.type !== 'default' ? jsx(\"button\", {\n        type: \"button\",\n        title: getRemoveButtonTitle(field, formFields),\n        class: \"fjs-context-pad-item\",\n        onClick: onRemove,\n        children: jsx(SvgDelete, {})\n      }) : null\n    }), props.children, jsx(FieldResizer, {\n      position: \"left\",\n      field: field\n    }), jsx(FieldResizer, {\n      position: \"right\",\n      field: field\n    })]\n  });\n}\nfunction DebugColumns(props) {\n  const {\n    field\n  } = props;\n  const debugColumnsConfig = useService$1('config.debugColumns');\n  if (!debugColumnsConfig || field.type == 'default') {\n    return null;\n  }\n  return jsx(\"div\", {\n    style: \"width: fit-content; padding: 2px 6px; height: 16px; background: var(--color-blue-205-100-95); display: flex; justify-content: center; align-items: center; position: absolute; bottom: -2px; z-index: 2; font-size: 10px; right: 3px;\",\n    class: \"fjs-debug-columns\",\n    children: (field.layout || {}).columns || 'auto'\n  });\n}\nfunction Children(props) {\n  const {\n    field\n  } = props;\n  const {\n    id\n  } = field;\n  const classes = ['fjs-children', DROP_CONTAINER_VERTICAL_CLS];\n  if (props.class) {\n    classes.push(...props.class.split(' '));\n  }\n  return jsx(\"div\", {\n    class: classes.join(' '),\n    \"data-id\": id,\n    children: props.children\n  });\n}\nfunction Row(props) {\n  const {\n    row\n  } = props;\n  const {\n    id\n  } = row;\n  const classes = [DROP_CONTAINER_HORIZONTAL_CLS];\n  if (props.class) {\n    classes.push(...props.class.split(' '));\n  }\n  return jsxs(\"div\", {\n    class: classnames(DRAG_ROW_MOVE_CLS),\n    children: [jsx(\"span\", {\n      class: \"fjs-row-dragger\",\n      children: jsx(SvgDraggable, {})\n    }), jsx(\"div\", {\n      class: classes.join(' '),\n      style: props.style,\n      \"data-row-id\": id,\n      children: props.children\n    })]\n  });\n}\nfunction Column(props) {\n  const {\n    field\n  } = props;\n  const classes = [DRAG_MOVE_CLS];\n  if (field.type === 'default') {\n    return props.children;\n  }\n  if (props.class) {\n    classes.push(...props.class.split(' '));\n  }\n  return jsx(\"div\", {\n    \"data-field-type\": field.type,\n    class: classes.join(' '),\n    children: props.children\n  });\n}\nfunction FormEditor$1() {\n  const dragging = useService$1('dragging'),\n    eventBus = useService$1('eventBus'),\n    formEditor = useService$1('formEditor'),\n    injector = useService$1('injector'),\n    selection = useService$1('selection'),\n    propertiesPanel = useService$1('propertiesPanel'),\n    propertiesPanelConfig = useService$1('config.propertiesPanel');\n  const {\n    schema,\n    properties\n  } = formEditor._getState();\n  const {\n    ariaLabel\n  } = properties;\n  const formContainerRef = useRef(null);\n  const propertiesPanelRef = useRef(null);\n  const [, setSelection] = useState(schema);\n  const [hasInitialized, setHasInitialized] = useState(false);\n  useEffect(() => {\n    function handleSelectionChanged(event) {\n      setSelection(event.selection || schema);\n    }\n    eventBus.on('selection.changed', handleSelectionChanged);\n    return () => {\n      eventBus.off('selection.changed', handleSelectionChanged);\n    };\n  }, [eventBus, schema]);\n  useEffect(() => {\n    setSelection(selection.get() || schema);\n  }, [selection, schema]);\n  const [drake, setDrake] = useState(null);\n  const dragAndDropContext = {\n    drake\n  };\n  useEffect(() => {\n    let dragulaInstance = dragging.createDragulaInstance({\n      container: [DRAG_CONTAINER_CLS, DROP_CONTAINER_VERTICAL_CLS, DROP_CONTAINER_HORIZONTAL_CLS],\n      mirrorContainer: formContainerRef.current\n    });\n    setDrake(dragulaInstance);\n    const onDetach = () => {\n      if (dragulaInstance) {\n        dragulaInstance.destroy();\n        eventBus.fire('dragula.destroyed');\n      }\n    };\n    const onAttach = () => {\n      onDetach();\n      dragulaInstance = dragging.createDragulaInstance({\n        container: [DRAG_CONTAINER_CLS, DROP_CONTAINER_VERTICAL_CLS, DROP_CONTAINER_HORIZONTAL_CLS],\n        mirrorContainer: formContainerRef.current\n      });\n      setDrake(dragulaInstance);\n    };\n    const onCreate = drake => {\n      setDrake(drake);\n    };\n    const onDragStart = () => {\n      set('grabbing');\n    };\n    const onDragEnd = () => {\n      unset();\n    };\n    eventBus.on('attach', onAttach);\n    eventBus.on('detach', onDetach);\n    eventBus.on('dragula.created', onCreate);\n    eventBus.on('drag.start', onDragStart);\n    eventBus.on('drag.end', onDragEnd);\n    return () => {\n      onDetach();\n      eventBus.off('attach', onAttach);\n      eventBus.off('detach', onDetach);\n      eventBus.off('dragula.created', onCreate);\n      eventBus.off('drag.start', onDragStart);\n      eventBus.off('drag.end', onDragEnd);\n    };\n  }, [dragging, eventBus]);\n\n  // fire event after render to notify interested parties\n  useEffect(() => {\n    if (hasInitialized) {\n      return;\n    }\n    setHasInitialized(true);\n    eventBus.fire('rendered');\n\n    // keep deprecated event to ensure backward compatibility\n    eventBus.fire('formEditor.rendered');\n  }, [eventBus, hasInitialized]);\n  const formRenderContext = useMemo(() => ({\n    Children,\n    Column,\n    Element: Element$1,\n    Empty,\n    Row,\n    hoverInfo: {}\n  }), []);\n  const formContext = useMemo(() => ({\n    getService(type, strict = true) {\n      // TODO(philippfromme): clean up\n      if (type === 'form') {\n        return {\n          _getState() {\n            return {\n              data: {},\n              errors: {},\n              properties: {\n                ariaLabel,\n                disabled: true\n              },\n              schema\n            };\n          }\n        };\n      }\n      return injector.get(type, strict);\n    },\n    formId: formEditor._id\n  }), [ariaLabel, formEditor, injector, schema]);\n  const onSubmit = useCallback(() => {}, []);\n  const onReset = useCallback(() => {}, []);\n\n  // attach default properties panel\n  const hasDefaultPropertiesPanel = defaultPropertiesPanel(propertiesPanelConfig);\n  useEffect(() => {\n    if (hasDefaultPropertiesPanel) {\n      propertiesPanel.attachTo(propertiesPanelRef.current);\n    }\n  }, [propertiesPanelRef, propertiesPanel, hasDefaultPropertiesPanel]);\n  return jsx(\"div\", {\n    class: \"fjs-form-editor\",\n    children: jsxs(SlotFillRoot, {\n      children: [jsxs(DragAndDropContext.Provider, {\n        value: dragAndDropContext,\n        children: [jsx(ModularSection, {\n          rootClass: \"fjs-palette-container\",\n          section: \"palette\",\n          children: jsx(Palette, {})\n        }), jsx(\"div\", {\n          ref: formContainerRef,\n          class: \"fjs-form-container\",\n          children: jsx(FormContext.Provider, {\n            value: formContext,\n            children: jsx(FormRenderContext.Provider, {\n              // @ts-ignore\n              value: formRenderContext,\n              children: jsx(FormComponent, {\n                onSubmit: onSubmit,\n                onReset: onReset\n              })\n            })\n          })\n        }), jsx(CreatePreview, {})]\n      }), hasDefaultPropertiesPanel && jsx(\"div\", {\n        class: \"fjs-editor-properties-container\",\n        ref: propertiesPanelRef\n      }), jsx(ModularSection, {\n        rootClass: \"fjs-render-injector-container\",\n        section: \"renderInjector\",\n        children: jsx(InjectedRendersRoot, {})\n      })]\n    })\n  });\n}\nfunction getFormFieldIndex(parent, formField) {\n  let fieldFormIndex = parent.components.length;\n  parent.components.forEach(({\n    id\n  }, index) => {\n    if (id === formField.id) {\n      fieldFormIndex = index;\n    }\n  });\n  return fieldFormIndex;\n}\nfunction CreatePreview(props) {\n  const {\n    drake\n  } = useContext(DragAndDropContext);\n  const formFields = useService$1('formFields');\n  useEffect(() => {\n    if (!drake) {\n      return;\n    }\n    function handleCloned(clone, original, type) {\n      const fieldType = clone.dataset.fieldType;\n\n      // (1) field preview\n      if (fieldType) {\n        const paletteEntry = findPaletteEntry(fieldType, formFields);\n        if (!paletteEntry) {\n          return;\n        }\n        const {\n          label\n        } = paletteEntry;\n        const Icon = getPaletteIcon(paletteEntry);\n        clone.innerHTML = '';\n        clone.class = 'gu-mirror';\n        clone.classList.add('fjs-field-preview-container');\n        if (original.classList.contains('fjs-palette-field')) {\n          // default to auto columns when creating from palette\n          clone.classList.add('cds--col');\n        }\n\n        // todo(pinussilvestrus): dragula, how to mitigate cursor position\n        // https://github.com/bevacqua/dragula/issues/285\n        render(jsx(FieldDragPreview, {\n          label: label,\n          Icon: Icon\n        }), clone);\n      } else {\n        // (2) row preview\n\n        // remove elements from copy (context pad, row dragger, ...)\n        ['fjs-context-pad', 'fjs-row-dragger', 'fjs-debug-columns'].forEach(cls => {\n          const cloneNode = clone.querySelectorAll('.' + cls);\n          cloneNode.length && cloneNode.forEach(e => e.remove());\n        });\n\n        // mirror grid\n        clone.classList.add('cds--grid');\n        clone.classList.add('cds--grid--condensed');\n      }\n    }\n    drake.on('cloned', handleCloned);\n    return () => drake.off('cloned', handleCloned);\n  }, [drake, formFields]);\n  return null;\n}\n\n// helper //////\n\nfunction findPaletteEntry(type, formFields) {\n  return collectPaletteEntries(formFields).find(entry => entry.type === type);\n}\nfunction defaultPropertiesPanel(propertiesPanelConfig) {\n  return !(propertiesPanelConfig && propertiesPanelConfig.parent);\n}\nfunction getRemoveButtonTitle(formField, formFields) {\n  const entry = findPaletteEntry(formField.type, formFields);\n  if (!entry) {\n    return 'Remove form field';\n  }\n  return `Remove ${entry.label}`;\n}\n\nclass Renderer {\n  constructor(renderConfig, eventBus, formEditor, injector) {\n    const {\n      container,\n      compact = false\n    } = renderConfig;\n    const App = () => {\n      const [state, setState] = useState(formEditor._getState());\n      const formEditorContext = {\n        getService(type, strict = true) {\n          return injector.get(type, strict);\n        }\n      };\n      formEditor.on('changed', newState => {\n        setState(newState);\n      });\n      const {\n        schema\n      } = state;\n      if (!schema) {\n        return null;\n      }\n      return jsx(\"div\", {\n        class: `fjs-container fjs-editor-container ${compact ? 'fjs-editor-compact' : ''}`,\n        children: jsx(FormEditorContext.Provider, {\n          value: formEditorContext,\n          children: jsx(FormEditor$1, {})\n        })\n      });\n    };\n    eventBus.on('form.init', () => {\n      render(jsx(App, {}), container);\n    });\n    eventBus.on('form.destroy', () => {\n      render(null, container);\n    });\n  }\n}\nRenderer.$inject = ['config.renderer', 'eventBus', 'formEditor', 'injector'];\n\nconst RenderModule = {\n  __init__: ['formFields', 'renderer'],\n  formFields: ['type', EditorFormFields],\n  renderer: ['type', Renderer]\n};\n\nconst CoreModule = {\n  __depends__: [RenderModule],\n  debounce: ['factory', DebounceFactory],\n  eventBus: ['type', EventBus],\n  importer: ['type', Importer],\n  formFieldRegistry: ['type', FormFieldRegistry],\n  pathRegistry: ['type', PathRegistry],\n  formLayouter: ['type', FormLayouter],\n  formLayoutValidator: ['type', FormLayoutValidator],\n  fieldFactory: ['type', FieldFactory]\n};\n\n/**\n * @typedef {import('didi').Injector} Injector\n *\n * @typedef {import('../../core/EventBus').default} EventBus\n */\n\nvar NOT_REGISTERED_ERROR = 'is not a registered action',\n  IS_REGISTERED_ERROR = 'is already registered';\n\n/**\n * An interface that provides access to modeling actions by decoupling\n * the one who requests the action to be triggered and the trigger itself.\n *\n * It's possible to add new actions by registering them with ´registerAction´\n * and likewise unregister existing ones with ´unregisterAction´.\n *\n *\n * ## Life-Cycle and configuration\n *\n * The editor actions will wait for diagram initialization before\n * registering default actions _and_ firing an `editorActions.init` event.\n *\n * Interested parties may listen to the `editorActions.init` event with\n * low priority to check, which actions got registered. Other components\n * may use the event to register their own actions via `registerAction`.\n *\n * @param {EventBus} eventBus\n * @param {Injector} injector\n */\nfunction EditorActions(eventBus, injector) {\n  // initialize actions\n  this._actions = {};\n  var self = this;\n  eventBus.on('diagram.init', function () {\n    // all diagram modules got loaded; check which ones\n    // are available and register the respective default actions\n    self._registerDefaultActions(injector);\n\n    // ask interested parties to register available editor\n    // actions on diagram initialization\n    eventBus.fire('editorActions.init', {\n      editorActions: self\n    });\n  });\n}\nEditorActions.$inject = ['eventBus', 'injector'];\n\n/**\n * Register default actions.\n *\n * @param {Injector} injector\n */\nEditorActions.prototype._registerDefaultActions = function (injector) {\n  // (1) retrieve optional components to integrate with\n\n  var commandStack = injector.get('commandStack', false);\n  var modeling = injector.get('modeling', false);\n  var selection = injector.get('selection', false);\n  var zoomScroll = injector.get('zoomScroll', false);\n  var copyPaste = injector.get('copyPaste', false);\n  var canvas = injector.get('canvas', false);\n  var rules = injector.get('rules', false);\n  var keyboardMove = injector.get('keyboardMove', false);\n  var keyboardMoveSelection = injector.get('keyboardMoveSelection', false);\n\n  // (2) check components and register actions\n\n  if (commandStack) {\n    this.register('undo', function () {\n      commandStack.undo();\n    });\n    this.register('redo', function () {\n      commandStack.redo();\n    });\n  }\n  if (copyPaste && selection) {\n    this.register('copy', function () {\n      var selectedElements = selection.get();\n      if (selectedElements.length) {\n        return copyPaste.copy(selectedElements);\n      }\n    });\n  }\n  if (copyPaste) {\n    this.register('paste', function () {\n      copyPaste.paste();\n    });\n  }\n  if (zoomScroll) {\n    this.register('stepZoom', function (opts) {\n      zoomScroll.stepZoom(opts.value);\n    });\n  }\n  if (canvas) {\n    this.register('zoom', function (opts) {\n      canvas.zoom(opts.value);\n    });\n  }\n  if (modeling && selection && rules) {\n    this.register('removeSelection', function () {\n      var selectedElements = selection.get();\n      if (!selectedElements.length) {\n        return;\n      }\n      var allowed = rules.allowed('elements.delete', {\n          elements: selectedElements\n        }),\n        removableElements;\n      if (allowed === false) {\n        return;\n      } else if (isArray(allowed)) {\n        removableElements = allowed;\n      } else {\n        removableElements = selectedElements;\n      }\n      if (removableElements.length) {\n        modeling.removeElements(removableElements.slice());\n      }\n    });\n  }\n  if (keyboardMove) {\n    this.register('moveCanvas', function (opts) {\n      keyboardMove.moveCanvas(opts);\n    });\n  }\n  if (keyboardMoveSelection) {\n    this.register('moveSelection', function (opts) {\n      keyboardMoveSelection.moveSelection(opts.direction, opts.accelerated);\n    });\n  }\n};\n\n/**\n * Triggers a registered action\n *\n * @param {string} action\n * @param {Object} opts\n *\n * @return {unknown} Returns what the registered listener returns\n */\nEditorActions.prototype.trigger = function (action, opts) {\n  if (!this._actions[action]) {\n    throw error(action, NOT_REGISTERED_ERROR);\n  }\n  return this._actions[action](opts);\n};\n\n/**\n * Registers a collections of actions.\n * The key of the object will be the name of the action.\n *\n * @example\n *\n * ```javascript\n * var actions = {\n *   spaceTool: function() {\n *     spaceTool.activateSelection();\n *   },\n *   lassoTool: function() {\n *     lassoTool.activateSelection();\n *   }\n * ];\n *\n * editorActions.register(actions);\n *\n * editorActions.isRegistered('spaceTool'); // true\n * ```\n *\n * @param {Object} actions\n */\nEditorActions.prototype.register = function (actions, listener) {\n  var self = this;\n  if (typeof actions === 'string') {\n    return this._registerAction(actions, listener);\n  }\n  forEach(actions, function (listener, action) {\n    self._registerAction(action, listener);\n  });\n};\n\n/**\n * Registers a listener to an action key\n *\n * @param {string} action\n * @param {Function} listener\n */\nEditorActions.prototype._registerAction = function (action, listener) {\n  if (this.isRegistered(action)) {\n    throw error(action, IS_REGISTERED_ERROR);\n  }\n  this._actions[action] = listener;\n};\n\n/**\n * Unregister an existing action\n *\n * @param {string} action\n */\nEditorActions.prototype.unregister = function (action) {\n  if (!this.isRegistered(action)) {\n    throw error(action, NOT_REGISTERED_ERROR);\n  }\n  this._actions[action] = undefined;\n};\n\n/**\n * Returns the identifiers of all currently registered editor actions\n *\n * @return {string[]}\n */\nEditorActions.prototype.getActions = function () {\n  return Object.keys(this._actions);\n};\n\n/**\n * Checks wether the given action is registered\n *\n * @param {string} action\n *\n * @return {boolean}\n */\nEditorActions.prototype.isRegistered = function (action) {\n  return !!this._actions[action];\n};\nfunction error(action, message) {\n  return new Error(action + ' ' + message);\n}\n\n/**\n * @type { import('didi').ModuleDeclaration }\n */\nvar BaseEditorActionsModule = {\n  __init__: ['editorActions'],\n  editorActions: ['type', EditorActions]\n};\n\nclass FormEditorActions extends EditorActions {\n  constructor(eventBus, injector) {\n    super(eventBus, injector);\n    eventBus.on('form.init', () => {\n      this._registerDefaultActions(injector);\n      eventBus.fire('editorActions.init', {\n        editorActions: this\n      });\n    });\n  }\n  _registerDefaultActions(injector) {\n    const commandStack = injector.get('commandStack', false),\n      formFieldRegistry = injector.get('formFieldRegistry', false),\n      selection = injector.get('selection', false);\n    if (commandStack) {\n      // @ts-ignore\n      this.register('undo', () => {\n        commandStack.undo();\n      });\n\n      // @ts-ignore\n      this.register('redo', () => {\n        commandStack.redo();\n      });\n    }\n    if (formFieldRegistry && selection) {\n      // @ts-ignore\n      this.register('selectFormField', (options = {}) => {\n        const {\n          id\n        } = options;\n        if (!id) {\n          return;\n        }\n        const formField = formFieldRegistry.get(id);\n        if (formField) {\n          selection.set(formField);\n        }\n      });\n    }\n  }\n}\nFormEditorActions.$inject = ['eventBus', 'injector'];\n\nconst EditorActionsModule = {\n  __depends__: [BaseEditorActionsModule],\n  editorActions: ['type', FormEditorActions]\n};\n\nclass EditorTemplating {\n  // same rules as viewer templating\n  isTemplate(value) {\n    return isString(value) && (value.startsWith('=') || /{{/.test(value));\n  }\n\n  // return the template raw, as we usually just want to display that\n  evaluate(template) {\n    return template;\n  }\n}\nEditorTemplating.$inject = [];\n\nconst EditorExpressionLanguageModule = {\n  __init__: ['expressionLanguage', 'templating'],\n  expressionLanguage: ['type', FeelExpressionLanguage],\n  templating: ['type', EditorTemplating]\n};\n\nvar KEYS_COPY = ['c', 'C'];\nvar KEYS_PASTE = ['v', 'V'];\nvar KEYS_REDO = ['y', 'Y'];\nvar KEYS_UNDO = ['z', 'Z'];\n\n/**\r\n * Returns true if event was triggered with any modifier\r\n * @param {KeyboardEvent} event\r\n */\nfunction hasModifier(event) {\n  return event.ctrlKey || event.metaKey || event.shiftKey || event.altKey;\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n * @return {boolean}\r\n */\nfunction isCmd(event) {\n  // ensure we don't react to AltGr\n  // (mapped to CTRL + ALT)\n  if (event.altKey) {\n    return false;\n  }\n  return event.ctrlKey || event.metaKey;\n}\n\n/**\r\n * Checks if key pressed is one of provided keys.\r\n *\r\n * @param {string|string[]} keys\r\n * @param {KeyboardEvent} event\r\n * @return {boolean}\r\n */\nfunction isKey(keys, event) {\n  keys = isArray(keys) ? keys : [keys];\n  return keys.indexOf(event.key) !== -1 || keys.indexOf(event.code) !== -1;\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n */\nfunction isShift(event) {\n  return event.shiftKey;\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n */\nfunction isCopy(event) {\n  return isCmd(event) && isKey(KEYS_COPY, event);\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n */\nfunction isPaste(event) {\n  return isCmd(event) && isKey(KEYS_PASTE, event);\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n */\nfunction isUndo(event) {\n  return isCmd(event) && !isShift(event) && isKey(KEYS_UNDO, event);\n}\n\n/**\r\n * @param {KeyboardEvent} event\r\n */\nfunction isRedo(event) {\n  return isCmd(event) && (isKey(KEYS_REDO, event) || isKey(KEYS_UNDO, event) && isShift(event));\n}\n\n/**\n * @typedef {import('../../core/EventBus').default} EventBus\n *\n * @typedef {({ keyEvent: KeyboardEvent }) => any} Listener\n */\n\nvar KEYDOWN_EVENT = 'keyboard.keydown',\n  KEYUP_EVENT = 'keyboard.keyup';\nvar HANDLE_MODIFIER_ATTRIBUTE = 'input-handle-modified-keys';\nvar DEFAULT_PRIORITY$2 = 1000;\n\n/**\n * A keyboard abstraction that may be activated and\n * deactivated by users at will, consuming global key events\n * and triggering diagram actions.\n *\n * For keys pressed down, keyboard fires `keyboard.keydown` event.\n * The event context contains one field which is `KeyboardEvent` event.\n *\n * The implementation fires the following key events that allow\n * other components to hook into key handling:\n *\n *  - keyboard.bind\n *  - keyboard.unbind\n *  - keyboard.init\n *  - keyboard.destroy\n *\n * All events contain one field which is node.\n *\n * A default binding for the keyboard may be specified via the\n * `keyboard.bindTo` configuration option.\n *\n * @param {Object} config\n * @param {EventTarget} [config.bindTo]\n * @param {EventBus} eventBus\n */\nfunction Keyboard(config, eventBus) {\n  var self = this;\n  this._config = config || {};\n  this._eventBus = eventBus;\n  this._keydownHandler = this._keydownHandler.bind(this);\n  this._keyupHandler = this._keyupHandler.bind(this);\n\n  // properly clean dom registrations\n  eventBus.on('diagram.destroy', function () {\n    self._fire('destroy');\n    self.unbind();\n  });\n  eventBus.on('diagram.init', function () {\n    self._fire('init');\n  });\n  eventBus.on('attach', function () {\n    if (config && config.bindTo) {\n      self.bind(config.bindTo);\n    }\n  });\n  eventBus.on('detach', function () {\n    self.unbind();\n  });\n}\nKeyboard.$inject = ['config.keyboard', 'eventBus'];\nKeyboard.prototype._keydownHandler = function (event) {\n  this._keyHandler(event, KEYDOWN_EVENT);\n};\nKeyboard.prototype._keyupHandler = function (event) {\n  this._keyHandler(event, KEYUP_EVENT);\n};\nKeyboard.prototype._keyHandler = function (event, type) {\n  var eventBusResult;\n  if (this._isEventIgnored(event)) {\n    return;\n  }\n  var context = {\n    keyEvent: event\n  };\n  eventBusResult = this._eventBus.fire(type || KEYDOWN_EVENT, context);\n  if (eventBusResult) {\n    event.preventDefault();\n  }\n};\nKeyboard.prototype._isEventIgnored = function (event) {\n  if (event.defaultPrevented) {\n    return true;\n  }\n  return (isInput(event.target) || isButton(event.target) && isKey([' ', 'Enter'], event)) && this._isModifiedKeyIgnored(event);\n};\nKeyboard.prototype._isModifiedKeyIgnored = function (event) {\n  if (!isCmd(event)) {\n    return true;\n  }\n  var allowedModifiers = this._getAllowedModifiers(event.target);\n  return allowedModifiers.indexOf(event.key) === -1;\n};\nKeyboard.prototype._getAllowedModifiers = function (element) {\n  var modifierContainer = closest(element, '[' + HANDLE_MODIFIER_ATTRIBUTE + ']', true);\n  if (!modifierContainer || this._node && !this._node.contains(modifierContainer)) {\n    return [];\n  }\n  return modifierContainer.getAttribute(HANDLE_MODIFIER_ATTRIBUTE).split(',');\n};\n\n/**\n * Bind keyboard events to the given DOM node.\n *\n * @param {EventTarget} node\n */\nKeyboard.prototype.bind = function (node) {\n  // make sure that the keyboard is only bound once to the DOM\n  this.unbind();\n  this._node = node;\n\n  // bind key events\n  event.bind(node, 'keydown', this._keydownHandler);\n  event.bind(node, 'keyup', this._keyupHandler);\n  this._fire('bind');\n};\n\n/**\n * @return {EventTarget}\n */\nKeyboard.prototype.getBinding = function () {\n  return this._node;\n};\nKeyboard.prototype.unbind = function () {\n  var node = this._node;\n  if (node) {\n    this._fire('unbind');\n\n    // unbind key events\n    event.unbind(node, 'keydown', this._keydownHandler);\n    event.unbind(node, 'keyup', this._keyupHandler);\n  }\n  this._node = null;\n};\n\n/**\n * @param {string} event\n */\nKeyboard.prototype._fire = function (event) {\n  this._eventBus.fire('keyboard.' + event, {\n    node: this._node\n  });\n};\n\n/**\n * Add a listener function that is notified with `KeyboardEvent` whenever\n * the keyboard is bound and the user presses a key. If no priority is\n * provided, the default value of 1000 is used.\n *\n * @param {number} [priority]\n * @param {Listener} listener\n * @param {string} [type='keyboard.keydown']\n */\nKeyboard.prototype.addListener = function (priority, listener, type) {\n  if (isFunction(priority)) {\n    type = listener;\n    listener = priority;\n    priority = DEFAULT_PRIORITY$2;\n  }\n  this._eventBus.on(type || KEYDOWN_EVENT, priority, listener);\n};\n\n/**\n * Remove a listener function.\n *\n * @param {Listener} listener\n * @param {string} [type='keyboard.keydown']\n */\nKeyboard.prototype.removeListener = function (listener, type) {\n  this._eventBus.off(type || KEYDOWN_EVENT, listener);\n};\nKeyboard.prototype.hasModifier = hasModifier;\nKeyboard.prototype.isCmd = isCmd;\nKeyboard.prototype.isShift = isShift;\nKeyboard.prototype.isKey = isKey;\n\n// helpers ///////\n\nfunction isInput(target) {\n  return target && (matches(target, 'input, textarea') || target.contentEditable === 'true');\n}\nfunction isButton(target) {\n  return target && matches(target, 'button, input[type=submit], input[type=button], a[href], [aria-role=button]');\n}\n\nvar LOW_PRIORITY$1 = 500;\n\n/**\n * Adds default keyboard bindings.\n *\n * This does not pull in any features will bind only actions that\n * have previously been registered against the editorActions component.\n *\n * @param {EventBus} eventBus\n * @param {Keyboard} keyboard\n */\nfunction KeyboardBindings(eventBus, keyboard) {\n  var self = this;\n  eventBus.on('editorActions.init', LOW_PRIORITY$1, function (event) {\n    var editorActions = event.editorActions;\n    self.registerBindings(keyboard, editorActions);\n  });\n}\nKeyboardBindings.$inject = ['eventBus', 'keyboard'];\n\n/**\n * Register available keyboard bindings.\n *\n * @param {Keyboard} keyboard\n * @param {EditorActions} editorActions\n */\nKeyboardBindings.prototype.registerBindings = function (keyboard, editorActions) {\n  /**\n   * Add keyboard binding if respective editor action\n   * is registered.\n   *\n   * @param {string} action name\n   * @param {Function} fn that implements the key binding\n   */\n  function addListener(action, fn) {\n    if (editorActions.isRegistered(action)) {\n      keyboard.addListener(fn);\n    }\n  }\n\n  // undo\n  // (CTRL|CMD) + Z\n  addListener('undo', function (context) {\n    var event = context.keyEvent;\n    if (isUndo(event)) {\n      editorActions.trigger('undo');\n      return true;\n    }\n  });\n\n  // redo\n  // CTRL + Y\n  // CMD + SHIFT + Z\n  addListener('redo', function (context) {\n    var event = context.keyEvent;\n    if (isRedo(event)) {\n      editorActions.trigger('redo');\n      return true;\n    }\n  });\n\n  // copy\n  // CTRL/CMD + C\n  addListener('copy', function (context) {\n    var event = context.keyEvent;\n    if (isCopy(event)) {\n      editorActions.trigger('copy');\n      return true;\n    }\n  });\n\n  // paste\n  // CTRL/CMD + V\n  addListener('paste', function (context) {\n    var event = context.keyEvent;\n    if (isPaste(event)) {\n      editorActions.trigger('paste');\n      return true;\n    }\n  });\n\n  // zoom in one step\n  // CTRL/CMD + +\n  addListener('stepZoom', function (context) {\n    var event = context.keyEvent;\n\n    // quirk: it has to be triggered by `=` as well to work on international keyboard layout\n    // cf: https://github.com/bpmn-io/bpmn-js/issues/1362#issuecomment-722989754\n    if (isKey(['+', 'Add', '='], event) && isCmd(event)) {\n      editorActions.trigger('stepZoom', {\n        value: 1\n      });\n      return true;\n    }\n  });\n\n  // zoom out one step\n  // CTRL + -\n  addListener('stepZoom', function (context) {\n    var event = context.keyEvent;\n    if (isKey(['-', 'Subtract'], event) && isCmd(event)) {\n      editorActions.trigger('stepZoom', {\n        value: -1\n      });\n      return true;\n    }\n  });\n\n  // zoom to the default level\n  // CTRL + 0\n  addListener('zoom', function (context) {\n    var event = context.keyEvent;\n    if (isKey('0', event) && isCmd(event)) {\n      editorActions.trigger('zoom', {\n        value: 1\n      });\n      return true;\n    }\n  });\n\n  // delete selected element\n  // DEL\n  addListener('removeSelection', function (context) {\n    var event = context.keyEvent;\n    if (isKey(['Backspace', 'Delete', 'Del'], event)) {\n      editorActions.trigger('removeSelection');\n      return true;\n    }\n  });\n};\n\n/**\n * @type { import('didi').ModuleDeclaration }\n */\nvar KeyboardModule = {\n  __init__: ['keyboard', 'keyboardBindings'],\n  keyboard: ['type', Keyboard],\n  keyboardBindings: ['type', KeyboardBindings]\n};\n\nconst LOW_PRIORITY = 500;\nclass FormEditorKeyboardBindings {\n  constructor(eventBus, keyboard) {\n    eventBus.on('editorActions.init', LOW_PRIORITY, event => {\n      const {\n        editorActions\n      } = event;\n      this.registerBindings(keyboard, editorActions);\n    });\n  }\n  registerBindings(keyboard, editorActions) {\n    function addListener(action, fn) {\n      if (editorActions.isRegistered(action)) {\n        keyboard.addListener(fn);\n      }\n    }\n\n    // undo\n    // (CTRL|CMD) + Z\n    addListener('undo', context => {\n      const {\n        keyEvent\n      } = context;\n      if (isCmd(keyEvent) && !isShift(keyEvent) && isKey(KEYS_UNDO, keyEvent)) {\n        editorActions.trigger('undo');\n        return true;\n      }\n    });\n\n    // redo\n    // CTRL + Y\n    // CMD + SHIFT + Z\n    addListener('redo', context => {\n      const {\n        keyEvent\n      } = context;\n      if (isCmd(keyEvent) && (isKey(KEYS_REDO, keyEvent) || isKey(KEYS_UNDO, keyEvent) && isShift(keyEvent))) {\n        editorActions.trigger('redo');\n        return true;\n      }\n    });\n  }\n}\nFormEditorKeyboardBindings.$inject = ['eventBus', 'keyboard'];\n\nconst FormEditorKeyboardModule = {\n  __depends__: [KeyboardModule],\n  __init__: ['keyboardBindings'],\n  keyboardBindings: ['type', FormEditorKeyboardBindings]\n};\n\nconst DraggingModule = {\n  __init__: ['dragging'],\n  dragging: ['type', Dragging]\n};\n\n/**\n * @typedef {import('didi').Injector} Injector\n *\n * @typedef {import('../core/Types').ElementLike} ElementLike\n *\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import('./CommandHandler').default} CommandHandler\n *\n * @typedef { any } CommandContext\n * @typedef { {\n *   new (...args: any[]) : CommandHandler\n * } } CommandHandlerConstructor\n * @typedef { {\n *   [key: string]: CommandHandler;\n * } } CommandHandlerMap\n * @typedef { {\n *   command: string;\n *   context: any;\n *   id?: any;\n * } } CommandStackAction\n * @typedef { {\n *   actions: CommandStackAction[];\n *   dirty: ElementLike[];\n *   trigger: 'execute' | 'undo' | 'redo' | 'clear' | null;\n *   atomic?: boolean;\n * } } CurrentExecution\n */\n\n/**\n * A service that offers un- and redoable execution of commands.\n *\n * The command stack is responsible for executing modeling actions\n * in a un- and redoable manner. To do this it delegates the actual\n * command execution to {@link CommandHandler}s.\n *\n * Command handlers provide {@link CommandHandler#execute(ctx)} and\n * {@link CommandHandler#revert(ctx)} methods to un- and redo a command\n * identified by a command context.\n *\n *\n * ## Life-Cycle events\n *\n * In the process the command stack fires a number of life-cycle events\n * that other components to participate in the command execution.\n *\n *    * preExecute\n *    * preExecuted\n *    * execute\n *    * executed\n *    * postExecute\n *    * postExecuted\n *    * revert\n *    * reverted\n *\n * A special event is used for validating, whether a command can be\n * performed prior to its execution.\n *\n *    * canExecute\n *\n * Each of the events is fired as `commandStack.{eventName}` and\n * `commandStack.{commandName}.{eventName}`, respectively. This gives\n * components fine grained control on where to hook into.\n *\n * The event object fired transports `command`, the name of the\n * command and `context`, the command context.\n *\n *\n * ## Creating Command Handlers\n *\n * Command handlers should provide the {@link CommandHandler#execute(ctx)}\n * and {@link CommandHandler#revert(ctx)} methods to implement\n * redoing and undoing of a command.\n *\n * A command handler _must_ ensure undo is performed properly in order\n * not to break the undo chain. It must also return the shapes that\n * got changed during the `execute` and `revert` operations.\n *\n * Command handlers may execute other modeling operations (and thus\n * commands) in their `preExecute(d)` and `postExecute(d)` phases. The command\n * stack will properly group all commands together into a logical unit\n * that may be re- and undone atomically.\n *\n * Command handlers must not execute other commands from within their\n * core implementation (`execute`, `revert`).\n *\n *\n * ## Change Tracking\n *\n * During the execution of the CommandStack it will keep track of all\n * elements that have been touched during the command's execution.\n *\n * At the end of the CommandStack execution it will notify interested\n * components via an 'elements.changed' event with all the dirty\n * elements.\n *\n * The event can be picked up by components that are interested in the fact\n * that elements have been changed. One use case for this is updating\n * their graphical representation after moving / resizing or deletion.\n *\n * @see CommandHandler\n *\n * @param {EventBus} eventBus\n * @param {Injector} injector\n */\nfunction CommandStack(eventBus, injector) {\n  /**\n   * A map of all registered command handlers.\n   *\n   * @type {CommandHandlerMap}\n   */\n  this._handlerMap = {};\n\n  /**\n   * A stack containing all re/undoable actions on the diagram\n   *\n   * @type {CommandStackAction[]}\n   */\n  this._stack = [];\n\n  /**\n   * The current index on the stack\n   *\n   * @type {number}\n   */\n  this._stackIdx = -1;\n\n  /**\n   * Current active commandStack execution\n   *\n   * @type {CurrentExecution}\n   */\n  this._currentExecution = {\n    actions: [],\n    dirty: [],\n    trigger: null\n  };\n\n  /**\n   * @type {Injector}\n   */\n  this._injector = injector;\n\n  /**\n   * @type EventBus\n   */\n  this._eventBus = eventBus;\n\n  /**\n   * @type { number }\n   */\n  this._uid = 1;\n  eventBus.on(['diagram.destroy', 'diagram.clear'], function () {\n    this.clear(false);\n  }, this);\n}\nCommandStack.$inject = ['eventBus', 'injector'];\n\n/**\n * Execute a command.\n *\n * @param {string} command The command to execute.\n * @param {CommandContext} context The context with which to execute the command.\n */\nCommandStack.prototype.execute = function (command, context) {\n  if (!command) {\n    throw new Error('command required');\n  }\n  this._currentExecution.trigger = 'execute';\n  const action = {\n    command: command,\n    context: context\n  };\n  this._pushAction(action);\n  this._internalExecute(action);\n  this._popAction();\n};\n\n/**\n * Check whether a command can be executed.\n *\n * Implementors may hook into the mechanism on two ways:\n *\n *   * in event listeners:\n *\n *     Users may prevent the execution via an event listener.\n *     It must prevent the default action for `commandStack.(<command>.)canExecute` events.\n *\n *   * in command handlers:\n *\n *     If the method {@link CommandHandler#canExecute} is implemented in a handler\n *     it will be called to figure out whether the execution is allowed.\n *\n * @param {string} command The command to execute.\n * @param {CommandContext} context The context with which to execute the command.\n *\n * @return {boolean} Whether the command can be executed with the given context.\n */\nCommandStack.prototype.canExecute = function (command, context) {\n  const action = {\n    command: command,\n    context: context\n  };\n  const handler = this._getHandler(command);\n  let result = this._fire(command, 'canExecute', action);\n\n  // handler#canExecute will only be called if no listener\n  // decided on a result already\n  if (result === undefined) {\n    if (!handler) {\n      return false;\n    }\n    if (handler.canExecute) {\n      result = handler.canExecute(context);\n    }\n  }\n  return result;\n};\n\n/**\n * Clear the command stack, erasing all undo / redo history.\n *\n * @param {boolean} [emit=true] Whether to fire an event. Defaults to `true`.\n */\nCommandStack.prototype.clear = function (emit) {\n  this._stack.length = 0;\n  this._stackIdx = -1;\n  if (emit !== false) {\n    this._fire('changed', {\n      trigger: 'clear'\n    });\n  }\n};\n\n/**\n * Undo last command(s)\n */\nCommandStack.prototype.undo = function () {\n  let action = this._getUndoAction(),\n    next;\n  if (action) {\n    this._currentExecution.trigger = 'undo';\n    this._pushAction(action);\n    while (action) {\n      this._internalUndo(action);\n      next = this._getUndoAction();\n      if (!next || next.id !== action.id) {\n        break;\n      }\n      action = next;\n    }\n    this._popAction();\n  }\n};\n\n/**\n * Redo last command(s)\n */\nCommandStack.prototype.redo = function () {\n  let action = this._getRedoAction(),\n    next;\n  if (action) {\n    this._currentExecution.trigger = 'redo';\n    this._pushAction(action);\n    while (action) {\n      this._internalExecute(action, true);\n      next = this._getRedoAction();\n      if (!next || next.id !== action.id) {\n        break;\n      }\n      action = next;\n    }\n    this._popAction();\n  }\n};\n\n/**\n * Register a handler instance with the command stack.\n *\n * @param {string} command Command to be executed.\n * @param {CommandHandler} handler Handler to execute the command.\n */\nCommandStack.prototype.register = function (command, handler) {\n  this._setHandler(command, handler);\n};\n\n/**\n * Register a handler type with the command stack  by instantiating it and\n * injecting its dependencies.\n *\n * @param {string} command Command to be executed.\n * @param {CommandHandlerConstructor} handlerCls Constructor to instantiate a {@link CommandHandler}.\n */\nCommandStack.prototype.registerHandler = function (command, handlerCls) {\n  if (!command || !handlerCls) {\n    throw new Error('command and handlerCls must be defined');\n  }\n  const handler = this._injector.instantiate(handlerCls);\n  this.register(command, handler);\n};\n\n/**\n * @return {boolean}\n */\nCommandStack.prototype.canUndo = function () {\n  return !!this._getUndoAction();\n};\n\n/**\n * @return {boolean}\n */\nCommandStack.prototype.canRedo = function () {\n  return !!this._getRedoAction();\n};\n\n// stack access  //////////////////////\n\nCommandStack.prototype._getRedoAction = function () {\n  return this._stack[this._stackIdx + 1];\n};\nCommandStack.prototype._getUndoAction = function () {\n  return this._stack[this._stackIdx];\n};\n\n// internal functionality //////////////////////\n\nCommandStack.prototype._internalUndo = function (action) {\n  const command = action.command,\n    context = action.context;\n  const handler = this._getHandler(command);\n\n  // guard against illegal nested command stack invocations\n  this._atomicDo(() => {\n    this._fire(command, 'revert', action);\n    if (handler.revert) {\n      this._markDirty(handler.revert(context));\n    }\n    this._revertedAction(action);\n    this._fire(command, 'reverted', action);\n  });\n};\nCommandStack.prototype._fire = function (command, qualifier, event) {\n  if (arguments.length < 3) {\n    event = qualifier;\n    qualifier = null;\n  }\n  const names = qualifier ? [command + '.' + qualifier, qualifier] : [command];\n  let result;\n  event = this._eventBus.createEvent(event);\n  for (const name of names) {\n    result = this._eventBus.fire('commandStack.' + name, event);\n    if (event.cancelBubble) {\n      break;\n    }\n  }\n  return result;\n};\nCommandStack.prototype._createId = function () {\n  return this._uid++;\n};\nCommandStack.prototype._atomicDo = function (fn) {\n  const execution = this._currentExecution;\n  execution.atomic = true;\n  try {\n    fn();\n  } finally {\n    execution.atomic = false;\n  }\n};\nCommandStack.prototype._internalExecute = function (action, redo) {\n  const command = action.command,\n    context = action.context;\n  const handler = this._getHandler(command);\n  if (!handler) {\n    throw new Error('no command handler registered for <' + command + '>');\n  }\n  this._pushAction(action);\n  if (!redo) {\n    this._fire(command, 'preExecute', action);\n    if (handler.preExecute) {\n      handler.preExecute(context);\n    }\n    this._fire(command, 'preExecuted', action);\n  }\n\n  // guard against illegal nested command stack invocations\n  this._atomicDo(() => {\n    this._fire(command, 'execute', action);\n    if (handler.execute) {\n      // actual execute + mark return results as dirty\n      this._markDirty(handler.execute(context));\n    }\n\n    // log to stack\n    this._executedAction(action, redo);\n    this._fire(command, 'executed', action);\n  });\n  if (!redo) {\n    this._fire(command, 'postExecute', action);\n    if (handler.postExecute) {\n      handler.postExecute(context);\n    }\n    this._fire(command, 'postExecuted', action);\n  }\n  this._popAction();\n};\nCommandStack.prototype._pushAction = function (action) {\n  const execution = this._currentExecution,\n    actions = execution.actions;\n  const baseAction = actions[0];\n  if (execution.atomic) {\n    throw new Error('illegal invocation in <execute> or <revert> phase (action: ' + action.command + ')');\n  }\n  if (!action.id) {\n    action.id = baseAction && baseAction.id || this._createId();\n  }\n  actions.push(action);\n};\nCommandStack.prototype._popAction = function () {\n  const execution = this._currentExecution,\n    trigger = execution.trigger,\n    actions = execution.actions,\n    dirty = execution.dirty;\n  actions.pop();\n  if (!actions.length) {\n    this._eventBus.fire('elements.changed', {\n      elements: uniqueBy('id', dirty.reverse())\n    });\n    dirty.length = 0;\n    this._fire('changed', {\n      trigger: trigger\n    });\n    execution.trigger = null;\n  }\n};\nCommandStack.prototype._markDirty = function (elements) {\n  const execution = this._currentExecution;\n  if (!elements) {\n    return;\n  }\n  elements = isArray(elements) ? elements : [elements];\n  execution.dirty = execution.dirty.concat(elements);\n};\nCommandStack.prototype._executedAction = function (action, redo) {\n  const stackIdx = ++this._stackIdx;\n  if (!redo) {\n    this._stack.splice(stackIdx, this._stack.length, action);\n  }\n};\nCommandStack.prototype._revertedAction = function (action) {\n  this._stackIdx--;\n};\nCommandStack.prototype._getHandler = function (command) {\n  return this._handlerMap[command];\n};\nCommandStack.prototype._setHandler = function (command, handler) {\n  if (!command || !handler) {\n    throw new Error('command and handler required');\n  }\n  if (this._handlerMap[command]) {\n    throw new Error('overriding handler for command <' + command + '>');\n  }\n  this._handlerMap[command] = handler;\n};\n\n/**\n * @type { import('didi').ModuleDeclaration }\n */\nvar commandModule = {\n  commandStack: ['type', CommandStack]\n};\n\n/**\n * @typedef {import('../core/Types').ElementLike} ElementLike\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import('./CommandStack').CommandContext} CommandContext\n *\n * @typedef {string|string[]} Events\n * @typedef { (context: CommandContext) => ElementLike[] | void } HandlerFunction\n * @typedef { (context: CommandContext) => void } ComposeHandlerFunction\n */\n\nvar DEFAULT_PRIORITY$1 = 1000;\n\n/**\n * A utility that can be used to plug into the command execution for\n * extension and/or validation.\n *\n * @class\n * @constructor\n *\n * @example\n *\n * ```javascript\n * import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';\n *\n * class CommandLogger extends CommandInterceptor {\n *   constructor(eventBus) {\n *     super(eventBus);\n *\n *   this.preExecute('shape.create', (event) => {\n *     console.log('commandStack.shape-create.preExecute', event);\n *   });\n * }\n * ```\n *\n * @param {EventBus} eventBus\n */\nfunction CommandInterceptor(eventBus) {\n  /**\n   * @type {EventBus}\n   */\n  this._eventBus = eventBus;\n}\nCommandInterceptor.$inject = ['eventBus'];\nfunction unwrapEvent(fn, that) {\n  return function (event) {\n    return fn.call(that || null, event.context, event.command, event);\n  };\n}\n\n/**\n * Intercept a command during one of the phases.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {string} [hook] phase to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.on = function (events, hook, priority, handlerFn, unwrap, that) {\n  if (isFunction(hook) || isNumber(hook)) {\n    that = unwrap;\n    unwrap = handlerFn;\n    handlerFn = priority;\n    priority = hook;\n    hook = null;\n  }\n  if (isFunction(priority)) {\n    that = unwrap;\n    unwrap = handlerFn;\n    handlerFn = priority;\n    priority = DEFAULT_PRIORITY$1;\n  }\n  if (isObject(unwrap)) {\n    that = unwrap;\n    unwrap = false;\n  }\n  if (!isFunction(handlerFn)) {\n    throw new Error('handlerFn must be a function');\n  }\n  if (!isArray(events)) {\n    events = [events];\n  }\n  var eventBus = this._eventBus;\n  forEach(events, function (event) {\n    // concat commandStack(.event)?(.hook)?\n    var fullEvent = ['commandStack', event, hook].filter(function (e) {\n      return e;\n    }).join('.');\n    eventBus.on(fullEvent, priority, unwrap ? unwrapEvent(handlerFn, that) : handlerFn, that);\n  });\n};\n\n/**\n * Add a <canExecute> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.canExecute = createHook('canExecute');\n\n/**\n * Add a <preExecute> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.preExecute = createHook('preExecute');\n\n/**\n * Add a <preExecuted> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.preExecuted = createHook('preExecuted');\n\n/**\n * Add a <execute> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.execute = createHook('execute');\n\n/**\n * Add a <executed> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.executed = createHook('executed');\n\n/**\n * Add a <postExecute> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.postExecute = createHook('postExecute');\n\n/**\n * Add a <postExecuted> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.postExecuted = createHook('postExecuted');\n\n/**\n * Add a <revert> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.revert = createHook('revert');\n\n/**\n * Add a <reverted> phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.reverted = createHook('reverted');\n\n/*\n * Add prototype methods for each phase of command execution (e.g. execute,\n * revert).\n *\n * @param {string} hook\n *\n * @return { (\n *   events?: Events,\n *   priority?: number,\n *   handlerFn: ComposeHandlerFunction|HandlerFunction,\n *   unwrap?: boolean\n * ) => any }\n */\nfunction createHook(hook) {\n  /**\n   * @this {CommandInterceptor}\n   *\n   * @param {Events} [events]\n   * @param {number} [priority]\n   * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n   * @param {boolean} [unwrap]\n   * @param {any} [that]\n   */\n  const hookFn = function (events, priority, handlerFn, unwrap, that) {\n    if (isFunction(events) || isNumber(events)) {\n      that = unwrap;\n      unwrap = handlerFn;\n      handlerFn = priority;\n      priority = events;\n      events = null;\n    }\n    this.on(events, hook, priority, handlerFn, unwrap, that);\n  };\n  return hookFn;\n}\n\nclass IdBehavior extends CommandInterceptor {\n  constructor(eventBus, modeling) {\n    super(eventBus);\n    this.preExecute('formField.remove', function (context) {\n      const {\n        formField\n      } = context;\n      const {\n        id\n      } = formField;\n      modeling.unclaimId(formField, id);\n    }, true);\n    this.preExecute('formField.edit', function (context) {\n      const {\n        formField,\n        properties\n      } = context;\n      if ('id' in properties) {\n        modeling.unclaimId(formField, formField.id);\n        modeling.claimId(formField, properties.id);\n      }\n    }, true);\n  }\n}\nIdBehavior.$inject = ['eventBus', 'modeling'];\n\nclass KeyBehavior extends CommandInterceptor {\n  constructor(eventBus, modeling, formFields) {\n    super(eventBus);\n    this.preExecute('formField.remove', function (context) {\n      const {\n        formField\n      } = context;\n      const {\n        key,\n        type\n      } = formField;\n      const {\n        config\n      } = formFields.get(type);\n      if (config.keyed) {\n        modeling.unclaimKey(formField, key);\n      }\n    }, true);\n    this.preExecute('formField.edit', function (context) {\n      const {\n        formField,\n        properties\n      } = context;\n      const {\n        key,\n        type\n      } = formField;\n      const {\n        config\n      } = formFields.get(type);\n      if (config.keyed && 'key' in properties) {\n        modeling.unclaimKey(formField, key);\n        modeling.claimKey(formField, properties.key);\n      }\n    }, true);\n  }\n}\nKeyBehavior.$inject = ['eventBus', 'modeling', 'formFields'];\n\nclass PathBehavior extends CommandInterceptor {\n  constructor(eventBus, modeling, formFields) {\n    super(eventBus);\n    this.preExecute('formField.remove', function (context) {\n      const {\n        formField\n      } = context;\n      const {\n        path,\n        type\n      } = formField;\n      const {\n        config\n      } = formFields.get(type);\n      if (config.pathed) {\n        modeling.unclaimPath(formField, path);\n      }\n    }, true);\n    this.preExecute('formField.edit', function (context) {\n      const {\n        formField,\n        properties\n      } = context;\n      const {\n        path,\n        type\n      } = formField;\n      const {\n        config\n      } = formFields.get(type);\n      if (config.pathed && 'path' in properties) {\n        modeling.unclaimPath(formField, path);\n        modeling.claimPath(formField, properties.path);\n      }\n    }, true);\n  }\n}\nPathBehavior.$inject = ['eventBus', 'modeling', 'formFields'];\n\nclass ValidateBehavior extends CommandInterceptor {\n  constructor(eventBus) {\n    super(eventBus);\n\n    /**\n     * Remove custom validation if <validationType> is about to be added.\n     */\n    this.preExecute('formField.edit', function (context) {\n      const {\n        properties\n      } = context;\n      const {\n        validate = {}\n      } = properties;\n      if (validate.validationType) {\n        const newValidate = {\n          ...validate\n        };\n        delete newValidate.minLength;\n        delete newValidate.maxLength;\n        delete newValidate.pattern;\n        properties['validate'] = newValidate;\n      }\n    }, true);\n  }\n}\nValidateBehavior.$inject = ['eventBus'];\n\nclass OptionsSourceBehavior extends CommandInterceptor {\n  constructor(eventBus) {\n    super(eventBus);\n\n    /**\n     * Cleanup properties on changing the values source.\n     *\n     * 1) Remove other sources, e.g. set `values` => remove `valuesKey` and `valuesExpression`\n     * 2) Remove default values for all other values sources\n     */\n    this.preExecute('formField.edit', function (context) {\n      const {\n        properties\n      } = context;\n      const newProperties = {};\n      if (!isValuesSourceUpdate(properties)) {\n        return;\n      }\n\n      // clean up value sources that are not to going to be set\n      Object.values(OPTIONS_SOURCES).forEach(source => {\n        const path = OPTIONS_SOURCES_PATHS[source];\n        if (get(properties, path) == undefined) {\n          newProperties[OPTIONS_SOURCES_PATHS[source]] = undefined;\n        }\n      });\n\n      // clean up default value\n      if (get(properties, OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.EXPRESSION]) !== undefined || get(properties, OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.INPUT]) !== undefined) {\n        newProperties['defaultValue'] = undefined;\n      }\n      context.properties = {\n        ...properties,\n        ...newProperties\n      };\n    }, true);\n  }\n}\nOptionsSourceBehavior.$inject = ['eventBus'];\n\n// helper ///////////////////\n\nfunction isValuesSourceUpdate(properties) {\n  return Object.values(OPTIONS_SOURCES_PATHS).some(path => {\n    return get(properties, path) !== undefined;\n  });\n}\n\nconst COLUMNS_SOURCE_PROPERTIES = {\n  columns: 'columns',\n  columnsExpression: 'columnsExpression'\n};\nclass ColumnsSourceBehavior extends CommandInterceptor {\n  constructor(eventBus) {\n    super(eventBus);\n    this.preExecute('formField.edit', function (context) {\n      const {\n        properties,\n        oldProperties\n      } = context;\n      const isColumnSourceUpdate = Object.values(COLUMNS_SOURCE_PROPERTIES).some(path => {\n        return get(properties, [path]) !== undefined;\n      });\n      if (!isColumnSourceUpdate) {\n        return;\n      }\n      const columns = get(properties, [COLUMNS_SOURCE_PROPERTIES.columns]);\n      const oldColumns = get(oldProperties, [COLUMNS_SOURCE_PROPERTIES.columns]);\n      const columnsExpression = get(properties, [COLUMNS_SOURCE_PROPERTIES.columnsExpression]);\n      const oldColumnsExpression = get(oldProperties, [COLUMNS_SOURCE_PROPERTIES.columnsExpression]);\n      if (isArray(columns) && !isDefined(oldColumns)) {\n        context.properties = {\n          ...properties,\n          columnsExpression: undefined\n        };\n        return;\n      }\n      if (isString(columnsExpression) && !isString(oldColumnsExpression)) {\n        context.properties = {\n          ...properties,\n          columns: undefined\n        };\n        return;\n      }\n    }, true);\n  }\n}\nColumnsSourceBehavior.$inject = ['eventBus'];\n\nclass TableDataSourceBehavior extends CommandInterceptor {\n  constructor(eventBus) {\n    super(eventBus);\n    this.preExecute('formField.add', function (context) {\n      const {\n        formField\n      } = context;\n      if (get(formField, ['type']) !== 'table') {\n        return;\n      }\n      context.formField = {\n        ...formField,\n        dataSource: `=${formField.id}`\n      };\n    }, true);\n  }\n}\nTableDataSourceBehavior.$inject = ['eventBus'];\n\nconst BehaviorModule = {\n  __init__: ['idBehavior', 'keyBehavior', 'pathBehavior', 'validateBehavior', 'optionsSourceBehavior', 'columnsSourceBehavior', 'tableDataSourceBehavior'],\n  idBehavior: ['type', IdBehavior],\n  keyBehavior: ['type', KeyBehavior],\n  pathBehavior: ['type', PathBehavior],\n  validateBehavior: ['type', ValidateBehavior],\n  optionsSourceBehavior: ['type', OptionsSourceBehavior],\n  columnsSourceBehavior: ['type', ColumnsSourceBehavior],\n  tableDataSourceBehavior: ['type', TableDataSourceBehavior]\n};\n\nfunction arrayAdd$1(array, index, item) {\n  array.splice(index, 0, item);\n  return array;\n}\nfunction arrayRemove(array, index) {\n  array.splice(index, 1);\n  return array;\n}\nfunction updatePath(formFieldRegistry, formField, index) {\n  const parent = formFieldRegistry.get(formField._parent);\n  refreshPathsRecursively(formField, [...parent._path, 'components', index]);\n  return formField;\n}\nfunction refreshPathsRecursively(formField, path) {\n  formField._path = path;\n  const components = formField.components || [];\n  components.forEach((component, index) => {\n    refreshPathsRecursively(component, [...path, 'components', index]);\n  });\n}\nfunction updateRow(formField, rowId) {\n  formField.layout = {\n    ...(formField.layout || {}),\n    row: rowId\n  };\n  return formField;\n}\n\nclass FormLayoutUpdater extends CommandInterceptor {\n  constructor(eventBus, formLayouter, modeling, formEditor) {\n    super(eventBus);\n    this._eventBus = eventBus;\n    this._formLayouter = formLayouter;\n    this._modeling = modeling;\n    this._formEditor = formEditor;\n\n    // @ts-ignore\n    this.preExecute(['formField.add', 'formField.remove', 'formField.move', 'id.updateClaim'], event => this.updateRowIds(event));\n\n    // we need that as the state got updates\n    // on the next tick (not in post execute)\n    eventBus.on('changed', context => {\n      const {\n        schema\n      } = context;\n      this.updateLayout(schema);\n    });\n  }\n  updateLayout(schema) {\n    this._formLayouter.clear();\n    this._formLayouter.calculateLayout(clone(schema));\n  }\n  updateRowIds(event) {\n    const {\n      schema\n    } = this._formEditor._getState();\n    const setRowIds = parent => {\n      if (!parent.components || !parent.components.length) {\n        return;\n      }\n      parent.components.forEach(formField => {\n        const row = this._formLayouter.getRowForField(formField);\n        updateRow(formField, row.id);\n\n        // handle children recursively\n        setRowIds(formField);\n      });\n    };\n\n    // make sure rows are persisted in schema (e.g. for migration case)\n    setRowIds(schema);\n  }\n}\nFormLayoutUpdater.$inject = ['eventBus', 'formLayouter', 'modeling', 'formEditor'];\n\nclass AddFormFieldHandler {\n  /**\n   * @constructor\n   * @param { import('../../../FormEditor').FormEditor } formEditor\n   * @param { import('../../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   */\n  constructor(formEditor, formFieldRegistry) {\n    this._formEditor = formEditor;\n    this._formFieldRegistry = formFieldRegistry;\n  }\n  execute(context) {\n    const {\n      formField,\n      targetFormField,\n      targetIndex\n    } = context;\n    const {\n      schema\n    } = this._formEditor._getState();\n    const targetPath = [...targetFormField._path, 'components'];\n    formField._parent = targetFormField.id;\n\n    // (1) Add new form field\n    arrayAdd$1(get(schema, targetPath), targetIndex, formField);\n\n    // (2) Update internal paths of new form field and its siblings (and their children)\n    get(schema, targetPath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n\n    // (3) Add new form field to form field registry\n    this._formFieldRegistry.add(formField);\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n  }\n  revert(context) {\n    const {\n      formField,\n      targetFormField,\n      targetIndex\n    } = context;\n    const {\n      schema\n    } = this._formEditor._getState();\n    const targetPath = [...targetFormField._path, 'components'];\n\n    // (1) Remove new form field\n    arrayRemove(get(schema, targetPath), targetIndex);\n\n    // (2) Update internal paths of new form field and its siblings (and their children)\n    get(schema, targetPath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n\n    // (3) Remove new form field from form field registry\n    this._formFieldRegistry.remove(formField);\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n  }\n}\nAddFormFieldHandler.$inject = ['formEditor', 'formFieldRegistry'];\n\nclass EditFormFieldHandler {\n  /**\n   * @constructor\n   * @param { import('../../../FormEditor').FormEditor } formEditor\n   * @param { import('../../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   */\n  constructor(formEditor, formFieldRegistry) {\n    this._formEditor = formEditor;\n    this._formFieldRegistry = formFieldRegistry;\n  }\n  execute(context) {\n    const {\n      formField,\n      properties\n    } = context;\n    let {\n      schema\n    } = this._formEditor._getState();\n    const oldProperties = {};\n    for (let key in properties) {\n      oldProperties[key] = formField[key];\n      const property = properties[key];\n      if (key === 'id') {\n        if (property !== formField.id) {\n          this._formFieldRegistry.updateId(formField, property);\n        }\n      } else {\n        formField[key] = property;\n      }\n    }\n    context.oldProperties = oldProperties;\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n    return formField;\n  }\n  revert(context) {\n    const {\n      formField,\n      oldProperties\n    } = context;\n    let {\n      schema\n    } = this._formEditor._getState();\n    for (let key in oldProperties) {\n      const property = oldProperties[key];\n      if (key === 'id') {\n        if (property !== formField.id) {\n          this._formFieldRegistry.updateId(formField, property);\n        }\n      } else {\n        formField[key] = property;\n      }\n    }\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n    return formField;\n  }\n}\nEditFormFieldHandler.$inject = ['formEditor', 'formFieldRegistry'];\n\nclass MoveFormFieldHandler {\n  /**\n   * @constructor\n   * @param { import('../../../FormEditor').FormEditor } formEditor\n   * @param { import('../../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   * @param { import('@bpmn-io/form-js-viewer').PathRegistry } pathRegistry\n   * @param { import('@bpmn-io/form-js-viewer').FormLayouter } formLayouter\n   */\n  constructor(formEditor, formFieldRegistry, pathRegistry, formLayouter) {\n    this._formEditor = formEditor;\n    this._formFieldRegistry = formFieldRegistry;\n    this._pathRegistry = pathRegistry;\n    this._formLayouter = formLayouter;\n  }\n  execute(context) {\n    this.moveFormField(context);\n  }\n  revert(context) {\n    let {\n      sourceFormField,\n      targetFormField,\n      sourceIndex,\n      targetIndex,\n      sourceRow,\n      targetRow\n    } = context;\n    this.moveFormField({\n      sourceFormField: targetFormField,\n      targetFormField: sourceFormField,\n      sourceIndex: targetIndex,\n      targetIndex: sourceIndex,\n      sourceRow: targetRow,\n      targetRow: sourceRow\n    }, true);\n  }\n  moveFormField(context, revert) {\n    let {\n      sourceFormField,\n      targetFormField,\n      sourceIndex,\n      targetIndex,\n      targetRow\n    } = context;\n    let {\n      schema\n    } = this._formEditor._getState();\n    const sourcePath = [...sourceFormField._path, 'components'];\n    if (sourceFormField.id === targetFormField.id) {\n      if (revert) {\n        if (sourceIndex > targetIndex) {\n          sourceIndex--;\n        }\n      } else {\n        if (sourceIndex < targetIndex) {\n          targetIndex--;\n        }\n      }\n      const formField = get(schema, [...sourcePath, sourceIndex]);\n\n      // (1) Add to row or create new one\n      updateRow(formField, targetRow ? targetRow.id : this._formLayouter.nextRowId());\n\n      // (2) Move form field\n      mutate(get(schema, sourcePath), sourceIndex, targetIndex);\n\n      // (3) Update internal paths of new form field and its siblings (and their children)\n      get(schema, sourcePath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n    } else {\n      const formField = get(schema, [...sourcePath, sourceIndex]);\n\n      // (1) Deregister form field (and children) from path registry\n      this._pathRegistry.executeRecursivelyOnFields(formField, ({\n        field\n      }) => {\n        this._pathRegistry.unclaimPath(this._pathRegistry.getValuePath(field));\n      });\n      formField._parent = targetFormField.id;\n\n      // (2) Remove form field\n      arrayRemove(get(schema, sourcePath), sourceIndex);\n\n      // (3) Update internal paths of siblings (and their children)\n      get(schema, sourcePath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n      const targetPath = [...targetFormField._path, 'components'];\n\n      // (4) Add to row or create new one\n      updateRow(formField, targetRow ? targetRow.id : this._formLayouter.nextRowId());\n\n      // (5) Add form field\n      arrayAdd$1(get(schema, targetPath), targetIndex, formField);\n\n      // (6) Update internal paths of siblings (and their children)\n      get(schema, targetPath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n\n      // (7) Reregister form field (and children) from path registry\n      this._pathRegistry.executeRecursivelyOnFields(formField, ({\n        field,\n        isClosed,\n        isRepeatable\n      }) => {\n        this._pathRegistry.claimPath(this._pathRegistry.getValuePath(field), {\n          isClosed,\n          isRepeatable,\n          claimerId: field.id\n        });\n      });\n    }\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n  }\n}\nMoveFormFieldHandler.$inject = ['formEditor', 'formFieldRegistry', 'pathRegistry', 'formLayouter'];\n\nclass RemoveFormFieldHandler {\n  /**\n   * @constructor\n   * @param { import('../../../FormEditor').FormEditor } formEditor\n   * @param { import('../../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   */\n  constructor(formEditor, formFieldRegistry) {\n    this._formEditor = formEditor;\n    this._formFieldRegistry = formFieldRegistry;\n  }\n  execute(context) {\n    const {\n      sourceFormField,\n      sourceIndex\n    } = context;\n    let {\n      schema\n    } = this._formEditor._getState();\n    const sourcePath = [...sourceFormField._path, 'components'];\n    const formField = context.formField = get(schema, [...sourcePath, sourceIndex]);\n\n    // (1) Remove form field\n    arrayRemove(get(schema, sourcePath), sourceIndex);\n\n    // (2) Update internal paths of its siblings (and their children)\n    get(schema, sourcePath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n\n    // (3) Remove form field and children from form field registry\n    runRecursively(formField, formField => this._formFieldRegistry.remove(formField));\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n  }\n  revert(context) {\n    const {\n      formField,\n      sourceFormField,\n      sourceIndex\n    } = context;\n    let {\n      schema\n    } = this._formEditor._getState();\n    const sourcePath = [...sourceFormField._path, 'components'];\n\n    // (1) Add form field\n    arrayAdd$1(get(schema, sourcePath), sourceIndex, formField);\n\n    // (2) Update internal paths of its siblings (and their children)\n    get(schema, sourcePath).forEach((formField, index) => updatePath(this._formFieldRegistry, formField, index));\n\n    // (3) Add form field and children to form field registry\n    runRecursively(formField, formField => this._formFieldRegistry.add(formField));\n\n    // TODO: Create updater/change support that automatically updates paths and schema on command execution\n    this._formEditor._setState({\n      schema\n    });\n  }\n}\nRemoveFormFieldHandler.$inject = ['formEditor', 'formFieldRegistry'];\n\nclass UpdateIdClaimHandler {\n  /**\n   * @constructor\n   * @param { import('../../../core/FormFieldRegistry').FormFieldRegistry } formFieldRegistry\n   */\n  constructor(formFieldRegistry) {\n    this._formFieldRegistry = formFieldRegistry;\n  }\n  execute(context) {\n    const {\n      claiming,\n      formField,\n      id\n    } = context;\n    if (claiming) {\n      this._formFieldRegistry._ids.claim(id, formField);\n    } else {\n      this._formFieldRegistry._ids.unclaim(id);\n    }\n  }\n  revert(context) {\n    const {\n      claiming,\n      formField,\n      id\n    } = context;\n    if (claiming) {\n      this._formFieldRegistry._ids.unclaim(id);\n    } else {\n      this._formFieldRegistry._ids.claim(id, formField);\n    }\n  }\n}\nUpdateIdClaimHandler.$inject = ['formFieldRegistry'];\n\nclass UpdateKeyClaimHandler {\n  /**\n   * @constructor\n   * @param { import('@bpmn-io/form-js-viewer').PathRegistry } pathRegistry\n   */\n  constructor(pathRegistry) {\n    this._pathRegistry = pathRegistry;\n  }\n  execute(context) {\n    const {\n      claiming,\n      formField,\n      key\n    } = context;\n    const options = {\n      replacements: {\n        [formField.id]: key\n      }\n    };\n    const valuePath = this._pathRegistry.getValuePath(formField, options);\n    if (claiming) {\n      this._pathRegistry.claimPath(valuePath, {\n        isClosed: true,\n        claimerId: formField.id\n      });\n    } else {\n      this._pathRegistry.unclaimPath(valuePath);\n    }\n\n    // cache path for revert\n    context.valuePath = valuePath;\n  }\n  revert(context) {\n    const {\n      claiming,\n      formField,\n      valuePath\n    } = context;\n    if (claiming) {\n      this._pathRegistry.unclaimPath(valuePath);\n    } else {\n      this._pathRegistry.claimPath(valuePath, {\n        isClosed: true,\n        claimerId: formField.id\n      });\n    }\n  }\n}\nUpdateKeyClaimHandler.$inject = ['pathRegistry'];\n\nclass UpdatePathClaimHandler {\n  /**\n   * @constructor\n   * @param { import('@bpmn-io/form-js-viewer').PathRegistry } pathRegistry\n   */\n  constructor(pathRegistry) {\n    this._pathRegistry = pathRegistry;\n  }\n  execute(context) {\n    const {\n      claiming,\n      formField,\n      path\n    } = context;\n    const options = {\n      replacements: {\n        [formField.id]: path\n      }\n    };\n    const valuePaths = [];\n    if (claiming) {\n      this._pathRegistry.executeRecursivelyOnFields(formField, ({\n        field,\n        isClosed,\n        isRepeatable\n      }) => {\n        const valuePath = this._pathRegistry.getValuePath(field, options);\n        valuePaths.push({\n          valuePath,\n          isClosed,\n          isRepeatable,\n          claimerId: field.id\n        });\n        this._pathRegistry.claimPath(valuePath, {\n          isClosed,\n          isRepeatable,\n          claimerId: field.id\n        });\n      });\n    } else {\n      this._pathRegistry.executeRecursivelyOnFields(formField, ({\n        field,\n        isClosed,\n        isRepeatable\n      }) => {\n        const valuePath = this._pathRegistry.getValuePath(field, options);\n        valuePaths.push({\n          valuePath,\n          isClosed,\n          isRepeatable,\n          claimerId: field.id\n        });\n        this._pathRegistry.unclaimPath(valuePath);\n      });\n    }\n\n    // cache path info for revert\n    context.valuePaths = valuePaths;\n  }\n  revert(context) {\n    const {\n      claiming,\n      valuePaths\n    } = context;\n    if (claiming) {\n      valuePaths.forEach(({\n        valuePath\n      }) => {\n        this._pathRegistry.unclaimPath(valuePath);\n      });\n    } else {\n      valuePaths.forEach(({\n        valuePath,\n        isClosed,\n        isRepeatable,\n        claimerId\n      }) => {\n        this._pathRegistry.claimPath(valuePath, {\n          isClosed,\n          isRepeatable,\n          claimerId\n        });\n      });\n    }\n  }\n}\nUpdatePathClaimHandler.$inject = ['pathRegistry'];\n\nclass Modeling {\n  constructor(commandStack, eventBus, formEditor, formFieldRegistry, fieldFactory) {\n    this._commandStack = commandStack;\n    this._formEditor = formEditor;\n    this._formFieldRegistry = formFieldRegistry;\n    this._fieldFactory = fieldFactory;\n    eventBus.on('form.init', () => {\n      this.registerHandlers();\n    });\n  }\n  registerHandlers() {\n    Object.entries(this.getHandlers()).forEach(([id, handler]) => {\n      this._commandStack.registerHandler(id, handler);\n    });\n  }\n  getHandlers() {\n    return {\n      'formField.add': AddFormFieldHandler,\n      'formField.edit': EditFormFieldHandler,\n      'formField.move': MoveFormFieldHandler,\n      'formField.remove': RemoveFormFieldHandler,\n      'id.updateClaim': UpdateIdClaimHandler,\n      'key.updateClaim': UpdateKeyClaimHandler,\n      'path.updateClaim': UpdatePathClaimHandler\n    };\n  }\n  addFormField(attrs, targetFormField, targetIndex) {\n    const formField = this._fieldFactory.create(attrs);\n    const context = {\n      formField,\n      targetFormField,\n      targetIndex\n    };\n    this._commandStack.execute('formField.add', context);\n    return formField;\n  }\n  editFormField(formField, properties, value) {\n    if (!isObject(properties)) {\n      properties = {\n        [properties]: value\n      };\n    }\n    const context = {\n      formField,\n      properties\n    };\n    this._commandStack.execute('formField.edit', context);\n  }\n  moveFormField(formField, sourceFormField, targetFormField, sourceIndex, targetIndex, sourceRow, targetRow) {\n    const context = {\n      formField,\n      sourceFormField,\n      targetFormField,\n      sourceIndex,\n      targetIndex,\n      sourceRow,\n      targetRow\n    };\n    this._commandStack.execute('formField.move', context);\n  }\n  removeFormField(formField, sourceFormField, sourceIndex) {\n    const context = {\n      formField,\n      sourceFormField,\n      sourceIndex\n    };\n    this._commandStack.execute('formField.remove', context);\n  }\n  claimId(formField, id) {\n    const context = {\n      formField,\n      id,\n      claiming: true\n    };\n    this._commandStack.execute('id.updateClaim', context);\n  }\n  unclaimId(formField, id) {\n    const context = {\n      formField,\n      id,\n      claiming: false\n    };\n    this._commandStack.execute('id.updateClaim', context);\n  }\n  claimKey(formField, key) {\n    const context = {\n      formField,\n      key,\n      claiming: true\n    };\n    this._commandStack.execute('key.updateClaim', context);\n  }\n  unclaimKey(formField, key) {\n    const context = {\n      formField,\n      key,\n      claiming: false\n    };\n    this._commandStack.execute('key.updateClaim', context);\n  }\n  claimPath(formField, path) {\n    const context = {\n      formField,\n      path,\n      claiming: true\n    };\n    this._commandStack.execute('path.updateClaim', context);\n  }\n  unclaimPath(formField, path) {\n    const context = {\n      formField,\n      path,\n      claiming: false\n    };\n    this._commandStack.execute('path.updateClaim', context);\n  }\n}\nModeling.$inject = ['commandStack', 'eventBus', 'formEditor', 'formFieldRegistry', 'fieldFactory'];\n\nconst ModelingModule = {\n  __depends__: [BehaviorModule, commandModule],\n  __init__: ['formLayoutUpdater', 'modeling'],\n  formLayoutUpdater: ['type', FormLayoutUpdater],\n  modeling: ['type', Modeling]\n};\n\nclass Selection {\n  constructor(eventBus) {\n    this._eventBus = eventBus;\n    this._selection = null;\n  }\n  get() {\n    return this._selection;\n  }\n  set(selection) {\n    if (this._selection === selection) {\n      return;\n    }\n    this._selection = selection;\n    this._eventBus.fire('selection.changed', {\n      selection: this._selection\n    });\n  }\n  toggle(selection) {\n    const newSelection = this._selection === selection ? null : selection;\n    this.set(newSelection);\n  }\n  clear() {\n    this.set(null);\n  }\n  isSelected(formField) {\n    return this._selection === formField;\n  }\n}\nSelection.$inject = ['eventBus'];\n\nclass SelectionBehavior {\n  constructor(eventBus, selection) {\n    eventBus.on(['commandStack.formField.add.postExecuted', 'commandStack.formField.move.postExecuted'], ({\n      context\n    }) => {\n      const {\n        formField\n      } = context;\n      selection.set(formField);\n    });\n    eventBus.on('commandStack.formField.remove.postExecuted', ({\n      context\n    }) => {\n      const {\n        sourceFormField,\n        sourceIndex\n      } = context;\n      const formField = sourceFormField.components[sourceIndex] || sourceFormField.components[sourceIndex - 1];\n      if (formField) {\n        selection.set(formField);\n      } else {\n        selection.clear();\n      }\n    });\n    eventBus.on('formField.remove', ({\n      formField\n    }) => {\n      if (selection.isSelected(formField)) {\n        selection.clear();\n      }\n    });\n  }\n}\nSelectionBehavior.$inject = ['eventBus', 'selection'];\n\nconst SelectionModule = {\n  __init__: ['selection', 'selectionBehavior'],\n  selection: ['type', Selection],\n  selectionBehavior: ['type', SelectionBehavior]\n};\n\n/**\n * Base class for sectionable UI modules.\n *\n * @property {EventBus} _eventBus - EventBus instance used for event handling.\n * @property {string} managerType - Type of the render manager. Used to form event names.\n *\n * @class SectionModuleBase\n */\nclass SectionModuleBase {\n  /**\n   * Create a SectionModuleBase instance.\n   *\n   * @param {any} eventBus - The EventBus instance used for event handling.\n   * @param {string} sectionKey - The type of render manager. Used to form event names.\n   *\n   * @constructor\n   */\n  constructor(eventBus, sectionKey) {\n    this._eventBus = eventBus;\n    this._sectionKey = sectionKey;\n    this._eventBus.on(`${this._sectionKey}.section.rendered`, () => {\n      this.isSectionRendered = true;\n    });\n    this._eventBus.on(`${this._sectionKey}.section.destroyed`, () => {\n      this.isSectionRendered = false;\n    });\n  }\n\n  /**\n   * Attach the managed section to a parent node.\n   *\n   * @param {HTMLElement} container - The parent node to attach to.\n   */\n  attachTo(container) {\n    this._onceSectionRendered(() => this._eventBus.fire(`${this._sectionKey}.attach`, {\n      container\n    }));\n  }\n\n  /**\n   * Detach the managed section from its parent node.\n   */\n  detach() {\n    this._onceSectionRendered(() => this._eventBus.fire(`${this._sectionKey}.detach`));\n  }\n\n  /**\n   * Reset the managed section to its initial state.\n   */\n  reset() {\n    this._onceSectionRendered(() => this._eventBus.fire(`${this._sectionKey}.reset`));\n  }\n\n  /**\n   * Circumvents timing issues.\n   */\n  _onceSectionRendered(callback) {\n    if (this.isSectionRendered) {\n      callback();\n    } else {\n      this._eventBus.once(`${this._sectionKey}.section.rendered`, callback);\n    }\n  }\n}\n\nclass PaletteRenderer extends SectionModuleBase {\n  constructor(eventBus) {\n    super(eventBus, 'palette');\n  }\n}\nPaletteRenderer.$inject = ['eventBus'];\n\nconst PaletteModule = {\n  __init__: ['palette'],\n  palette: ['type', PaletteRenderer]\n};\n\nvar ArrowIcon = function ArrowIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"m11.657 8-4.95 4.95a1 1 0 0 1-1.414-1.414L8.828 8 5.293 4.464A1 1 0 1 1 6.707 3.05L11.657 8Z\"\n    })\n  });\n};\nArrowIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar CreateIcon = function CreateIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"M9 13V9h4a1 1 0 0 0 0-2H9V3a1 1 0 1 0-2 0v4H3a1 1 0 1 0 0 2h4v4a1 1 0 0 0 2 0Z\"\n    })\n  });\n};\nCreateIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar DeleteIcon = function DeleteIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"M12 6v7c0 1.1-.4 1.55-1.5 1.55h-5C4.4 14.55 4 14.1 4 13V6h8Zm-1.5 1.5h-5v4.3c0 .66.5 1.2 1.111 1.2H9.39c.611 0 1.111-.54 1.111-1.2V7.5ZM13 3h-2l-1-1H6L5 3H3v1.5h10V3Z\"\n    })\n  });\n};\nDeleteIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar DragIcon = function DragIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      fill: \"#fff\",\n      style: {\n        mixBlendMode: \"multiply\"\n      },\n      d: \"M0 0h16v16H0z\"\n    }), jsx(\"path\", {\n      fill: \"#fff\",\n      style: {\n        mixBlendMode: \"multiply\"\n      },\n      d: \"M0 0h16v16H0z\"\n    }), jsx(\"path\", {\n      d: \"M7 3H5v2h2V3zm4 0H9v2h2V3zM7 7H5v2h2V7zm4 0H9v2h2V7zm-4 4H5v2h2v-2zm4 0H9v2h2v-2z\",\n      fill: \"#161616\"\n    })]\n  });\n};\nDragIcon.defaultProps = {\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar ExternalLinkIcon = function ExternalLinkIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      clipRule: \"evenodd\",\n      d: \"M12.637 12.637v-4.72h1.362v4.721c0 .36-.137.676-.411.95-.275.275-.591.412-.95.412H3.362c-.38 0-.703-.132-.967-.396A1.315 1.315 0 0 1 2 12.638V3.362c0-.38.132-.703.396-.967S2.982 2 3.363 2h4.553v1.363H3.363v9.274h9.274ZM14 2H9.28l-.001 1.362h2.408L5.065 9.984l.95.95 6.622-6.622v2.409H14V2Z\",\n      fill: \"currentcolor\"\n    })\n  });\n};\nExternalLinkIcon.defaultProps = {\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar FeelIcon$1 = function FeelIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      d: \"M3.617 11.99c-.137.684-.392 1.19-.765 1.518-.362.328-.882.492-1.558.492H0l.309-1.579h1.264l1.515-7.64h-.912l.309-1.579h.911l.236-1.191c.137-.685.387-1.192.75-1.52C4.753.164 5.277 0 5.953 0h1.294L6.94 1.579H5.675l-.323 1.623h1.264l-.309 1.579H5.043l-1.426 7.208ZM5.605 11.021l3.029-4.155L7.28 3.202h2.073l.706 2.547h.176l1.691-2.547H14l-3.014 4.051 1.338 3.768H10.25l-.706-2.606H9.37L7.678 11.02H5.605Z\",\n      fill: \"currentcolor\"\n    })\n  });\n};\nFeelIcon$1.defaultProps = {\n  width: \"14\",\n  height: \"14\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar HelpIcon = function HelpIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      d: \"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2Zm0 26a12 12 0 1 1 12-12 12 12 0 0 1-12 12Z\"\n    }), jsx(\"circle\", {\n      cx: \"16\",\n      cy: \"23.5\",\n      r: \"1.5\"\n    }), jsx(\"path\", {\n      d: \"M17 8h-1.5a4.49 4.49 0 0 0-4.5 4.5v.5h2v-.5a2.5 2.5 0 0 1 2.5-2.5H17a2.5 2.5 0 0 1 0 5h-2v4.5h2V17a4.5 4.5 0 0 0 0-9Z\"\n    }), jsx(\"path\", {\n      style: {\n        fill: \"none\"\n      },\n      d: \"M0 0h32v32H0z\"\n    })]\n  });\n};\nHelpIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 32 32\"\n};\nvar PopupIcon = function PopupIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M28 4H10a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h18a2.006 2.006 0 0 0 2-2V6a2.006 2.006 0 0 0-2-2Zm0 16H10V6h18Z\"\n    }), jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M18 26H4V16h2v-2H4a2.006 2.006 0 0 0-2 2v10a2.006 2.006 0 0 0 2 2h14a2.006 2.006 0 0 0 2-2v-2h-2Z\"\n    })]\n  });\n};\nPopupIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 32 32\"\n};\nvar CloseIcon = function CloseIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8 12 4.7Z\",\n      fill: \"currentColor\"\n    })\n  });\n};\nCloseIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nfunction Header(props) {\n  const {\n    element,\n    headerProvider\n  } = props;\n  const {\n    getElementIcon,\n    getDocumentationRef,\n    getElementLabel,\n    getTypeLabel\n  } = headerProvider;\n  const label = getElementLabel(element);\n  const type = getTypeLabel(element);\n  const documentationRef = getDocumentationRef && getDocumentationRef(element);\n  const ElementIcon = getElementIcon(element);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-header\",\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-header-icon\",\n      children: ElementIcon && jsx(ElementIcon, {\n        width: \"32\",\n        height: \"32\",\n        viewBox: \"0 0 32 32\"\n      })\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-header-labels\",\n      children: [jsx(\"div\", {\n        title: type,\n        class: \"bio-properties-panel-header-type\",\n        children: type\n      }), label ? jsx(\"div\", {\n        title: label,\n        class: \"bio-properties-panel-header-label\",\n        children: label\n      }) : null]\n    }), jsx(\"div\", {\n      class: \"bio-properties-panel-header-actions\",\n      children: documentationRef ? jsx(\"a\", {\n        rel: \"noopener\",\n        class: \"bio-properties-panel-header-link\",\n        href: documentationRef,\n        title: \"Open documentation\",\n        target: \"_blank\",\n        children: jsx(ExternalLinkIcon, {})\n      }) : null\n    })]\n  });\n}\nconst DescriptionContext = createContext({\n  description: {},\n  getDescriptionForId: () => {}\n});\nconst ErrorsContext = createContext({\n  errors: {}\n});\n\n/**\n * @typedef {Function} <propertiesPanel.showEntry> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {\n *   // ...\n * });\n *\n * @param {Object} context\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\nconst EventContext = createContext({\n  eventBus: null\n});\nconst LayoutContext = createContext({\n  layout: {},\n  setLayout: () => {},\n  getLayoutForKey: () => {},\n  setLayoutForKey: () => {}\n});\nconst TooltipContext = createContext({\n  tooltip: {},\n  getTooltipForId: () => {}\n});\n\n/**\n * Accesses the global TooltipContext and returns a tooltip for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n *   const tooltip = useTooltipContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nfunction useTooltipContext(id, element) {\n  const {\n    getTooltipForId\n  } = useContext(TooltipContext);\n  return getTooltipForId(id, element);\n}\nfunction TooltipWrapper(props) {\n  const {\n    forId,\n    element\n  } = props;\n  const contextDescription = useTooltipContext(forId, element);\n  const value = props.value || contextDescription;\n  if (!value) {\n    return props.children;\n  }\n  return jsx(Tooltip, {\n    ...props,\n    value: value,\n    forId: prefixId$9(forId)\n  });\n}\nfunction Tooltip(props) {\n  const {\n    forId,\n    value,\n    parent,\n    direction = 'right',\n    position\n  } = props;\n  const [visible, setShow] = useState(false);\n  const [focusedViaKeyboard, setFocusedViaKeyboard] = useState(false);\n  let timeout = null;\n  const wrapperRef = useRef(null);\n  const tooltipRef = useRef(null);\n  const showTooltip = async event => {\n    const show = () => setShow(true);\n    if (!visible && !timeout) {\n      if (event instanceof MouseEvent) {\n        timeout = setTimeout(show, 200);\n      } else {\n        show();\n        setFocusedViaKeyboard(true);\n      }\n    }\n  };\n  const hideTooltip = () => {\n    setShow(false);\n    setFocusedViaKeyboard(false);\n  };\n  const hideTooltipViaEscape = e => {\n    e.code === 'Escape' && hideTooltip();\n  };\n  const isTooltipHovered = ({\n    x,\n    y\n  }) => {\n    const tooltip = tooltipRef.current;\n    const wrapper = wrapperRef.current;\n    return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));\n  };\n  useEffect(() => {\n    const {\n      current\n    } = wrapperRef;\n    if (!current) {\n      return;\n    }\n    const hideHoveredTooltip = e => {\n      const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');\n      if (visible && !isTooltipHovered({\n        x: e.x,\n        y: e.y\n      }) && !(isFocused && focusedViaKeyboard)) {\n        hideTooltip();\n      }\n    };\n    const hideFocusedTooltip = e => {\n      const {\n        relatedTarget\n      } = e;\n      const isTooltipChild = el => !!el.closest('.bio-properties-panel-tooltip');\n      if (visible && !isHovered(wrapperRef.current) && relatedTarget && !isTooltipChild(relatedTarget)) {\n        hideTooltip();\n      }\n    };\n    document.addEventListener('wheel', hideHoveredTooltip);\n    document.addEventListener('focusout', hideFocusedTooltip);\n    document.addEventListener('mousemove', hideHoveredTooltip);\n    return () => {\n      document.removeEventListener('wheel', hideHoveredTooltip);\n      document.removeEventListener('mousemove', hideHoveredTooltip);\n      document.removeEventListener('focusout', hideFocusedTooltip);\n    };\n  }, [wrapperRef.current, visible, focusedViaKeyboard]);\n  const renderTooltip = () => {\n    return jsxs(\"div\", {\n      class: `bio-properties-panel-tooltip ${direction}`,\n      role: \"tooltip\",\n      id: \"bio-properties-panel-tooltip\",\n      \"aria-labelledby\": forId,\n      style: position || getTooltipPosition(wrapperRef.current),\n      ref: tooltipRef,\n      onClick: e => e.stopPropagation(),\n      children: [jsx(\"div\", {\n        class: \"bio-properties-panel-tooltip-content\",\n        children: value\n      }), jsx(\"div\", {\n        class: \"bio-properties-panel-tooltip-arrow\"\n      })]\n    });\n  };\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-tooltip-wrapper\",\n    tabIndex: \"0\",\n    ref: wrapperRef,\n    onMouseEnter: showTooltip,\n    onMouseLeave: () => {\n      clearTimeout(timeout);\n      timeout = null;\n    },\n    onFocus: showTooltip,\n    onKeyDown: hideTooltipViaEscape,\n    children: [props.children, visible ? parent ? createPortal(renderTooltip(), parent.current) : renderTooltip() : null]\n  });\n}\n\n// helper\nfunction inBounds(x, y, bounds) {\n  const {\n    top,\n    right,\n    bottom,\n    left\n  } = bounds;\n  return x >= left && x <= right && y >= top && y <= bottom;\n}\nfunction getTooltipPosition(refElement) {\n  const refPosition = refElement.getBoundingClientRect();\n  const right = `calc(100% - ${refPosition.x}px)`;\n  const top = `${refPosition.top - 10}px`;\n  return `right: ${right}; top: ${top};`;\n}\nfunction isHovered(element) {\n  return element.matches(':hover');\n}\nfunction prefixId$9(id) {\n  return `bio-properties-panel-${id}`;\n}\n\n/**\n * Accesses the global DescriptionContext and returns a description for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n *   const description = useDescriptionContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nfunction useDescriptionContext(id, element) {\n  const {\n    getDescriptionForId\n  } = useContext(DescriptionContext);\n  return getDescriptionForId(id, element);\n}\nfunction useError(id) {\n  const {\n    errors\n  } = useContext(ErrorsContext);\n  return errors[id];\n}\nfunction useErrors() {\n  const {\n    errors\n  } = useContext(ErrorsContext);\n  return errors;\n}\n\n/**\n * Subscribe to an event immediately. Update subscription after inputs changed.\n *\n * @param {string} event\n * @param {Function} callback\n */\nfunction useEvent(event, callback, eventBus) {\n  const eventContext = useContext(EventContext);\n  if (!eventBus) {\n    ({\n      eventBus\n    } = eventContext);\n  }\n  const didMount = useRef(false);\n\n  // (1) subscribe immediately\n  if (eventBus && !didMount.current) {\n    eventBus.on(event, callback);\n  }\n\n  // (2) update subscription after inputs changed\n  useEffect(() => {\n    if (eventBus && didMount.current) {\n      eventBus.on(event, callback);\n    }\n    didMount.current = true;\n    return () => {\n      if (eventBus) {\n        eventBus.off(event, callback);\n      }\n    };\n  }, [callback, event, eventBus]);\n}\n\n/**\n * Creates a state that persists in the global LayoutContext.\n *\n * @example\n * ```jsx\n * function Group(props) {\n *   const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);\n * }\n * ```\n *\n * @param {(string|number)[]} path\n * @param {any} [defaultValue]\n *\n * @returns {[ any, Function ]}\n */\nfunction useLayoutState(path, defaultValue) {\n  const {\n    getLayoutForKey,\n    setLayoutForKey\n  } = useContext(LayoutContext);\n  const layoutForKey = getLayoutForKey(path, defaultValue);\n  const setState = useCallback(newValue => {\n    setLayoutForKey(path, newValue);\n  }, [setLayoutForKey]);\n  return [layoutForKey, setState];\n}\n\n/**\n * @pinussilvestrus: we need to introduce our own hook to persist the previous\n * state on updates.\n *\n * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\n\nfunction usePrevious(value) {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\n\n/**\n * Subscribe to `propertiesPanel.showEntry`.\n *\n * @param {string} id\n *\n * @returns {import('preact').Ref}\n */\nfunction useShowEntryEvent(id) {\n  const {\n    onShow\n  } = useContext(LayoutContext);\n  const ref = useRef();\n  const focus = useRef(false);\n  const onShowEntry = useCallback(event => {\n    if (event.id === id) {\n      onShow();\n      if (!focus.current) {\n        focus.current = true;\n      }\n    }\n  }, [id]);\n  useEffect(() => {\n    if (focus.current && ref.current) {\n      if (isFunction(ref.current.focus)) {\n        ref.current.focus();\n      }\n      if (isFunction(ref.current.select)) {\n        ref.current.select();\n      }\n      focus.current = false;\n    }\n  });\n  useEvent('propertiesPanel.showEntry', onShowEntry);\n  return ref;\n}\n\n/**\n * @callback setSticky\n * @param {boolean} value\n */\n\n/**\n * Use IntersectionObserver to identify when DOM element is in sticky mode.\n * If sticky is observered setSticky(true) will be called.\n * If sticky mode is left, setSticky(false) will be called.\n *\n *\n * @param {Object} ref\n * @param {string} scrollContainerSelector\n * @param {setSticky} setSticky\n */\nfunction useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {\n  const [scrollContainer, setScrollContainer] = useState(query(scrollContainerSelector));\n  const updateScrollContainer = useCallback(() => {\n    const newScrollContainer = query(scrollContainerSelector);\n    if (newScrollContainer !== scrollContainer) {\n      setScrollContainer(newScrollContainer);\n    }\n  }, [scrollContainerSelector, scrollContainer]);\n  useEffect(() => {\n    updateScrollContainer();\n  }, [updateScrollContainer]);\n  useEvent('propertiesPanel.attach', updateScrollContainer);\n  useEvent('propertiesPanel.detach', updateScrollContainer);\n  useEffect(() => {\n    const Observer = IntersectionObserver;\n\n    // return early if IntersectionObserver is not available\n    if (!Observer) {\n      return;\n    }\n\n    // TODO(@barmac): test this\n    if (!ref.current || !scrollContainer) {\n      return;\n    }\n    const observer = new Observer(entries => {\n      // scroll container is unmounted, do not update sticky state\n      if (scrollContainer.scrollHeight === 0) {\n        return;\n      }\n      entries.forEach(entry => {\n        if (entry.intersectionRatio < 1) {\n          setSticky(true);\n        } else if (entry.intersectionRatio === 1) {\n          setSticky(false);\n        }\n      });\n    }, {\n      root: scrollContainer,\n      rootMargin: '0px 0px 999999% 0px',\n      // Use bottom margin to avoid stickyness when scrolling out to bottom\n      threshold: [1]\n    });\n    observer.observe(ref.current);\n\n    // Unobserve if unmounted\n    return () => {\n      observer.unobserve(ref.current);\n    };\n  }, [ref.current, scrollContainer, setSticky]);\n}\n\n/**\n * Creates a static function reference with changing body.\n * This is necessary when external libraries require a callback function\n * that has references to state variables.\n *\n * Usage:\n * const callback = useStaticCallback((val) => {val === currentState});\n *\n * The `callback` reference is static and can be safely used in external\n * libraries or as a prop that does not cause rerendering of children.\n *\n * @param {Function} callback function with changing reference\n * @returns {Function} static function reference\n */\nfunction useStaticCallback(callback) {\n  const callbackRef = useRef(callback);\n  callbackRef.current = callback;\n  return useCallback((...args) => callbackRef.current(...args), []);\n}\nfunction Group(props) {\n  const {\n    element,\n    entries = [],\n    id,\n    label,\n    shouldOpen = false\n  } = props;\n  const groupRef = useRef(null);\n  const [open, setOpen] = useLayoutState(['groups', id, 'open'], shouldOpen);\n  const onShow = useCallback(() => setOpen(true), [setOpen]);\n  const toggleOpen = () => setOpen(!open);\n  const [edited, setEdited] = useState(false);\n  const [sticky, setSticky] = useState(false);\n\n  // set edited state depending on all entries\n  useEffect(() => {\n    // TODO(@barmac): replace with CSS when `:has()` is supported in all major browsers, or rewrite as in https://github.com/camunda/camunda-modeler/issues/3815#issuecomment-1733038161\n    const scheduled = requestAnimationFrame(() => {\n      const hasOneEditedEntry = entries.find(entry => {\n        const {\n          id,\n          isEdited\n        } = entry;\n        const entryNode = query(`[data-entry-id=\"${id}\"]`);\n        if (!isFunction(isEdited) || !entryNode) {\n          return false;\n        }\n        const inputNode = query('.bio-properties-panel-input', entryNode);\n        return isEdited(inputNode);\n      });\n      setEdited(hasOneEditedEntry);\n    });\n    return () => cancelAnimationFrame(scheduled);\n  }, [entries, setEdited]);\n\n  // set error state depending on all entries\n  const allErrors = useErrors();\n  const hasErrors = entries.some(entry => allErrors[entry.id]);\n\n  // set css class when group is sticky to top\n  useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow\n  };\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-group\",\n    \"data-group-id\": 'group-' + id,\n    ref: groupRef,\n    children: [jsxs(\"div\", {\n      class: classnames('bio-properties-panel-group-header', edited ? '' : 'empty', open ? 'open' : '', sticky && open ? 'sticky' : ''),\n      onClick: toggleOpen,\n      children: [jsx(\"div\", {\n        title: props.tooltip ? null : label,\n        \"data-title\": label,\n        class: \"bio-properties-panel-group-header-title\",\n        children: jsx(TooltipWrapper, {\n          value: props.tooltip,\n          forId: 'group-' + id,\n          element: element,\n          parent: groupRef,\n          children: label\n        })\n      }), jsxs(\"div\", {\n        class: \"bio-properties-panel-group-header-buttons\",\n        children: [jsx(DataMarker, {\n          edited: edited,\n          hasErrors: hasErrors\n        }), jsx(\"button\", {\n          type: \"button\",\n          title: \"Toggle section\",\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n          children: jsx(ArrowIcon, {\n            class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n          })\n        })]\n      })]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-group-entries', open ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: entries.map(entry => {\n          const {\n            component: Component,\n            id\n          } = entry;\n          return createElement(Component, {\n            ...entry,\n            element: element,\n            key: id\n          });\n        })\n      })\n    })]\n  });\n}\nfunction DataMarker(props) {\n  const {\n    edited,\n    hasErrors\n  } = props;\n  if (hasErrors) {\n    return jsx(\"div\", {\n      title: \"Section contains an error\",\n      class: \"bio-properties-panel-dot bio-properties-panel-dot--error\"\n    });\n  }\n  if (edited) {\n    return jsx(\"div\", {\n      title: \"Section contains data\",\n      class: \"bio-properties-panel-dot\"\n    });\n  }\n  return null;\n}\n\n/**\n * @typedef { {\n *  text: (element: object) => string,\n *  icon?: (element: Object) => import('preact').Component\n * } } PlaceholderDefinition\n *\n * @param { PlaceholderDefinition } props\n */\nfunction Placeholder(props) {\n  const {\n    text,\n    icon: Icon\n  } = props;\n  return jsx(\"div\", {\n    class: \"bio-properties-panel open\",\n    children: jsxs(\"section\", {\n      class: \"bio-properties-panel-placeholder\",\n      children: [Icon && jsx(Icon, {\n        class: \"bio-properties-panel-placeholder-icon\"\n      }), jsx(\"p\", {\n        class: \"bio-properties-panel-placeholder-text\",\n        children: text\n      })]\n    })\n  });\n}\nfunction Description$1(props) {\n  const {\n    element,\n    forId,\n    value\n  } = props;\n  const contextDescription = useDescriptionContext(forId, element);\n  const description = value || contextDescription;\n  if (description) {\n    return jsx(\"div\", {\n      class: \"bio-properties-panel-description\",\n      children: description\n    });\n  }\n}\nconst noop$6 = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus$1 = function (editor, ref) {\n  const [buffer, setBuffer] = useState(undefined);\n  ref.current = useMemo(() => ({\n    focus: offset => {\n      if (editor) {\n        editor.focus(offset);\n      } else {\n        if (typeof offset === 'undefined') {\n          offset = Infinity;\n        }\n        setBuffer(offset);\n      }\n    }\n  }), [editor]);\n  useEffect(() => {\n    if (typeof buffer !== 'undefined' && editor) {\n      editor.focus(buffer);\n      setBuffer(false);\n    }\n  }, [editor, buffer]);\n};\nconst CodeEditor$1 = forwardRef((props, ref) => {\n  const {\n    onInput,\n    disabled,\n    tooltipContainer,\n    enableGutters,\n    value,\n    onLint = noop$6,\n    onPopupOpen = noop$6,\n    popupOpen,\n    contentAttributes = {},\n    hostLanguage = null,\n    singleLine = false\n  } = props;\n  const inputRef = useRef();\n  const [editor, setEditor] = useState();\n  const [localValue, setLocalValue] = useState(value || '');\n  useBufferedFocus$1(editor, ref);\n  const handleInput = useStaticCallback(newValue => {\n    onInput(newValue);\n    setLocalValue(newValue);\n  });\n  useEffect(() => {\n    let editor;\n    editor = new FeelersEditor({\n      container: inputRef.current,\n      onChange: handleInput,\n      value: localValue,\n      onLint,\n      contentAttributes,\n      tooltipContainer,\n      enableGutters,\n      hostLanguage,\n      singleLine,\n      lineWrap: true\n    });\n    setEditor(editor);\n    return () => {\n      onLint([]);\n      inputRef.current.innerHTML = '';\n      setEditor(null);\n    };\n  }, []);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    if (value === localValue) {\n      return;\n    }\n    editor.setValue(value);\n    setLocalValue(value);\n  }, [value]);\n  const handleClick = () => {\n    ref.current.focus();\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feelers-editor-container', popupOpen ? 'popupOpen' : null),\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-feelers-editor__open-popup-placeholder\",\n      children: \"Opened in editor\"\n    }), jsx(\"div\", {\n      name: props.name,\n      class: classnames('bio-properties-panel-feelers-editor bio-properties-panel-input', localValue ? 'edited' : null, disabled ? 'disabled' : null),\n      ref: inputRef,\n      onClick: handleClick\n    }), jsx(\"button\", {\n      type: \"button\",\n      title: \"Open pop-up editor\",\n      class: \"bio-properties-panel-open-feel-popup\",\n      onClick: () => onPopupOpen('feelers'),\n      children: jsx(PopupIcon, {})\n    })]\n  });\n});\nconst noop$5 = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function (editor, ref) {\n  const [buffer, setBuffer] = useState(undefined);\n  ref.current = useMemo(() => ({\n    focus: offset => {\n      if (editor) {\n        editor.focus(offset);\n      } else {\n        if (typeof offset === 'undefined') {\n          offset = Infinity;\n        }\n        setBuffer(offset);\n      }\n    }\n  }), [editor]);\n  useEffect(() => {\n    if (typeof buffer !== 'undefined' && editor) {\n      editor.focus(buffer);\n      setBuffer(false);\n    }\n  }, [editor, buffer]);\n};\nconst CodeEditor = forwardRef((props, ref) => {\n  const {\n    contentAttributes,\n    enableGutters,\n    value,\n    onInput,\n    onFeelToggle = noop$5,\n    onLint = noop$5,\n    onPopupOpen = noop$5,\n    placeholder,\n    popupOpen,\n    disabled,\n    tooltipContainer,\n    variables\n  } = props;\n  const inputRef = useRef();\n  const [editor, setEditor] = useState();\n  const [localValue, setLocalValue] = useState(value || '');\n  useBufferedFocus(editor, ref);\n  const handleInput = useStaticCallback(newValue => {\n    onInput(newValue);\n    setLocalValue(newValue);\n  });\n  useEffect(() => {\n    let editor;\n\n    /* Trigger FEEL toggle when\n     *\n     * - `backspace` is pressed\n     * - AND the cursor is at the beginning of the input\n     */\n    const onKeyDown = e => {\n      if (e.key !== 'Backspace' || !editor) {\n        return;\n      }\n      const selection = editor.getSelection();\n      const range = selection.ranges[selection.mainIndex];\n      if (range.from === 0 && range.to === 0) {\n        onFeelToggle();\n      }\n    };\n    editor = new FeelEditor({\n      container: inputRef.current,\n      onChange: handleInput,\n      onKeyDown: onKeyDown,\n      onLint: onLint,\n      placeholder: placeholder,\n      tooltipContainer: tooltipContainer,\n      value: localValue,\n      variables: variables,\n      extensions: [...(enableGutters ? [lineNumbers()] : []), EditorView.lineWrapping],\n      contentAttributes\n    });\n    setEditor(editor);\n    return () => {\n      onLint([]);\n      inputRef.current.innerHTML = '';\n      setEditor(null);\n    };\n  }, []);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    if (value === localValue) {\n      return;\n    }\n    editor.setValue(value);\n    setLocalValue(value);\n  }, [value]);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    editor.setVariables(variables);\n  }, [variables]);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    editor.setPlaceholder(placeholder);\n  }, [placeholder]);\n  const handleClick = () => {\n    ref.current.focus();\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feel-editor-container', disabled ? 'disabled' : null, popupOpen ? 'popupOpen' : null),\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-feel-editor__open-popup-placeholder\",\n      children: \"Opened in editor\"\n    }), jsx(\"div\", {\n      name: props.name,\n      class: classnames('bio-properties-panel-input', localValue ? 'edited' : null),\n      ref: inputRef,\n      onClick: handleClick\n    }), jsx(\"button\", {\n      type: \"button\",\n      title: \"Open pop-up editor\",\n      class: \"bio-properties-panel-open-feel-popup\",\n      onClick: () => onPopupOpen(),\n      children: jsx(PopupIcon, {})\n    })]\n  });\n});\nfunction FeelIndicator(props) {\n  const {\n    active\n  } = props;\n  if (!active) {\n    return null;\n  }\n  return jsx(\"span\", {\n    class: \"bio-properties-panel-feel-indicator\",\n    children: \"=\"\n  });\n}\nconst noop$4 = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.label\n * @param {String} props.feel\n */\nfunction FeelIcon(props) {\n  const {\n    feel = false,\n    active,\n    disabled = false,\n    onClick = noop$4\n  } = props;\n  const feelRequiredLabel = 'FEEL expression is mandatory';\n  const feelOptionalLabel = `Click to ${active ? 'remove' : 'set a'} dynamic value with FEEL expression`;\n  const handleClick = e => {\n    onClick(e);\n\n    // when pointer event was created from keyboard, keep focus on button\n    if (!e.pointerType) {\n      e.stopPropagation();\n    }\n  };\n  return jsx(\"button\", {\n    type: \"button\",\n    class: classnames('bio-properties-panel-feel-icon', active ? 'active' : null, feel === 'required' ? 'required' : 'optional'),\n    onClick: handleClick,\n    disabled: feel === 'required' || disabled,\n    title: feel === 'required' ? feelRequiredLabel : feelOptionalLabel,\n    children: jsx(FeelIcon$1, {})\n  });\n}\nconst FeelPopupContext = createContext({\n  open: () => {},\n  close: () => {},\n  source: null\n});\n\n/**\n * Add a dragger that calls back the passed function with\n * { event, delta } on drag.\n *\n * @example\n *\n * function dragMove(event, delta) {\n *   // we are dragging (!!)\n * }\n *\n * domElement.addEventListener('dragstart', dragger(dragMove));\n *\n * @param {Function} fn\n * @param {Element} [dragPreview]\n *\n * @return {Function} drag start callback function\n */\nfunction createDragger(fn, dragPreview) {\n  let self;\n  let startX, startY;\n\n  /** drag start */\n  function onDragStart(event) {\n    self = this;\n    startX = event.clientX;\n    startY = event.clientY;\n\n    // (1) prevent preview image\n    if (event.dataTransfer) {\n      event.dataTransfer.setDragImage(dragPreview || emptyCanvas(), 0, 0);\n    }\n\n    // (2) setup drag listeners\n\n    // attach drag + cleanup event\n    // we need to do this to make sure we track cursor\n    // movements before we reach other drag event handlers,\n    // e.g. in child containers.\n    document.addEventListener('dragover', onDrag, true);\n    document.addEventListener('dragenter', preventDefault, true);\n    document.addEventListener('dragend', onEnd);\n    document.addEventListener('drop', preventDefault);\n  }\n  function onDrag(event) {\n    const delta = {\n      x: event.clientX - startX,\n      y: event.clientY - startY\n    };\n\n    // call provided fn with event, delta\n    return fn.call(self, event, delta);\n  }\n  function onEnd() {\n    document.removeEventListener('dragover', onDrag, true);\n    document.removeEventListener('dragenter', preventDefault, true);\n    document.removeEventListener('dragend', onEnd);\n    document.removeEventListener('drop', preventDefault);\n  }\n  return onDragStart;\n}\nfunction preventDefault(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction emptyCanvas() {\n  return domify('<canvas width=\"0\" height=\"0\" />');\n}\nconst noop$3 = () => {};\n\n/**\n * A generic popup component.\n *\n * @param {Object} props\n * @param {HTMLElement} [props.container]\n * @param {string} [props.className]\n * @param {boolean} [props.delayInitialFocus]\n * @param {{x: number, y: number}} [props.position]\n * @param {number} [props.width]\n * @param {number} [props.height]\n * @param {Function} props.onClose\n * @param {Function} [props.onPostActivate]\n * @param {Function} [props.onPostDeactivate]\n * @param {boolean} [props.returnFocus]\n * @param {boolean} [props.closeOnEscape]\n * @param {string} props.title\n * @param {Ref} [ref]\n */\nfunction PopupComponent(props, globalRef) {\n  const {\n    container,\n    className,\n    delayInitialFocus,\n    position,\n    width,\n    height,\n    onClose,\n    onPostActivate = noop$3,\n    onPostDeactivate = noop$3,\n    returnFocus = true,\n    closeOnEscape = true,\n    title\n  } = props;\n  const focusTrapRef = useRef(null);\n  const localRef = useRef(null);\n  const popupRef = globalRef || localRef;\n  const containerNode = useMemo(() => getContainerNode(container), [container]);\n  const handleKeydown = event => {\n    // do not allow keyboard events to bubble\n    event.stopPropagation();\n    if (closeOnEscape && event.key === 'Escape') {\n      onClose();\n    }\n  };\n\n  // re-activate focus trap on focus\n  const handleFocus = () => {\n    if (focusTrapRef.current) {\n      focusTrapRef.current.activate();\n    }\n  };\n  let style = {};\n  if (position) {\n    style = {\n      ...style,\n      top: position.top + 'px',\n      left: position.left + 'px'\n    };\n  }\n  if (width) {\n    style.width = width + 'px';\n  }\n  if (height) {\n    style.height = height + 'px';\n  }\n  useEffect(() => {\n    if (popupRef.current) {\n      popupRef.current.addEventListener('focusin', handleFocus);\n    }\n    return () => {\n      popupRef.current.removeEventListener('focusin', handleFocus);\n    };\n  }, [popupRef]);\n  useEffect(() => {\n    if (popupRef.current) {\n      focusTrapRef.current = focusTrap.createFocusTrap(popupRef.current, {\n        clickOutsideDeactivates: true,\n        delayInitialFocus,\n        fallbackFocus: popupRef.current,\n        onPostActivate,\n        onPostDeactivate,\n        returnFocusOnDeactivate: returnFocus\n      });\n      focusTrapRef.current.activate();\n    }\n    return () => focusTrapRef.current && focusTrapRef.current.deactivate();\n  }, [popupRef]);\n  useEvent('propertiesPanel.detach', onClose);\n  return createPortal(jsx(\"div\", {\n    \"aria-label\": title,\n    tabIndex: -1,\n    ref: popupRef,\n    onKeyDown: handleKeydown,\n    role: \"dialog\",\n    class: classnames('bio-properties-panel-popup', className),\n    style: style,\n    children: props.children\n  }), containerNode || document.body);\n}\nconst Popup = forwardRef(PopupComponent);\nPopup.Title = Title;\nPopup.Body = Body;\nPopup.Footer = Footer;\nfunction Title(props) {\n  const {\n    children,\n    className,\n    draggable,\n    emit = () => {},\n    title,\n    showCloseButton = false,\n    closeButtonTooltip = 'Close popup',\n    onClose,\n    ...rest\n  } = props;\n\n  // we can't use state as we need to\n  // manipulate this inside dragging events\n  const context = useRef({\n    startPosition: null,\n    newPosition: null\n  });\n  const dragPreviewRef = useRef();\n  const titleRef = useRef();\n  const onMove = (event, delta) => {\n    cancel(event);\n    const {\n      x: dx,\n      y: dy\n    } = delta;\n    const newPosition = {\n      x: context.current.startPosition.x + dx,\n      y: context.current.startPosition.y + dy\n    };\n    const popupParent = getPopupParent(titleRef.current);\n    popupParent.style.top = newPosition.y + 'px';\n    popupParent.style.left = newPosition.x + 'px';\n\n    // notify interested parties\n    emit('dragover', {\n      newPosition,\n      delta\n    });\n  };\n  const onMoveStart = event => {\n    // initialize drag handler\n    const onDragStart = createDragger(onMove, dragPreviewRef.current);\n    onDragStart(event);\n    event.stopPropagation();\n    const popupParent = getPopupParent(titleRef.current);\n    const bounds = popupParent.getBoundingClientRect();\n    context.current.startPosition = {\n      x: bounds.left,\n      y: bounds.top\n    };\n\n    // notify interested parties\n    emit('dragstart');\n  };\n  const onMoveEnd = () => {\n    context.current.newPosition = null;\n\n    // notify interested parties\n    emit('dragend');\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-popup__header', draggable && 'draggable', className),\n    ref: titleRef,\n    draggable: draggable,\n    onDragStart: onMoveStart,\n    onDragEnd: onMoveEnd,\n    ...rest,\n    children: [draggable && jsxs(Fragment$1, {\n      children: [jsx(\"div\", {\n        ref: dragPreviewRef,\n        class: \"bio-properties-panel-popup__drag-preview\"\n      }), jsx(\"div\", {\n        class: \"bio-properties-panel-popup__drag-handle\",\n        children: jsx(DragIcon, {})\n      })]\n    }), jsx(\"div\", {\n      class: \"bio-properties-panel-popup__title\",\n      children: title\n    }), children, showCloseButton && jsx(\"button\", {\n      title: closeButtonTooltip,\n      class: \"bio-properties-panel-popup__close\",\n      onClick: onClose,\n      children: jsx(CloseIcon, {})\n    })]\n  });\n}\nfunction Body(props) {\n  const {\n    children,\n    className,\n    ...rest\n  } = props;\n  return jsx(\"div\", {\n    class: classnames('bio-properties-panel-popup__body', className),\n    ...rest,\n    children: children\n  });\n}\nfunction Footer(props) {\n  const {\n    children,\n    className,\n    ...rest\n  } = props;\n  return jsx(\"div\", {\n    class: classnames('bio-properties-panel-popup__footer', className),\n    ...rest,\n    children: props.children\n  });\n}\n\n// helpers //////////////////////\n\nfunction getPopupParent(node) {\n  return node.closest('.bio-properties-panel-popup');\n}\nfunction cancel(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction getContainerNode(node) {\n  if (typeof node === 'string') {\n    return query(node);\n  }\n  return node;\n}\nconst FEEL_POPUP_WIDTH = 700;\nconst FEEL_POPUP_HEIGHT = 250;\n\n/**\n * FEEL popup component, built as a singleton. Emits lifecycle events as follows:\n *  - `feelPopup.open` - fired before the popup is mounted\n *  - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup\n *  - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup\n *  - `feelPopup.closed` - fired after the popup is unmounted\n */\nfunction FEELPopupRoot(props) {\n  const {\n    element,\n    eventBus = {\n      fire() {},\n      on() {},\n      off() {}\n    },\n    popupContainer\n  } = props;\n  const prevElement = usePrevious(element);\n  const [popupConfig, setPopupConfig] = useState({});\n  const [open, setOpen] = useState(false);\n  const [source, setSource] = useState(null);\n  const [sourceElement, setSourceElement] = useState(null);\n  const emit = (type, context) => {\n    eventBus.fire('feelPopup.' + type, context);\n  };\n  const isOpen = useCallback(() => {\n    return !!open;\n  }, [open]);\n  useUpdateEffect(() => {\n    if (!open) {\n      emit('closed');\n    }\n  }, [open]);\n  const handleOpen = (entryId, config, _sourceElement) => {\n    setSource(entryId);\n    setPopupConfig(config);\n    setOpen(true);\n    setSourceElement(_sourceElement);\n    emit('open');\n  };\n  const handleClose = (event = {}) => {\n    const {\n      id\n    } = event;\n    if (id && id !== source) {\n      return;\n    }\n    setOpen(false);\n    setSource(null);\n  };\n  const feelPopupContext = {\n    open: handleOpen,\n    close: handleClose,\n    source\n  };\n\n  // close popup on element change, cf. https://github.com/bpmn-io/properties-panel/issues/270\n  useEffect(() => {\n    if (element && prevElement && element !== prevElement) {\n      handleClose();\n    }\n  }, [element]);\n\n  // allow close and open via events\n  useEffect(() => {\n    const handlePopupOpen = context => {\n      const {\n        entryId,\n        popupConfig,\n        sourceElement\n      } = context;\n      handleOpen(entryId, popupConfig, sourceElement);\n    };\n    const handleIsOpen = () => {\n      return isOpen();\n    };\n    eventBus.on('feelPopup._close', handleClose);\n    eventBus.on('feelPopup._open', handlePopupOpen);\n    eventBus.on('feelPopup._isOpen', handleIsOpen);\n    return () => {\n      eventBus.off('feelPopup._close', handleClose);\n      eventBus.off('feelPopup._open', handleOpen);\n      eventBus.off('feelPopup._isOpen', handleIsOpen);\n    };\n  }, [eventBus, isOpen]);\n  return jsxs(FeelPopupContext.Provider, {\n    value: feelPopupContext,\n    children: [open && jsx(FeelPopupComponent, {\n      onClose: handleClose,\n      container: popupContainer,\n      sourceElement: sourceElement,\n      emit: emit,\n      ...popupConfig\n    }), props.children]\n  });\n}\nfunction FeelPopupComponent(props) {\n  const {\n    container,\n    id,\n    hostLanguage,\n    onInput,\n    onClose,\n    position,\n    singleLine,\n    sourceElement,\n    title,\n    tooltipContainer,\n    type,\n    value,\n    variables,\n    emit\n  } = props;\n  const editorRef = useRef();\n  const popupRef = useRef();\n  const isAutoCompletionOpen = useRef(false);\n  const handleSetReturnFocus = () => {\n    sourceElement && sourceElement.focus();\n  };\n  const onKeyDownCapture = event => {\n    // we use capture here to make sure we handle the event before the editor does\n    if (event.key === 'Escape') {\n      isAutoCompletionOpen.current = autoCompletionOpen(event.target);\n    }\n  };\n  const onKeyDown = event => {\n    if (event.key === 'Escape') {\n      // close popup only if auto completion is not open\n      // we need to do check this because the editor is not\n      // stop propagating the keydown event\n      // cf. https://discuss.codemirror.net/t/how-can-i-replace-the-default-autocompletion-keymap-v6/3322/5\n      if (!isAutoCompletionOpen.current) {\n        onClose();\n        isAutoCompletionOpen.current = false;\n      }\n    }\n  };\n  useEffect(() => {\n    emit('opened', {\n      domNode: popupRef.current\n    });\n    return () => emit('close', {\n      domNode: popupRef.current\n    });\n  }, []);\n  useEffect(() => {\n    // Set focus on editor when popup is opened\n    if (editorRef.current) {\n      editorRef.current.focus();\n    }\n  }, [editorRef]);\n  return jsxs(Popup, {\n    container: container,\n    className: \"bio-properties-panel-feel-popup\",\n    emit: emit,\n    position: position,\n    title: title,\n    onClose: onClose\n\n    // handle focus manually on deactivate\n    ,\n\n    returnFocus: false,\n    closeOnEscape: false,\n    delayInitialFocus: false,\n    onPostDeactivate: handleSetReturnFocus,\n    height: FEEL_POPUP_HEIGHT,\n    width: FEEL_POPUP_WIDTH,\n    ref: popupRef,\n    children: [jsxs(Popup.Title, {\n      title: title,\n      emit: emit,\n      showCloseButton: true,\n      closeButtonTooltip: \"Save and close\",\n      onClose: onClose,\n      draggable: true,\n      children: [type === 'feel' && jsxs(\"a\", {\n        href: \"https://docs.camunda.io/docs/components/modeler/feel/what-is-feel/\",\n        target: \"_blank\",\n        class: \"bio-properties-panel-feel-popup__title-link\",\n        children: [\"Learn FEEL expressions\", jsx(HelpIcon, {})]\n      }), type === 'feelers' && jsxs(\"a\", {\n        href: \"https://docs.camunda.io/docs/components/modeler/forms/configuration/forms-config-templating-syntax/\",\n        target: \"_blank\",\n        class: \"bio-properties-panel-feel-popup__title-link\",\n        children: [\"Learn templating\", jsx(HelpIcon, {})]\n      })]\n    }), jsx(Popup.Body, {\n      children: jsxs(\"div\", {\n        onKeyDownCapture: onKeyDownCapture,\n        onKeyDown: onKeyDown,\n        class: \"bio-properties-panel-feel-popup__body\",\n        children: [type === 'feel' && jsx(CodeEditor, {\n          enableGutters: true,\n          id: prefixId$8(id),\n          name: id,\n          onInput: onInput,\n          value: value,\n          variables: variables,\n          ref: editorRef,\n          tooltipContainer: tooltipContainer\n        }), type === 'feelers' && jsx(CodeEditor$1, {\n          id: prefixId$8(id),\n          contentAttributes: {\n            'aria-label': title\n          },\n          enableGutters: true,\n          hostLanguage: hostLanguage,\n          name: id,\n          onInput: onInput,\n          value: value,\n          ref: editorRef,\n          singleLine: singleLine,\n          tooltipContainer: tooltipContainer\n        })]\n      })\n    })]\n  });\n}\n\n// helpers /////////////////\n\nfunction prefixId$8(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction autoCompletionOpen(element) {\n  return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');\n}\n\n/**\n * This hook behaves like useEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateEffect(effect, deps) {\n  const isMounted = useRef(false);\n  useEffect(() => {\n    if (isMounted.current) {\n      return effect();\n    } else {\n      isMounted.current = true;\n    }\n  }, deps);\n}\nfunction ToggleSwitch(props) {\n  const {\n    id,\n    label,\n    onInput,\n    value,\n    switcherLabel,\n    inline,\n    onFocus,\n    onBlur,\n    inputRef,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleInputCallback = async () => {\n    onInput(!value);\n  };\n  const handleInput = e => {\n    handleInputCallback();\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-toggle-switch', {\n      inline\n    }),\n    children: [jsx(\"label\", {\n      class: \"bio-properties-panel-label\",\n      for: prefixId$7(id),\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-field-wrapper\",\n      children: [jsxs(\"label\", {\n        class: \"bio-properties-panel-toggle-switch__switcher\",\n        children: [jsx(\"input\", {\n          ref: inputRef,\n          id: prefixId$7(id),\n          class: \"bio-properties-panel-input\",\n          type: \"checkbox\",\n          onFocus: onFocus,\n          onBlur: onBlur,\n          name: id,\n          onInput: handleInput,\n          checked: !!localValue\n        }), jsx(\"span\", {\n          class: \"bio-properties-panel-toggle-switch__slider\"\n        })]\n      }), switcherLabel && jsx(\"p\", {\n        class: \"bio-properties-panel-toggle-switch__label\",\n        children: switcherLabel\n      })]\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {String} props.switcherLabel\n * @param {Boolean} props.inline\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction ToggleSwitchEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    switcherLabel,\n    inline,\n    getValue,\n    setValue,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const value = getValue(element);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-entry bio-properties-panel-toggle-switch-entry\",\n    \"data-entry-id\": id,\n    children: [jsx(ToggleSwitch, {\n      id: id,\n      label: label,\n      value: value,\n      onInput: setValue,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      switcherLabel: switcherLabel,\n      inline: inline,\n      tooltip: tooltip,\n      element: element\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$8(node) {\n  return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$7(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction NumberField(props) {\n  const {\n    debounce,\n    disabled,\n    displayLabel = true,\n    id,\n    inputRef,\n    label,\n    max,\n    min,\n    onInput,\n    step,\n    value = '',\n    onFocus,\n    onBlur\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => {\n      if (target.validity.valid) {\n        onInput(target.value ? parseFloat(target.value) : undefined);\n      }\n    });\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-numberfield\",\n    children: [displayLabel && jsx(\"label\", {\n      for: prefixId$6(id),\n      class: \"bio-properties-panel-label\",\n      children: label\n    }), jsx(\"input\", {\n      id: prefixId$6(id),\n      ref: inputRef,\n      type: \"number\",\n      name: id,\n      spellCheck: \"false\",\n      autoComplete: \"off\",\n      disabled: disabled,\n      class: \"bio-properties-panel-input\",\n      max: max,\n      min: min,\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      step: step,\n      value: localValue\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.description\n * @param {Boolean} props.disabled\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {String} props.label\n * @param {String} props.max\n * @param {String} props.min\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {String} props.step\n * @param {Function} props.validate\n */\nfunction NumberFieldEntry(props) {\n  const {\n    debounce,\n    description,\n    disabled,\n    element,\n    getValue,\n    id,\n    label,\n    max,\n    min,\n    setValue,\n    step,\n    onFocus,\n    onBlur,\n    validate\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(NumberField, {\n      debounce: debounce,\n      disabled: disabled,\n      id: id,\n      label: label,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      onInput: onInput,\n      max: max,\n      min: min,\n      step: step,\n      value: value\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$7(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$6(id) {\n  return `bio-properties-panel-${id}`;\n}\nconst noop$2 = () => {};\nfunction FeelTextfieldComponent(props) {\n  const {\n    debounce,\n    id,\n    element,\n    label,\n    hostLanguage,\n    onInput,\n    onError,\n    placeholder,\n    feel,\n    value = '',\n    disabled = false,\n    variables,\n    singleLine,\n    tooltipContainer,\n    OptionalComponent = OptionalFeelInput,\n    tooltip\n  } = props;\n  const [localValue, _setLocalValue] = useState(value);\n  const editorRef = useShowEntryEvent(id);\n  const containerRef = useRef();\n  const feelActive = isString(localValue) && localValue.startsWith('=') || feel === 'required';\n  const feelOnlyValue = isString(localValue) && localValue.startsWith('=') ? localValue.substring(1) : localValue;\n  const [focus, _setFocus] = useState(undefined);\n  const {\n    open: openPopup,\n    source: popupSource\n  } = useContext(FeelPopupContext);\n  const popuOpen = popupSource === id;\n  const setFocus = (offset = 0) => {\n    const hasFocus = containerRef.current.contains(document.activeElement);\n\n    // Keep caret position if it is already focused, otherwise focus at the end\n    const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n    _setFocus(position + offset);\n  };\n  const handleInputCallback = useMemo(() => {\n    return debounce(newValue => {\n      onInput(newValue);\n    });\n  }, [onInput, debounce]);\n  const setLocalValue = newValue => {\n    _setLocalValue(newValue);\n    if (typeof newValue === 'undefined' || newValue === '' || newValue === '=') {\n      handleInputCallback(undefined);\n    } else {\n      handleInputCallback(newValue);\n    }\n  };\n  const handleFeelToggle = useStaticCallback(() => {\n    if (feel === 'required') {\n      return;\n    }\n    if (!feelActive) {\n      setLocalValue('=' + localValue);\n    } else {\n      setLocalValue(feelOnlyValue);\n    }\n  });\n  const handleLocalInput = newValue => {\n    if (feelActive) {\n      newValue = '=' + newValue;\n    }\n    if (newValue === localValue) {\n      return;\n    }\n    setLocalValue(newValue);\n    if (!feelActive && isString(newValue) && newValue.startsWith('=')) {\n      // focus is behind `=` sign that will be removed\n      setFocus(-1);\n    }\n  };\n  const handleLint = useStaticCallback(lint => {\n    if (!(lint && lint.length)) {\n      onError(undefined);\n      return;\n    }\n    onError('Unparsable FEEL expression.');\n  });\n  const handlePopupOpen = (type = 'feel') => {\n    const popupOptions = {\n      id,\n      hostLanguage,\n      onInput: handleLocalInput,\n      position: calculatePopupPosition(containerRef.current),\n      singleLine,\n      title: getPopupTitle(element, label),\n      tooltipContainer,\n      type,\n      value: feelOnlyValue,\n      variables\n    };\n    openPopup(id, popupOptions, editorRef.current);\n  };\n  useEffect(() => {\n    if (typeof focus !== 'undefined') {\n      editorRef.current.focus(focus);\n      _setFocus(undefined);\n    }\n  }, [focus]);\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n\n    // External value change removed content => keep FEEL configuration\n    if (!value) {\n      setLocalValue(feelActive ? '=' : '');\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n\n  // copy-paste integration\n  useEffect(() => {\n    const copyHandler = event => {\n      if (!feelActive) {\n        return;\n      }\n      event.clipboardData.setData('application/FEEL', event.clipboardData.getData('text'));\n    };\n    const pasteHandler = event => {\n      if (feelActive || popuOpen) {\n        return;\n      }\n      const data = event.clipboardData.getData('application/FEEL');\n      if (data) {\n        setTimeout(() => {\n          handleFeelToggle();\n          setFocus();\n        });\n      }\n    };\n    containerRef.current.addEventListener('copy', copyHandler);\n    containerRef.current.addEventListener('cut', copyHandler);\n    containerRef.current.addEventListener('paste', pasteHandler);\n    return () => {\n      containerRef.current.removeEventListener('copy', copyHandler);\n      containerRef.current.removeEventListener('cut', copyHandler);\n      containerRef.current.removeEventListener('paste', pasteHandler);\n    };\n  }, [containerRef, feelActive, handleFeelToggle, setFocus]);\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feel-entry', {\n      'feel-active': feelActive\n    }),\n    children: [jsxs(\"label\", {\n      for: prefixId$5(id),\n      class: \"bio-properties-panel-label\",\n      onClick: () => setFocus(),\n      children: [jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      }), jsx(FeelIcon, {\n        label: label,\n        feel: feel,\n        onClick: handleFeelToggle,\n        active: feelActive\n      })]\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-feel-container\",\n      ref: containerRef,\n      children: [jsx(FeelIndicator, {\n        active: feelActive,\n        disabled: feel !== 'optional' || disabled,\n        onClick: handleFeelToggle\n      }), feelActive ? jsx(CodeEditor, {\n        name: id,\n        onInput: handleLocalInput,\n        contentAttributes: {\n          'id': prefixId$5(id),\n          'aria-label': label\n        },\n        disabled: disabled,\n        popupOpen: popuOpen,\n        onFeelToggle: () => {\n          handleFeelToggle();\n          setFocus(true);\n        },\n        onLint: handleLint,\n        onPopupOpen: handlePopupOpen,\n        placeholder: placeholder,\n        value: feelOnlyValue,\n        variables: variables,\n        ref: editorRef,\n        tooltipContainer: tooltipContainer\n      }) : jsx(OptionalComponent, {\n        ...props,\n        popupOpen: popuOpen,\n        onInput: handleLocalInput,\n        contentAttributes: {\n          'id': prefixId$5(id),\n          'aria-label': label\n        },\n        value: localValue,\n        ref: editorRef,\n        onPopupOpen: handlePopupOpen,\n        containerRef: containerRef\n      })]\n    })]\n  });\n}\nconst FeelTextfield = withAutoClosePopup(FeelTextfieldComponent);\nconst OptionalFeelInput = forwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    placeholder\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: position => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      if (typeof position === 'number') {\n        if (position > value.length) {\n          position = value.length;\n        }\n        input.setSelectionRange(position, position);\n      }\n    }\n  };\n  return jsx(\"input\", {\n    id: prefixId$5(id),\n    type: \"text\",\n    ref: inputRef,\n    name: id,\n    spellCheck: \"false\",\n    autoComplete: \"off\",\n    disabled: disabled,\n    class: \"bio-properties-panel-input\",\n    onInput: e => onInput(e.target.value),\n    onFocus: onFocus,\n    onBlur: onBlur,\n    placeholder: placeholder,\n    value: value || ''\n  });\n});\nconst OptionalFeelNumberField = forwardRef((props, ref) => {\n  const {\n    id,\n    debounce,\n    disabled,\n    onInput,\n    value,\n    min,\n    max,\n    step,\n    onFocus,\n    onBlur\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: position => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      if (typeof position === 'number' && position !== Infinity) {\n        if (position > value.length) {\n          position = value.length;\n        }\n        input.setSelectionRange(position, position);\n      }\n    }\n  };\n  return jsx(NumberField, {\n    id: id,\n    debounce: debounce,\n    disabled: disabled,\n    displayLabel: false,\n    inputRef: inputRef,\n    max: max,\n    min: min,\n    onInput: onInput,\n    step: step,\n    value: value,\n    onFocus: onFocus,\n    onBlur: onBlur\n  });\n});\nforwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    placeholder\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      input.setSelectionRange(0, 0);\n    }\n  };\n  return jsx(\"textarea\", {\n    id: prefixId$5(id),\n    type: \"text\",\n    ref: inputRef,\n    name: id,\n    spellCheck: \"false\",\n    autoComplete: \"off\",\n    disabled: disabled,\n    class: \"bio-properties-panel-input\",\n    onInput: e => onInput(e.target.value),\n    onFocus: onFocus,\n    onBlur: onBlur,\n    placeholder: placeholder,\n    value: value || '',\n    \"data-gramm\": \"false\"\n  });\n});\nconst OptionalFeelToggleSwitch = forwardRef((props, ref) => {\n  const {\n    id,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    switcherLabel\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n    }\n  };\n  return jsx(ToggleSwitch, {\n    id: id,\n    value: value,\n    inputRef: inputRef,\n    onInput: onInput,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    switcherLabel: switcherLabel\n  });\n});\nforwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur\n  } = props;\n  const inputRef = useRef();\n  const handleChange = ({\n    target\n  }) => {\n    onInput(target.checked);\n  };\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n    }\n  };\n  return jsx(\"input\", {\n    ref: inputRef,\n    id: prefixId$5(id),\n    name: id,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    type: \"checkbox\",\n    class: \"bio-properties-panel-input\",\n    onChange: handleChange,\n    checked: value,\n    disabled: disabled\n  });\n});\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction FeelEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    disabled,\n    feel,\n    label,\n    getValue,\n    setValue,\n    tooltipContainer,\n    hostLanguage,\n    singleLine,\n    validate,\n    show = noop$2,\n    example,\n    variables,\n    onFocus,\n    onBlur,\n    placeholder,\n    tooltip\n  } = props;\n  const [validationError, setValidationError] = useState(null);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setValidationError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = useStaticCallback(newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n\n    // don't create multiple commandStack entries for the same value\n    if (newValue !== value) {\n      setValue(newValue, newValidationError);\n    }\n    setValidationError(newValidationError);\n  });\n  const onError = useCallback(err => {\n    setLocalError(err);\n  }, []);\n  const temporaryError = useError(id);\n  const error = temporaryError || localError || validationError;\n  return jsxs(\"div\", {\n    class: classnames(props.class, 'bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [createElement(FeelTextfield, {\n      ...props,\n      debounce: debounce,\n      disabled: disabled,\n      feel: feel,\n      id: id,\n      key: element,\n      label: label,\n      onInput: onInput,\n      onError: onError,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      example: example,\n      hostLanguage: hostLanguage,\n      singleLine: singleLine,\n      show: show,\n      value: value,\n      variables: variables,\n      tooltipContainer: tooltipContainer,\n      OptionalComponent: props.OptionalComponent,\n      tooltip: tooltip\n    }), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.max\n * @param {String} props.min\n * @param {String} props.step\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelNumberEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-number\",\n    OptionalComponent: OptionalFeelNumberField,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelToggleSwitchEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-toggle-switch\",\n    OptionalComponent: OptionalFeelToggleSwitch,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.hostLanguage\n * @param {Boolean} props.singleLine\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelTemplatingEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-templating\",\n    OptionalComponent: CodeEditor$1,\n    ...props\n  });\n}\nfunction isEdited$6(node) {\n  if (!node) {\n    return false;\n  }\n  if (node.type === 'checkbox') {\n    return !!node.checked || node.classList.contains('edited');\n  }\n  return !!node.value || node.classList.contains('edited');\n}\n\n// helpers /////////////////\n\nfunction prefixId$5(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction calculatePopupPosition(element) {\n  const {\n    top,\n    left\n  } = element.getBoundingClientRect();\n  return {\n    left: left - FEEL_POPUP_WIDTH - 20,\n    top: top\n  };\n}\n\n// todo(pinussilvestrus): make this configurable in the future\nfunction getPopupTitle(element, label) {\n  let popupTitle = '';\n  if (element && element.type) {\n    popupTitle = `${element.type} / `;\n  }\n  return `${popupTitle}${label}`;\n}\nfunction withAutoClosePopup(Component) {\n  return function (props) {\n    const {\n      id\n    } = props;\n    const {\n      close\n    } = useContext(FeelPopupContext);\n    const closePopup = useStaticCallback(close);\n    useEffect(() => {\n      return () => {\n        closePopup({\n          id\n        });\n      };\n    }, []);\n    return jsx(Component, {\n      ...props\n    });\n  };\n}\nconst DEFAULT_LAYOUT = {};\nconst DEFAULT_DESCRIPTION = {};\nconst DEFAULT_TOOLTIP = {};\n\n/**\n * @typedef { {\n *    component: import('preact').Component,\n *    id: String,\n *    isEdited?: Function\n * } } EntryDefinition\n *\n * @typedef { {\n *    autoFocusEntry: String,\n *    autoOpen?: Boolean,\n *    entries: Array<EntryDefinition>,\n *    id: String,\n *    label: String,\n *    remove: (event: MouseEvent) => void\n * } } ListItemDefinition\n *\n * @typedef { {\n *    add: (event: MouseEvent) => void,\n *    component: import('preact').Component,\n *    element: Object,\n *    id: String,\n *    items: Array<ListItemDefinition>,\n *    label: String,\n *    shouldOpen?: Boolean\n * } } ListGroupDefinition\n *\n * @typedef { {\n *    component?: import('preact').Component,\n *    entries: Array<EntryDefinition>,\n *    id: String,\n *    label: String,\n *    shouldOpen?: Boolean\n * } } GroupDefinition\n *\n *  @typedef { {\n *    [id: String]: GetDescriptionFunction\n * } } DescriptionConfig\n *\n *  @typedef { {\n *    [id: String]: GetTooltipFunction\n * } } TooltipConfig\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetDescriptionFunction\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetTooltipFunction\n *\n * @typedef { {\n *  getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,\n *  getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition\n * } } PlaceholderProvider\n *\n */\n\n/**\n * A basic properties panel component. Describes *how* content will be rendered, accepts\n * data from implementor to describe *what* will be rendered.\n *\n * @param {Object} props\n * @param {Object|Array} props.element\n * @param {import('./components/Header').HeaderProvider} props.headerProvider\n * @param {PlaceholderProvider} [props.placeholderProvider]\n * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups\n * @param {Object} [props.layoutConfig]\n * @param {Function} [props.layoutChanged]\n * @param {DescriptionConfig} [props.descriptionConfig]\n * @param {Function} [props.descriptionLoaded]\n * @param {TooltipConfig} [props.tooltipConfig]\n * @param {Function} [props.tooltipLoaded]\n * @param {HTMLElement} [props.feelPopupContainer]\n * @param {Object} [props.eventBus]\n */\nfunction PropertiesPanel$1(props) {\n  const {\n    element,\n    headerProvider,\n    placeholderProvider,\n    groups,\n    layoutConfig,\n    layoutChanged,\n    descriptionConfig,\n    descriptionLoaded,\n    tooltipConfig,\n    tooltipLoaded,\n    feelPopupContainer,\n    eventBus\n  } = props;\n\n  // set-up layout context\n  const [layout, setLayout] = useState(createLayout(layoutConfig));\n\n  // react to external changes in the layout config\n  useUpdateLayoutEffect(() => {\n    const newLayout = createLayout(layoutConfig);\n    setLayout(newLayout);\n  }, [layoutConfig]);\n  useEffect(() => {\n    if (typeof layoutChanged === 'function') {\n      layoutChanged(layout);\n    }\n  }, [layout, layoutChanged]);\n  const getLayoutForKey = (key, defaultValue) => {\n    return get(layout, key, defaultValue);\n  };\n  const setLayoutForKey = (key, config) => {\n    const newLayout = assign({}, layout);\n    set$1(newLayout, key, config);\n    setLayout(newLayout);\n  };\n  const layoutContext = {\n    layout,\n    setLayout,\n    getLayoutForKey,\n    setLayoutForKey\n  };\n\n  // set-up description context\n  const description = useMemo(() => createDescriptionContext(descriptionConfig), [descriptionConfig]);\n  useEffect(() => {\n    if (typeof descriptionLoaded === 'function') {\n      descriptionLoaded(description);\n    }\n  }, [description, descriptionLoaded]);\n  const getDescriptionForId = (id, element) => {\n    return description[id] && description[id](element);\n  };\n  const descriptionContext = {\n    description,\n    getDescriptionForId\n  };\n\n  // set-up tooltip context\n  const tooltip = useMemo(() => createTooltipContext(tooltipConfig), [tooltipConfig]);\n  useEffect(() => {\n    if (typeof tooltipLoaded === 'function') {\n      tooltipLoaded(tooltip);\n    }\n  }, [tooltip, tooltipLoaded]);\n  const getTooltipForId = (id, element) => {\n    return tooltip[id] && tooltip[id](element);\n  };\n  const tooltipContext = {\n    tooltip,\n    getTooltipForId\n  };\n  const [errors, setErrors] = useState({});\n  const onSetErrors = ({\n    errors\n  }) => setErrors(errors);\n  useEvent('propertiesPanel.setErrors', onSetErrors, eventBus);\n  const errorsContext = {\n    errors\n  };\n  const eventContext = {\n    eventBus\n  };\n  const propertiesPanelContext = {\n    element\n  };\n\n  // empty state\n  if (placeholderProvider && !element) {\n    return jsx(Placeholder, {\n      ...placeholderProvider.getEmpty()\n    });\n  }\n\n  // multiple state\n  if (placeholderProvider && isArray(element)) {\n    return jsx(Placeholder, {\n      ...placeholderProvider.getMultiple()\n    });\n  }\n  return jsx(LayoutContext.Provider, {\n    value: propertiesPanelContext,\n    children: jsx(ErrorsContext.Provider, {\n      value: errorsContext,\n      children: jsx(DescriptionContext.Provider, {\n        value: descriptionContext,\n        children: jsx(TooltipContext.Provider, {\n          value: tooltipContext,\n          children: jsx(LayoutContext.Provider, {\n            value: layoutContext,\n            children: jsx(EventContext.Provider, {\n              value: eventContext,\n              children: jsx(FEELPopupRoot, {\n                element: element,\n                eventBus: eventBus,\n                popupContainer: feelPopupContainer,\n                children: jsxs(\"div\", {\n                  class: \"bio-properties-panel\",\n                  children: [jsx(Header, {\n                    element: element,\n                    headerProvider: headerProvider\n                  }), jsx(\"div\", {\n                    class: \"bio-properties-panel-scroll-container\",\n                    children: groups.map(group => {\n                      const {\n                        component: Component = Group,\n                        id\n                      } = group;\n                      return createElement(Component, {\n                        ...group,\n                        key: id,\n                        element: element\n                      });\n                    })\n                  })]\n                })\n              })\n            })\n          })\n        })\n      })\n    })\n  });\n}\n\n// helpers //////////////////\n\nfunction createLayout(overrides = {}, defaults = DEFAULT_LAYOUT) {\n  return {\n    ...defaults,\n    ...overrides\n  };\n}\nfunction createDescriptionContext(overrides = {}) {\n  return {\n    ...DEFAULT_DESCRIPTION,\n    ...overrides\n  };\n}\nfunction createTooltipContext(overrides = {}) {\n  return {\n    ...DEFAULT_TOOLTIP,\n    ...overrides\n  };\n}\n\n// hooks //////////////////\n\n/**\n * This hook behaves like useLayoutEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateLayoutEffect(effect, deps) {\n  const isMounted = useRef(false);\n  useLayoutEffect(() => {\n    if (isMounted.current) {\n      return effect();\n    } else {\n      isMounted.current = true;\n    }\n  }, deps);\n}\nfunction CollapsibleEntry(props) {\n  const {\n    element,\n    entries = [],\n    id,\n    label,\n    open: shouldOpen,\n    remove\n  } = props;\n  const [open, setOpen] = useState(shouldOpen);\n  const toggleOpen = () => setOpen(!open);\n  const {\n    onShow\n  } = useContext(LayoutContext);\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow: useCallback(() => {\n      setOpen(true);\n      if (isFunction(onShow)) {\n        onShow();\n      }\n    }, [onShow, setOpen])\n  };\n\n  // todo(pinussilvestrus): translate once we have a translate mechanism for the core\n  const placeholderLabel = '<empty>';\n  return jsxs(\"div\", {\n    \"data-entry-id\": id,\n    class: classnames('bio-properties-panel-collapsible-entry', open ? 'open' : ''),\n    children: [jsxs(\"div\", {\n      class: \"bio-properties-panel-collapsible-entry-header\",\n      onClick: toggleOpen,\n      children: [jsx(\"div\", {\n        title: label || placeholderLabel,\n        class: classnames('bio-properties-panel-collapsible-entry-header-title', !label && 'empty'),\n        children: label || placeholderLabel\n      }), jsx(\"button\", {\n        type: \"button\",\n        title: \"Toggle list item\",\n        class: \"bio-properties-panel-arrow  bio-properties-panel-collapsible-entry-arrow\",\n        children: jsx(ArrowIcon, {\n          class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n        })\n      }), remove ? jsx(\"button\", {\n        type: \"button\",\n        title: \"Delete item\",\n        class: \"bio-properties-panel-remove-entry\",\n        onClick: remove,\n        children: jsx(DeleteIcon, {})\n      }) : null]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-collapsible-entry-entries', open ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: entries.map(entry => {\n          const {\n            component: Component,\n            id\n          } = entry;\n          return createElement(Component, {\n            ...entry,\n            element: element,\n            key: id\n          });\n        })\n      })\n    })]\n  });\n}\nfunction ListItem(props) {\n  const {\n    autoFocusEntry,\n    autoOpen\n  } = props;\n\n  // focus specified entry on auto open\n  useEffect(() => {\n    if (autoOpen && autoFocusEntry) {\n      const entry = query(`[data-entry-id=\"${autoFocusEntry}\"]`);\n      const focusableInput = query('.bio-properties-panel-input', entry);\n      if (focusableInput) {\n        if (isFunction(focusableInput.select)) {\n          focusableInput.select();\n        } else if (isFunction(focusableInput.focus)) {\n          focusableInput.focus();\n        }\n        focusableInput.scrollIntoView();\n      }\n    }\n  }, [autoOpen, autoFocusEntry]);\n  return jsx(\"div\", {\n    class: \"bio-properties-panel-list-item\",\n    children: jsx(CollapsibleEntry, {\n      ...props,\n      open: autoOpen\n    })\n  });\n}\nconst noop$1 = () => {};\n\n/**\n * @param {import('../PropertiesPanel').ListGroupDefinition} props\n */\nfunction ListGroup(props) {\n  const {\n    add,\n    element,\n    id,\n    items,\n    label,\n    shouldOpen = true\n  } = props;\n  useEffect(() => {\n    if (props.shouldSort != undefined) {\n      console.warn('the property \\'shouldSort\\' is no longer supported');\n    }\n  }, [props.shouldSort]);\n  const groupRef = useRef(null);\n  const [open, setOpen] = useLayoutState(['groups', id, 'open'], false);\n  const [sticky, setSticky] = useState(false);\n  const onShow = useCallback(() => setOpen(true), [setOpen]);\n  const [localItems, setLocalItems] = useState([]);\n  const [newlyAddedItemIds, setNewlyAddedItemIds] = useState([]);\n\n  // Flag to mark that add button was clicked in the last render cycle\n  const [addTriggered, setAddTriggered] = useState(false);\n  const prevElement = usePrevious(element);\n  const elementChanged = element !== prevElement;\n  const shouldHandleEffects = !elementChanged && shouldOpen;\n\n  // (0) delay setting items\n  //\n  // We need to this to align the render cycles of items\n  // with the detection of newly added items.\n  // This is important, because the autoOpen property can\n  // only set per list item on its very first render.\n  useEffect(() => {\n    setLocalItems(items);\n  }, [items]);\n\n  // (1) handle auto opening when items were added\n  useEffect(() => {\n    // reset addTriggered flag\n    setAddTriggered(false);\n    if (shouldHandleEffects && localItems) {\n      if (addTriggered) {\n        const previousItemIds = localItems.map(item => item.id);\n        const currentItemsIds = items.map(item => item.id);\n        const newItemIds = currentItemsIds.filter(itemId => !previousItemIds.includes(itemId));\n\n        // open if not open, configured and triggered by add button\n        //\n        // TODO(marstamm): remove once we refactor layout handling for listGroups.\n        // Ideally, opening should be handled as part of the `add` callback and\n        // not be a concern for the ListGroup component.\n        if (!open && shouldOpen && newItemIds.length > 0) {\n          toggleOpen();\n        }\n        setNewlyAddedItemIds(newItemIds);\n      } else {\n        // ignore newly added items that do not result from a triggered add\n        setNewlyAddedItemIds([]);\n      }\n    }\n  }, [items, open, shouldHandleEffects, addTriggered, localItems]);\n\n  // set css class when group is sticky to top\n  useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n  const toggleOpen = () => setOpen(!open);\n  const hasItems = !!items.length;\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow\n  };\n  const handleAddClick = e => {\n    setAddTriggered(true);\n    add(e);\n  };\n  const allErrors = useErrors();\n  const hasError = items.some(item => {\n    if (allErrors[item.id]) {\n      return true;\n    }\n    if (!item.entries) {\n      return;\n    }\n\n    // also check if the error is nested, e.g. for name-value entries\n    return item.entries.some(entry => allErrors[entry.id]);\n  });\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-group\",\n    \"data-group-id\": 'group-' + id,\n    ref: groupRef,\n    children: [jsxs(\"div\", {\n      class: classnames('bio-properties-panel-group-header', hasItems ? '' : 'empty', hasItems && open ? 'open' : '', sticky && open ? 'sticky' : ''),\n      onClick: hasItems ? toggleOpen : noop$1,\n      children: [jsx(\"div\", {\n        title: props.tooltip ? null : label,\n        \"data-title\": label,\n        class: \"bio-properties-panel-group-header-title\",\n        children: jsx(TooltipWrapper, {\n          value: props.tooltip,\n          forId: 'group-' + id,\n          element: element,\n          parent: groupRef,\n          children: label\n        })\n      }), jsxs(\"div\", {\n        class: \"bio-properties-panel-group-header-buttons\",\n        children: [add ? jsxs(\"button\", {\n          type: \"button\",\n          title: \"Create new list item\",\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-add-entry\",\n          onClick: handleAddClick,\n          children: [jsx(CreateIcon, {}), !hasItems ? jsx(\"span\", {\n            class: \"bio-properties-panel-add-entry-label\",\n            children: \"Create\"\n          }) : null]\n        }) : null, hasItems ? jsx(\"div\", {\n          title: `List contains ${items.length} item${items.length != 1 ? 's' : ''}`,\n          class: classnames('bio-properties-panel-list-badge', hasError ? 'bio-properties-panel-list-badge--error' : ''),\n          children: items.length\n        }) : null, hasItems ? jsx(\"button\", {\n          type: \"button\",\n          title: \"Toggle section\",\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n          children: jsx(ArrowIcon, {\n            class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n          })\n        }) : null]\n      })]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-list', open && hasItems ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: localItems.map((item, index) => {\n          if (!item) {\n            return;\n          }\n          const {\n            id\n          } = item;\n\n          // if item was added, open it\n          // Existing items will not be affected as autoOpen is only applied on first render\n          const autoOpen = newlyAddedItemIds.includes(item.id);\n          return createElement(ListItem, {\n            ...item,\n            autoOpen: autoOpen,\n            element: element,\n            index: index,\n            key: id\n          });\n        })\n      })\n    })]\n  });\n}\nfunction Checkbox(props) {\n  const {\n    id,\n    label,\n    onChange,\n    disabled,\n    value = false,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleChangeCallback = ({\n    target\n  }) => {\n    onChange(target.checked);\n  };\n  const handleChange = e => {\n    handleChangeCallback(e);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  const ref = useShowEntryEvent(id);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-checkbox\",\n    children: [jsx(\"input\", {\n      ref: ref,\n      id: prefixId$4(id),\n      name: id,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      type: \"checkbox\",\n      class: \"bio-properties-panel-input\",\n      onChange: handleChange,\n      checked: localValue,\n      disabled: disabled\n    }), jsx(\"label\", {\n      for: prefixId$4(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {boolean} [props.disabled]\n */\nfunction CheckboxEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    getValue,\n    setValue,\n    disabled,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const value = getValue(element);\n  const error = useError(id);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-entry bio-properties-panel-checkbox-entry\",\n    \"data-entry-id\": id,\n    children: [jsx(Checkbox, {\n      disabled: disabled,\n      id: id,\n      label: label,\n      onChange: setValue,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      value: value,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$5(node) {\n  return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$4(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction Select(props) {\n  const {\n    id,\n    label,\n    onChange,\n    options = [],\n    value = '',\n    disabled,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const ref = useShowEntryEvent(id);\n  const [localValue, setLocalValue] = useState(value);\n  const handleChangeCallback = ({\n    target\n  }) => {\n    onChange(target.value);\n  };\n  const handleChange = e => {\n    handleChangeCallback(e);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-select\",\n    children: [jsx(\"label\", {\n      for: prefixId$3(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"select\", {\n      ref: ref,\n      id: prefixId$3(id),\n      name: id,\n      class: \"bio-properties-panel-input\",\n      onInput: handleChange,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      value: localValue,\n      disabled: disabled,\n      children: options.map((option, idx) => {\n        if (option.children) {\n          return jsx(\"optgroup\", {\n            label: option.label,\n            children: option.children.map((child, idx) => jsx(\"option\", {\n              value: child.value,\n              disabled: child.disabled,\n              children: child.label\n            }, idx))\n          }, idx);\n        }\n        return jsx(\"option\", {\n          value: option.value,\n          disabled: option.disabled,\n          children: option.label\n        }, idx);\n      })\n    })]\n  });\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.getOptions\n * @param {boolean} [props.disabled]\n * @param {Function} [props.validate]\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction SelectEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    getValue,\n    setValue,\n    getOptions,\n    disabled,\n    onFocus,\n    onBlur,\n    validate,\n    tooltip\n  } = props;\n  const options = getOptions(element);\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onChange = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(Select, {\n      id: id,\n      label: label,\n      value: value,\n      onChange: onChange,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      options: options,\n      disabled: disabled,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$3(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$3(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction resizeToContents(element) {\n  element.style.height = 'auto';\n\n  // a 2px pixel offset is required to prevent scrollbar from\n  // appearing on OS with a full length scroll bar (Windows/Linux)\n  element.style.height = `${element.scrollHeight + 2}px`;\n}\nfunction TextArea(props) {\n  const {\n    id,\n    label,\n    debounce,\n    onInput,\n    value = '',\n    disabled,\n    monospace,\n    onFocus,\n    onBlur,\n    autoResize,\n    placeholder,\n    rows = autoResize ? 1 : 2,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const ref = useShowEntryEvent(id);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => onInput(target.value.length ? target.value : undefined));\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    autoResize && resizeToContents(e.target);\n    setLocalValue(e.target.value);\n  };\n  useLayoutEffect(() => {\n    autoResize && resizeToContents(ref.current);\n  }, []);\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-textarea\",\n    children: [jsx(\"label\", {\n      for: prefixId$1(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"textarea\", {\n      ref: ref,\n      id: prefixId$1(id),\n      name: id,\n      spellCheck: \"false\",\n      class: classnames('bio-properties-panel-input', monospace ? 'bio-properties-panel-input-monospace' : '', autoResize ? 'auto-resize' : ''),\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      rows: rows,\n      value: localValue,\n      disabled: disabled,\n      \"data-gramm\": \"false\"\n    })]\n  });\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} props.description\n * @param {boolean} props.debounce\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {number} props.rows\n * @param {boolean} props.monospace\n * @param {Function} [props.validate]\n * @param {boolean} [props.disabled]\n */\nfunction TextAreaEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    label,\n    getValue,\n    setValue,\n    rows,\n    monospace,\n    disabled,\n    validate,\n    onFocus,\n    onBlur,\n    placeholder,\n    autoResize,\n    tooltip\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(TextArea, {\n      id: id,\n      label: label,\n      value: value,\n      onInput: onInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      rows: rows,\n      debounce: debounce,\n      monospace: monospace,\n      disabled: disabled,\n      placeholder: placeholder,\n      autoResize: autoResize,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$1(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$1(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction Textfield(props) {\n  const {\n    debounce,\n    disabled = false,\n    id,\n    label,\n    onInput,\n    onFocus,\n    onBlur,\n    placeholder,\n    value = '',\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value || '');\n  const ref = useShowEntryEvent(id);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => onInput(target.value.length ? target.value : undefined));\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-textfield\",\n    children: [jsx(\"label\", {\n      for: prefixId(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"input\", {\n      ref: ref,\n      id: prefixId(id),\n      type: \"text\",\n      name: id,\n      spellCheck: \"false\",\n      autoComplete: \"off\",\n      disabled: disabled,\n      class: \"bio-properties-panel-input\",\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      value: localValue\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {Function} props.validate\n */\nfunction TextfieldEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    disabled,\n    label,\n    getValue,\n    setValue,\n    validate,\n    onFocus,\n    onBlur,\n    placeholder,\n    tooltip\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(Textfield, {\n      debounce: debounce,\n      disabled: disabled,\n      id: id,\n      label: label,\n      onInput: onInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      value: value,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description$1, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n  return `bio-properties-panel-${id}`;\n}\nclass FeelPopupModule {\n  constructor(eventBus) {\n    this._eventBus = eventBus;\n  }\n\n  /**\n   * Check if the FEEL popup is open.\n   * @return {Boolean}\n   */\n  isOpen() {\n    return this._eventBus.fire('feelPopup._isOpen');\n  }\n\n  /**\n   * Open the FEEL popup.\n   *\n   * @param {String} entryId\n   * @param {Object} popupConfig\n   * @param {HTMLElement} sourceElement\n   */\n  open(entryId, popupConfig, sourceElement) {\n    return this._eventBus.fire('feelPopup._open', {\n      entryId,\n      popupConfig,\n      sourceElement\n    });\n  }\n\n  /**\n   * Close the FEEL popup.\n   */\n  close() {\n    return this._eventBus.fire('feelPopup._close');\n  }\n}\nFeelPopupModule.$inject = ['eventBus'];\nvar index = {\n  feelPopup: ['type', FeelPopupModule]\n};\n\n/**\n * @param {string} type\n * @param {boolean} [strict]\n *\n * @returns {any}\n */\nfunction getService(type, strict) {}\nconst FormPropertiesPanelContext = createContext({\n  getService\n});\n\nfunction arrayAdd(array, index, item) {\n  const copy = [...array];\n  copy.splice(index, 0, item);\n  return copy;\n}\nfunction countDecimals(number) {\n  const num = Big(number);\n  if (num.toString() === num.toFixed(0)) return 0;\n  return num.toFixed().split('.')[1].length || 0;\n}\n\n/**\n *\n * @param {unknown} value\n * @returns {boolean}\n */\nfunction isValidNumber(value) {\n  return (typeof value === 'number' || typeof value === 'string') && value !== '' && !isNaN(Number(value));\n}\nfunction textToLabel(text) {\n  if (typeof text != 'string') return null;\n  for (const line of text.split('\\n')) {\n    const displayLine = line.trim();\n\n    // we use the first non-whitespace line in the text as label\n    if (displayLine !== '') {\n      return displayLine;\n    }\n  }\n  return null;\n}\n\n/**\n * @param {string} path\n */\nfunction isValidDotPath(path) {\n  return /^\\w+(\\.\\w+)*$/.test(path);\n}\n\n/**\n * @param {string} path\n */\nfunction isProhibitedPath(path) {\n  const prohibitedSegments = ['__proto__', 'prototype', 'constructor'];\n  return path.split('.').some(segment => prohibitedSegments.includes(segment));\n}\nconst LABELED_NON_INPUTS = ['button', 'group', 'dynamiclist', 'iframe', 'table'];\nconst INPUTS = ['checkbox', 'checklist', 'datetime', 'number', 'radio', 'select', 'taglist', 'textfield', 'textarea'];\nconst OPTIONS_INPUTS = ['checklist', 'radio', 'select', 'taglist'];\nfunction hasEntryConfigured(formFieldDefinition, entryId) {\n  const {\n    propertiesPanelEntries = []\n  } = formFieldDefinition;\n  if (!propertiesPanelEntries.length) {\n    return false;\n  }\n  return propertiesPanelEntries.some(id => id === entryId);\n}\nfunction hasOptionsGroupsConfigured(formFieldDefinition) {\n  const {\n    propertiesPanelEntries = []\n  } = formFieldDefinition;\n  if (!propertiesPanelEntries.length) {\n    return false;\n  }\n  return propertiesPanelEntries.some(id => id === 'values');\n}\n\n/**\n * @param {string} path\n */\nfunction hasIntegerPathSegment(path) {\n  return path.split('.').some(segment => /^\\d+$/.test(segment));\n}\n\nconst headerlessTypes = ['spacer', 'separator', 'expression', 'html'];\nfunction getPropertiesPanelHeaderProvider(options = {}) {\n  const {\n    getDocumentationRef,\n    formFields\n  } = options;\n  return {\n    getElementLabel: field => {\n      const {\n        type\n      } = field;\n      if (headerlessTypes.includes(type)) {\n        return '';\n      }\n      if (type === 'text') {\n        return textToLabel(field.text);\n      }\n      if (type === 'image') {\n        return field.alt;\n      }\n      if (type === 'default') {\n        return field.id;\n      }\n      return field.label;\n    },\n    getElementIcon: field => {\n      const {\n        type\n      } = field;\n      const fieldDefinition = formFields.get(type).config;\n      const Icon = fieldDefinition.icon || iconsByType(type);\n      if (Icon) {\n        return () => jsx(Icon, {\n          width: \"36\",\n          height: \"36\",\n          viewBox: \"0 0 54 54\"\n        });\n      } else if (fieldDefinition.iconUrl) {\n        return getPaletteIcon({\n          iconUrl: fieldDefinition.iconUrl,\n          label: fieldDefinition.label\n        });\n      }\n    },\n    getTypeLabel: field => {\n      const {\n        type\n      } = field;\n      if (type === 'default') {\n        return 'Form';\n      }\n      const fieldDefinition = formFields.get(type).config;\n      return fieldDefinition.label || type;\n    },\n    getDocumentationRef\n  };\n}\n\n/**\n * Provide placeholders for empty and multiple state.\n */\nconst PropertiesPanelPlaceholderProvider = {\n  getEmpty: () => {\n    return {\n      text: 'Select a form field to edit its properties.'\n    };\n  },\n  getMultiple: () => {\n    return {\n      text: 'Multiple form fields are selected. Select a single form field to edit its properties.'\n    };\n  }\n};\n\nconst EMPTY = {};\nfunction PropertiesPanel(props) {\n  const {\n    eventBus,\n    getProviders,\n    injector\n  } = props;\n  const formEditor = injector.get('formEditor');\n  const modeling = injector.get('modeling');\n  const selectionModule = injector.get('selection');\n  const propertiesPanelConfig = injector.get('config.propertiesPanel') || EMPTY;\n  const {\n    feelPopupContainer\n  } = propertiesPanelConfig;\n  const [state, setState] = useState({\n    selectedFormField: selectionModule.get() || formEditor._getState().schema\n  });\n  const selectedFormField = state.selectedFormField;\n  const refresh = useCallback(field => {\n    // TODO(skaiir): rework state management, re-rendering the whole properties panel is not the way to go\n    // https://github.com/bpmn-io/form-js/issues/686\n    setState({\n      selectedFormField: selectionModule.get() || formEditor._getState().schema\n    });\n\n    // notify interested parties on property panel updates\n    eventBus.fire('propertiesPanel.updated', {\n      formField: field\n    });\n  }, [eventBus, formEditor, selectionModule]);\n  useLayoutEffect(() => {\n    /**\n     * TODO(pinussilvestrus): update with actual updated element,\n     * once we have a proper updater/change support\n     */\n    eventBus.on('changed', refresh);\n    eventBus.on('import.done', refresh);\n    eventBus.on('selection.changed', refresh);\n    return () => {\n      eventBus.off('changed', refresh);\n      eventBus.off('import.done', refresh);\n      eventBus.off('selection.changed', refresh);\n    };\n  }, [eventBus, refresh]);\n  const getService = (type, strict = true) => injector.get(type, strict);\n  const propertiesPanelContext = {\n    getService\n  };\n  const onFocus = () => eventBus.fire('propertiesPanel.focusin');\n  const onBlur = () => eventBus.fire('propertiesPanel.focusout');\n  const editField = useCallback((formField, key, value) => modeling.editFormField(formField, key, value), [modeling]);\n\n  // retrieve groups for selected form field\n  const providers = getProviders(selectedFormField);\n  const groups = useMemo(() => {\n    return reduce(providers, function (groups, provider) {\n      // do not collect groups for multi element state\n      if (isArray(selectedFormField)) {\n        return [];\n      }\n      const updater = provider.getGroups(selectedFormField, editField);\n      return updater(groups);\n    }, []);\n  }, [providers, selectedFormField, editField]);\n  const formFields = getService('formFields');\n  const PropertiesPanelHeaderProvider = useMemo(() => getPropertiesPanelHeaderProvider({\n    getDocumentationRef: propertiesPanelConfig.getDocumentationRef,\n    formFields\n  }), [formFields, propertiesPanelConfig]);\n  return jsx(\"div\", {\n    class: \"fjs-properties-panel\",\n    \"data-field\": selectedFormField && selectedFormField.id,\n    onFocusCapture: onFocus,\n    onBlurCapture: onBlur,\n    children: jsx(FormPropertiesPanelContext.Provider, {\n      value: propertiesPanelContext,\n      children: jsx(PropertiesPanel$1, {\n        element: selectedFormField,\n        eventBus: eventBus,\n        groups: groups,\n        headerProvider: PropertiesPanelHeaderProvider,\n        placeholderProvider: PropertiesPanelPlaceholderProvider,\n        feelPopupContainer: feelPopupContainer\n      })\n    })\n  });\n}\n\nconst DEFAULT_PRIORITY = 1000;\n\n/**\n * @typedef { { parent: Element } } PropertiesPanelConfig\n * @typedef { import('../../core/EventBus').EventBus } EventBus\n * @typedef { import('../../types').Injector } Injector\n * @typedef { { getGroups: ({ formField, editFormField }) => ({ groups}) => Array } } PropertiesProvider\n */\n\n/**\n * @param {PropertiesPanelConfig} propertiesPanelConfig\n * @param {Injector} injector\n * @param {EventBus} eventBus\n */\nclass PropertiesPanelRenderer {\n  constructor(propertiesPanelConfig, injector, eventBus) {\n    const {\n      parent\n    } = propertiesPanelConfig || {};\n    this._eventBus = eventBus;\n    this._injector = injector;\n    this._container = domify('<div class=\"fjs-properties-container\" input-handle-modified-keys=\"y,z\"></div>');\n    if (parent) {\n      this.attachTo(parent);\n    }\n    this._eventBus.once('formEditor.rendered', 500, () => {\n      this._render();\n    });\n  }\n\n  /**\n   * Attach the properties panel to a parent node.\n   *\n   * @param {HTMLElement} container\n   */\n  attachTo(container) {\n    if (!container) {\n      throw new Error('container required');\n    }\n    if (typeof container === 'string') {\n      container = query(container);\n    }\n\n    // (1) detach from old parent\n    this.detach();\n\n    // (2) append to parent container\n    container.appendChild(this._container);\n\n    // (3) notify interested parties\n    this._eventBus.fire('propertiesPanel.attach');\n  }\n\n  /**\n   * Detach the properties panel from its parent node.\n   */\n  detach() {\n    const parentNode = this._container.parentNode;\n    if (parentNode) {\n      parentNode.removeChild(this._container);\n      this._eventBus.fire('propertiesPanel.detach');\n    }\n  }\n  _render() {\n    render(jsx(PropertiesPanel, {\n      getProviders: this._getProviders.bind(this),\n      eventBus: this._eventBus,\n      injector: this._injector\n    }), this._container);\n    this._eventBus.fire('propertiesPanel.rendered');\n  }\n  _destroy() {\n    if (this._container) {\n      render(null, this._container);\n      this._eventBus.fire('propertiesPanel.destroyed');\n    }\n  }\n\n  /**\n   * Register a new properties provider to the properties panel.\n   *\n   * @param {PropertiesProvider} provider\n   * @param {Number} [priority]\n   */\n  registerProvider(provider, priority) {\n    if (!priority) {\n      priority = DEFAULT_PRIORITY;\n    }\n    if (typeof provider.getGroups !== 'function') {\n      console.error('Properties provider does not implement #getGroups(element) API');\n      return;\n    }\n    this._eventBus.on('propertiesPanel.getProviders', priority, function (event) {\n      event.providers.push(provider);\n    });\n    this._eventBus.fire('propertiesPanel.providersChanged');\n  }\n  _getProviders() {\n    const event = this._eventBus.createEvent({\n      type: 'propertiesPanel.getProviders',\n      providers: []\n    });\n    this._eventBus.fire(event);\n    return event.providers;\n  }\n}\nPropertiesPanelRenderer.$inject = ['config.propertiesPanel', 'injector', 'eventBus'];\n\nfunction ActionEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'action',\n    component: Action,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$3,\n    isDefaultVisible: field => field.type === 'button'\n  });\n  return entries;\n}\nfunction Action(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const path = ['action'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  const getOptions = () => [{\n    label: 'Submit',\n    value: 'submit'\n  }, {\n    label: 'Reset',\n    value: 'reset'\n  }];\n  return SelectEntry({\n    element: field,\n    getOptions,\n    getValue,\n    id,\n    label: 'Action',\n    setValue\n  });\n}\n\nfunction useService(type, strict) {\n  const {\n    getService\n  } = useContext(FormPropertiesPanelContext);\n  return getService(type, strict);\n}\n\n/**\n * Retrieve list of variables from the form schema.\n *\n * @returns { string[] } list of variables used in form schema\n */\nfunction useVariables() {\n  const form = useService('formEditor');\n  const schema = form.getSchema();\n  return getSchemaVariables(schema);\n}\n\nfunction AltTextEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'alt',\n    component: AltText,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => ['image'].includes(field.type)\n  });\n  return entries;\n}\nfunction AltText(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['alt'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue,\n    id,\n    label: 'Alternative text',\n    tooltip: 'Descriptive text for screen reader accessibility.',\n    setValue,\n    singleLine: true,\n    variables\n  });\n}\n\nconst AUTO_OPTION_VALUE = '';\nfunction ColumnsEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [{\n    id: 'columns',\n    component: Columns,\n    field,\n    editField,\n    isEdited: isEdited$3\n  }];\n  return entries;\n}\nfunction Columns(props) {\n  const {\n    field,\n    editField,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const formLayoutValidator = useService('formLayoutValidator');\n  const validate = useCallback(value => {\n    return formLayoutValidator.validateField(field, value ? parseInt(value) : null);\n  }, [field, formLayoutValidator]);\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const layout = get(field, ['layout'], {});\n    const newValue = value ? parseInt(value) : null;\n    editField(field, ['layout'], set$1(layout, ['columns'], newValue));\n  };\n  const getValue = () => {\n    return get(field, ['layout', 'columns']);\n  };\n  const getOptions = () => {\n    return [{\n      label: 'Auto',\n      value: AUTO_OPTION_VALUE\n    },\n    // todo(pinussilvestrus): make options dependant on field type\n    // cf. https://github.com/bpmn-io/form-js/issues/575\n    ...asArray(16).filter(i => i >= MIN_COLUMNS).map(asOption)];\n  };\n  return SelectEntry({\n    debounce,\n    element: field,\n    id,\n    label: 'Columns',\n    getOptions,\n    getValue,\n    setValue,\n    validate\n  });\n}\n\n// helper /////////\n\nfunction asOption(number) {\n  return {\n    value: number,\n    label: number.toString()\n  };\n}\nfunction asArray(length) {\n  return Array.from({\n    length\n  }).map((_, i) => i + 1);\n}\n\nfunction DescriptionEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'description',\n    component: Description,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => INPUTS.includes(field.type)\n  });\n  return entries;\n}\nfunction Description(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['description'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Field description',\n    singleLine: true,\n    setValue,\n    variables\n  });\n}\n\nconst EMPTY_OPTION = null;\nfunction DefaultValueEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const {\n    type\n  } = field;\n  const entries = [];\n  function isDefaultVisible(matchers) {\n    return field => {\n      // Only make default values available when they are statically defined\n      if (!INPUTS.includes(type) || OPTIONS_INPUTS.includes(type) && !field.values) {\n        return false;\n      }\n      return matchers(field);\n    };\n  }\n  const defaulValueBase = {\n    editField,\n    field,\n    id: 'defaultValue',\n    label: 'Default value'\n  };\n  entries.push({\n    ...defaulValueBase,\n    component: DefaultValueCheckbox,\n    isEdited: isEdited$3,\n    isDefaultVisible: isDefaultVisible(field => field.type === 'checkbox')\n  });\n  entries.push({\n    ...defaulValueBase,\n    component: DefaultValueNumber,\n    isEdited: isEdited,\n    isDefaultVisible: isDefaultVisible(field => field.type === 'number')\n  });\n  entries.push({\n    ...defaulValueBase,\n    component: DefaultValueSingleSelect,\n    isEdited: isEdited$3,\n    isDefaultVisible: isDefaultVisible(field => field.type === 'radio' || field.type === 'select')\n  });\n\n  // todo(Skaiir): implement a multiselect equivalent (cf. https://github.com/bpmn-io/form-js/issues/265)\n\n  entries.push({\n    ...defaulValueBase,\n    component: DefaultValueTextfield,\n    isEdited: isEdited,\n    isDefaultVisible: isDefaultVisible(field => field.type === 'textfield')\n  });\n  entries.push({\n    ...defaulValueBase,\n    component: DefaultValueTextarea,\n    isEdited: isEdited$1,\n    isDefaultVisible: isDefaultVisible(field => field.type === 'textarea')\n  });\n  return entries;\n}\nfunction DefaultValueCheckbox(props) {\n  const {\n    editField,\n    field,\n    id,\n    label\n  } = props;\n  const {\n    defaultValue\n  } = field;\n  const path = ['defaultValue'];\n  const getOptions = () => {\n    return [{\n      label: 'Checked',\n      value: 'true'\n    }, {\n      label: 'Not checked',\n      value: 'false'\n    }];\n  };\n  const setValue = value => {\n    return editField(field, path, parseStringToBoolean(value));\n  };\n  const getValue = () => {\n    return parseBooleanToString(defaultValue);\n  };\n  return SelectEntry({\n    element: field,\n    getOptions,\n    getValue,\n    id,\n    label,\n    setValue\n  });\n}\nfunction DefaultValueNumber(props) {\n  const {\n    editField,\n    field,\n    id,\n    label\n  } = props;\n  const {\n    decimalDigits,\n    serializeToString = false\n  } = field;\n  const debounce = useService('debounce');\n  const path = ['defaultValue'];\n  const getValue = e => {\n    let value = get(field, path);\n    if (!isValidNumber(value)) return;\n\n    // Enforces decimal notation so that we do not submit defaults in exponent form\n    return serializeToString ? Big(value).toFixed() : value;\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    let newValue;\n    if (isValidNumber(value)) {\n      newValue = serializeToString ? value : Number(value);\n    }\n    return editField(field, path, newValue);\n  };\n  const decimalDigitsSet = decimalDigits || decimalDigits === 0;\n  const validate = useCallback(value => {\n    if (value === undefined || value === null) {\n      return;\n    }\n    if (!isValidNumber(value)) {\n      return 'Should be a valid number';\n    }\n    if (decimalDigitsSet && countDecimals(value) > decimalDigits) {\n      return `Should not contain more than ${decimalDigits} decimal digits`;\n    }\n  }, [decimalDigitsSet, decimalDigits]);\n  return TextfieldEntry({\n    debounce,\n    label,\n    element: field,\n    getValue,\n    id,\n    setValue,\n    validate\n  });\n}\nfunction DefaultValueSingleSelect(props) {\n  const {\n    editField,\n    field,\n    id,\n    label\n  } = props;\n  const {\n    defaultValue = EMPTY_OPTION,\n    values = []\n  } = field;\n  const path = ['defaultValue'];\n  const getOptions = () => {\n    return [{\n      label: '<none>',\n      value: EMPTY_OPTION\n    }, ...values];\n  };\n  const setValue = value => {\n    return editField(field, path, value.length ? value : undefined);\n  };\n  const getValue = () => {\n    return defaultValue;\n  };\n  return SelectEntry({\n    element: field,\n    getOptions,\n    getValue,\n    id,\n    label,\n    setValue\n  });\n}\nfunction DefaultValueTextfield(props) {\n  const {\n    editField,\n    field,\n    id,\n    label\n  } = props;\n  const debounce = useService('debounce');\n  const path = ['defaultValue'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label,\n    setValue\n  });\n}\nfunction DefaultValueTextarea(props) {\n  const {\n    editField,\n    field,\n    id,\n    label\n  } = props;\n  const debounce = useService('debounce');\n  const path = ['defaultValue'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return TextAreaEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label,\n    setValue\n  });\n}\n\n// helpers /////////////////\n\nfunction parseStringToBoolean(value) {\n  if (value === 'true') {\n    return true;\n  }\n  return false;\n}\nfunction parseBooleanToString(value) {\n  if (value === true) {\n    return 'true';\n  }\n  return 'false';\n}\n\nfunction DisabledEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'disabled',\n    component: Disabled,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$8,\n    isDefaultVisible: field => INPUTS.includes(field.type)\n  });\n  return entries;\n}\nfunction Disabled(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const path = ['disabled'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return ToggleSwitchEntry({\n    element: field,\n    getValue,\n    id,\n    label: 'Disabled',\n    tooltip: 'Field cannot be edited by the end-user, and the data is not submitted. Takes precedence over read only.',\n    inline: true,\n    setValue\n  });\n}\n\nfunction IdEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'id',\n    component: Id,\n    editField: editField,\n    field: field,\n    isEdited: isEdited,\n    isDefaultVisible: field => field.type === 'default'\n  });\n  return entries;\n}\nfunction Id(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const formFieldRegistry = useService('formFieldRegistry');\n  const debounce = useService('debounce');\n  const path = ['id'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    return editField(field, path, value);\n  };\n  const validate = useCallback(value => {\n    if (typeof value !== 'string' || value.length === 0) {\n      return 'Must not be empty.';\n    }\n    const assigned = formFieldRegistry._ids.assigned(value);\n    if (assigned && assigned !== field) {\n      return 'Must be unique.';\n    }\n    return validateId(value) || null;\n  }, [formFieldRegistry, field]);\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'ID',\n    setValue,\n    validate\n  });\n}\n\n// id structural validation /////////////\n\nconst SPACE_REGEX = /\\s/;\n\n// for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\nconst QNAME_REGEX = /^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i;\n\n// for ID validation as per BPMN Schema (QName - Namespace)\nconst ID_REGEX = /^[a-z_][\\w-.]*$/i;\nfunction validateId(idValue) {\n  if (containsSpace(idValue)) {\n    return 'Must not contain spaces.';\n  }\n  if (!ID_REGEX.test(idValue)) {\n    if (QNAME_REGEX.test(idValue)) {\n      return 'Must not contain prefix.';\n    }\n    return 'Must be a valid QName.';\n  }\n}\nfunction containsSpace(value) {\n  return SPACE_REGEX.test(value);\n}\n\nfunction KeyEntry(props) {\n  const {\n    editField,\n    field,\n    getService\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'key',\n    component: Key$2,\n    editField: editField,\n    field: field,\n    isEdited: isEdited,\n    isDefaultVisible: field => {\n      const formFields = getService('formFields');\n      const {\n        config\n      } = formFields.get(field.type);\n      return config.keyed;\n    }\n  });\n  return entries;\n}\nfunction Key$2(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const pathRegistry = useService('pathRegistry');\n  const debounce = useService('debounce');\n  const path = ['key'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    return editField(field, path, value);\n  };\n  const validate = useCallback(value => {\n    if (value === field.key) {\n      return null;\n    }\n    if (!isString(value) || value.length === 0) {\n      return 'Must not be empty.';\n    }\n    if (!isValidDotPath(value)) {\n      return 'Must be a variable or a dot separated path.';\n    }\n    if (hasIntegerPathSegment(value)) {\n      return 'Must not contain numerical path segments.';\n    }\n    if (isProhibitedPath(value)) {\n      return 'Must not be a prohibited path.';\n    }\n    const replacements = {\n      [field.id]: value.split('.')\n    };\n    const oldPath = pathRegistry.getValuePath(field);\n    const newPath = pathRegistry.getValuePath(field, {\n      replacements\n    });\n\n    // unclaim temporarily to avoid self-conflicts\n    pathRegistry.unclaimPath(oldPath);\n    const canClaim = pathRegistry.canClaimPath(newPath, {\n      isClosed: true,\n      claimerId: field.id\n    });\n    pathRegistry.claimPath(oldPath, {\n      isClosed: true,\n      claimerId: field.id\n    });\n    return canClaim ? null : 'Must not conflict with other key/path assignments.';\n  }, [field, pathRegistry]);\n  return TextfieldEntry({\n    debounce,\n    description: 'Binds to a form variable',\n    element: field,\n    getValue,\n    id,\n    label: 'Key',\n    tooltip: 'Use a unique \"key\" to link the form element and the related input/output data. When dealing with nested data, break it down in the user task\\'s input mapping before using it.',\n    setValue,\n    validate\n  });\n}\n\nfunction PathEntry(props) {\n  const {\n    editField,\n    field,\n    getService\n  } = props;\n  const {\n    type\n  } = field;\n  const entries = [];\n  const formFieldDefinition = getService('formFields').get(type);\n  if (formFieldDefinition && formFieldDefinition.config.pathed) {\n    entries.push({\n      id: 'path',\n      component: Path,\n      editField: editField,\n      field: field,\n      isEdited: isEdited\n    });\n  }\n  return entries;\n}\nfunction Path(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const pathRegistry = useService('pathRegistry');\n  const fieldConfig = useService('formFields').get(field.type).config;\n  const isRepeating = fieldConfig.repeatable && field.isRepeating;\n  const path = ['path'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    return editField(field, path, value);\n  };\n  const validate = useCallback(value => {\n    if (!value && isRepeating) {\n      return 'Must not be empty';\n    }\n\n    // Early return for empty value in non-repeating cases or if the field path hasn't changed\n    if (!value && !isRepeating || value === field.path) {\n      return null;\n    }\n\n    // Validate dot-separated path format\n    if (!isValidDotPath(value)) {\n      const msg = isRepeating ? 'Must be a variable or a dot-separated path' : 'Must be empty, a variable or a dot-separated path';\n      return msg;\n    }\n\n    // Check for integer segments in the path\n    if (hasIntegerPathSegment(value)) {\n      return 'Must not contain numerical path segments.';\n    }\n\n    // Check for special prohibited paths\n    if (isProhibitedPath(value)) {\n      return 'Must not be a prohibited path.';\n    }\n\n    // Check for path collisions\n    const options = {\n      replacements: {\n        [field.id]: value.split('.')\n      }\n    };\n    const canClaim = pathRegistry.executeRecursivelyOnFields(field, ({\n      field,\n      isClosed,\n      isRepeatable\n    }) => {\n      const path = pathRegistry.getValuePath(field, options);\n      return pathRegistry.canClaimPath(path, {\n        isClosed,\n        isRepeatable,\n        claimerId: field.id\n      });\n    });\n    if (!canClaim) {\n      return 'Must not cause two binding paths to collide';\n    }\n\n    // If all checks pass\n    return null;\n  }, [field, isRepeating, pathRegistry]);\n  const tooltip = isRepeating ? 'Routes the children of this component into a form variable, may be left empty to route at the root level.' : 'Routes the children of this component into a form variable.';\n  return TextfieldEntry({\n    debounce,\n    description: 'Where the child variables of this component are pathed to.',\n    element: field,\n    getValue,\n    id,\n    label: 'Path',\n    tooltip,\n    setValue,\n    validate\n  });\n}\n\nfunction simpleBoolEntryFactory(options) {\n  const {\n    id,\n    label,\n    description,\n    path,\n    props,\n    getValue,\n    setValue,\n    isDefaultVisible\n  } = options;\n  const {\n    editField,\n    field\n  } = props;\n  return {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    description,\n    component: SimpleBoolComponent,\n    isEdited: isEdited$8,\n    isDefaultVisible,\n    getValue,\n    setValue\n  };\n}\nconst SimpleBoolComponent = props => {\n  const {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    getValue = () => get(field, path, ''),\n    setValue = value => editField(field, path, value || false),\n    description\n  } = props;\n  return ToggleSwitchEntry({\n    element: field,\n    getValue,\n    id,\n    label,\n    setValue,\n    inline: true,\n    description\n  });\n};\n\nfunction simpleSelectEntryFactory(options) {\n  const {\n    id,\n    label,\n    path,\n    props,\n    optionsArray\n  } = options;\n  const {\n    editField,\n    field\n  } = props;\n  return {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    optionsArray,\n    component: SimpleSelectComponent,\n    isEdited: isEdited$3\n  };\n}\nconst SimpleSelectComponent = props => {\n  const {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    optionsArray\n  } = props;\n  const getValue = () => get(field, path, '');\n  const setValue = value => editField(field, path, value);\n  const getOptions = () => optionsArray;\n  return SelectEntry({\n    label,\n    element: field,\n    getOptions,\n    getValue,\n    id,\n    setValue\n  });\n};\n\nfunction simpleRangeIntegerEntryFactory(options) {\n  const {\n    id,\n    label,\n    path,\n    props,\n    min,\n    max\n  } = options;\n  const {\n    editField,\n    field\n  } = props;\n  return {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    min,\n    max,\n    component: SimpleRangeIntegerEntry,\n    isEdited: isEdited\n  };\n}\nconst SimpleRangeIntegerEntry = props => {\n  const {\n    id,\n    label,\n    path,\n    field,\n    editField,\n    min = Number.MIN_SAFE_INTEGER,\n    max = Number.MAX_SAFE_INTEGER\n  } = props;\n  const debounce = useService('debounce');\n  const getValue = () => {\n    const value = get(field, path);\n    const isValid = isValidNumber(value) && Number.isInteger(value);\n    return isValid ? value : null;\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, path, Number(value));\n  };\n  const validate = useCallback(value => {\n    if (value === undefined || value === null || value === '') {\n      return;\n    }\n    if (!Number.isInteger(Number(value))) {\n      return 'Should be an integer.';\n    }\n    if (Big(value).cmp(min) < 0) {\n      return `Should be at least ${min}.`;\n    }\n    if (Big(value).cmp(max) > 0) {\n      return `Should be at most ${max}.`;\n    }\n  }, [min, max]);\n  return TextfieldEntry({\n    debounce,\n    label,\n    element: field,\n    getValue,\n    id,\n    setValue,\n    validate\n  });\n};\n\nfunction GroupAppearanceEntry(props) {\n  const {\n    field\n  } = props;\n  const {\n    type\n  } = field;\n  if (!['group', 'dynamiclist'].includes(type)) {\n    return [];\n  }\n  const entries = [simpleBoolEntryFactory({\n    id: 'showOutline',\n    path: ['showOutline'],\n    label: 'Show outline',\n    props\n  })];\n  return entries;\n}\n\nfunction LabelEntry(props) {\n  const {\n    field,\n    editField\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'date-label',\n    component: DateLabel,\n    editField,\n    field,\n    isEdited: isEdited$6,\n    isDefaultVisible: function (field) {\n      return field.type === 'datetime' && (field.subtype === DATETIME_SUBTYPES.DATE || field.subtype === DATETIME_SUBTYPES.DATETIME);\n    }\n  });\n  entries.push({\n    id: 'time-label',\n    component: TimeLabel,\n    editField,\n    field,\n    isEdited: isEdited$6,\n    isDefaultVisible: function (field) {\n      return field.type === 'datetime' && (field.subtype === DATETIME_SUBTYPES.TIME || field.subtype === DATETIME_SUBTYPES.DATETIME);\n    }\n  });\n  const isSimplyLabled = field => {\n    return [...INPUTS.filter(input => input !== 'datetime'), ...LABELED_NON_INPUTS].includes(field.type);\n  };\n  entries.push({\n    id: 'label',\n    component: Label$2,\n    editField,\n    field,\n    isEdited: isEdited$6,\n    isDefaultVisible: isSimplyLabled\n  });\n  return entries;\n}\nfunction Label$2(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['label'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || '');\n  };\n  const label = getLabelText(field.type);\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label,\n    singleLine: true,\n    setValue,\n    variables\n  });\n}\nfunction DateLabel(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = DATE_LABEL_PATH;\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || '');\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Date label',\n    singleLine: true,\n    setValue,\n    variables\n  });\n}\nfunction TimeLabel(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = TIME_LABEL_PATH;\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || '');\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Time label',\n    singleLine: true,\n    setValue,\n    variables\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {string} type\n * @returns {string}\n */\nfunction getLabelText(type) {\n  switch (type) {\n    case 'group':\n    case 'dynamiclist':\n      return 'Group label';\n    case 'table':\n      return 'Table label';\n    case 'iframe':\n      return 'Title';\n    default:\n      return 'Field label';\n  }\n}\n\nfunction HeightEntry(props) {\n  const {\n    editField,\n    field,\n    id,\n    description,\n    isDefaultVisible,\n    defaultValue\n  } = props;\n  const entries = [];\n  entries.push({\n    id: id + '-height',\n    component: Height,\n    description,\n    isEdited: isEdited$7,\n    editField,\n    field,\n    defaultValue,\n    isDefaultVisible: field => {\n      if (isFunction(isDefaultVisible)) {\n        return isDefaultVisible(field);\n      }\n      return field.type === 'spacer';\n    }\n  });\n  return entries;\n}\nfunction Height(props) {\n  const {\n    description,\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const getValue = e => get(field, ['height'], null);\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, ['height'], value);\n  };\n  return NumberFieldEntry({\n    debounce,\n    description,\n    label: 'Height',\n    element: field,\n    id,\n    getValue,\n    setValue,\n    validate: validate$7\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {number|void} value\n * @returns {string|null}\n */\nconst validate$7 = value => {\n  if (typeof value !== 'number') {\n    return 'A number is required.';\n  }\n  if (!Number.isInteger(value)) {\n    return 'Should be an integer.';\n  }\n  if (value < 1) {\n    return 'Should be greater than zero.';\n  }\n};\n\nfunction IFrameHeightEntry(props) {\n  return [...HeightEntry({\n    ...props,\n    description: 'Height of the container in pixels.',\n    isDefaultVisible: field => field.type === 'iframe'\n  })];\n}\n\nconst HTTPS_PATTERN = /^(https):\\/\\/*/i; // eslint-disable-line no-useless-escape\n\nfunction IFrameUrlEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'url',\n    component: Url,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'iframe'\n  });\n  return entries;\n}\nfunction Url(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['url'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue,\n    id,\n    label: 'URL',\n    setValue,\n    singleLine: true,\n    tooltip: getTooltip$1(),\n    validate: validate$6,\n    variables\n  });\n}\n\n// helper //////////////////////\n\nfunction getTooltip$1() {\n  return jsxs(Fragment$1, {\n    children: [jsx(\"p\", {\n      children: \"Enter a HTTPS URL to a source or populate it dynamically via a template or an expression (e.g., to pass a value from the variable).\"\n    }), jsx(\"p\", {\n      children: \"Please make sure that the URL is safe as it might impose security risks.\"\n    }), jsxs(\"p\", {\n      children: [\"Not all external sources can be displayed in the iFrame. Read more about it in the\", ' ', jsx(\"a\", {\n        target: \"_blank\",\n        href: \"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options\",\n        children: \"X-FRAME-OPTIONS documentation\"\n      }), \".\"]\n    })]\n  });\n}\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$6 = value => {\n  if (!value || value.startsWith('=')) {\n    return;\n  }\n  if (!HTTPS_PATTERN.test(value)) {\n    return 'For security reasons the URL must start with \"https\".';\n  }\n};\n\nfunction ImageSourceEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'source',\n    component: Source$1,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'image'\n  });\n  return entries;\n}\nfunction Source$1(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['source'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    description: 'Expression or static value (link/data URI)',\n    element: field,\n    feel: 'optional',\n    getValue,\n    id,\n    label: 'Image source',\n    tooltip: 'Link referring to a hosted image, or use a data URI directly to embed image data into the form.',\n    setValue,\n    singleLine: true,\n    variables\n  });\n}\n\nfunction TextEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [{\n    id: 'text',\n    component: Text,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'text'\n  }];\n  return entries;\n}\nfunction Text(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['text'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || '');\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    description: description$1,\n    element: field,\n    getValue,\n    id,\n    label: 'Text',\n    hostLanguage: 'markdown',\n    setValue,\n    variables\n  });\n}\nconst description$1 = jsxs(Fragment$1, {\n  children: [\"Supports markdown and templating.\", ' ', jsx(\"a\", {\n    href: \"https://docs.camunda.io/docs/components/modeler/forms/form-element-library/forms-element-library-text/\",\n    target: \"_blank\",\n    children: \"Learn more\"\n  })]\n});\n\nfunction HtmlEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [{\n    id: 'content',\n    component: Content,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'html'\n  }];\n  return entries;\n}\nfunction Content(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['content'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || '');\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    description,\n    element: field,\n    getValue,\n    id,\n    label: 'Content',\n    hostLanguage: 'html',\n    validate: validate$5,\n    setValue,\n    variables\n  });\n}\n\n// helpers //////////\n\nconst description = jsxs(Fragment$1, {\n  children: [\"Supports HTML, styling, and templating. Styles are automatically scoped to the HTML component.\", ' ', jsx(\"a\", {\n    href: \"https://docs.camunda.io/docs/components/modeler/forms/form-element-library/forms-element-library-html/\",\n    target: \"_blank\",\n    children: \"Learn more\"\n  })]\n});\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$5 = value => {\n  // allow empty state\n  if (typeof value !== 'string' || value === '') {\n    return null;\n  }\n\n  // allow expressions\n  if (value.startsWith('=')) {\n    return null;\n  }\n};\n\nfunction NumberEntries(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const entries = [];\n  entries.push({\n    id: id + '-decimalDigits',\n    component: NumberDecimalDigits,\n    isEdited: isEdited$7,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'number'\n  });\n  entries.push({\n    id: id + '-step',\n    component: NumberArrowStep,\n    isEdited: isEdited,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'number'\n  });\n  return entries;\n}\nfunction NumberDecimalDigits(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const getValue = e => get(field, ['decimalDigits']);\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, ['decimalDigits'], value);\n  };\n  return NumberFieldEntry({\n    debounce,\n    label: 'Decimal digits',\n    element: field,\n    step: 'any',\n    getValue,\n    id,\n    setValue,\n    validate: validateNumberEntries\n  });\n}\nfunction NumberArrowStep(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const {\n    decimalDigits\n  } = field;\n  const debounce = useService('debounce');\n  const getValue = e => {\n    let value = get(field, ['increment']);\n    if (!isValidNumber(value)) return null;\n    return value;\n  };\n  const clearLeadingZeroes = value => {\n    if (!value) return value;\n    const trimmed = value.replace(/^0+/g, '');\n    return (trimmed.startsWith('.') ? '0' : '') + trimmed;\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, ['increment'], clearLeadingZeroes(value));\n  };\n  const decimalDigitsSet = decimalDigits || decimalDigits === 0;\n  const validate = useCallback(value => {\n    if (value === undefined || value === null) {\n      return;\n    }\n    if (!isValidNumber(value)) {\n      return 'Should be a valid number.';\n    }\n    if (Big(value).cmp(0) <= 0) {\n      return 'Should be greater than zero.';\n    }\n    if (decimalDigitsSet) {\n      const minimumValue = Big(`1e-${decimalDigits}`);\n      if (Big(value).cmp(minimumValue) < 0) {\n        return `Should be at least ${minimumValue.toString()}.`;\n      }\n      if (countDecimals(value) > decimalDigits) {\n        return `Should not contain more than ${decimalDigits} decimal digits.`;\n      }\n    }\n  }, [decimalDigitsSet, decimalDigits]);\n  return TextfieldEntry({\n    debounce,\n    label: 'Increment',\n    element: field,\n    getValue,\n    id,\n    setValue,\n    validate\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {number|void} value\n * @returns {string|void}\n */\nconst validateNumberEntries = value => {\n  if (typeof value !== 'number') {\n    return;\n  }\n  if (!Number.isInteger(value)) {\n    return 'Should be an integer.';\n  }\n  if (value < 0) {\n    return 'Should be greater than or equal to zero.';\n  }\n};\n\nfunction ExpressionFieldEntries(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const entries = [];\n  entries.push({\n    id: `${id}-expression`,\n    component: ExpressionFieldExpression,\n    isEdited: isEdited$6,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'expression'\n  });\n  entries.push({\n    id: `${id}-computeOn`,\n    component: ExpressionFieldComputeOn,\n    isEdited: isEdited$3,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'expression'\n  });\n  return entries;\n}\nfunction ExpressionFieldExpression(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const getValue = () => field.expression || '';\n  const setValue = value => {\n    editField(field, ['expression'], value);\n  };\n  return FeelEntry({\n    debounce,\n    description: 'Define an expression to calculate the value of this field',\n    element: field,\n    feel: 'required',\n    getValue,\n    id,\n    label: 'Target value',\n    setValue,\n    variables\n  });\n}\nfunction ExpressionFieldComputeOn(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const getValue = () => field.computeOn || '';\n  const setValue = value => {\n    editField(field, ['computeOn'], value);\n  };\n  const getOptions = () => [{\n    value: 'change',\n    label: 'Value changes'\n  }, {\n    value: 'presubmit',\n    label: 'Form submission'\n  }];\n  return SelectEntry({\n    id,\n    label: 'Compute on',\n    getValue,\n    setValue,\n    getOptions\n  });\n}\n\nfunction NumberSerializationEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'serialize-to-string',\n    component: SerializeToString,\n    isEdited: isEdited$5,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'number'\n  });\n  return entries;\n}\nfunction SerializeToString(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const {\n    defaultValue\n  } = field;\n  const path = ['serializeToString'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    // Whenever changing the formatting, make sure to change the default value type along with it\n    if (defaultValue || defaultValue === 0) {\n      editField(field, ['defaultValue'], value ? Big(defaultValue).toFixed() : Number(defaultValue));\n    }\n    return editField(field, path, value);\n  };\n  return CheckboxEntry({\n    element: field,\n    getValue,\n    id,\n    label: 'Output as string',\n    description: 'Allows arbitrary precision values',\n    setValue\n  });\n}\n\nfunction DateTimeEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [{\n    id: 'subtype',\n    component: DateTimeSubtypeSelect,\n    isEdited: isEdited$3,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'datetime'\n  }];\n  entries.push({\n    id: 'use24h',\n    component: Use24h,\n    isEdited: isEdited$5,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'datetime' && (field.subtype === DATETIME_SUBTYPES.TIME || field.subtype === DATETIME_SUBTYPES.DATETIME)\n  });\n  return entries;\n}\nfunction DateTimeSubtypeSelect(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const getValue = e => get(field, DATETIME_SUBTYPE_PATH);\n  const clearTimeConfig = () => {\n    const timeConfigPaths = [TIME_LABEL_PATH, TIME_USE24H_PATH, TIME_INTERVAL_PATH, TIME_SERIALISING_FORMAT_PATH];\n    for (const path of timeConfigPaths) {\n      editField(field, path, undefined);\n    }\n  };\n  const initTimeConfig = () => {\n    editField(field, TIME_LABEL_PATH, 'Time');\n    editField(field, TIME_SERIALISING_FORMAT_PATH, TIME_SERIALISING_FORMATS.UTC_OFFSET);\n    editField(field, TIME_INTERVAL_PATH, 15);\n  };\n  const clearDateConfig = () => {\n    const dateConfigPaths = [DATE_LABEL_PATH, DATE_DISALLOW_PAST_PATH];\n    for (const path of dateConfigPaths) {\n      editField(field, path, undefined);\n    }\n  };\n  const initDateConfig = () => {\n    editField(field, DATE_LABEL_PATH, 'Date');\n  };\n  const setValue = value => {\n    const oldValue = getValue();\n    if (oldValue === value) return;\n    if (value === DATETIME_SUBTYPES.DATE) {\n      clearTimeConfig();\n      oldValue === DATETIME_SUBTYPES.TIME && initDateConfig();\n    } else if (value === DATETIME_SUBTYPES.TIME) {\n      clearDateConfig();\n      oldValue === DATETIME_SUBTYPES.DATE && initTimeConfig();\n    } else if (value === DATETIME_SUBTYPES.DATETIME) {\n      oldValue === DATETIME_SUBTYPES.DATE && initTimeConfig();\n      oldValue === DATETIME_SUBTYPES.TIME && initDateConfig();\n    }\n    return editField(field, DATETIME_SUBTYPE_PATH, value);\n  };\n  const getDatetimeSubtypes = () => {\n    return Object.values(DATETIME_SUBTYPES).map(subtype => ({\n      label: DATETIME_SUBTYPES_LABELS[subtype],\n      value: subtype\n    }));\n  };\n  return SelectEntry({\n    label: 'Subtype',\n    element: field,\n    getOptions: getDatetimeSubtypes,\n    getValue,\n    id,\n    setValue\n  });\n}\nfunction Use24h(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const path = TIME_USE24H_PATH;\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return CheckboxEntry({\n    element: field,\n    getValue,\n    id,\n    label: 'Use 24h',\n    setValue\n  });\n}\n\nfunction DateTimeConstraintsEntry(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  function isDefaultVisible(subtypes) {\n    return field => {\n      if (field.type !== 'datetime') {\n        return false;\n      }\n      return subtypes.includes(field.subtype);\n    };\n  }\n  const entries = [];\n  entries.push({\n    id: id + '-timeInterval',\n    component: TimeIntervalSelect,\n    isEdited: isEdited$3,\n    editField,\n    field,\n    isDefaultVisible: isDefaultVisible([DATETIME_SUBTYPES.TIME, DATETIME_SUBTYPES.DATETIME])\n  });\n  entries.push({\n    id: id + '-disallowPassedDates',\n    component: DisallowPassedDates,\n    isEdited: isEdited$5,\n    editField,\n    field,\n    isDefaultVisible: isDefaultVisible([DATETIME_SUBTYPES.DATE, DATETIME_SUBTYPES.DATETIME])\n  });\n  return entries;\n}\nfunction DisallowPassedDates(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const path = DATE_DISALLOW_PAST_PATH;\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value);\n  };\n  return CheckboxEntry({\n    element: field,\n    getValue,\n    id,\n    label: 'Disallow past dates',\n    setValue\n  });\n}\nfunction TimeIntervalSelect(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const timeIntervals = [1, 5, 10, 15, 30, 60];\n  const getValue = e => get(field, TIME_INTERVAL_PATH);\n  const setValue = value => editField(field, TIME_INTERVAL_PATH, parseInt(value));\n  const getTimeIntervals = () => {\n    return timeIntervals.map(timeInterval => ({\n      label: timeInterval === 60 ? '1h' : timeInterval + 'm',\n      value: timeInterval\n    }));\n  };\n  return SelectEntry({\n    label: 'Time interval',\n    element: field,\n    getOptions: getTimeIntervals,\n    getValue,\n    id,\n    setValue\n  });\n}\n\nfunction DateTimeFormatEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'time-format',\n    component: TimeFormatSelect,\n    isEdited: isEdited$3,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'datetime' && (field.subtype === DATETIME_SUBTYPES.TIME || field.subtype === DATETIME_SUBTYPES.DATETIME)\n  });\n  return entries;\n}\nfunction TimeFormatSelect(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const getValue = e => get(field, TIME_SERIALISING_FORMAT_PATH);\n  const setValue = value => editField(field, TIME_SERIALISING_FORMAT_PATH, value);\n  const getTimeSerialisingFormats = () => {\n    return Object.values(TIME_SERIALISING_FORMATS).map(format => ({\n      label: TIME_SERIALISINGFORMAT_LABELS[format],\n      value: format\n    }));\n  };\n  return SelectEntry({\n    label: 'Time format',\n    element: field,\n    getOptions: getTimeSerialisingFormats,\n    getValue,\n    id,\n    setValue\n  });\n}\n\nfunction SelectEntries(props) {\n  const entries = [simpleBoolEntryFactory({\n    id: 'searchable',\n    path: ['searchable'],\n    label: 'Searchable',\n    props,\n    isDefaultVisible: field => field.type === 'select'\n  })];\n  return entries;\n}\n\nfunction ValueEntry(props) {\n  const {\n    editField,\n    field,\n    idPrefix,\n    index,\n    validateFactory\n  } = props;\n  const entries = [{\n    component: Label$1,\n    editField,\n    field,\n    id: idPrefix + '-label',\n    idPrefix,\n    index,\n    validateFactory\n  }, {\n    component: Value$1,\n    editField,\n    field,\n    id: idPrefix + '-value',\n    idPrefix,\n    index,\n    validateFactory\n  }];\n  return entries;\n}\nfunction Label$1(props) {\n  const {\n    editField,\n    field,\n    id,\n    index,\n    validateFactory\n  } = props;\n  const debounce = useService('debounce');\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const values = get(field, ['values']);\n    return editField(field, 'values', set$1(values, [index, 'label'], value));\n  };\n  const getValue = () => {\n    return get(field, ['values', index, 'label']);\n  };\n  const validate = useMemo(() => validateFactory(get(field, ['values', index, 'label']), entry => entry.label), [field, index, validateFactory]);\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Label',\n    setValue,\n    validate\n  });\n}\nfunction Value$1(props) {\n  const {\n    editField,\n    field,\n    id,\n    index,\n    validateFactory\n  } = props;\n  const debounce = useService('debounce');\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const values = get(field, ['values']);\n    return editField(field, 'values', set$1(values, [index, 'value'], value));\n  };\n  const getValue = () => {\n    return get(field, ['values', index, 'value']);\n  };\n  const validate = useMemo(() => validateFactory(get(field, ['values', index, 'value']), entry => entry.value), [field, index, validateFactory]);\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Value',\n    setValue,\n    validate\n  });\n}\n\nfunction CustomValueEntry(props) {\n  const {\n    editField,\n    field,\n    idPrefix,\n    index,\n    validateFactory\n  } = props;\n  const entries = [{\n    component: Key$1,\n    editField,\n    field,\n    id: idPrefix + '-key',\n    idPrefix,\n    index,\n    validateFactory\n  }, {\n    component: Value,\n    editField,\n    field,\n    id: idPrefix + '-value',\n    idPrefix,\n    index,\n    validateFactory\n  }];\n  return entries;\n}\nfunction Key$1(props) {\n  const {\n    editField,\n    field,\n    id,\n    index,\n    validateFactory\n  } = props;\n  const debounce = useService('debounce');\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const properties = get(field, ['properties']);\n    const key = Object.keys(properties)[index];\n    return editField(field, 'properties', updateKey(properties, key, value));\n  };\n  const getValue = () => {\n    return Object.keys(get(field, ['properties']))[index];\n  };\n  const validate = useMemo(() => validateFactory(Object.keys(get(field, ['properties']))[index]), [validateFactory, field, index]);\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Key',\n    setValue,\n    validate\n  });\n}\nfunction Value(props) {\n  const {\n    editField,\n    field,\n    id,\n    index,\n    validateFactory\n  } = props;\n  const debounce = useService('debounce');\n  const setValue = value => {\n    const properties = get(field, ['properties']);\n    const key = Object.keys(properties)[index];\n    editField(field, 'properties', updateValue(properties, key, value));\n  };\n  const getValue = () => {\n    const properties = get(field, ['properties']);\n    const key = Object.keys(properties)[index];\n    return get(field, ['properties', key]);\n  };\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Value',\n    setValue,\n    validate: validateFactory(getValue())\n  });\n}\n\n// helpers //////////\n\n/**\n * Returns copy of object with updated value.\n *\n * @param {Object} properties\n * @param {string} key\n * @param {string} value\n *\n * @returns {Object}\n */\nfunction updateValue(properties, key, value) {\n  return {\n    ...properties,\n    [key]: value\n  };\n}\n\n/**\n * Returns copy of object with updated key.\n *\n * @param {Object} properties\n * @param {string} oldKey\n * @param {string} newKey\n *\n * @returns {Object}\n */\nfunction updateKey(properties, oldKey, newKey) {\n  return Object.entries(properties).reduce((newProperties, entry) => {\n    const [key, value] = entry;\n    return {\n      ...newProperties,\n      [key === oldKey ? newKey : key]: value\n    };\n  }, {});\n}\n\nfunction AutoFocusSelectEntry(props) {\n  const {\n    autoFocusEntry,\n    element,\n    getValue\n  } = props;\n  const value = getValue(element);\n  const prevValue = usePrevious(value);\n  const eventBus = useService('eventBus');\n\n  // auto focus specifc other entry when selected value changed\n  useEffect(() => {\n    if (autoFocusEntry && prevValue && value !== prevValue) {\n      // @Note(pinussilvestrus): There is an issue in the properties\n      // panel so we have to wait a bit before showing the entry.\n      // Cf. https://github.com/camunda/linting/blob/4f5328e2722f73ae60ae584c5f576eaec3999cb2/lib/modeler/Linting.js#L37\n      setTimeout(() => {\n        eventBus.fire('propertiesPanel.showEntry', {\n          id: autoFocusEntry\n        });\n      });\n    }\n  }, [value, autoFocusEntry, prevValue, eventBus]);\n  return jsx(SelectEntry, {\n    ...props\n  });\n}\n\nfunction OptionsSourceSelectEntry(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  return [{\n    id: id + '-select',\n    component: ValuesSourceSelect,\n    isEdited: isEdited$3,\n    editField,\n    field\n  }];\n}\nfunction ValuesSourceSelect(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const getValue = getOptionsSource;\n  const setValue = value => {\n    let newField = field;\n    const newProperties = {};\n    newProperties[OPTIONS_SOURCES_PATHS[value]] = OPTIONS_SOURCES_DEFAULTS[value];\n    newField = editField(field, newProperties);\n    return newField;\n  };\n  const getOptionsSourceOptions = () => {\n    return Object.values(OPTIONS_SOURCES).map(valueSource => ({\n      label: OPTIONS_SOURCES_LABELS[valueSource],\n      value: valueSource\n    }));\n  };\n  return AutoFocusSelectEntry({\n    autoFocusEntry: getAutoFocusEntryId$1(field),\n    label: 'Type',\n    element: field,\n    getOptions: getOptionsSourceOptions,\n    getValue,\n    id,\n    setValue\n  });\n}\n\n// helpers //////////\n\nfunction getAutoFocusEntryId$1(field) {\n  const valuesSource = getOptionsSource(field);\n  if (valuesSource === OPTIONS_SOURCES.EXPRESSION) {\n    return 'optionsExpression-expression';\n  } else if (valuesSource === OPTIONS_SOURCES.INPUT) {\n    return 'dynamicOptions-key';\n  } else if (valuesSource === OPTIONS_SOURCES.STATIC) {\n    return 'staticOptions-0-label';\n  }\n  return null;\n}\n\nfunction InputKeyOptionsSourceEntry(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  return [{\n    id: id + '-key',\n    component: InputValuesKey,\n    isEdited: isEdited,\n    editField,\n    field\n  }];\n}\nfunction InputValuesKey(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const path = OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.INPUT];\n  const schema = '[\\n  {\\n    \"label\": \"dollar\",\\n    \"value\": \"$\"\\n  }\\n]';\n  const tooltip = jsxs(\"div\", {\n    children: [\"The input property may be an array of simple values or alternatively follow this schema:\", jsx(\"pre\", {\n      children: jsx(\"code\", {\n        children: schema\n      })\n    })]\n  });\n  const getValue = () => get(field, path, '');\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, path, value || '');\n  };\n  return TextfieldEntry({\n    debounce,\n    description: 'Define which input property to populate the values from',\n    tooltip,\n    element: field,\n    getValue,\n    id,\n    label: 'Input values key',\n    setValue,\n    validate: validate$4\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$4 = value => {\n  if (typeof value !== 'string' || value.length === 0) {\n    return 'Must not be empty.';\n  }\n  if (/\\s/.test(value)) {\n    return 'Must not contain spaces.';\n  }\n  return null;\n};\n\nfunction StaticOptionsSourceEntry(props) {\n  const {\n    editField,\n    field,\n    id: idPrefix\n  } = props;\n  const {\n    values\n  } = field;\n  const addEntry = e => {\n    e.stopPropagation();\n    const index = values.length + 1;\n    const entry = getIndexedEntry(index, values);\n    editField(field, OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.STATIC], arrayAdd(values, values.length, entry));\n  };\n  const removeEntry = entry => {\n    editField(field, OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.STATIC], without(values, entry));\n  };\n  const validateFactory = (key, getValue) => {\n    return value => {\n      if (value === key) {\n        return;\n      }\n      if (typeof value !== 'string' || value.length === 0) {\n        return 'Must not be empty.';\n      }\n      const isValueAssigned = values.find(entry => getValue(entry) === value);\n      if (isValueAssigned) {\n        return 'Must be unique.';\n      }\n    };\n  };\n  const items = values.map((entry, index) => {\n    const id = idPrefix + '-' + index;\n    return {\n      id,\n      label: entry.label,\n      entries: ValueEntry({\n        editField,\n        field,\n        idPrefix: id,\n        index,\n        validateFactory\n      }),\n      autoFocusEntry: id + '-label',\n      remove: () => removeEntry(entry)\n    };\n  });\n  return {\n    items,\n    add: addEntry\n  };\n}\n\n// helper\n\nfunction getIndexedEntry(index, values) {\n  const entry = {\n    label: 'Value',\n    value: 'value'\n  };\n  while (labelOrValueIsAlreadyAssignedForIndex(index, values)) {\n    index++;\n  }\n  if (index > 1) {\n    entry.label += ` ${index}`;\n    entry.value += `${index}`;\n  }\n  return entry;\n}\nfunction labelOrValueIsAlreadyAssignedForIndex(index, values) {\n  return values.some(existingEntry => existingEntry.label === `Value ${index}` || existingEntry.value === `value${index}`);\n}\n\nfunction AdornerEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  const onChange = key => {\n    return value => {\n      const appearance = get(field, ['appearance'], {});\n      editField(field, ['appearance'], set$1(appearance, [key], value));\n    };\n  };\n  const getValue = key => {\n    return () => {\n      return get(field, ['appearance', key]);\n    };\n  };\n  entries.push({\n    id: 'prefix-adorner',\n    component: PrefixAdorner,\n    isEdited: isEdited$6,\n    editField,\n    field,\n    onChange,\n    getValue,\n    isDefaultVisible: field => ['number', 'textfield'].includes(field.type)\n  });\n  entries.push({\n    id: 'suffix-adorner',\n    component: SuffixAdorner,\n    isEdited: isEdited$6,\n    editField,\n    field,\n    onChange,\n    getValue,\n    isDefaultVisible: field => ['number', 'textfield'].includes(field.type)\n  });\n  return entries;\n}\nfunction PrefixAdorner(props) {\n  const {\n    field,\n    id,\n    onChange,\n    getValue\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue: getValue('prefixAdorner'),\n    id,\n    label: 'Prefix',\n    setValue: onChange('prefixAdorner'),\n    singleLine: true,\n    variables\n  });\n}\nfunction SuffixAdorner(props) {\n  const {\n    field,\n    id,\n    onChange,\n    getValue\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelTemplatingEntry({\n    debounce,\n    element: field,\n    getValue: getValue('suffixAdorner'),\n    id,\n    label: 'Suffix',\n    setValue: onChange('suffixAdorner'),\n    singleLine: true,\n    variables\n  });\n}\n\nfunction ReadonlyEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const {\n    disabled\n  } = field;\n  const entries = [];\n  if (!disabled) {\n    entries.push({\n      id: 'readonly',\n      component: Readonly,\n      editField: editField,\n      field: field,\n      isEdited: isEdited$6,\n      isDefaultVisible: field => INPUTS.includes(field.type)\n    });\n  }\n  return entries;\n}\nfunction Readonly(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['readonly'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    return editField(field, path, value || false);\n  };\n  return FeelToggleSwitchEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue,\n    id,\n    label: 'Read only',\n    tooltip: 'Field cannot be edited by the end-user, but the data will still be submitted.',\n    setValue,\n    variables\n  });\n}\n\nfunction LayouterAppearanceEntry(props) {\n  const {\n    field\n  } = props;\n  if (!['group', 'dynamiclist'].includes(field.type)) {\n    return [];\n  }\n  const entries = [simpleSelectEntryFactory({\n    id: 'verticalAlignment',\n    path: ['verticalAlignment'],\n    label: 'Vertical alignment',\n    optionsArray: [{\n      value: 'start',\n      label: 'Top'\n    }, {\n      value: 'center',\n      label: 'Center'\n    }, {\n      value: 'end',\n      label: 'Bottom'\n    }],\n    props\n  })];\n  return entries;\n}\n\nfunction RepeatableEntry(props) {\n  const {\n    field,\n    getService\n  } = props;\n  const {\n    type\n  } = field;\n  const formFieldDefinition = getService('formFields').get(type);\n  if (!formFieldDefinition || !formFieldDefinition.config.repeatable) {\n    return [];\n  }\n  const entries = [simpleRangeIntegerEntryFactory({\n    id: 'defaultRepetitions',\n    path: ['defaultRepetitions'],\n    label: 'Default number of items',\n    min: 1,\n    max: 20,\n    props\n  }), simpleBoolEntryFactory({\n    id: 'allowAddRemove',\n    path: ['allowAddRemove'],\n    label: 'Allow add/delete items',\n    props\n  }), simpleBoolEntryFactory({\n    id: 'disableCollapse',\n    path: ['disableCollapse'],\n    label: 'Disable collapse',\n    props\n  })];\n  if (!field.disableCollapse) {\n    const nonCollapseItemsEntry = simpleRangeIntegerEntryFactory({\n      id: 'nonCollapsedItems',\n      path: ['nonCollapsedItems'],\n      label: 'Number of non-collapsing items',\n      min: 1,\n      defaultValue: 5,\n      props\n    });\n    entries.push(nonCollapseItemsEntry);\n  }\n  return entries;\n}\n\nfunction ConditionEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  return [{\n    id: 'conditional-hide',\n    component: Condition,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6\n  }];\n}\nfunction Condition(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['conditional', 'hide'];\n  const getValue = () => {\n    return get(field, path, '');\n  };\n  const setValue = value => {\n    if (!value) {\n      return editField(field, 'conditional', undefined);\n    }\n    return editField(field, 'conditional', {\n      hide: value\n    });\n  };\n  let label = 'Hide if';\n  let description = 'Condition under which the field is hidden';\n\n  // special case for expression fields which do not render\n  if (field.type === 'expression') {\n    label = 'Deactivate if';\n    description = 'Condition under which the field is deactivated';\n  }\n  return FeelEntry({\n    debounce,\n    description,\n    element: field,\n    feel: 'required',\n    getValue,\n    id,\n    label,\n    setValue,\n    variables\n  });\n}\n\nfunction OptionsExpressionEntry(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  return [{\n    id: id + '-expression',\n    component: OptionsExpression,\n    isEdited: isEdited$6,\n    editField,\n    field\n  }];\n}\nfunction OptionsExpression(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = OPTIONS_SOURCES_PATHS[OPTIONS_SOURCES.EXPRESSION];\n  const schema = '[\\n  {\\n    \"label\": \"dollar\",\\n    \"value\": \"$\"\\n  }\\n]';\n  const tooltip = jsxs(\"div\", {\n    children: [\"The expression may result in an array of simple values or alternatively follow this schema:\", jsx(\"pre\", {\n      children: jsx(\"code\", {\n        children: schema\n      })\n    })]\n  });\n  const getValue = () => get(field, path, '');\n  const setValue = value => editField(field, path, value || '');\n  return FeelEntry({\n    debounce,\n    description: 'Define an expression to populate the options from.',\n    tooltip,\n    element: field,\n    feel: 'required',\n    getValue,\n    id,\n    label: 'Options expression',\n    setValue,\n    variables\n  });\n}\n\nfunction TableDataSourceEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'dataSource',\n    component: Source,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'table'\n  });\n  return entries;\n}\nfunction Source(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const path = ['dataSource'];\n  const getValue = () => {\n    return get(field, path, field.id);\n  };\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, path, value);\n  };\n  return FeelTemplatingEntry({\n    debounce,\n    description: 'Specify the source from which to populate the table',\n    element: field,\n    feel: 'required',\n    getValue,\n    id,\n    label: 'Data source',\n    tooltip: 'Enter a form input variable that contains the data for the table or define an expression to populate the data dynamically.',\n    setValue,\n    singleLine: true,\n    variables,\n    validate: validate$3\n  });\n}\n\n// helper ////////////////\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$3 = value => {\n  if (!isString(value) || value.length === 0) {\n    return 'Must not be empty.';\n  }\n  if (value.startsWith('=')) {\n    return null;\n  }\n  if (!isValidDotPath(value)) {\n    return 'Must be a variable or a dot separated path.';\n  }\n  if (hasIntegerPathSegment(value)) {\n    return 'Must not contain numerical path segments.';\n  }\n  return null;\n};\n\nfunction PaginationEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'pagination',\n    component: Pagination,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$8,\n    isDefaultVisible: field => field.type === 'table'\n  });\n  return entries;\n}\nfunction Pagination(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const defaultRowCount = 10;\n  const path = ['rowCount'];\n  const getValue = () => {\n    return isNumber(get(field, path));\n  };\n\n  /**\n   * @param {boolean} value\n   */\n  const setValue = value => {\n    value ? editField(field, path, defaultRowCount) : editField(field, path, undefined);\n  };\n  return ToggleSwitchEntry({\n    element: field,\n    getValue,\n    id,\n    label: 'Pagination',\n    inline: true,\n    setValue\n  });\n}\n\nconst path$2 = ['rowCount'];\nfunction RowCountEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: 'rowCount',\n    component: RowCount,\n    isEdited: isEdited$7,\n    editField,\n    field,\n    isDefaultVisible: field => field.type === 'table' && isNumber(get(field, path$2))\n  });\n  return entries;\n}\nfunction RowCount(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const getValue = () => get(field, path$2);\n\n  /**\n   * @param {number|void} value\n   * @param {string|null} error\n   * @returns {void}\n   */\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, path$2, value);\n  };\n  return NumberFieldEntry({\n    debounce,\n    label: 'Number of rows per page',\n    element: field,\n    id,\n    getValue,\n    setValue,\n    validate: validate$2\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$2 = value => {\n  if (isNil(value)) {\n    return null;\n  }\n  if (!isNumber(value)) {\n    return 'Must be number';\n  }\n  if (!Number.isInteger(value)) {\n    return 'Should be an integer.';\n  }\n  if (value < 1) {\n    return 'Should be greater than zero.';\n  }\n  return null;\n};\n\nconst OPTIONS = {\n  static: {\n    label: 'List of items',\n    value: 'static'\n  },\n  expression: {\n    label: 'Expression',\n    value: 'expression'\n  }\n};\nconst SELECT_OPTIONS = Object.values(OPTIONS);\nconst COLUMNS_PATH = ['columns'];\nconst COLUMNS_EXPRESSION_PATH = ['columnsExpression'];\nfunction HeadersSourceSelectEntry(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  return [{\n    id: id + '-select',\n    component: HeadersSourceSelect,\n    isEdited: isEdited$3,\n    editField,\n    field\n  }];\n}\nfunction HeadersSourceSelect(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n\n  /**\n   * @returns {string|void}\n   */\n  const getValue = () => {\n    const columns = get(field, COLUMNS_PATH);\n    const columnsExpression = get(field, COLUMNS_EXPRESSION_PATH);\n    if (isString(columnsExpression)) {\n      return OPTIONS.expression.value;\n    }\n    if (isArray(columns)) {\n      return OPTIONS.static.value;\n    }\n  };\n\n  /**\n   * @param {string|void} value\n   */\n  const setValue = value => {\n    switch (value) {\n      case OPTIONS.static.value:\n        editField(field, {\n          columns: [{\n            label: 'Column',\n            key: 'inputVariable'\n          }]\n        });\n        break;\n      case OPTIONS.expression.value:\n        editField(field, {\n          columnsExpression: '='\n        });\n        break;\n    }\n  };\n  const getValuesSourceOptions = () => {\n    return SELECT_OPTIONS;\n  };\n  return AutoFocusSelectEntry({\n    autoFocusEntry: getAutoFocusEntryId(field),\n    label: 'Type',\n    element: field,\n    getOptions: getValuesSourceOptions,\n    getValue,\n    id,\n    setValue\n  });\n}\n\n// helpers //////////\n\nfunction getAutoFocusEntryId(field) {\n  const columns = get(field, COLUMNS_PATH);\n  const columnsExpression = get(field, COLUMNS_EXPRESSION_PATH);\n  if (isString(columnsExpression)) {\n    return `${field.id}-columnsExpression`;\n  }\n  if (isArray(columns)) {\n    return `${field.id}-columns-0-label`;\n  }\n  return null;\n}\n\nconst PATH = ['columnsExpression'];\nfunction ColumnsExpressionEntry(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const entries = [];\n  entries.push({\n    id: `${field.id}-columnsExpression`,\n    component: ColumnsExpression,\n    editField: editField,\n    field: field,\n    isEdited: isEdited$6,\n    isDefaultVisible: field => field.type === 'table' && isString(get(field, PATH))\n  });\n  return entries;\n}\nfunction ColumnsExpression(props) {\n  const {\n    editField,\n    field,\n    id\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  const getValue = () => {\n    return get(field, PATH);\n  };\n\n  /**\n   * @param {string|void} value\n   * @param {string|void} error\n   * @returns {void}\n   */\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    editField(field, PATH, value);\n  };\n  const schema = '[\\n  {\\n    \"key\": \"column_1\",\\n    \"label\": \"Column 1\"\\n  }\\n]';\n  const tooltip = jsxs(\"div\", {\n    children: [\"The expression may result in an array of simple values or alternatively follow this schema:\", jsx(\"pre\", {\n      children: jsx(\"code\", {\n        children: schema\n      })\n    })]\n  });\n  return FeelTemplatingEntry({\n    debounce,\n    description: 'Specify an expression to populate column items',\n    element: field,\n    feel: 'required',\n    getValue,\n    id,\n    label: 'Expression',\n    tooltip,\n    setValue,\n    singleLine: true,\n    variables,\n    validate: validate$1\n  });\n}\n\n// helpers //////////\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nconst validate$1 = value => {\n  if (!isString(value) || value.length === 0 || value === '=') {\n    return 'Must not be empty.';\n  }\n  return null;\n};\n\nconst path$1 = 'columns';\nconst labelPath = 'label';\nconst keyPath = 'key';\nfunction ColumnEntry(props) {\n  const {\n    editField,\n    field,\n    idPrefix,\n    index\n  } = props;\n  const entries = [{\n    component: Label,\n    editField,\n    field,\n    id: idPrefix + '-label',\n    idPrefix,\n    index\n  }, {\n    component: Key,\n    editField,\n    field,\n    id: idPrefix + '-key',\n    idPrefix,\n    index\n  }];\n  return entries;\n}\nfunction Label(props) {\n  const {\n    editField,\n    field,\n    id,\n    index\n  } = props;\n  const debounce = useService('debounce');\n\n  /**\n   * @param {string|void} value\n   * @param {string|void} error\n   * @returns {void}\n   */\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const columns = get(field, [path$1]);\n    editField(field, path$1, set$1(columns, [index, labelPath], value));\n  };\n  const getValue = () => {\n    return get(field, [path$1, index, labelPath]);\n  };\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Label',\n    setValue\n  });\n}\nfunction Key(props) {\n  const {\n    editField,\n    field,\n    id,\n    index\n  } = props;\n  const debounce = useService('debounce');\n\n  /**\n   * @param {string|void} value\n   * @param {string|void} error\n   * @returns {void}\n   */\n  const setValue = (value, error) => {\n    if (error) {\n      return;\n    }\n    const columns = get(field, [path$1]);\n    editField(field, path$1, set$1(columns, [index, keyPath], value));\n  };\n  const getValue = () => {\n    return get(field, [path$1, index, keyPath]);\n  };\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue,\n    id,\n    label: 'Key',\n    setValue,\n    validate\n  });\n}\n\n// helpers //////////////////////\n\n/**\n * @param {string|void} value\n * @returns {string|null}\n */\nfunction validate(value) {\n  if (!isString(value) || value.length === 0) {\n    return 'Must not be empty.';\n  }\n  return null;\n}\n\nconst path = ['columns'];\nfunction StaticColumnsSourceEntry(props) {\n  const {\n    editField,\n    field,\n    id: idPrefix\n  } = props;\n  const {\n    columns\n  } = field;\n  const addEntry = event => {\n    event.stopPropagation();\n    const entry = {\n      label: 'Column',\n      key: 'inputVariable'\n    };\n    editField(field, path, arrayAdd(columns, columns.length, entry));\n  };\n  const removeEntry = entry => {\n    editField(field, path, without(columns, entry));\n  };\n  const items = columns.map((entry, index) => {\n    const id = `${idPrefix}-${index}`;\n    return {\n      id,\n      label: entry.label || entry.key,\n      entries: ColumnEntry({\n        editField,\n        field,\n        idPrefix: id,\n        index\n      }),\n      autoFocusEntry: `${id}-label`,\n      remove: () => removeEntry(entry)\n    };\n  });\n  return {\n    items,\n    add: addEntry\n  };\n}\n\nfunction GeneralGroup(field, editField, getService) {\n  const entries = [...IdEntry({\n    field,\n    editField\n  }), ...LabelEntry({\n    field,\n    editField\n  }), ...DescriptionEntry({\n    field,\n    editField\n  }), ...KeyEntry({\n    field,\n    editField,\n    getService\n  }), ...PathEntry({\n    field,\n    editField,\n    getService\n  }), ...RepeatableEntry({\n    field,\n    editField,\n    getService\n  }), ...DefaultValueEntry({\n    field,\n    editField\n  }), ...ActionEntry({\n    field,\n    editField\n  }), ...DateTimeEntry({\n    field,\n    editField\n  }), ...TextEntry({\n    field,\n    editField,\n    getService\n  }), ...HtmlEntry({\n    field,\n    editField,\n    getService\n  }), ...IFrameUrlEntry({\n    field,\n    editField\n  }), ...IFrameHeightEntry({\n    field,\n    editField\n  }), ...HeightEntry({\n    field,\n    editField\n  }), ...NumberEntries({\n    field,\n    editField\n  }), ...ExpressionFieldEntries({\n    field,\n    editField\n  }), ...ImageSourceEntry({\n    field,\n    editField\n  }), ...AltTextEntry({\n    field,\n    editField\n  }), ...SelectEntries({\n    field,\n    editField\n  }), ...DisabledEntry({\n    field,\n    editField\n  }), ...ReadonlyEntry({\n    field,\n    editField\n  }), ...TableDataSourceEntry({\n    field,\n    editField\n  }), ...PaginationEntry({\n    field,\n    editField\n  }), ...RowCountEntry({\n    field,\n    editField\n  })];\n  if (entries.length === 0) {\n    return null;\n  }\n  return {\n    id: 'general',\n    label: 'General',\n    entries\n  };\n}\n\nfunction SerializationGroup(field, editField) {\n  const entries = [...NumberSerializationEntry({\n    field,\n    editField\n  }), ...DateTimeFormatEntry({\n    field,\n    editField\n  })];\n  if (!entries.length) {\n    return null;\n  }\n  return {\n    id: 'serialization',\n    label: 'Serialization',\n    entries\n  };\n}\n\nfunction ConstraintsGroup(field, editField) {\n  const entries = [...DateTimeConstraintsEntry({\n    field,\n    editField\n  })];\n  if (!entries.length) {\n    return null;\n  }\n  return {\n    id: 'constraints',\n    label: 'Constraints',\n    entries\n  };\n}\n\nconst VALIDATION_TYPE_OPTIONS = {\n  custom: {\n    value: '',\n    label: 'Custom'\n  },\n  email: {\n    value: 'email',\n    label: 'Email'\n  },\n  phone: {\n    value: 'phone',\n    label: 'Phone'\n  }\n};\nfunction ValidationGroup(field, editField) {\n  const {\n    type\n  } = field;\n  const validate = get(field, ['validate'], {});\n  const isCustomValidation = [undefined, VALIDATION_TYPE_OPTIONS.custom.value].includes(validate.validationType);\n  const onChange = key => {\n    return value => {\n      const validate = get(field, ['validate'], {});\n      editField(field, ['validate'], set$1(validate, [key], value));\n    };\n  };\n  const getValue = key => {\n    return () => {\n      return get(field, ['validate', key]);\n    };\n  };\n  let entries = [{\n    id: 'required',\n    component: Required,\n    getValue,\n    field,\n    isEdited: isEdited$5,\n    onChange,\n    isDefaultVisible: field => INPUTS.includes(field.type)\n  }];\n  entries.push({\n    id: 'validationType',\n    component: ValidationType,\n    getValue,\n    field,\n    editField,\n    isEdited: isEdited,\n    onChange,\n    isDefaultVisible: field => field.type === 'textfield'\n  });\n  entries.push({\n    id: 'minLength',\n    component: MinLength,\n    getValue,\n    field,\n    isEdited: isEdited$6,\n    onChange,\n    isDefaultVisible: field => INPUTS.includes(field.type) && (type === 'textarea' || type === 'textfield' && isCustomValidation)\n  }, {\n    id: 'maxLength',\n    component: MaxLength,\n    getValue,\n    field,\n    isEdited: isEdited$6,\n    onChange,\n    isDefaultVisible: field => INPUTS.includes(field.type) && (type === 'textarea' || type === 'textfield' && isCustomValidation)\n  });\n  entries.push({\n    id: 'pattern',\n    component: Pattern,\n    getValue,\n    field,\n    isEdited: isEdited,\n    onChange,\n    isDefaultVisible: field => INPUTS.includes(field.type) && type === 'textfield' && isCustomValidation\n  });\n  entries.push({\n    id: 'min',\n    component: Min,\n    getValue,\n    field,\n    isEdited: isEdited$6,\n    onChange,\n    isDefaultVisible: field => field.type === 'number'\n  }, {\n    id: 'max',\n    component: Max,\n    getValue,\n    field,\n    isEdited: isEdited$6,\n    onChange,\n    isDefaultVisible: field => field.type === 'number'\n  });\n  return {\n    id: 'validation',\n    label: 'Validation',\n    entries\n  };\n}\nfunction Required(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  return CheckboxEntry({\n    element: field,\n    getValue: getValue('required'),\n    id,\n    label: 'Required',\n    setValue: onChange('required')\n  });\n}\nfunction MinLength(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelNumberEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue: getValue('minLength'),\n    id,\n    label: 'Minimum length',\n    min: 0,\n    setValue: onChange('minLength'),\n    variables\n  });\n}\nfunction MaxLength(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelNumberEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    getValue: getValue('maxLength'),\n    id,\n    label: 'Maximum length',\n    min: 0,\n    setValue: onChange('maxLength'),\n    variables\n  });\n}\nfunction Pattern(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  return TextfieldEntry({\n    debounce,\n    element: field,\n    getValue: getValue('pattern'),\n    id,\n    label: 'Custom regular expression',\n    setValue: onChange('pattern')\n  });\n}\nfunction Min(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelNumberEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    id,\n    label: 'Minimum',\n    step: 'any',\n    getValue: getValue('min'),\n    setValue: onChange('min'),\n    variables\n  });\n}\nfunction Max(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  const variables = useVariables().map(name => ({\n    name\n  }));\n  return FeelNumberEntry({\n    debounce,\n    element: field,\n    feel: 'optional',\n    id,\n    label: 'Maximum',\n    step: 'any',\n    getValue: getValue('max'),\n    setValue: onChange('max'),\n    variables\n  });\n}\nfunction ValidationType(props) {\n  const {\n    field,\n    getValue,\n    id,\n    onChange\n  } = props;\n  const debounce = useService('debounce');\n  const setValue = validationType => {\n    onChange('validationType')(validationType || undefined);\n  };\n  return SelectEntry({\n    debounce,\n    element: field,\n    getValue: getValue('validationType'),\n    id,\n    label: 'Validation pattern',\n    setValue,\n    getOptions: () => Object.values(VALIDATION_TYPE_OPTIONS),\n    tooltip: getValue('validationType')() === VALIDATION_TYPE_OPTIONS.phone.value ? 'The built-in phone validation pattern is based on the E.164 standard with no spaces. Ex: +491234567890' : undefined\n  });\n}\n\nfunction OptionsGroups(field, editField, getService) {\n  const {\n    type\n  } = field;\n  const formFields = getService('formFields');\n  const fieldDefinition = formFields.get(type).config;\n  if (!OPTIONS_INPUTS.includes(type) && !hasOptionsGroupsConfigured(fieldDefinition)) {\n    return [];\n  }\n  const context = {\n    editField,\n    field\n  };\n  const id = 'valuesSource';\n\n  /**\n   * @type {Array<Group|ListGroup>}\n   */\n  const groups = [{\n    id,\n    label: 'Options source',\n    tooltip: getValuesTooltip(),\n    component: Group,\n    entries: OptionsSourceSelectEntry({\n      ...context,\n      id\n    })\n  }];\n  const valuesSource = getOptionsSource(field);\n  if (valuesSource === OPTIONS_SOURCES.INPUT) {\n    const id = 'dynamicOptions';\n    groups.push({\n      id,\n      label: 'Dynamic options',\n      component: Group,\n      entries: InputKeyOptionsSourceEntry({\n        ...context,\n        id\n      })\n    });\n  } else if (valuesSource === OPTIONS_SOURCES.STATIC) {\n    const id = 'staticOptions';\n    groups.push({\n      id,\n      label: 'Static options',\n      component: ListGroup,\n      ...StaticOptionsSourceEntry({\n        ...context,\n        id\n      })\n    });\n  } else if (valuesSource === OPTIONS_SOURCES.EXPRESSION) {\n    const id = 'optionsExpression';\n    groups.push({\n      id,\n      label: 'Options expression',\n      component: Group,\n      entries: OptionsExpressionEntry({\n        ...context,\n        id\n      })\n    });\n  }\n  return groups;\n}\n\n// helpers //////////\n\nfunction getValuesTooltip() {\n  return '\"Static\" defines a constant, predefined set of form options.\\n\\n' + '\"Input data\" defines options that are populated dynamically, adjusting based on variable data for flexible responses to different conditions or inputs.\\n\\n' + '\"Expression\" defines options that are populated from a FEEL expression.';\n}\n\nfunction CustomPropertiesGroup(field, editField) {\n  const {\n    properties = {},\n    type\n  } = field;\n  if (type === 'default') {\n    return null;\n  }\n  const addEntry = event => {\n    event.stopPropagation();\n    let index = Object.keys(properties).length + 1;\n    while (`key${index}` in properties) {\n      index++;\n    }\n    editField(field, ['properties'], {\n      ...properties,\n      [`key${index}`]: 'value'\n    });\n  };\n  const validateFactory = key => {\n    return value => {\n      if (value === key) {\n        return;\n      }\n      if (typeof value !== 'string' || value.length === 0) {\n        return 'Must not be empty.';\n      }\n      if (has(properties, value)) {\n        return 'Must be unique.';\n      }\n    };\n  };\n  const items = Object.keys(properties).map((key, index) => {\n    const removeEntry = event => {\n      event.stopPropagation();\n      return editField(field, ['properties'], removeKey(properties, key));\n    };\n    const id = `property-${index}`;\n    return {\n      autoFocusEntry: id + '-key',\n      entries: CustomValueEntry({\n        editField,\n        field,\n        idPrefix: id,\n        index,\n        validateFactory\n      }),\n      id,\n      label: key || '',\n      remove: removeEntry\n    };\n  });\n  return {\n    add: addEntry,\n    component: ListGroup,\n    id: 'custom-values',\n    items,\n    label: 'Custom properties',\n    tooltip: 'Add properties directly to the form schema, useful to configure functionality in custom-built task applications and form renderers.'\n  };\n}\n\n// helpers //////////\n\n/**\n * Returns copy of object without key.\n *\n * @param {Object} properties\n * @param {string} oldKey\n *\n * @returns {Object}\n */\nfunction removeKey(properties, oldKey) {\n  return Object.entries(properties).reduce((newProperties, entry) => {\n    const [key, value] = entry;\n    if (key === oldKey) {\n      return newProperties;\n    }\n    return {\n      ...newProperties,\n      [key]: value\n    };\n  }, {});\n}\n\nfunction AppearanceGroup(field, editField, getService) {\n  const entries = [...AdornerEntry({\n    field,\n    editField\n  }), ...GroupAppearanceEntry({\n    field,\n    editField\n  }), ...LayouterAppearanceEntry({\n    field,\n    editField\n  })];\n  if (!entries.length) {\n    return null;\n  }\n  return {\n    id: 'appearance',\n    label: 'Appearance',\n    entries\n  };\n}\n\nfunction LayoutGroup(field, editField) {\n  const {\n    type\n  } = field;\n  if (type === 'default') {\n    return null;\n  }\n  const entries = [...ColumnsEntry({\n    field,\n    editField\n  })];\n  if (entries.length === 0) {\n    return null;\n  }\n  return {\n    id: 'layout',\n    label: 'Layout',\n    entries\n  };\n}\n\nfunction SecurityAttributesGroup(field, editField) {\n  const {\n    type\n  } = field;\n  if (type !== 'iframe') {\n    return null;\n  }\n  const entries = createEntries({\n    field,\n    editField\n  });\n  if (!entries.length) {\n    return null;\n  }\n  return {\n    id: 'securityAttributes',\n    label: 'Security attributes',\n    entries,\n    tooltip: getTooltip()\n  };\n}\nfunction createEntries(props) {\n  const {\n    editField,\n    field\n  } = props;\n  const securityEntries = SECURITY_ATTRIBUTES_DEFINITIONS.map(definition => {\n    const {\n      label,\n      property\n    } = definition;\n    return simpleBoolEntryFactory({\n      id: property,\n      label: label,\n      isDefaultVisible: field => field.type === 'iframe',\n      path: ['security', property],\n      props,\n      getValue: () => get(field, ['security', property]),\n      setValue: value => {\n        const security = get(field, ['security'], {});\n        editField(field, ['security'], set$1(security, [property], value));\n      }\n    });\n  });\n  return [{\n    component: Advisory\n  }, ...securityEntries];\n}\nconst Advisory = props => {\n  return jsx(\"div\", {\n    class: \"bio-properties-panel-description fjs-properties-panel-detached-description\",\n    children: \"These options can incur security risks, especially if used in combination with dynamic links. Ensure that you are aware of them, that you trust the source url and only enable what your use case requires.\"\n  });\n};\n\n// helpers //////////\n\nfunction getTooltip() {\n  return jsx(Fragment$1, {\n    children: jsxs(\"p\", {\n      children: [\"Allow the iframe to access more functionality of your browser, details regarding the various options can be found in the\", ' ', jsx(\"a\", {\n        target: \"_blank\",\n        href: \"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe\",\n        children: \"MDN iFrame documentation.\"\n      })]\n    })\n  });\n}\n\nfunction ConditionGroup(field, editField) {\n  const {\n    type\n  } = field;\n  if (type === 'default') {\n    return null;\n  }\n  const entries = [...ConditionEntry({\n    field,\n    editField\n  })];\n  return {\n    id: 'condition',\n    label: 'Condition',\n    entries\n  };\n}\n\nfunction TableHeaderGroups(field, editField) {\n  const {\n    type,\n    id: fieldId\n  } = field;\n  if (type !== 'table') {\n    return [];\n  }\n  const areStaticColumnsEnabled = isArray(get(field, ['columns']));\n\n  /**\n   * @type {Array<Group>}\n   */\n  const groups = [{\n    id: `${fieldId}-columnsSource`,\n    label: 'Headers source',\n    tooltip: TOOLTIP_TEXT,\n    component: Group,\n    entries: [...HeadersSourceSelectEntry({\n      field,\n      editField\n    }), ...ColumnsExpressionEntry({\n      field,\n      editField\n    })]\n  }];\n  if (areStaticColumnsEnabled) {\n    const id = `${fieldId}-columns`;\n    groups.push({\n      id,\n      label: 'Header items',\n      component: ListGroup,\n      ...StaticColumnsSourceEntry({\n        field,\n        editField,\n        id\n      })\n    });\n  }\n  return groups;\n}\n\n// helpers //////////\n\nconst TOOLTIP_TEXT = `\"List of items\" defines a constant, predefined set of form options.\n\n\"Expression\" defines options that are populated from a FEEL expression.\n`;\n\nclass PropertiesProvider {\n  constructor(propertiesPanel, injector) {\n    this._injector = injector;\n    propertiesPanel.registerProvider(this);\n  }\n  _filterVisibleEntries(groups, field, getService) {\n    return groups.forEach(group => {\n      const {\n        entries\n      } = group;\n      const {\n        type\n      } = field;\n      const formFields = getService('formFields');\n      const fieldDefinition = formFields.get(type).config;\n      if (!entries) {\n        return;\n      }\n      group.entries = entries.filter(entry => {\n        const {\n          isDefaultVisible\n        } = entry;\n        if (!isDefaultVisible) {\n          return true;\n        }\n        return isDefaultVisible(field) || hasEntryConfigured(fieldDefinition, entry.id);\n      });\n    });\n  }\n  getGroups(field, editField) {\n    return groups => {\n      if (!field) {\n        return groups;\n      }\n      const getService = (type, strict = true) => this._injector.get(type, strict);\n      groups = [...groups, GeneralGroup(field, editField, getService), ...OptionsGroups(field, editField, getService), ...TableHeaderGroups(field, editField), SecurityAttributesGroup(field, editField), ConditionGroup(field, editField), LayoutGroup(field, editField), AppearanceGroup(field, editField), SerializationGroup(field, editField), ConstraintsGroup(field, editField), ValidationGroup(field, editField), CustomPropertiesGroup(field, editField)].filter(group => group != null);\n      this._filterVisibleEntries(groups, field, getService);\n\n      // contract: if a group has no entries or items, it should not be displayed at all\n      return groups.filter(group => {\n        return group.items || group.entries && group.entries.length;\n      });\n    };\n  }\n}\nPropertiesProvider.$inject = ['propertiesPanel', 'injector'];\n\nconst PropertiesPanelModule = {\n  __depends__: [index],\n  __init__: ['propertiesPanel', 'propertiesProvider'],\n  propertiesPanel: ['type', PropertiesPanelRenderer],\n  propertiesProvider: ['type', PropertiesProvider]\n};\n\n/**\n * Manages the rendering of visual plugins.\n * @constructor\n * @param {Object} eventBus - Event bus for the application.\n */\nclass RenderInjector extends SectionModuleBase {\n  constructor(eventBus) {\n    super(eventBus, 'renderInjector');\n    this._eventBus = eventBus;\n    this.registeredRenderers = [];\n  }\n\n  /**\n   * Inject a new renderer into the injector.\n   * @param {string} identifier - Identifier for the renderer.\n   * @param {Function} Renderer - The renderer function.\n   */\n  attachRenderer(identifier, Renderer) {\n    this.registeredRenderers = [...this.registeredRenderers, {\n      identifier,\n      Renderer\n    }];\n  }\n\n  /**\n   * Detach a renderer from the by key injector.\n   * @param {string} identifier - Identifier for the renderer.\n   */\n  detachRenderer(identifier) {\n    this.registeredRenderers = this.registeredRenderers.filter(r => r.identifier !== identifier);\n  }\n\n  /**\n   * Returns the registered renderers.\n   * @returns {Array} Array of registered renderers.\n   */\n  fetchRenderers() {\n    return this.registeredRenderers;\n  }\n}\nRenderInjector.$inject = ['eventBus'];\n\nconst RenderInjectionModule = {\n  __init__: ['renderInjector'],\n  renderInjector: ['type', RenderInjector]\n};\n\nvar _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nvar SvgRepeat = function SvgRepeat(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 16,\n    height: 16,\n    fill: \"none\"\n  }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"currentColor\",\n    d: \"M3 3h10.086l-1.793-1.793L12 .5l3 3-3 3-.707-.707L13.086 4H3v3.5H2V4a1 1 0 0 1 1-1M4.707 10.207 2.914 12H13V8.5h1V12a1 1 0 0 1-1 1H2.914l1.793 1.793L4 15.5l-3-3 3-3z\"\n  })));\n};\n\nclass EditorRepeatRenderManager {\n  constructor(formFields, formFieldRegistry) {\n    this._formFields = formFields;\n    this._formFieldRegistry = formFieldRegistry;\n    this.RepeatFooter = this.RepeatFooter.bind(this);\n  }\n\n  /**\n   * Checks whether a field should be repeatable.\n   *\n   * @param {string} id - The id of the field to check\n   * @returns {boolean} - True if repeatable, false otherwise\n   */\n  isFieldRepeating(id) {\n    if (!id) {\n      return false;\n    }\n    const formField = this._formFieldRegistry.get(id);\n    const formFieldDefinition = this._formFields.get(formField.type);\n    return formFieldDefinition.config.repeatable && formField.isRepeating;\n  }\n  RepeatFooter() {\n    return jsxs(\"div\", {\n      className: \"fjs-repeat-render-footer\",\n      children: [jsx(SvgRepeat, {}), jsx(\"span\", {\n        children: \"Repeatable\"\n      })]\n    });\n  }\n}\nEditorRepeatRenderManager.$inject = ['formFields', 'formFieldRegistry'];\n\nconst RepeatRenderModule = {\n  __init__: ['repeatRenderManager'],\n  repeatRenderManager: ['type', EditorRepeatRenderManager]\n};\n\nconst ids = new Ids([32, 36, 1]);\n\n/**\n * @typedef { import('./types').Injector } Injector\n * @typedef { import('./types').Module } Module\n * @typedef { import('./types').Schema } Schema\n *\n * @typedef { import('./types').FormEditorOptions } FormEditorOptions\n * @typedef { import('./types').FormEditorProperties } FormEditorProperties\n *\n * @typedef { {\n *   properties: FormEditorProperties,\n *   schema: Schema\n * } } State\n *\n * @typedef { (type:string, priority:number, handler:Function) => void } OnEventWithPriority\n * @typedef { (type:string, handler:Function) => void } OnEventWithOutPriority\n * @typedef { OnEventWithPriority & OnEventWithOutPriority } OnEventType\n */\n\n/**\n * The form editor.\n */\nclass FormEditor {\n  /**\n   * @constructor\n   * @param {FormEditorOptions} options\n   */\n  constructor(options = {}) {\n    /**\n     * @public\n     * @type {OnEventType}\n     */\n    this.on = this._onEvent;\n\n    /**\n     * @public\n     * @type {String}\n     */\n    this._id = ids.next();\n\n    /**\n     * @private\n     * @type {Element}\n     */\n    this._container = createFormContainer();\n    this._container.setAttribute('input-handle-modified-keys', 'z,y');\n    const {\n      container,\n      exporter,\n      injector = this._createInjector(options, this._container),\n      properties = {}\n    } = options;\n\n    /**\n     * @private\n     * @type {any}\n     */\n    this.exporter = exporter;\n\n    /**\n     * @private\n     * @type {State}\n     */\n    this._state = {\n      properties,\n      schema: null\n    };\n    this.get = injector.get;\n    this.invoke = injector.invoke;\n    this.get('eventBus').fire('form.init');\n    if (container) {\n      this.attachTo(container);\n    }\n  }\n  clear() {\n    // clear form services\n    this._emit('diagram.clear');\n\n    // clear diagram services (e.g. EventBus)\n    this._emit('form.clear');\n  }\n  destroy() {\n    // destroy form services\n    this.get('eventBus').fire('form.destroy');\n\n    // destroy diagram services (e.g. EventBus)\n    this.get('eventBus').fire('diagram.destroy');\n    this._detach(false);\n  }\n\n  /**\n   * @param {Schema} schema\n   *\n   * @return {Promise<{ warnings: Array<any> }>}\n   */\n  importSchema(schema) {\n    return new Promise((resolve, reject) => {\n      try {\n        this.clear();\n        const {\n          schema: importedSchema,\n          warnings\n        } = this.get('importer').importSchema(schema);\n        this._setState({\n          schema: importedSchema\n        });\n        this._emit('import.done', {\n          warnings\n        });\n        return resolve({\n          warnings\n        });\n      } catch (error) {\n        this._emit('import.done', {\n          error: error,\n          warnings: error.warnings || []\n        });\n        return reject(error);\n      }\n    });\n  }\n\n  /**\n   * @returns {Schema}\n   */\n  saveSchema() {\n    return this.getSchema();\n  }\n\n  /**\n   * @returns {Schema}\n   */\n  getSchema() {\n    const {\n      schema\n    } = this._getState();\n    return exportSchema(schema, this.exporter, schemaVersion);\n  }\n\n  /**\n   * @param {Element|string} parentNode\n   */\n  attachTo(parentNode) {\n    if (!parentNode) {\n      throw new Error('parentNode required');\n    }\n    this.detach();\n    if (isString(parentNode)) {\n      parentNode = document.querySelector(parentNode);\n    }\n    const container = this._container;\n    parentNode.appendChild(container);\n    this._emit('attach');\n  }\n  detach() {\n    this._detach();\n  }\n\n  /**\n   * @internal\n   *\n   * @param {boolean} [emit]\n   */\n  _detach(emit = true) {\n    const container = this._container,\n      parentNode = container.parentNode;\n    if (!parentNode) {\n      return;\n    }\n    if (emit) {\n      this._emit('detach');\n    }\n    parentNode.removeChild(container);\n  }\n\n  /**\n   * @param {any} property\n   * @param {any} value\n   */\n  setProperty(property, value) {\n    const properties = set$1(this._getState().properties, [property], value);\n    this._setState({\n      properties\n    });\n  }\n\n  /**\n   * @param {string} type\n   * @param {Function} handler\n   */\n  off(type, handler) {\n    this.get('eventBus').off(type, handler);\n  }\n\n  /**\n   * @internal\n   *\n   * @param {FormEditorOptions} options\n   * @param {Element} container\n   *\n   * @returns {Injector}\n   */\n  _createInjector(options, container) {\n    const {\n      modules = this._getModules(),\n      additionalModules = [],\n      renderer = {},\n      ...config\n    } = options;\n    const enrichedConfig = {\n      ...config,\n      renderer: {\n        ...renderer,\n        container\n      }\n    };\n    return createInjector([{\n      config: ['value', enrichedConfig]\n    }, {\n      formEditor: ['value', this]\n    }, CoreModule, ...modules, ...additionalModules]);\n  }\n\n  /**\n   * @internal\n   */\n  _emit(type, data) {\n    this.get('eventBus').fire(type, data);\n  }\n\n  /**\n   * @internal\n   */\n  _getState() {\n    return this._state;\n  }\n\n  /**\n   * @internal\n   */\n  _setState(state) {\n    this._state = {\n      ...this._state,\n      ...state\n    };\n    this._emit('changed', this._getState());\n  }\n\n  /**\n   * @internal\n   */\n  _getModules() {\n    return [ModelingModule, EditorActionsModule, FormEditorKeyboardModule, DraggingModule, SelectionModule, PaletteModule, EditorExpressionLanguageModule, MarkdownRendererModule, PropertiesPanelModule, RenderInjectionModule, RepeatRenderModule];\n  }\n\n  /**\n   * @internal\n   */\n  _onEvent(type, priority, handler) {\n    this.get('eventBus').on(type, priority, handler);\n  }\n}\n\n// helpers //////////\n\nfunction exportSchema(schema, exporter, schemaVersion) {\n  const exportDetails = exporter ? {\n    exporter\n  } : {};\n  const cleanedSchema = clone(schema, (name, value) => {\n    if (['_parent', '_path'].includes(name)) {\n      return undefined;\n    }\n    return value;\n  });\n  return {\n    ...cleanedSchema,\n    ...exportDetails,\n    schemaVersion\n  };\n}\n\n/**\n * @typedef { import('./types').CreateFormEditorOptions } CreateFormEditorOptions\n */\n\n/**\n * Create a form editor.\n *\n * @param {CreateFormEditorOptions} options\n *\n * @return {Promise<FormEditor>}\n */\nfunction createFormEditor(options) {\n  const {\n    schema,\n    ...rest\n  } = options;\n  const formEditor = new FormEditor(rest);\n  return formEditor.importSchema(schema).then(() => {\n    return formEditor;\n  });\n}\n\nexport { FormEditor, createFormEditor, useDebounce, usePrevious$1 as usePrevious, useService as usePropertiesPanelService, useService$1 as useService, useVariables };\n//# sourceMappingURL=index.es.js.map\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import{h as r,Component as o,render as t}from\"preact\";export{h,render,Component}from\"preact\";import e from\"htm\";var m=e.bind(r);export{m as html};\n","import {\n  Errors,\n  FormContext,\n  Numberfield,\n  Description,\n  Label,\n} from \"@bpmn-io/form-js\";\nimport { html, useContext } from \"diagram-js/lib/ui\";\nimport classNames from \"classnames\";\nimport RangeIcon from \"../../../assets/svg/range.svg\";\nimport \"../../../assets/css/range.css\";\n\nexport const rangeType = \"range\";\n\n/*\n * This is the rendering part of the custom field. We use `htm` to\n * to render our components without the need of extra JSX transpilation.\n */\nexport function RangeRenderer(props) {\n  // #region Constants\n  const { disabled, errors = [], field, readonly, value } = props;\n  const { description, range = {}, id, label } = field;\n  const { min, max, step } = range;\n  const { formId } = useContext(FormContext);\n  const errorMessageId =\n    errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;\n  // #endregion\n\n  const onChange = ({ target }) => {\n    props.onChange({\n      field,\n      value: Number(target.value),\n    });\n  };\n\n  return html`<div class=${formFieldClasses(rangeType)}>\n    <${Label} id=${prefixId(id, formId)} label=${label} />\n    <div class=\"range-group\">\n      <input\n        type=\"range\"\n        disabled=${disabled}\n        id=${prefixId(id, formId)}\n        max=${max}\n        min=${min}\n        onInput=${onChange}\n        readonly=${readonly}\n        value=${value}\n        step=${step}\n      />\n      <div class=\"range-value\">${value}</div>\n    </div>\n    <${Description} description=${description} />\n    <${Errors} errors=${errors} id=${errorMessageId} />\n  </div>`;\n}\n\n/*\n * This is the configuration part of the custom field. It defines\n * the schema type, UI label and icon, palette group, properties panel entries\n * and much more.\n */\nRangeRenderer.config = {\n  /* we can extend the default configuration of existing fields */\n  ...Numberfield.config,\n  type: rangeType,\n  label: \"Range\",\n  iconUrl: `data:image/svg+xml,${encodeURIComponent(RangeIcon)}`,\n  propertiesPanelEntries: [\n    \"key\",\n    \"label\",\n    \"description\",\n    \"min\",\n    \"max\",\n    \"disabled\",\n    \"readonly\",\n  ],\n};\n\nfunction formFieldClasses(\n  type,\n  { errors = [], disabled = false, readonly = false } = {}\n) {\n  if (!type) {\n    throw new Error(\"type required\");\n  }\n\n  return classNames(\"fjs-form-field\", `fjs-form-field-${type}`, {\n    \"fjs-has-errors\": errors.length > 0,\n    \"fjs-disabled\": disabled,\n    \"fjs-readonly\": readonly,\n  });\n}\n\nfunction prefixId(id, formId) {\n  if (formId) {\n    return `fjs-form-${formId}-${id}`;\n  }\n\n  return `fjs-form-${id}`;\n}\n","(()=>{\"use strict\";var e,v={},b={};function a(e){var n=b[e];if(void 0!==n)return n.exports;var r=b[e]={exports:{}};return v[e](r,r.exports,a),r.exports}a.m=v,e=[],a.O=(n,r,c,o)=>{if(!r){var u=1/0;for(f=0;f<e.length;f++){for(var[r,c,o]=e[f],s=!0,t=0;t<r.length;t++)(!1&o||u>=o)&&Object.keys(a.O).every(d=>a.O[d](r[t]))?r.splice(t--,1):(s=!1,o<u&&(u=o));if(s){e.splice(f--,1);var l=c();void 0!==l&&(n=l)}}return n}o=o||0;for(var f=e.length;f>0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[r,c,o]},a.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return a.d(n,{a:n}),n},a.d=(e,n)=>{for(var r in n)a.o(n,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},a.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={121:0};a.O.j=c=>0===e[c];var n=(c,o)=>{var t,l,[f,u,s]=o,_=0;if(f.some(p=>0!==e[p])){for(t in u)a.o(u,t)&&(a.m[t]=u[t]);if(s)var i=s(a)}for(c&&c(o);_<f.length;_++)a.o(e,l=f[_])&&e[l]&&e[l][0](),e[l]=0;return a.O(i)},r=self.webpackChunk_winconf_webcomponent=self.webpackChunk_winconf_webcomponent||[];r.forEach(n.bind(null,0)),r.push=n.bind(null,r.push.bind(r))})()})();(self.webpackChunk_winconf_webcomponent=self.webpackChunk_winconf_webcomponent||[]).push([[792],{716:(Tt,Wt,it)=>{var xe;!function(ve,Te,Ne,Pe){\"use strict\";var A,le=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],Oe=Te.createElement(\"div\"),te=\"function\",z=Math.round,F=Math.abs,D=Date.now;function g(b,T,k){return setTimeout(P(b,k),T)}function _(b,T,k){return!!Array.isArray(b)&&(E(b,k[T],k),!0)}function E(b,T,k){var Y;if(b)if(b.forEach)b.forEach(T,k);else if(b.length!==Pe)for(Y=0;Y<b.length;)T.call(k,b[Y],Y,b),Y++;else for(Y in b)b.hasOwnProperty(Y)&&T.call(k,b[Y],Y,b)}function y(b,T,k){var Y=\"DEPRECATED METHOD: \"+T+\"\\n\"+k+\" AT \\n\";return function(){var he=new Error(\"get-stack-trace\"),Ie=he&&he.stack?he.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",ot=ve.console&&(ve.console.warn||ve.console.log);return ot&&ot.call(ve.console,Y,Ie),b.apply(this,arguments)}}A=\"function\"!=typeof Object.assign?function(T){if(T===Pe||null===T)throw new TypeError(\"Cannot convert undefined or null to object\");for(var k=Object(T),Y=1;Y<arguments.length;Y++){var he=arguments[Y];if(he!==Pe&&null!==he)for(var Ie in he)he.hasOwnProperty(Ie)&&(k[Ie]=he[Ie])}return k}:Object.assign;var x=y(function(T,k,Y){for(var he=Object.keys(k),Ie=0;Ie<he.length;)(!Y||Y&&T[he[Ie]]===Pe)&&(T[he[Ie]]=k[he[Ie]]),Ie++;return T},\"extend\",\"Use `assign`.\"),M=y(function(T,k){return x(T,k,!0)},\"merge\",\"Use `assign`.\");function w(b,T,k){var he,Y=T.prototype;(he=b.prototype=Object.create(Y)).constructor=b,he._super=Y,k&&A(he,k)}function P(b,T){return function(){return b.apply(T,arguments)}}function j(b,T){return typeof b==te?b.apply(T&&T[0]||Pe,T):b}function Z(b,T){return b===Pe?T:b}function $(b,T,k){E(ie(T),function(Y){b.addEventListener(Y,k,!1)})}function N(b,T,k){E(ie(T),function(Y){b.removeEventListener(Y,k,!1)})}function B(b,T){for(;b;){if(b==T)return!0;b=b.parentNode}return!1}function U(b,T){return b.indexOf(T)>-1}function ie(b){return b.trim().split(/\\s+/g)}function W(b,T,k){if(b.indexOf&&!k)return b.indexOf(T);for(var Y=0;Y<b.length;){if(k&&b[Y][k]==T||!k&&b[Y]===T)return Y;Y++}return-1}function ut(b){return Array.prototype.slice.call(b,0)}function V(b,T,k){for(var Y=[],he=[],Ie=0;Ie<b.length;){var ot=T?b[Ie][T]:b[Ie];W(he,ot)<0&&Y.push(b[Ie]),he[Ie]=ot,Ie++}return k&&(Y=T?Y.sort(function(fn,In){return fn[T]>In[T]}):Y.sort()),Y}function O(b,T){for(var k,Y,he=T[0].toUpperCase()+T.slice(1),Ie=0;Ie<le.length;){if((Y=(k=le[Ie])?k+he:T)in b)return Y;Ie++}return Pe}var K=1;function J(b){var T=b.ownerDocument||b;return T.defaultView||T.parentWindow||ve}var fe=\"ontouchstart\"in ve,S=O(ve,\"PointerEvent\")!==Pe,Q=fe&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),re=\"touch\",Ye=\"mouse\",qt=25,xt=1,St=4,yn=8,cs=1,Pt=2,ls=4,Nr=8,lr=16,Xt=Pt|ls,ur=Nr|lr,ac=Xt|ur,cc=[\"x\",\"y\"],Ai=[\"clientX\",\"clientY\"];function xn(b,T){var k=this;this.manager=b,this.callback=T,this.element=b.element,this.target=b.options.inputTarget,this.domHandler=function(Y){j(b.options.enable,[b])&&k.handler(Y)},this.init()}function xo(b,T,k){var Y=k.pointers.length,he=k.changedPointers.length,Ie=T&xt&&Y-he==0,ot=T&(St|yn)&&Y-he==0;k.isFirst=!!Ie,k.isFinal=!!ot,Ie&&(b.session={}),k.eventType=T,function tp(b,T){var k=b.session,Y=T.pointers,he=Y.length;k.firstInput||(k.firstInput=Po(T)),he>1&&!k.firstMultiple?k.firstMultiple=Po(T):1===he&&(k.firstMultiple=!1);var Ie=k.firstInput,ot=k.firstMultiple,dn=ot?ot.center:Ie.center,fn=T.center=hr(Y);T.timeStamp=D(),T.deltaTime=T.timeStamp-Ie.timeStamp,T.angle=lc(dn,fn),T.distance=us(dn,fn),function np(b,T){var k=T.center,Y=b.offsetDelta||{},he=b.prevDelta||{},Ie=b.prevInput||{};(T.eventType===xt||Ie.eventType===St)&&(he=b.prevDelta={x:Ie.deltaX||0,y:Ie.deltaY||0},Y=b.offsetDelta={x:k.x,y:k.y}),T.deltaX=he.x+(k.x-Y.x),T.deltaY=he.y+(k.y-Y.y)}(k,T),T.offsetDirection=Su(T.deltaX,T.deltaY);var In=Ls(T.deltaTime,T.deltaX,T.deltaY);T.overallVelocityX=In.x,T.overallVelocityY=In.y,T.overallVelocity=F(In.x)>F(In.y)?In.x:In.y,T.scale=ot?function rp(b,T){return us(T[0],T[1],Ai)/us(b[0],b[1],Ai)}(ot.pointers,Y):1,T.rotation=ot?function uc(b,T){return lc(T[1],T[0],Ai)+lc(b[1],b[0],Ai)}(ot.pointers,Y):0,T.maxPointers=k.prevInput?T.pointers.length>k.prevInput.maxPointers?T.pointers.length:k.prevInput.maxPointers:T.pointers.length,function ip(b,T){var he,Ie,ot,dn,k=b.lastInterval||T,Y=T.timeStamp-k.timeStamp;if(T.eventType!=yn&&(Y>qt||k.velocity===Pe)){var fn=T.deltaX-k.deltaX,In=T.deltaY-k.deltaY,fi=Ls(Y,fn,In);Ie=fi.x,ot=fi.y,he=F(fi.x)>F(fi.y)?fi.x:fi.y,dn=Su(fn,In),b.lastInterval=T}else he=k.velocity,Ie=k.velocityX,ot=k.velocityY,dn=k.direction;T.velocity=he,T.velocityX=Ie,T.velocityY=ot,T.direction=dn}(k,T);var fi=b.element;B(T.srcEvent.target,fi)&&(fi=T.srcEvent.target),T.target=fi}(b,k),b.emit(\"hammer.input\",k),b.recognize(k),b.session.prevInput=k}function Po(b){for(var T=[],k=0;k<b.pointers.length;)T[k]={clientX:z(b.pointers[k].clientX),clientY:z(b.pointers[k].clientY)},k++;return{timeStamp:D(),pointers:T,center:hr(T),deltaX:b.deltaX,deltaY:b.deltaY}}function hr(b){var T=b.length;if(1===T)return{x:z(b[0].clientX),y:z(b[0].clientY)};for(var k=0,Y=0,he=0;he<T;)k+=b[he].clientX,Y+=b[he].clientY,he++;return{x:z(k/T),y:z(Y/T)}}function Ls(b,T,k){return{x:T/b||0,y:k/b||0}}function Su(b,T){return b===T?cs:F(b)>=F(T)?b<0?Pt:ls:T<0?Nr:lr}function us(b,T,k){k||(k=cc);var Y=T[k[0]]-b[k[0]],he=T[k[1]]-b[k[1]];return Math.sqrt(Y*Y+he*he)}function lc(b,T,k){return k||(k=cc),180*Math.atan2(T[k[1]]-b[k[1]],T[k[0]]-b[k[0]])/Math.PI}xn.prototype={handler:function(){},init:function(){this.evEl&&$(this.element,this.evEl,this.domHandler),this.evTarget&&$(this.target,this.evTarget,this.domHandler),this.evWin&&$(J(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&N(this.element,this.evEl,this.domHandler),this.evTarget&&N(this.target,this.evTarget,this.domHandler),this.evWin&&N(J(this.element),this.evWin,this.domHandler)}};var hc={mousedown:xt,mousemove:2,mouseup:St},Oo=\"mousedown\",sp=\"mousemove mouseup\";function hs(){this.evEl=Oo,this.evWin=sp,this.pressed=!1,xn.apply(this,arguments)}w(hs,xn,{handler:function(T){var k=hc[T.type];k&xt&&0===T.button&&(this.pressed=!0),2&k&&1!==T.which&&(k=St),this.pressed&&(k&St&&(this.pressed=!1),this.callback(this.manager,k,{pointers:[T],changedPointers:[T],pointerType:Ye,srcEvent:T}))}});var op={pointerdown:xt,pointermove:2,pointerup:St,pointercancel:yn,pointerout:yn},dc={2:re,3:\"pen\",4:Ye,5:\"kinect\"},kr=\"pointerdown\",Cu=\"pointermove pointerup pointercancel\";function Ro(){this.evEl=kr,this.evWin=Cu,xn.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}ve.MSPointerEvent&&!ve.PointerEvent&&(kr=\"MSPointerDown\",Cu=\"MSPointerMove MSPointerUp MSPointerCancel\"),w(Ro,xn,{handler:function(T){var k=this.store,Y=!1,he=T.type.toLowerCase().replace(\"ms\",\"\"),Ie=op[he],ot=dc[T.pointerType]||T.pointerType,dn=ot==re,fn=W(k,T.pointerId,\"pointerId\");Ie&xt&&(0===T.button||dn)?fn<0&&(k.push(T),fn=k.length-1):Ie&(St|yn)&&(Y=!0),!(fn<0)&&(k[fn]=T,this.callback(this.manager,Ie,{pointers:k,changedPointers:[T],pointerType:ot,srcEvent:T}),Y&&k.splice(fn,1))}});var sn={touchstart:xt,touchmove:2,touchend:St,touchcancel:yn};function Tu(){this.evTarget=\"touchstart\",this.evWin=\"touchstart touchmove touchend touchcancel\",this.started=!1,xn.apply(this,arguments)}function cp(b,T){var k=ut(b.touches),Y=ut(b.changedTouches);return T&(St|yn)&&(k=V(k.concat(Y),\"identifier\",!0)),[k,Y]}w(Tu,xn,{handler:function(T){var k=sn[T.type];if(k===xt&&(this.started=!0),this.started){var Y=cp.call(this,T,k);k&(St|yn)&&Y[0].length-Y[1].length==0&&(this.started=!1),this.callback(this.manager,k,{pointers:Y[0],changedPointers:Y[1],pointerType:re,srcEvent:T})}}});var Ot={touchstart:xt,touchmove:2,touchend:St,touchcancel:yn},Iu=\"touchstart touchmove touchend touchcancel\";function Hi(){this.evTarget=Iu,this.targetIds={},xn.apply(this,arguments)}function lp(b,T){var k=ut(b.touches),Y=this.targetIds;if(T&(2|xt)&&1===k.length)return Y[k[0].identifier]=!0,[k,k];var he,Ie,ot=ut(b.changedTouches),dn=[],fn=this.target;if(Ie=k.filter(function(In){return B(In.target,fn)}),T===xt)for(he=0;he<Ie.length;)Y[Ie[he].identifier]=!0,he++;for(he=0;he<ot.length;)Y[ot[he].identifier]&&dn.push(ot[he]),T&(St|yn)&&delete Y[ot[he].identifier],he++;return dn.length?[V(Ie.concat(dn),\"identifier\",!0),dn]:void 0}w(Hi,xn,{handler:function(T){var k=Ot[T.type],Y=lp.call(this,T,k);Y&&this.callback(this.manager,k,{pointers:Y[0],changedPointers:Y[1],pointerType:re,srcEvent:T})}});var Pn=2500;function fc(){xn.apply(this,arguments);var b=P(this.handler,this);this.touch=new Hi(this.manager,b),this.mouse=new hs(this.manager,b),this.primaryTouch=null,this.lastTouches=[]}function ii(b,T){b&xt?(this.primaryTouch=T.changedPointers[0].identifier,Au.call(this,T)):b&(St|yn)&&Au.call(this,T)}function Au(b){var T=b.changedPointers[0];if(T.identifier===this.primaryTouch){var k={x:T.clientX,y:T.clientY};this.lastTouches.push(k);var Y=this.lastTouches;setTimeout(function(){var Ie=Y.indexOf(k);Ie>-1&&Y.splice(Ie,1)},Pn)}}function Fs(b){for(var T=b.srcEvent.clientX,k=b.srcEvent.clientY,Y=0;Y<this.lastTouches.length;Y++){var he=this.lastTouches[Y],Ie=Math.abs(T-he.x),ot=Math.abs(k-he.y);if(Ie<=25&&ot<=25)return!0}return!1}w(fc,xn,{handler:function(T,k,Y){var Ie=Y.pointerType==Ye;if(!(Ie&&Y.sourceCapabilities&&Y.sourceCapabilities.firesTouchEvents)){if(Y.pointerType==re)ii.call(this,k,Y);else if(Ie&&Fs.call(this,Y))return;this.callback(T,k,Y)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var pc=O(Oe.style,\"touchAction\"),gc=pc!==Pe,_c=\"compute\",mc=\"manipulation\",Lr=\"none\",ko=\"pan-x\",Be=\"pan-y\",yc=function xu(){if(!gc)return!1;var b={},T=ve.CSS&&ve.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach(function(k){b[k]=!T||ve.CSS.supports(\"touch-action\",k)}),b}();function vc(b,T){this.manager=b,this.set(T)}vc.prototype={set:function(b){b==_c&&(b=this.compute()),gc&&this.manager.element.style&&yc[b]&&(this.manager.element.style[pc]=b),this.actions=b.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var b=[];return E(this.manager.recognizers,function(T){j(T.options.enable,[T])&&(b=b.concat(T.getTouchAction()))}),function Mu(b){if(U(b,Lr))return Lr;var T=U(b,ko),k=U(b,Be);return T&&k?Lr:T||k?T?ko:Be:U(b,mc)?mc:\"auto\"}(b.join(\" \"))},preventDefaults:function(b){var T=b.srcEvent,k=b.offsetDirection;if(!this.manager.session.prevented){var Y=this.actions,he=U(Y,Lr)&&!yc[Lr],Ie=U(Y,Be)&&!yc[Be],ot=U(Y,ko)&&!yc[ko];if(he&&1===b.pointers.length&&b.distance<2&&b.deltaTime<250)return;return ot&&Ie||!(he||Ie&&k&Xt||ot&&k&ur)?void 0:this.preventSrc(T)}T.preventDefault()},preventSrc:function(b){this.manager.session.prevented=!0,b.preventDefault()}};var Lo=1;function $i(b){this.options=A({},this.defaults,b||{}),this.id=function X(){return K++}(),this.manager=null,this.options.enable=Z(this.options.enable,!0),this.state=Lo,this.simultaneous={},this.requireFail=[]}function Pu(b){return 16&b?\"cancel\":8&b?\"end\":4&b?\"move\":2&b?\"start\":\"\"}function up(b){return b==lr?\"down\":b==Nr?\"up\":b==Pt?\"left\":b==ls?\"right\":\"\"}function Fo(b,T){var k=T.manager;return k?k.get(b):b}function Kn(){$i.apply(this,arguments)}function ds(){Kn.apply(this,arguments),this.pX=null,this.pY=null}function wc(){Kn.apply(this,arguments)}function Ec(){$i.apply(this,arguments),this._timer=null,this._input=null}function bc(){Kn.apply(this,arguments)}function Ou(){Kn.apply(this,arguments)}function Sc(){$i.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function Br(b,T){return(T=T||{}).recognizers=Z(T.recognizers,Br.defaults.preset),new Ru(b,T)}function Ru(b,T){this.options=A({},Br.defaults,T||{}),this.options.inputTarget=this.options.inputTarget||b,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=b,this.input=function bu(b){return new(b.options.inputClass||(S?Ro:Q?Hi:fe?fc:hs))(b,xo)}(this),this.touchAction=new vc(this,this.options.touchAction),Nu(this,!0),E(this.options.recognizers,function(k){var Y=this.add(new k[0](k[1]));k[2]&&Y.recognizeWith(k[2]),k[3]&&Y.requireFailure(k[3])},this)}function Nu(b,T){var Y,k=b.element;k.style&&(E(b.options.cssProps,function(he,Ie){Y=O(k.style,Ie),T?(b.oldCssProps[Y]=k.style[Y],k.style[Y]=he):k.style[Y]=b.oldCssProps[Y]||\"\"}),T||(b.oldCssProps={}))}$i.prototype={defaults:{},set:function(b){return A(this.options,b),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(b){if(_(b,\"recognizeWith\",this))return this;var T=this.simultaneous;return T[(b=Fo(b,this)).id]||(T[b.id]=b,b.recognizeWith(this)),this},dropRecognizeWith:function(b){return _(b,\"dropRecognizeWith\",this)||(b=Fo(b,this),delete this.simultaneous[b.id]),this},requireFailure:function(b){if(_(b,\"requireFailure\",this))return this;var T=this.requireFail;return-1===W(T,b=Fo(b,this))&&(T.push(b),b.requireFailure(this)),this},dropRequireFailure:function(b){if(_(b,\"dropRequireFailure\",this))return this;b=Fo(b,this);var T=W(this.requireFail,b);return T>-1&&this.requireFail.splice(T,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(b){return!!this.simultaneous[b.id]},emit:function(b){var T=this,k=this.state;function Y(he){T.manager.emit(he,b)}k<8&&Y(T.options.event+Pu(k)),Y(T.options.event),b.additionalEvent&&Y(b.additionalEvent),k>=8&&Y(T.options.event+Pu(k))},tryEmit:function(b){if(this.canEmit())return this.emit(b);this.state=32},canEmit:function(){for(var b=0;b<this.requireFail.length;){if(!(this.requireFail[b].state&(32|Lo)))return!1;b++}return!0},recognize:function(b){var T=A({},b);if(!j(this.options.enable,[this,T]))return this.reset(),void(this.state=32);56&this.state&&(this.state=Lo),this.state=this.process(T),30&this.state&&this.tryEmit(T)},process:function(b){},getTouchAction:function(){},reset:function(){}},w(Kn,$i,{defaults:{pointers:1},attrTest:function(b){var T=this.options.pointers;return 0===T||b.pointers.length===T},process:function(b){var T=this.state,k=b.eventType,Y=6&T,he=this.attrTest(b);return Y&&(k&yn||!he)?16|T:Y||he?k&St?8|T:2&T?4|T:2:32}}),w(ds,Kn,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:ac},getTouchAction:function(){var b=this.options.direction,T=[];return b&Xt&&T.push(Be),b&ur&&T.push(ko),T},directionTest:function(b){var T=this.options,k=!0,Y=b.distance,he=b.direction,Ie=b.deltaX,ot=b.deltaY;return he&T.direction||(T.direction&Xt?(he=0===Ie?cs:Ie<0?Pt:ls,k=Ie!=this.pX,Y=Math.abs(b.deltaX)):(he=0===ot?cs:ot<0?Nr:lr,k=ot!=this.pY,Y=Math.abs(b.deltaY))),b.direction=he,k&&Y>T.threshold&&he&T.direction},attrTest:function(b){return Kn.prototype.attrTest.call(this,b)&&(2&this.state||!(2&this.state)&&this.directionTest(b))},emit:function(b){this.pX=b.deltaX,this.pY=b.deltaY;var T=up(b.direction);T&&(b.additionalEvent=this.options.event+T),this._super.emit.call(this,b)}}),w(wc,Kn,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[Lr]},attrTest:function(b){return this._super.attrTest.call(this,b)&&(Math.abs(b.scale-1)>this.options.threshold||2&this.state)},emit:function(b){1!==b.scale&&(b.additionalEvent=this.options.event+(b.scale<1?\"in\":\"out\")),this._super.emit.call(this,b)}}),w(Ec,$i,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[\"auto\"]},process:function(b){var T=this.options,k=b.pointers.length===T.pointers,Y=b.distance<T.threshold,he=b.deltaTime>T.time;if(this._input=b,!Y||!k||b.eventType&(St|yn)&&!he)this.reset();else if(b.eventType&xt)this.reset(),this._timer=g(function(){this.state=8,this.tryEmit()},T.time,this);else if(b.eventType&St)return 8;return 32},reset:function(){clearTimeout(this._timer)},emit:function(b){8===this.state&&(b&&b.eventType&St?this.manager.emit(this.options.event+\"up\",b):(this._input.timeStamp=D(),this.manager.emit(this.options.event,this._input)))}}),w(bc,Kn,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[Lr]},attrTest:function(b){return this._super.attrTest.call(this,b)&&(Math.abs(b.rotation)>this.options.threshold||2&this.state)}}),w(Ou,Kn,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:Xt|ur,pointers:1},getTouchAction:function(){return ds.prototype.getTouchAction.call(this)},attrTest:function(b){var k,T=this.options.direction;return T&(Xt|ur)?k=b.overallVelocity:T&Xt?k=b.overallVelocityX:T&ur&&(k=b.overallVelocityY),this._super.attrTest.call(this,b)&&T&b.offsetDirection&&b.distance>this.options.threshold&&b.maxPointers==this.options.pointers&&F(k)>this.options.velocity&&b.eventType&St},emit:function(b){var T=up(b.offsetDirection);T&&this.manager.emit(this.options.event+T,b),this.manager.emit(this.options.event,b)}}),w(Sc,$i,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[mc]},process:function(b){var T=this.options,k=b.pointers.length===T.pointers,Y=b.distance<T.threshold,he=b.deltaTime<T.time;if(this.reset(),b.eventType&xt&&0===this.count)return this.failTimeout();if(Y&&he&&k){if(b.eventType!=St)return this.failTimeout();var Ie=!this.pTime||b.timeStamp-this.pTime<T.interval,ot=!this.pCenter||us(this.pCenter,b.center)<T.posThreshold;if(this.pTime=b.timeStamp,this.pCenter=b.center,ot&&Ie?this.count+=1:this.count=1,this._input=b,0==this.count%T.taps)return this.hasRequireFailures()?(this._timer=g(function(){this.state=8,this.tryEmit()},T.interval,this),2):8}return 32},failTimeout:function(){return this._timer=g(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){8==this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),Br.VERSION=\"2.0.7\",Br.defaults={domEvents:!1,touchAction:_c,enable:!0,inputTarget:null,inputClass:null,preset:[[bc,{enable:!1}],[wc,{enable:!1},[\"rotate\"]],[Ou,{direction:Xt}],[ds,{direction:Xt},[\"swipe\"]],[Sc],[Sc,{event:\"doubletap\",taps:2},[\"tap\"]],[Ec]],cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Ru.prototype={set:function(b){return A(this.options,b),b.touchAction&&this.touchAction.update(),b.inputTarget&&(this.input.destroy(),this.input.target=b.inputTarget,this.input.init()),this},stop:function(b){this.session.stopped=b?2:1},recognize:function(b){var T=this.session;if(!T.stopped){this.touchAction.preventDefaults(b);var k,Y=this.recognizers,he=T.curRecognizer;(!he||he&&8&he.state)&&(he=T.curRecognizer=null);for(var Ie=0;Ie<Y.length;)k=Y[Ie],2===T.stopped||he&&k!=he&&!k.canRecognizeWith(he)?k.reset():k.recognize(b),!he&&14&k.state&&(he=T.curRecognizer=k),Ie++}},get:function(b){if(b instanceof $i)return b;for(var T=this.recognizers,k=0;k<T.length;k++)if(T[k].options.event==b)return T[k];return null},add:function(b){if(_(b,\"add\",this))return this;var T=this.get(b.options.event);return T&&this.remove(T),this.recognizers.push(b),b.manager=this,this.touchAction.update(),b},remove:function(b){if(_(b,\"remove\",this))return this;if(b=this.get(b)){var T=this.recognizers,k=W(T,b);-1!==k&&(T.splice(k,1),this.touchAction.update())}return this},on:function(b,T){if(b!==Pe&&T!==Pe){var k=this.handlers;return E(ie(b),function(Y){k[Y]=k[Y]||[],k[Y].push(T)}),this}},off:function(b,T){if(b!==Pe){var k=this.handlers;return E(ie(b),function(Y){T?k[Y]&&k[Y].splice(W(k[Y],T),1):delete k[Y]}),this}},emit:function(b,T){this.options.domEvents&&function fp(b,T){var k=Te.createEvent(\"Event\");k.initEvent(b,!0,!0),k.gesture=T,T.target.dispatchEvent(k)}(b,T);var k=this.handlers[b]&&this.handlers[b].slice();if(k&&k.length){T.type=b,T.preventDefault=function(){T.srcEvent.preventDefault()};for(var Y=0;Y<k.length;)k[Y](T),Y++}},destroy:function(){this.element&&Nu(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},A(Br,{INPUT_START:xt,INPUT_MOVE:2,INPUT_END:St,INPUT_CANCEL:yn,STATE_POSSIBLE:Lo,STATE_BEGAN:2,STATE_CHANGED:4,STATE_ENDED:8,STATE_RECOGNIZED:8,STATE_CANCELLED:16,STATE_FAILED:32,DIRECTION_NONE:cs,DIRECTION_LEFT:Pt,DIRECTION_RIGHT:ls,DIRECTION_UP:Nr,DIRECTION_DOWN:lr,DIRECTION_HORIZONTAL:Xt,DIRECTION_VERTICAL:ur,DIRECTION_ALL:ac,Manager:Ru,Input:xn,TouchAction:vc,TouchInput:Hi,MouseInput:hs,PointerEventInput:Ro,TouchMouseInput:fc,SingleTouchInput:Tu,Recognizer:$i,AttrRecognizer:Kn,Tap:Sc,Pan:ds,Swipe:Ou,Pinch:wc,Rotate:bc,Press:Ec,on:$,off:N,each:E,merge:M,extend:x,assign:A,inherit:w,bindFn:P,prefixed:O}),(typeof ve<\"u\"?ve:typeof self<\"u\"?self:{}).Hammer=Br,(xe=function(){return Br}.call(Wt,it,Wt,Tt))!==Pe&&(Tt.exports=xe)}(window,document)},222:(Tt,Wt,it)=>{\"use strict\";var xe,ve;xe=[it(405),it(7),it(975)],void 0!==(ve=function(Ne,Pe,le){return function Te(Ne,Pe,le){var Oe=function(te,z){return Ne.js_beautify(te,z)};return Oe.js=Ne.js_beautify,Oe.css=Pe.css_beautify,Oe.html=le.html_beautify,Oe.js_beautify=Ne.js_beautify,Oe.css_beautify=Pe.css_beautify,Oe.html_beautify=le.html_beautify,Oe}(Ne,Pe,le)}.apply(Wt,xe))&&(Tt.exports=ve)},7:(Tt,Wt)=>{var xe;!function(){var ve;!function(){\"use strict\";var Ne=[,,function(te){function z(g){this.__parent=g,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}function F(g,_){this.__cache=[\"\"],this.__indent_size=g.indent_size,this.__indent_string=g.indent_char,g.indent_with_tabs||(this.__indent_string=new Array(g.indent_size+1).join(g.indent_char)),_=_||\"\",g.indent_level>0&&(_=new Array(g.indent_level+1).join(this.__indent_string)),this.__base_string=_,this.__base_string_length=_.length}function D(g,_){this.__indent_cache=new F(g,_),this.raw=!1,this._end_with_newline=g.end_with_newline,this.indent_size=g.indent_size,this.wrap_line_length=g.wrap_line_length,this.indent_empty_lines=g.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new z(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}z.prototype.clone_empty=function(){var g=new z(this.__parent);return g.set_indent(this.__indent_count,this.__alignment_count),g},z.prototype.item=function(g){return g<0?this.__items[this.__items.length+g]:this.__items[g]},z.prototype.has_match=function(g){for(var _=this.__items.length-1;_>=0;_--)if(this.__items[_].match(g))return!0;return!1},z.prototype.set_indent=function(g,_){this.is_empty()&&(this.__indent_count=g||0,this.__alignment_count=_||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},z.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},z.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},z.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var g=this.__parent.current_line;return g.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),g.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),g.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,\" \"===g.__items[0]&&(g.__items.splice(0,1),g.__character_count-=1),!0}return!1},z.prototype.is_empty=function(){return 0===this.__items.length},z.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},z.prototype.push=function(g){this.__items.push(g);var _=g.lastIndexOf(\"\\n\");-1!==_?this.__character_count=g.length-_:this.__character_count+=g.length},z.prototype.pop=function(){var g=null;return this.is_empty()||(g=this.__items.pop(),this.__character_count-=g.length),g},z.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},z.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},z.prototype.trim=function(){for(;\" \"===this.last();)this.__items.pop(),this.__character_count-=1},z.prototype.toString=function(){var g=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(g=this.__parent.get_indent_string(this.__indent_count)):(g=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),g+=this.__items.join(\"\")),g},F.prototype.get_indent_size=function(g,_){var E=this.__base_string_length;return g<0&&(E=0),(E+=g*this.__indent_size)+(_||0)},F.prototype.get_indent_string=function(g,_){var E=this.__base_string;return _=_||0,g<0&&(g=0,E=\"\"),this.__ensure_cache(_+=g*this.__indent_size),E+this.__cache[_]},F.prototype.__ensure_cache=function(g){for(;g>=this.__cache.length;)this.__add_column()},F.prototype.__add_column=function(){var g=this.__cache.length,_=0,E=\"\";this.__indent_size&&g>=this.__indent_size&&(g-=(_=Math.floor(g/this.__indent_size))*this.__indent_size,E=new Array(_+1).join(this.__indent_string)),g&&(E+=new Array(g+1).join(\" \")),this.__cache.push(E)},D.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},D.prototype.get_line_number=function(){return this.__lines.length},D.prototype.get_indent_string=function(g,_){return this.__indent_cache.get_indent_string(g,_)},D.prototype.get_indent_size=function(g,_){return this.__indent_cache.get_indent_size(g,_)},D.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},D.prototype.add_new_line=function(g){return!(this.is_empty()||!g&&this.just_added_newline()||(this.raw||this.__add_outputline(),0))},D.prototype.get_code=function(g){this.trim(!0);var _=this.current_line.pop();_&&(\"\\n\"===_[_.length-1]&&(_=_.replace(/\\n+$/g,\"\")),this.current_line.push(_)),this._end_with_newline&&this.__add_outputline();var E=this.__lines.join(\"\\n\");return\"\\n\"!==g&&(E=E.replace(/[\\n]/g,g)),E},D.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},D.prototype.set_indent=function(g,_){return this.next_line.set_indent(g=g||0,_=_||0),this.__lines.length>1?(this.current_line.set_indent(g,_),!0):(this.current_line.set_indent(),!1)},D.prototype.add_raw_token=function(g){for(var _=0;_<g.newlines;_++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(g.whitespace_before),this.current_line.push(g.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},D.prototype.add_token=function(g){this.__add_space_before_token(),this.current_line.push(g),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},D.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},D.prototype.remove_indent=function(g){for(var _=this.__lines.length;g<_;)this.__lines[g]._remove_indent(),g++;this.current_line._remove_wrap_indent()},D.prototype.trim=function(g){for(g=void 0!==g&&g,this.current_line.trim();g&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},D.prototype.just_added_newline=function(){return this.current_line.is_empty()},D.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},D.prototype.ensure_empty_line_above=function(g,_){for(var E=this.__lines.length-2;E>=0;){var y=this.__lines[E];if(y.is_empty())break;if(0!==y.item(0).indexOf(g)&&y.item(-1)!==_){this.__lines.splice(E+1,0,new z(this)),this.previous_line=this.__lines[this.__lines.length-2];break}E--}},te.exports.Output=D},,,,function(te){function z(g,_){this.raw_options=F(g,_),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",\"\\t\"===this.indent_char),this.indent_with_tabs&&(this.indent_char=\"\\t\",1===this.indent_size&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"angular\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}function F(g,_){var y,E={};for(y in g=D(g))y!==_&&(E[y]=g[y]);if(_&&g[_])for(y in g[_])E[y]=g[_][y];return E}function D(g){var E,_={};for(E in g)_[E.replace(/-/g,\"_\")]=g[E];return _}z.prototype._get_array=function(g,_){var E=this.raw_options[g],y=_||[];return\"object\"==typeof E?null!==E&&\"function\"==typeof E.concat&&(y=E.concat()):\"string\"==typeof E&&(y=E.split(/[^a-zA-Z0-9_\\/\\-]+/)),y},z.prototype._get_boolean=function(g,_){var E=this.raw_options[g];return void 0===E?!!_:!!E},z.prototype._get_characters=function(g,_){var E=this.raw_options[g],y=_||\"\";return\"string\"==typeof E&&(y=E.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,\"\\n\").replace(/\\\\t/,\"\\t\")),y},z.prototype._get_number=function(g,_){var E=this.raw_options[g];_=parseInt(_,10),isNaN(_)&&(_=0);var y=parseInt(E,10);return isNaN(y)&&(y=_),y},z.prototype._get_selection=function(g,_,E){var y=this._get_selection_list(g,_,E);if(1!==y.length)throw new Error(\"Invalid Option Value: The option '\"+g+\"' can only be one of the following values:\\n\"+_+\"\\nYou passed in: '\"+this.raw_options[g]+\"'\");return y[0]},z.prototype._get_selection_list=function(g,_,E){if(!_||0===_.length)throw new Error(\"Selection list cannot be empty.\");if(!this._is_valid_selection(E=E||[_[0]],_))throw new Error(\"Invalid Default Value!\");var y=this._get_array(g,E);if(!this._is_valid_selection(y,_))throw new Error(\"Invalid Option Value: The option '\"+g+\"' can contain only the following values:\\n\"+_+\"\\nYou passed in: '\"+this.raw_options[g]+\"'\");return y},z.prototype._is_valid_selection=function(g,_){return g.length&&_.length&&!g.some(function(E){return-1===_.indexOf(E)})},te.exports.Options=z,te.exports.normalizeOpts=D,te.exports.mergeOpts=F},,function(te){var z=RegExp.prototype.hasOwnProperty(\"sticky\");function F(D){this.__input=D||\"\",this.__input_length=this.__input.length,this.__position=0}F.prototype.restart=function(){this.__position=0},F.prototype.back=function(){this.__position>0&&(this.__position-=1)},F.prototype.hasNext=function(){return this.__position<this.__input_length},F.prototype.next=function(){var D=null;return this.hasNext()&&(D=this.__input.charAt(this.__position),this.__position+=1),D},F.prototype.peek=function(D){var g=null;return D=D||0,(D+=this.__position)>=0&&D<this.__input_length&&(g=this.__input.charAt(D)),g},F.prototype.__match=function(D,g){D.lastIndex=g;var _=D.exec(this.__input);return _&&!(z&&D.sticky)&&_.index!==g&&(_=null),_},F.prototype.test=function(D,g){return g=g||0,(g+=this.__position)>=0&&g<this.__input_length&&!!this.__match(D,g)},F.prototype.testChar=function(D,g){var _=this.peek(g);return D.lastIndex=0,null!==_&&D.test(_)},F.prototype.match=function(D){var g=this.__match(D,this.__position);return g?this.__position+=g[0].length:g=null,g},F.prototype.read=function(D,g,_){var y,E=\"\";return D&&(y=this.match(D))&&(E+=y[0]),g&&(y||!D)&&(E+=this.readUntil(g,_)),E},F.prototype.readUntil=function(D,g){var _,E=this.__position;D.lastIndex=this.__position;var y=D.exec(this.__input);return y?(E=y.index,g&&(E+=y[0].length)):E=this.__input_length,_=this.__input.substring(this.__position,E),this.__position=E,_},F.prototype.readUntilAfter=function(D){return this.readUntil(D,!0)},F.prototype.get_regexp=function(D,g){var _=null,E=\"g\";return g&&z&&(E=\"y\"),\"string\"==typeof D&&\"\"!==D?_=new RegExp(D,E):D&&(_=new RegExp(D.source,E)),_},F.prototype.get_literal_regexp=function(D){return RegExp(D.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},F.prototype.peekUntilAfter=function(D){var g=this.__position,_=this.readUntilAfter(D);return this.__position=g,_},F.prototype.lookBack=function(D){var g=this.__position-1;return g>=D.length&&this.__input.substring(g-D.length,g).toLowerCase()===D},te.exports.InputScanner=F},,,,,function(te){function z(F,D){F=\"string\"==typeof F?F:F.source,D=\"string\"==typeof D?D:D.source,this.__directives_block_pattern=new RegExp(F+/ beautify( \\w+[:]\\w+)+ /.source+D,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(F+/\\sbeautify\\signore:end\\s/.source+D,\"g\")}z.prototype.get_directives=function(F){if(!F.match(this.__directives_block_pattern))return null;var D={};this.__directive_pattern.lastIndex=0;for(var g=this.__directive_pattern.exec(F);g;)D[g[1]]=g[2],g=this.__directive_pattern.exec(F);return D},z.prototype.readIgnored=function(F){return F.readUntilAfter(this.__directives_end_ignore_pattern)},te.exports.Directives=z},,function(te,z,F){var D=F(16).Beautifier,g=F(17).Options;te.exports=function _(E,y){return new D(E,y).beautify()},te.exports.defaultOptions=function(){return new g}},function(te,z,F){var D=F(17).Options,g=F(2).Output,_=F(8).InputScanner,y=new(0,F(13).Directives)(/\\/\\*/,/\\*\\//),A=/\\r\\n|[\\r\\n]/,x=/\\r\\n|[\\r\\n]/g,M=/\\s/,w=/(?:\\s|\\n)+/g,P=/\\/\\*(?:[\\s\\S]*?)((?:\\*\\/)|$)/g,j=/\\/\\/(?:[^\\n\\r\\u2028\\u2029]*)/g;function Z($,N){this._source_text=$||\"\",this._options=new D(N),this._ch=null,this._input=null,this.NESTED_AT_RULE={page:!0,\"font-face\":!0,keyframes:!0,media:!0,supports:!0,document:!0},this.CONDITIONAL_GROUP_RULE={media:!0,supports:!0,document:!0},this.NON_SEMICOLON_NEWLINE_PROPERTY=[\"grid-template-areas\",\"grid-template\"]}Z.prototype.eatString=function($){var N=\"\";for(this._ch=this._input.next();this._ch;){if(N+=this._ch,\"\\\\\"===this._ch)N+=this._input.next();else if(-1!==$.indexOf(this._ch)||\"\\n\"===this._ch)break;this._ch=this._input.next()}return N},Z.prototype.eatWhitespace=function($){for(var N=M.test(this._input.peek()),B=0;M.test(this._input.peek());)this._ch=this._input.next(),$&&\"\\n\"===this._ch&&(0===B||B<this._options.max_preserve_newlines)&&(B++,this._output.add_new_line(!0));return N},Z.prototype.foundNestedPseudoClass=function(){for(var $=0,N=1,B=this._input.peek(N);B;){if(\"{\"===B)return!0;if(\"(\"===B)$+=1;else if(\")\"===B){if(0===$)return!1;$-=1}else if(\";\"===B||\"}\"===B)return!1;N++,B=this._input.peek(N)}return!1},Z.prototype.print_string=function($){this._output.set_indent(this._indentLevel),this._output.non_breaking_space=!0,this._output.add_token($)},Z.prototype.preserveSingleSpace=function($){$&&(this._output.space_before_token=!0)},Z.prototype.indent=function(){this._indentLevel++},Z.prototype.outdent=function(){this._indentLevel>0&&this._indentLevel--},Z.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var $=this._source_text,N=this._options.eol;\"auto\"===N&&(N=\"\\n\",$&&A.test($||\"\")&&(N=$.match(A)[0]));var B=($=$.replace(x,\"\\n\")).match(/^[\\t ]*/)[0];this._output=new g(this._options,B),this._input=new _($),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var q,fe,U=0,ie=!1,W=!1,ut=!1,V=!1,O=!1,K=this._ch,X=!1;q=\"\"!==this._input.read(w),fe=K,this._ch=this._input.next(),\"\\\\\"===this._ch&&this._input.hasNext()&&(this._ch+=this._input.next()),K=this._ch,this._ch;)if(\"/\"===this._ch&&\"*\"===this._input.peek()){this._output.add_new_line(),this._input.back();var S=this._input.read(P),Q=y.get_directives(S);Q&&\"start\"===Q.ignore&&(S+=y.readIgnored(this._input)),this.print_string(S),this.eatWhitespace(!0),this._output.add_new_line()}else if(\"/\"===this._ch&&\"/\"===this._input.peek())this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(j)),this.eatWhitespace(!0);else if(\"$\"===this._ch){this.preserveSingleSpace(q),this.print_string(this._ch);var re=this._input.peekUntilAfter(/[: ,;{}()[\\]\\/='\"]/g);re.match(/[ :]$/)&&(re=this.eatString(\": \").replace(/\\s+$/,\"\"),this.print_string(re),this._output.space_before_token=!0),0===U&&-1!==re.indexOf(\":\")&&(W=!0,this.indent())}else if(\"@\"===this._ch)if(this.preserveSingleSpace(q),\"{\"===this._input.peek())this.print_string(this._ch+this.eatString(\"}\"));else{this.print_string(this._ch);var ke=this._input.peekUntilAfter(/[: ,;{}()[\\]\\/='\"]/g);ke.match(/[ :]$/)&&(ke=this.eatString(\": \").replace(/\\s+$/,\"\"),this.print_string(ke),this._output.space_before_token=!0),0===U&&-1!==ke.indexOf(\":\")?(W=!0,this.indent()):ke in this.NESTED_AT_RULE?(this._nestedLevel+=1,ke in this.CONDITIONAL_GROUP_RULE&&(ut=!0)):0===U&&!W&&(V=!0)}else if(\"#\"===this._ch&&\"{\"===this._input.peek())this.preserveSingleSpace(q),this.print_string(this._ch+this.eatString(\"}\"));else if(\"{\"===this._ch)W&&(W=!1,this.outdent()),V=!1,ut?(ut=!1,ie=this._indentLevel>=this._nestedLevel):ie=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&ie&&this._output.previous_line&&\"{\"!==this._output.previous_line.item(-1)&&this._output.ensure_empty_line_above(\"/\",\",\"),this._output.space_before_token=!0,\"expand\"===this._options.brace_style?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(\"(\"===fe?this._output.space_before_token=!1:\",\"!==fe&&this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line();else if(\"}\"===this._ch)this.outdent(),this._output.add_new_line(),\"{\"===fe&&this._output.trim(!0),W&&(this.outdent(),W=!1),this.print_string(this._ch),ie=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&\"}\"!==this._input.peek()&&this._output.add_new_line(!0),\")\"===this._input.peek()&&(this._output.trim(!0),\"expand\"===this._options.brace_style&&this._output.add_new_line(!0));else if(\":\"===this._ch){for(var Ye=0;Ye<this.NON_SEMICOLON_NEWLINE_PROPERTY.length;Ye++)if(this._input.lookBack(this.NON_SEMICOLON_NEWLINE_PROPERTY[Ye])){X=!0;break}!ie&&!ut||this._input.lookBack(\"&\")||this.foundNestedPseudoClass()||this._input.lookBack(\"(\")||V||0!==U?(this._input.lookBack(\" \")&&(this._output.space_before_token=!0),\":\"===this._input.peek()?(this._ch=this._input.next(),this.print_string(\"::\")):this.print_string(\":\")):(this.print_string(\":\"),W||(W=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent()))}else if('\"'===this._ch||\"'\"===this._ch)this.preserveSingleSpace('\"'===fe||\"'\"===fe||q),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0);else if(\";\"===this._ch)X=!1,0===U?(W&&(this.outdent(),W=!1),V=!1,this.print_string(this._ch),this.eatWhitespace(!0),\"/\"!==this._input.peek()&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0);else if(\"(\"===this._ch)if(this._input.lookBack(\"url\"))this.print_string(this._ch),this.eatWhitespace(),U++,this.indent(),this._ch=this._input.next(),\")\"===this._ch||'\"'===this._ch||\"'\"===this._ch?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(\")\")),U&&(U--,this.outdent()));else{var qt=!1;this._input.lookBack(\"with\")&&(qt=!0),this.preserveSingleSpace(q||qt),this.print_string(this._ch),W&&\"$\"===fe&&this._options.selector_separator_newline?(this._output.add_new_line(),O=!0):(this.eatWhitespace(),U++,this.indent())}else\")\"===this._ch?(U&&(U--,this.outdent()),O&&\";\"===this._input.peek()&&this._options.selector_separator_newline&&(O=!1,this.outdent(),this._output.add_new_line()),this.print_string(this._ch)):\",\"===this._ch?(this.print_string(this._ch),this.eatWhitespace(!0),!this._options.selector_separator_newline||W&&!O||0!==U||V?this._output.space_before_token=!0:this._output.add_new_line()):\">\"!==this._ch&&\"+\"!==this._ch&&\"~\"!==this._ch||W||0!==U?\"]\"===this._ch?this.print_string(this._ch):\"[\"===this._ch?(this.preserveSingleSpace(q),this.print_string(this._ch)):\"=\"===this._ch?(this.eatWhitespace(),this.print_string(\"=\"),M.test(this._ch)&&(this._ch=\"\")):\"!\"!==this._ch||this._input.lookBack(\"\\\\\")?(this.preserveSingleSpace('\"'===fe||\"'\"===fe||q),this.print_string(this._ch),!this._output.just_added_newline()&&\"\\n\"===this._input.peek()&&X&&this._output.add_new_line()):(this._output.space_before_token=!0,this.print_string(this._ch)):this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&M.test(this._ch)&&(this._ch=\"\"));return this._output.get_code(N)},te.exports.Beautifier=Z},function(te,z,F){var D=F(6).Options;function g(_){D.call(this,_,\"css\"),this.selector_separator_newline=this._get_boolean(\"selector_separator_newline\",!0),this.newline_between_rules=this._get_boolean(\"newline_between_rules\",!0);var E=this._get_boolean(\"space_around_selector_separator\");this.space_around_combinator=this._get_boolean(\"space_around_combinator\")||E;var y=this._get_selection_list(\"brace_style\",[\"collapse\",\"expand\",\"end-expand\",\"none\",\"preserve-inline\"]);this.brace_style=\"collapse\";for(var A=0;A<y.length;A++)this.brace_style=\"expand\"!==y[A]?\"collapse\":y[A]}g.prototype=new D,te.exports.Options=g}],Pe={},Oe=function le(te){var z=Pe[te];if(void 0!==z)return z.exports;var F=Pe[te]={exports:{}};return Ne[te](F,F.exports,le),F.exports}(15);ve=Oe}();var Te=ve;void 0!==(xe=function(){return{css_beautify:Te}}.apply(Wt,[]))&&(Tt.exports=xe)}()},975:(Tt,Wt,it)=>{var xe,ve;!function(){var Te;!function(){\"use strict\";var Oe=[,,function(D){function g(y){this.__parent=y,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}function _(y,A){this.__cache=[\"\"],this.__indent_size=y.indent_size,this.__indent_string=y.indent_char,y.indent_with_tabs||(this.__indent_string=new Array(y.indent_size+1).join(y.indent_char)),A=A||\"\",y.indent_level>0&&(A=new Array(y.indent_level+1).join(this.__indent_string)),this.__base_string=A,this.__base_string_length=A.length}function E(y,A){this.__indent_cache=new _(y,A),this.raw=!1,this._end_with_newline=y.end_with_newline,this.indent_size=y.indent_size,this.wrap_line_length=y.wrap_line_length,this.indent_empty_lines=y.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new g(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}g.prototype.clone_empty=function(){var y=new g(this.__parent);return y.set_indent(this.__indent_count,this.__alignment_count),y},g.prototype.item=function(y){return y<0?this.__items[this.__items.length+y]:this.__items[y]},g.prototype.has_match=function(y){for(var A=this.__items.length-1;A>=0;A--)if(this.__items[A].match(y))return!0;return!1},g.prototype.set_indent=function(y,A){this.is_empty()&&(this.__indent_count=y||0,this.__alignment_count=A||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},g.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},g.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},g.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var y=this.__parent.current_line;return y.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),y.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),y.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,\" \"===y.__items[0]&&(y.__items.splice(0,1),y.__character_count-=1),!0}return!1},g.prototype.is_empty=function(){return 0===this.__items.length},g.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},g.prototype.push=function(y){this.__items.push(y);var A=y.lastIndexOf(\"\\n\");-1!==A?this.__character_count=y.length-A:this.__character_count+=y.length},g.prototype.pop=function(){var y=null;return this.is_empty()||(y=this.__items.pop(),this.__character_count-=y.length),y},g.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},g.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},g.prototype.trim=function(){for(;\" \"===this.last();)this.__items.pop(),this.__character_count-=1},g.prototype.toString=function(){var y=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(y=this.__parent.get_indent_string(this.__indent_count)):(y=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),y+=this.__items.join(\"\")),y},_.prototype.get_indent_size=function(y,A){var x=this.__base_string_length;return y<0&&(x=0),(x+=y*this.__indent_size)+(A||0)},_.prototype.get_indent_string=function(y,A){var x=this.__base_string;return A=A||0,y<0&&(y=0,x=\"\"),this.__ensure_cache(A+=y*this.__indent_size),x+this.__cache[A]},_.prototype.__ensure_cache=function(y){for(;y>=this.__cache.length;)this.__add_column()},_.prototype.__add_column=function(){var y=this.__cache.length,A=0,x=\"\";this.__indent_size&&y>=this.__indent_size&&(y-=(A=Math.floor(y/this.__indent_size))*this.__indent_size,x=new Array(A+1).join(this.__indent_string)),y&&(x+=new Array(y+1).join(\" \")),this.__cache.push(x)},E.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},E.prototype.get_line_number=function(){return this.__lines.length},E.prototype.get_indent_string=function(y,A){return this.__indent_cache.get_indent_string(y,A)},E.prototype.get_indent_size=function(y,A){return this.__indent_cache.get_indent_size(y,A)},E.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},E.prototype.add_new_line=function(y){return!(this.is_empty()||!y&&this.just_added_newline()||(this.raw||this.__add_outputline(),0))},E.prototype.get_code=function(y){this.trim(!0);var A=this.current_line.pop();A&&(\"\\n\"===A[A.length-1]&&(A=A.replace(/\\n+$/g,\"\")),this.current_line.push(A)),this._end_with_newline&&this.__add_outputline();var x=this.__lines.join(\"\\n\");return\"\\n\"!==y&&(x=x.replace(/[\\n]/g,y)),x},E.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},E.prototype.set_indent=function(y,A){return this.next_line.set_indent(y=y||0,A=A||0),this.__lines.length>1?(this.current_line.set_indent(y,A),!0):(this.current_line.set_indent(),!1)},E.prototype.add_raw_token=function(y){for(var A=0;A<y.newlines;A++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(y.whitespace_before),this.current_line.push(y.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},E.prototype.add_token=function(y){this.__add_space_before_token(),this.current_line.push(y),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},E.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},E.prototype.remove_indent=function(y){for(var A=this.__lines.length;y<A;)this.__lines[y]._remove_indent(),y++;this.current_line._remove_wrap_indent()},E.prototype.trim=function(y){for(y=void 0!==y&&y,this.current_line.trim();y&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},E.prototype.just_added_newline=function(){return this.current_line.is_empty()},E.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},E.prototype.ensure_empty_line_above=function(y,A){for(var x=this.__lines.length-2;x>=0;){var M=this.__lines[x];if(M.is_empty())break;if(0!==M.item(0).indexOf(y)&&M.item(-1)!==A){this.__lines.splice(x+1,0,new g(this)),this.previous_line=this.__lines[this.__lines.length-2];break}x--}},D.exports.Output=E},function(D){D.exports.Token=function g(_,E,y,A){this.type=_,this.text=E,this.comments_before=null,this.newlines=y||0,this.whitespace_before=A||\"\",this.parent=null,this.next=null,this.previous=null,this.opened=null,this.closed=null,this.directives=null}},,,function(D){function g(y,A){this.raw_options=_(y,A),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",\"\\t\"===this.indent_char),this.indent_with_tabs&&(this.indent_char=\"\\t\",1===this.indent_size&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"angular\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}function _(y,A){var M,x={};for(M in y=E(y))M!==A&&(x[M]=y[M]);if(A&&y[A])for(M in y[A])x[M]=y[A][M];return x}function E(y){var x,A={};for(x in y)A[x.replace(/-/g,\"_\")]=y[x];return A}g.prototype._get_array=function(y,A){var x=this.raw_options[y],M=A||[];return\"object\"==typeof x?null!==x&&\"function\"==typeof x.concat&&(M=x.concat()):\"string\"==typeof x&&(M=x.split(/[^a-zA-Z0-9_\\/\\-]+/)),M},g.prototype._get_boolean=function(y,A){var x=this.raw_options[y];return void 0===x?!!A:!!x},g.prototype._get_characters=function(y,A){var x=this.raw_options[y],M=A||\"\";return\"string\"==typeof x&&(M=x.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,\"\\n\").replace(/\\\\t/,\"\\t\")),M},g.prototype._get_number=function(y,A){var x=this.raw_options[y];A=parseInt(A,10),isNaN(A)&&(A=0);var M=parseInt(x,10);return isNaN(M)&&(M=A),M},g.prototype._get_selection=function(y,A,x){var M=this._get_selection_list(y,A,x);if(1!==M.length)throw new Error(\"Invalid Option Value: The option '\"+y+\"' can only be one of the following values:\\n\"+A+\"\\nYou passed in: '\"+this.raw_options[y]+\"'\");return M[0]},g.prototype._get_selection_list=function(y,A,x){if(!A||0===A.length)throw new Error(\"Selection list cannot be empty.\");if(!this._is_valid_selection(x=x||[A[0]],A))throw new Error(\"Invalid Default Value!\");var M=this._get_array(y,x);if(!this._is_valid_selection(M,A))throw new Error(\"Invalid Option Value: The option '\"+y+\"' can contain only the following values:\\n\"+A+\"\\nYou passed in: '\"+this.raw_options[y]+\"'\");return M},g.prototype._is_valid_selection=function(y,A){return y.length&&A.length&&!y.some(function(x){return-1===A.indexOf(x)})},D.exports.Options=g,D.exports.normalizeOpts=E,D.exports.mergeOpts=_},,function(D){var g=RegExp.prototype.hasOwnProperty(\"sticky\");function _(E){this.__input=E||\"\",this.__input_length=this.__input.length,this.__position=0}_.prototype.restart=function(){this.__position=0},_.prototype.back=function(){this.__position>0&&(this.__position-=1)},_.prototype.hasNext=function(){return this.__position<this.__input_length},_.prototype.next=function(){var E=null;return this.hasNext()&&(E=this.__input.charAt(this.__position),this.__position+=1),E},_.prototype.peek=function(E){var y=null;return E=E||0,(E+=this.__position)>=0&&E<this.__input_length&&(y=this.__input.charAt(E)),y},_.prototype.__match=function(E,y){E.lastIndex=y;var A=E.exec(this.__input);return A&&!(g&&E.sticky)&&A.index!==y&&(A=null),A},_.prototype.test=function(E,y){return y=y||0,(y+=this.__position)>=0&&y<this.__input_length&&!!this.__match(E,y)},_.prototype.testChar=function(E,y){var A=this.peek(y);return E.lastIndex=0,null!==A&&E.test(A)},_.prototype.match=function(E){var y=this.__match(E,this.__position);return y?this.__position+=y[0].length:y=null,y},_.prototype.read=function(E,y,A){var M,x=\"\";return E&&(M=this.match(E))&&(x+=M[0]),y&&(M||!E)&&(x+=this.readUntil(y,A)),x},_.prototype.readUntil=function(E,y){var A,x=this.__position;E.lastIndex=this.__position;var M=E.exec(this.__input);return M?(x=M.index,y&&(x+=M[0].length)):x=this.__input_length,A=this.__input.substring(this.__position,x),this.__position=x,A},_.prototype.readUntilAfter=function(E){return this.readUntil(E,!0)},_.prototype.get_regexp=function(E,y){var A=null,x=\"g\";return y&&g&&(x=\"y\"),\"string\"==typeof E&&\"\"!==E?A=new RegExp(E,x):E&&(A=new RegExp(E.source,x)),A},_.prototype.get_literal_regexp=function(E){return RegExp(E.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},_.prototype.peekUntilAfter=function(E){var y=this.__position,A=this.readUntilAfter(E);return this.__position=y,A},_.prototype.lookBack=function(E){var y=this.__position-1;return y>=E.length&&this.__input.substring(y-E.length,y).toLowerCase()===E},D.exports.InputScanner=_},function(D,g,_){var E=_(8).InputScanner,y=_(3).Token,A=_(10).TokenStream,x=_(11).WhitespacePattern,M={START:\"TK_START\",RAW:\"TK_RAW\",EOF:\"TK_EOF\"},w=function(P,j){this._input=new E(P),this._options=j||{},this.__tokens=null,this._patterns={},this._patterns.whitespace=new x(this._input)};w.prototype.tokenize=function(){this._input.restart(),this.__tokens=new A,this._reset();for(var P,j=new y(M.START,\"\"),Z=null,$=[],N=new A;j.type!==M.EOF;){for(P=this._get_next_token(j,Z);this._is_comment(P);)N.add(P),P=this._get_next_token(j,Z);N.isEmpty()||(P.comments_before=N,N=new A),P.parent=Z,this._is_opening(P)?($.push(Z),Z=P):Z&&this._is_closing(P,Z)&&(P.opened=Z,Z.closed=P,Z=$.pop(),P.parent=Z),P.previous=j,j.next=P,this.__tokens.add(P),j=P}return this.__tokens},w.prototype._is_first_token=function(){return this.__tokens.isEmpty()},w.prototype._reset=function(){},w.prototype._get_next_token=function(P,j){this._readWhitespace();var Z=this._input.read(/.+/g);return Z?this._create_token(M.RAW,Z):this._create_token(M.EOF,\"\")},w.prototype._is_comment=function(P){return!1},w.prototype._is_opening=function(P){return!1},w.prototype._is_closing=function(P,j){return!1},w.prototype._create_token=function(P,j){return new y(P,j,this._patterns.whitespace.newline_count,this._patterns.whitespace.whitespace_before_token)},w.prototype._readWhitespace=function(){return this._patterns.whitespace.read()},D.exports.Tokenizer=w,D.exports.TOKEN=M},function(D){function g(_){this.__tokens=[],this.__tokens_length=this.__tokens.length,this.__position=0,this.__parent_token=_}g.prototype.restart=function(){this.__position=0},g.prototype.isEmpty=function(){return 0===this.__tokens_length},g.prototype.hasNext=function(){return this.__position<this.__tokens_length},g.prototype.next=function(){var _=null;return this.hasNext()&&(_=this.__tokens[this.__position],this.__position+=1),_},g.prototype.peek=function(_){var E=null;return _=_||0,(_+=this.__position)>=0&&_<this.__tokens_length&&(E=this.__tokens[_]),E},g.prototype.add=function(_){this.__parent_token&&(_.parent=this.__parent_token),this.__tokens.push(_),this.__tokens_length+=1},D.exports.TokenStream=g},function(D,g,_){var E=_(12).Pattern;function y(A,x){E.call(this,A,x),x?this._line_regexp=this._input.get_regexp(x._line_regexp):this.__set_whitespace_patterns(\"\",\"\"),this.newline_count=0,this.whitespace_before_token=\"\"}(y.prototype=new E).__set_whitespace_patterns=function(A,x){this._match_pattern=this._input.get_regexp(\"[\"+(A+=\"\\\\t \")+(x+=\"\\\\n\\\\r\")+\"]+\",!0),this._newline_regexp=this._input.get_regexp(\"\\\\r\\\\n|[\"+x+\"]\")},y.prototype.read=function(){this.newline_count=0,this.whitespace_before_token=\"\";var A=this._input.read(this._match_pattern);if(\" \"===A)this.whitespace_before_token=\" \";else if(A){var x=this.__split(this._newline_regexp,A);this.newline_count=x.length-1,this.whitespace_before_token=x[this.newline_count]}return A},y.prototype.matching=function(A,x){var M=this._create();return M.__set_whitespace_patterns(A,x),M._update(),M},y.prototype._create=function(){return new y(this._input,this)},y.prototype.__split=function(A,x){A.lastIndex=0;for(var M=0,w=[],P=A.exec(x);P;)w.push(x.substring(M,P.index)),M=P.index+P[0].length,P=A.exec(x);return w.push(M<x.length?x.substring(M,x.length):\"\"),w},D.exports.WhitespacePattern=y},function(D){function g(_,E){this._input=_,this._starting_pattern=null,this._match_pattern=null,this._until_pattern=null,this._until_after=!1,E&&(this._starting_pattern=this._input.get_regexp(E._starting_pattern,!0),this._match_pattern=this._input.get_regexp(E._match_pattern,!0),this._until_pattern=this._input.get_regexp(E._until_pattern),this._until_after=E._until_after)}g.prototype.read=function(){var _=this._input.read(this._starting_pattern);return(!this._starting_pattern||_)&&(_+=this._input.read(this._match_pattern,this._until_pattern,this._until_after)),_},g.prototype.read_match=function(){return this._input.match(this._match_pattern)},g.prototype.until_after=function(_){var E=this._create();return E._until_after=!0,E._until_pattern=this._input.get_regexp(_),E._update(),E},g.prototype.until=function(_){var E=this._create();return E._until_after=!1,E._until_pattern=this._input.get_regexp(_),E._update(),E},g.prototype.starting_with=function(_){var E=this._create();return E._starting_pattern=this._input.get_regexp(_,!0),E._update(),E},g.prototype.matching=function(_){var E=this._create();return E._match_pattern=this._input.get_regexp(_,!0),E._update(),E},g.prototype._create=function(){return new g(this._input,this)},g.prototype._update=function(){},D.exports.Pattern=g},function(D){function g(_,E){_=\"string\"==typeof _?_:_.source,E=\"string\"==typeof E?E:E.source,this.__directives_block_pattern=new RegExp(_+/ beautify( \\w+[:]\\w+)+ /.source+E,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(_+/\\sbeautify\\signore:end\\s/.source+E,\"g\")}g.prototype.get_directives=function(_){if(!_.match(this.__directives_block_pattern))return null;var E={};this.__directive_pattern.lastIndex=0;for(var y=this.__directive_pattern.exec(_);y;)E[y[1]]=y[2],y=this.__directive_pattern.exec(_);return E},g.prototype.readIgnored=function(_){return _.readUntilAfter(this.__directives_end_ignore_pattern)},D.exports.Directives=g},function(D,g,_){var E=_(12).Pattern,y={django:!1,erb:!1,handlebars:!1,php:!1,smarty:!1,angular:!1};function A(x,M){E.call(this,x,M),this.__template_pattern=null,this._disabled=Object.assign({},y),this._excluded=Object.assign({},y),M&&(this.__template_pattern=this._input.get_regexp(M.__template_pattern),this._excluded=Object.assign(this._excluded,M._excluded),this._disabled=Object.assign(this._disabled,M._disabled));var w=new E(x);this.__patterns={handlebars_comment:w.starting_with(/{{!--/).until_after(/--}}/),handlebars_unescaped:w.starting_with(/{{{/).until_after(/}}}/),handlebars:w.starting_with(/{{/).until_after(/}}/),php:w.starting_with(/<\\?(?:[= ]|php)/).until_after(/\\?>/),erb:w.starting_with(/<%[^%]/).until_after(/[^%]%>/),django:w.starting_with(/{%/).until_after(/%}/),django_value:w.starting_with(/{{/).until_after(/}}/),django_comment:w.starting_with(/{#/).until_after(/#}/),smarty:w.starting_with(/{(?=[^}{\\s\\n])/).until_after(/[^\\s\\n]}/),smarty_comment:w.starting_with(/{\\*/).until_after(/\\*}/),smarty_literal:w.starting_with(/{literal}/).until_after(/{\\/literal}/)}}(A.prototype=new E)._create=function(){return new A(this._input,this)},A.prototype._update=function(){this.__set_templated_pattern()},A.prototype.disable=function(x){var M=this._create();return M._disabled[x]=!0,M._update(),M},A.prototype.read_options=function(x){var M=this._create();for(var w in y)M._disabled[w]=-1===x.templating.indexOf(w);return M._update(),M},A.prototype.exclude=function(x){var M=this._create();return M._excluded[x]=!0,M._update(),M},A.prototype.read=function(){var x=\"\";x=this._match_pattern?this._input.read(this._starting_pattern):this._input.read(this._starting_pattern,this.__template_pattern);for(var M=this._read_template();M;)x+=M+=this._match_pattern?this._input.read(this._match_pattern):this._input.readUntil(this.__template_pattern),M=this._read_template();return this._until_after&&(x+=this._input.readUntilAfter(this._until_pattern)),x},A.prototype.__set_templated_pattern=function(){var x=[];this._disabled.php||x.push(this.__patterns.php._starting_pattern.source),this._disabled.handlebars||x.push(this.__patterns.handlebars._starting_pattern.source),this._disabled.erb||x.push(this.__patterns.erb._starting_pattern.source),this._disabled.django||(x.push(this.__patterns.django._starting_pattern.source),x.push(this.__patterns.django_value._starting_pattern.source),x.push(this.__patterns.django_comment._starting_pattern.source)),this._disabled.smarty||x.push(this.__patterns.smarty._starting_pattern.source),this._until_pattern&&x.push(this._until_pattern.source),this.__template_pattern=this._input.get_regexp(\"(?:\"+x.join(\"|\")+\")\")},A.prototype._read_template=function(){var x=\"\",M=this._input.peek();if(\"<\"===M){var w=this._input.peek(1);!this._disabled.php&&!this._excluded.php&&\"?\"===w&&(x=x||this.__patterns.php.read()),!this._disabled.erb&&!this._excluded.erb&&\"%\"===w&&(x=x||this.__patterns.erb.read())}else\"{\"===M&&(!this._disabled.handlebars&&!this._excluded.handlebars&&(x=(x=(x=x||this.__patterns.handlebars_comment.read())||this.__patterns.handlebars_unescaped.read())||this.__patterns.handlebars.read()),this._disabled.django||(!this._excluded.django&&!this._excluded.handlebars&&(x=x||this.__patterns.django_value.read()),this._excluded.django||(x=(x=x||this.__patterns.django_comment.read())||this.__patterns.django.read())),this._disabled.smarty||this._disabled.django&&this._disabled.handlebars&&(x=(x=(x=x||this.__patterns.smarty_comment.read())||this.__patterns.smarty_literal.read())||this.__patterns.smarty.read()));return x},D.exports.TemplatablePattern=A},,,,function(D,g,_){var E=_(19).Beautifier,y=_(20).Options;D.exports=function A(x,M,w,P){return new E(x,M,w,P).beautify()},D.exports.defaultOptions=function(){return new y}},function(D,g,_){var E=_(20).Options,y=_(2).Output,A=_(21).Tokenizer,x=_(21).TOKEN,M=/\\r\\n|[\\r\\n]/,w=/\\r\\n|[\\r\\n]/g,P=function(V,O){this.indent_level=0,this.alignment_size=0,this.max_preserve_newlines=V.max_preserve_newlines,this.preserve_newlines=V.preserve_newlines,this._output=new y(V,O)};P.prototype.current_line_has_match=function(V){return this._output.current_line.has_match(V)},P.prototype.set_space_before_token=function(V,O){this._output.space_before_token=V,this._output.non_breaking_space=O},P.prototype.set_wrap_point=function(){this._output.set_indent(this.indent_level,this.alignment_size),this._output.set_wrap_point()},P.prototype.add_raw_token=function(V){this._output.add_raw_token(V)},P.prototype.print_preserved_newlines=function(V){var O=0;V.type!==x.TEXT&&V.previous.type!==x.TEXT&&(O=V.newlines?1:0),this.preserve_newlines&&(O=V.newlines<this.max_preserve_newlines+1?V.newlines:this.max_preserve_newlines+1);for(var K=0;K<O;K++)this.print_newline(K>0);return 0!==O},P.prototype.traverse_whitespace=function(V){return!(!V.whitespace_before&&!V.newlines||(this.print_preserved_newlines(V)||(this._output.space_before_token=!0),0))},P.prototype.previous_token_wrapped=function(){return this._output.previous_token_wrapped},P.prototype.print_newline=function(V){this._output.add_new_line(V)},P.prototype.print_token=function(V){V.text&&(this._output.set_indent(this.indent_level,this.alignment_size),this._output.add_token(V.text))},P.prototype.indent=function(){this.indent_level++},P.prototype.deindent=function(){this.indent_level>0&&(this.indent_level--,this._output.set_indent(this.indent_level,this.alignment_size))},P.prototype.get_full_indent=function(V){return(V=this.indent_level+(V||0))<1?\"\":this._output.get_indent_string(V)};function $(V,O){return-1!==O.indexOf(V)}function N(V,O,K){this.parent=V||null,this.tag=O?O.tag_name:\"\",this.indent_level=K||0,this.parser_token=O||null}function B(V){this._printer=V,this._current_frame=null}function U(V,O,K,X){this._source_text=V||\"\",O=O||{},this._js_beautify=K,this._css_beautify=X,this._tag_stack=null;var J=new E(O,\"html\");this._options=J,this._is_wrap_attributes_force=\"force\"===this._options.wrap_attributes.substr(0,5),this._is_wrap_attributes_force_expand_multiline=\"force-expand-multiline\"===this._options.wrap_attributes,this._is_wrap_attributes_force_aligned=\"force-aligned\"===this._options.wrap_attributes,this._is_wrap_attributes_aligned_multiple=\"aligned-multiple\"===this._options.wrap_attributes,this._is_wrap_attributes_preserve=\"preserve\"===this._options.wrap_attributes.substr(0,8),this._is_wrap_attributes_preserve_aligned=\"preserve-aligned\"===this._options.wrap_attributes}B.prototype.get_parser_token=function(){return this._current_frame?this._current_frame.parser_token:null},B.prototype.record_tag=function(V){var O=new N(this._current_frame,V,this._printer.indent_level);this._current_frame=O},B.prototype._try_pop_frame=function(V){var O=null;return V&&(O=V.parser_token,this._printer.indent_level=V.indent_level,this._current_frame=V.parent),O},B.prototype._get_frame=function(V,O){for(var K=this._current_frame;K&&-1===V.indexOf(K.tag);){if(O&&-1!==O.indexOf(K.tag)){K=null;break}K=K.parent}return K},B.prototype.try_pop=function(V,O){var K=this._get_frame([V],O);return this._try_pop_frame(K)},B.prototype.indent_to_tag=function(V){var O=this._get_frame(V);O&&(this._printer.indent_level=O.indent_level)},U.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var V=this._source_text,O=this._options.eol;\"auto\"===this._options.eol&&(O=\"\\n\",V&&M.test(V)&&(O=V.match(M)[0]));var K=(V=V.replace(w,\"\\n\")).match(/^[\\t ]*/)[0],X={text:\"\",type:\"\"},J=new ie,q=new P(this._options,K),fe=new A(V,this._options).tokenize();this._tag_stack=new B(q);for(var S=null,Q=fe.next();Q.type!==x.EOF;)Q.type===x.TAG_OPEN||Q.type===x.COMMENT?J=S=this._handle_tag_open(q,Q,J,X,fe):Q.type===x.ATTRIBUTE||Q.type===x.EQUALS||Q.type===x.VALUE||Q.type===x.TEXT&&!J.tag_complete?S=this._handle_inside_tag(q,Q,J,X):Q.type===x.TAG_CLOSE?S=this._handle_tag_close(q,Q,J):Q.type===x.TEXT?S=this._handle_text(q,Q,J):Q.type===x.CONTROL_FLOW_OPEN?S=this._handle_control_flow_open(q,Q):Q.type===x.CONTROL_FLOW_CLOSE?S=this._handle_control_flow_close(q,Q):q.add_raw_token(Q),X=S,Q=fe.next();return q._output.get_code(O)},U.prototype._handle_control_flow_open=function(V,O){var K={text:O.text,type:O.type};return V.set_space_before_token(O.newlines||\"\"!==O.whitespace_before,!0),O.newlines?V.print_preserved_newlines(O):V.set_space_before_token(O.newlines||\"\"!==O.whitespace_before,!0),V.print_token(O),V.indent(),K},U.prototype._handle_control_flow_close=function(V,O){var K={text:O.text,type:O.type};return V.deindent(),O.newlines?V.print_preserved_newlines(O):V.set_space_before_token(O.newlines||\"\"!==O.whitespace_before,!0),V.print_token(O),K},U.prototype._handle_tag_close=function(V,O,K){var X={text:O.text,type:O.type};return V.alignment_size=0,K.tag_complete=!0,V.set_space_before_token(O.newlines||\"\"!==O.whitespace_before,!0),K.is_unformatted?V.add_raw_token(O):(\"<\"===K.tag_start_char&&(V.set_space_before_token(\"/\"===O.text[0],!0),this._is_wrap_attributes_force_expand_multiline&&K.has_wrapped_attrs&&V.print_newline(!1)),V.print_token(O)),K.indent_content&&!(K.is_unformatted||K.is_content_unformatted)&&(V.indent(),K.indent_content=!1),!K.is_inline_element&&!(K.is_unformatted||K.is_content_unformatted)&&V.set_wrap_point(),X},U.prototype._handle_inside_tag=function(V,O,K,X){var J=K.has_wrapped_attrs,q={text:O.text,type:O.type};return V.set_space_before_token(O.newlines||\"\"!==O.whitespace_before,!0),K.is_unformatted?V.add_raw_token(O):\"{\"===K.tag_start_char&&O.type===x.TEXT?V.print_preserved_newlines(O)?(O.newlines=0,V.add_raw_token(O)):V.print_token(O):(O.type===x.ATTRIBUTE?V.set_space_before_token(!0):(O.type===x.EQUALS||O.type===x.VALUE&&O.previous.type===x.EQUALS)&&V.set_space_before_token(!1),O.type===x.ATTRIBUTE&&\"<\"===K.tag_start_char&&((this._is_wrap_attributes_preserve||this._is_wrap_attributes_preserve_aligned)&&(V.traverse_whitespace(O),J=J||0!==O.newlines),this._is_wrap_attributes_force&&K.attr_count>=this._options.wrap_attributes_min_attrs&&(X.type!==x.TAG_OPEN||this._is_wrap_attributes_force_expand_multiline)&&(V.print_newline(!1),J=!0)),V.print_token(O),J=J||V.previous_token_wrapped(),K.has_wrapped_attrs=J),q},U.prototype._handle_text=function(V,O,K){var X={text:O.text,type:\"TK_CONTENT\"};return K.custom_beautifier_name?this._print_custom_beatifier_text(V,O,K):K.is_unformatted||K.is_content_unformatted?V.add_raw_token(O):(V.traverse_whitespace(O),V.print_token(O)),X},U.prototype._print_custom_beatifier_text=function(V,O,K){var X=this;if(\"\"!==O.text){var q,J=O.text,fe=1,S=\"\",Q=\"\";\"javascript\"===K.custom_beautifier_name&&\"function\"==typeof this._js_beautify?q=this._js_beautify:\"css\"===K.custom_beautifier_name&&\"function\"==typeof this._css_beautify?q=this._css_beautify:\"html\"===K.custom_beautifier_name&&(q=function(xt,Vn){return new U(xt,Vn,X._js_beautify,X._css_beautify).beautify()}),\"keep\"===this._options.indent_scripts?fe=0:\"separate\"===this._options.indent_scripts&&(fe=-V.indent_level);var re=V.get_full_indent(fe);if(J=J.replace(/\\n[ \\t]*$/,\"\"),\"html\"!==K.custom_beautifier_name&&\"<\"===J[0]&&J.match(/^(<!--|<!\\[CDATA\\[)/)){var ke=/^(<!--[^\\n]*|<!\\[CDATA\\[)(\\n?)([ \\t\\n]*)([\\s\\S]*)(-->|]]>)$/.exec(J);if(!ke)return void V.add_raw_token(O);S=re+ke[1]+\"\\n\",ke[5]&&(Q=re+ke[5]),J=(J=ke[4]).replace(/\\n[ \\t]*$/,\"\"),(ke[2]||-1!==ke[3].indexOf(\"\\n\"))&&(ke=ke[3].match(/[ \\t]+$/))&&(O.whitespace_before=ke[0])}if(J)if(q){var Ye=function(){this.eol=\"\\n\"};Ye.prototype=this._options.raw_options,J=q(re+J,new Ye)}else{var qt=O.whitespace_before;qt&&(J=J.replace(new RegExp(\"\\n(\"+qt+\")?\",\"g\"),\"\\n\")),J=re+J.replace(/\\n/g,\"\\n\"+re)}S&&(J=J?S+J+\"\\n\"+Q:S+Q),V.print_newline(!1),J&&(O.text=J,O.whitespace_before=\"\",O.newlines=0,V.add_raw_token(O),V.print_newline(!0))}},U.prototype._handle_tag_open=function(V,O,K,X,J){var q=this._get_tag_open_token(O);if(!K.is_unformatted&&!K.is_content_unformatted||K.is_empty_element||O.type!==x.TAG_OPEN||q.is_start_tag?(V.traverse_whitespace(O),this._set_tag_position(V,O,q,K,X),q.is_inline_element||V.set_wrap_point(),V.print_token(O)):(V.add_raw_token(O),q.start_tag_token=this._tag_stack.try_pop(q.tag_name)),q.is_start_tag&&this._is_wrap_attributes_force){var S,fe=0;do{(S=J.peek(fe)).type===x.ATTRIBUTE&&(q.attr_count+=1),fe+=1}while(S.type!==x.EOF&&S.type!==x.TAG_CLOSE)}return(this._is_wrap_attributes_force_aligned||this._is_wrap_attributes_aligned_multiple||this._is_wrap_attributes_preserve_aligned)&&(q.alignment_size=O.text.length+1),!q.tag_complete&&!q.is_unformatted&&(V.alignment_size=q.alignment_size),q};var ie=function(V,O){if(this.parent=V||null,this.text=\"\",this.type=\"TK_TAG_OPEN\",this.tag_name=\"\",this.is_inline_element=!1,this.is_unformatted=!1,this.is_content_unformatted=!1,this.is_empty_element=!1,this.is_start_tag=!1,this.is_end_tag=!1,this.indent_content=!1,this.multiline_content=!1,this.custom_beautifier_name=null,this.start_tag_token=null,this.attr_count=0,this.has_wrapped_attrs=!1,this.alignment_size=0,this.tag_complete=!1,this.tag_start_char=\"\",this.tag_check=\"\",O){var K;this.tag_start_char=O.text[0],this.text=O.text,\"<\"===this.tag_start_char?(K=O.text.match(/^<([^\\s>]*)/),this.tag_check=K?K[1]:\"\"):(K=O.text.match(/^{{~?(?:[\\^]|#\\*?)?([^\\s}]+)/),this.tag_check=K?K[1]:\"\",(O.text.startsWith(\"{{#>\")||O.text.startsWith(\"{{~#>\"))&&\">\"===this.tag_check[0]&&(this.tag_check=\">\"===this.tag_check&&null!==O.next?O.next.text.split(\" \")[0]:O.text.split(\">\")[1])),this.tag_check=this.tag_check.toLowerCase(),O.type===x.COMMENT&&(this.tag_complete=!0),this.is_start_tag=\"/\"!==this.tag_check.charAt(0),this.tag_name=this.is_start_tag?this.tag_check:this.tag_check.substr(1),this.is_end_tag=!this.is_start_tag||O.closed&&\"/>\"===O.closed.text;var X=2;\"{\"===this.tag_start_char&&this.text.length>=3&&\"~\"===this.text.charAt(2)&&(X=3),this.is_end_tag=this.is_end_tag||\"{\"===this.tag_start_char&&(this.text.length<3||/[^#\\^]/.test(this.text.charAt(X)))}else this.tag_complete=!0};U.prototype._get_tag_open_token=function(V){var O=new ie(this._tag_stack.get_parser_token(),V);return O.alignment_size=this._options.wrap_attributes_indent_size,O.is_end_tag=O.is_end_tag||$(O.tag_check,this._options.void_elements),O.is_empty_element=O.tag_complete||O.is_start_tag&&O.is_end_tag,O.is_unformatted=!O.tag_complete&&$(O.tag_check,this._options.unformatted),O.is_content_unformatted=!O.is_empty_element&&$(O.tag_check,this._options.content_unformatted),O.is_inline_element=$(O.tag_name,this._options.inline)||this._options.inline_custom_elements&&O.tag_name.includes(\"-\")||\"{\"===O.tag_start_char,O},U.prototype._set_tag_position=function(V,O,K,X,J){if(K.is_empty_element||(K.is_end_tag?K.start_tag_token=this._tag_stack.try_pop(K.tag_name):(this._do_optional_end_element(K)&&(K.is_inline_element||V.print_newline(!1)),this._tag_stack.record_tag(K),(\"script\"===K.tag_name||\"style\"===K.tag_name)&&!(K.is_unformatted||K.is_content_unformatted)&&(K.custom_beautifier_name=function(V,O){var K=null,X=null;return O.closed?(\"script\"===V?K=\"text/javascript\":\"style\"===V&&(K=\"text/css\"),K=function(V){for(var O=null,K=V.next;K.type!==x.EOF&&V.closed!==K;){if(K.type===x.ATTRIBUTE&&\"type\"===K.text){K.next&&K.next.type===x.EQUALS&&K.next.next&&K.next.next.type===x.VALUE&&(O=K.next.next.text);break}K=K.next}return O}(O)||K,K.search(\"text/css\")>-1?X=\"css\":K.search(/module|((text|application|dojo)\\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\\+)?json|method|aspect))/)>-1?X=\"javascript\":K.search(/(text|application|dojo)\\/(x-)?(html)/)>-1?X=\"html\":K.search(/test\\/null/)>-1&&(X=\"null\"),X):null}(K.tag_check,O)))),$(K.tag_check,this._options.extra_liners)&&(V.print_newline(!1),V._output.just_added_blankline()||V.print_newline(!0)),K.is_empty_element)\"{\"===K.tag_start_char&&\"else\"===K.tag_check&&(this._tag_stack.indent_to_tag([\"if\",\"unless\",\"each\"]),K.indent_content=!0,V.current_line_has_match(/{{#if/)||V.print_newline(!1)),\"!--\"===K.tag_name&&J.type===x.TAG_CLOSE&&X.is_end_tag&&-1===K.text.indexOf(\"\\n\")||(K.is_inline_element||K.is_unformatted||V.print_newline(!1),this._calcluate_parent_multiline(V,K));else if(K.is_end_tag){var fe=!1;fe=(fe=K.start_tag_token&&K.start_tag_token.multiline_content)||!K.is_inline_element&&!(X.is_inline_element||X.is_unformatted)&&!(J.type===x.TAG_CLOSE&&K.start_tag_token===X)&&\"TK_CONTENT\"!==J.type,(K.is_content_unformatted||K.is_unformatted)&&(fe=!1),fe&&V.print_newline(!1)}else K.indent_content=!K.custom_beautifier_name,\"<\"===K.tag_start_char&&(\"html\"===K.tag_name?K.indent_content=this._options.indent_inner_html:\"head\"===K.tag_name?K.indent_content=this._options.indent_head_inner_html:\"body\"===K.tag_name&&(K.indent_content=this._options.indent_body_inner_html)),!(K.is_inline_element||K.is_unformatted)&&(\"TK_CONTENT\"!==J.type||K.is_content_unformatted)&&V.print_newline(!1),this._calcluate_parent_multiline(V,K)},U.prototype._calcluate_parent_multiline=function(V,O){O.parent&&V._output.just_added_newline()&&(!O.is_inline_element&&!O.is_unformatted||!O.parent.is_inline_element)&&(O.parent.multiline_content=!0)};var W=[\"address\",\"article\",\"aside\",\"blockquote\",\"details\",\"div\",\"dl\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"main\",\"menu\",\"nav\",\"ol\",\"p\",\"pre\",\"section\",\"table\",\"ul\"],ut=[\"a\",\"audio\",\"del\",\"ins\",\"map\",\"noscript\",\"video\"];U.prototype._do_optional_end_element=function(V){var O=null;if(!V.is_empty_element&&V.is_start_tag&&V.parent){if(\"body\"===V.tag_name)O=O||this._tag_stack.try_pop(\"head\");else if(\"li\"===V.tag_name)O=O||this._tag_stack.try_pop(\"li\",[\"ol\",\"ul\",\"menu\"]);else if(\"dd\"===V.tag_name||\"dt\"===V.tag_name)O=(O=O||this._tag_stack.try_pop(\"dt\",[\"dl\"]))||this._tag_stack.try_pop(\"dd\",[\"dl\"]);else if(\"p\"===V.parent.tag_name&&-1!==W.indexOf(V.tag_name)){var K=V.parent.parent;(!K||-1===ut.indexOf(K.tag_name))&&(O=O||this._tag_stack.try_pop(\"p\"))}else\"rp\"===V.tag_name||\"rt\"===V.tag_name?O=(O=O||this._tag_stack.try_pop(\"rt\",[\"ruby\",\"rtc\"]))||this._tag_stack.try_pop(\"rp\",[\"ruby\",\"rtc\"]):\"optgroup\"===V.tag_name?O=O||this._tag_stack.try_pop(\"optgroup\",[\"select\"]):\"option\"===V.tag_name?O=O||this._tag_stack.try_pop(\"option\",[\"select\",\"datalist\",\"optgroup\"]):\"colgroup\"===V.tag_name?O=O||this._tag_stack.try_pop(\"caption\",[\"table\"]):\"thead\"===V.tag_name?O=(O=O||this._tag_stack.try_pop(\"caption\",[\"table\"]))||this._tag_stack.try_pop(\"colgroup\",[\"table\"]):\"tbody\"===V.tag_name||\"tfoot\"===V.tag_name?O=(O=(O=(O=O||this._tag_stack.try_pop(\"caption\",[\"table\"]))||this._tag_stack.try_pop(\"colgroup\",[\"table\"]))||this._tag_stack.try_pop(\"thead\",[\"table\"]))||this._tag_stack.try_pop(\"tbody\",[\"table\"]):\"tr\"===V.tag_name?O=(O=(O=O||this._tag_stack.try_pop(\"caption\",[\"table\"]))||this._tag_stack.try_pop(\"colgroup\",[\"table\"]))||this._tag_stack.try_pop(\"tr\",[\"table\",\"thead\",\"tbody\",\"tfoot\"]):(\"th\"===V.tag_name||\"td\"===V.tag_name)&&(O=(O=O||this._tag_stack.try_pop(\"td\",[\"table\",\"thead\",\"tbody\",\"tfoot\",\"tr\"]))||this._tag_stack.try_pop(\"th\",[\"table\",\"thead\",\"tbody\",\"tfoot\",\"tr\"]));return V.parent=this._tag_stack.get_parser_token(),O}},D.exports.Beautifier=U},function(D,g,_){var E=_(6).Options;function y(A){E.call(this,A,\"html\"),1===this.templating.length&&\"auto\"===this.templating[0]&&(this.templating=[\"django\",\"erb\",\"handlebars\",\"php\"]),this.indent_inner_html=this._get_boolean(\"indent_inner_html\"),this.indent_body_inner_html=this._get_boolean(\"indent_body_inner_html\",!0),this.indent_head_inner_html=this._get_boolean(\"indent_head_inner_html\",!0),this.indent_handlebars=this._get_boolean(\"indent_handlebars\",!0),this.wrap_attributes=this._get_selection(\"wrap_attributes\",[\"auto\",\"force\",\"force-aligned\",\"force-expand-multiline\",\"aligned-multiple\",\"preserve\",\"preserve-aligned\"]),this.wrap_attributes_min_attrs=this._get_number(\"wrap_attributes_min_attrs\",2),this.wrap_attributes_indent_size=this._get_number(\"wrap_attributes_indent_size\",this.indent_size),this.extra_liners=this._get_array(\"extra_liners\",[\"head\",\"body\",\"/html\"]),this.inline=this._get_array(\"inline\",[\"a\",\"abbr\",\"area\",\"audio\",\"b\",\"bdi\",\"bdo\",\"br\",\"button\",\"canvas\",\"cite\",\"code\",\"data\",\"datalist\",\"del\",\"dfn\",\"em\",\"embed\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"map\",\"mark\",\"math\",\"meter\",\"noscript\",\"object\",\"output\",\"progress\",\"q\",\"ruby\",\"s\",\"samp\",\"select\",\"small\",\"span\",\"strong\",\"sub\",\"sup\",\"svg\",\"template\",\"textarea\",\"time\",\"u\",\"var\",\"video\",\"wbr\",\"text\",\"acronym\",\"big\",\"strike\",\"tt\"]),this.inline_custom_elements=this._get_boolean(\"inline_custom_elements\",!0),this.void_elements=this._get_array(\"void_elements\",[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\",\"!doctype\",\"?xml\",\"basefont\",\"isindex\"]),this.unformatted=this._get_array(\"unformatted\",[]),this.content_unformatted=this._get_array(\"content_unformatted\",[\"pre\",\"textarea\"]),this.unformatted_content_delimiter=this._get_characters(\"unformatted_content_delimiter\"),this.indent_scripts=this._get_selection(\"indent_scripts\",[\"normal\",\"keep\",\"separate\"])}y.prototype=new E,D.exports.Options=y},function(D,g,_){var E=_(9).Tokenizer,y=_(9).TOKEN,A=_(13).Directives,x=_(14).TemplatablePattern,M=_(12).Pattern,w={TAG_OPEN:\"TK_TAG_OPEN\",TAG_CLOSE:\"TK_TAG_CLOSE\",CONTROL_FLOW_OPEN:\"TK_CONTROL_FLOW_OPEN\",CONTROL_FLOW_CLOSE:\"TK_CONTROL_FLOW_CLOSE\",ATTRIBUTE:\"TK_ATTRIBUTE\",EQUALS:\"TK_EQUALS\",VALUE:\"TK_VALUE\",COMMENT:\"TK_COMMENT\",TEXT:\"TK_TEXT\",UNKNOWN:\"TK_UNKNOWN\",START:y.START,RAW:y.RAW,EOF:y.EOF},P=new A(/<\\!--/,/-->/),j=function(Z,$){E.call(this,Z,$),this._current_tag_name=\"\";var N=new x(this._input).read_options(this._options),B=new M(this._input);if(this.__patterns={word:N.until(/[\\n\\r\\t <]/),word_control_flow_close_excluded:N.until(/[\\n\\r\\t <}]/),single_quote:N.until_after(/'/),double_quote:N.until_after(/\"/),attribute:N.until(/[\\n\\r\\t =>]|\\/>/),element_name:N.until(/[\\n\\r\\t >\\/]/),angular_control_flow_start:B.matching(/\\@[a-zA-Z]+[^({]*[({]/),handlebars_comment:B.starting_with(/{{!--/).until_after(/--}}/),handlebars:B.starting_with(/{{/).until_after(/}}/),handlebars_open:B.until(/[\\n\\r\\t }]/),handlebars_raw_close:B.until(/}}/),comment:B.starting_with(/<!--/).until_after(/-->/),cdata:B.starting_with(/<!\\[CDATA\\[/).until_after(/]]>/),conditional_comment:B.starting_with(/<!\\[/).until_after(/]>/),processing:B.starting_with(/<\\?/).until_after(/\\?>/)},this._options.indent_handlebars&&(this.__patterns.word=this.__patterns.word.exclude(\"handlebars\"),this.__patterns.word_control_flow_close_excluded=this.__patterns.word_control_flow_close_excluded.exclude(\"handlebars\")),this._unformatted_content_delimiter=null,this._options.unformatted_content_delimiter){var U=this._input.get_literal_regexp(this._options.unformatted_content_delimiter);this.__patterns.unformatted_content_delimiter=B.matching(U).until_after(U)}};(j.prototype=new E)._is_comment=function(Z){return!1},j.prototype._is_opening=function(Z){return Z.type===w.TAG_OPEN||Z.type===w.CONTROL_FLOW_OPEN},j.prototype._is_closing=function(Z,$){return Z.type===w.TAG_CLOSE&&$&&((\">\"===Z.text||\"/>\"===Z.text)&&\"<\"===$.text[0]||\"}}\"===Z.text&&\"{\"===$.text[0]&&\"{\"===$.text[1])||Z.type===w.CONTROL_FLOW_CLOSE&&\"}\"===Z.text&&$.text.endsWith(\"{\")},j.prototype._reset=function(){this._current_tag_name=\"\"},j.prototype._get_next_token=function(Z,$){var N=null;this._readWhitespace();var B=this._input.peek();return null===B?this._create_token(w.EOF,\"\"):N=(N=(N=(N=(N=(N=(N=(N=(N=(N=N||this._read_open_handlebars(B,$))||this._read_attribute(B,Z,$))||this._read_close(B,$))||this._read_control_flows(B,$))||this._read_raw_content(B,Z,$))||this._read_content_word(B,$))||this._read_comment_or_cdata(B))||this._read_processing(B))||this._read_open(B,$))||this._create_token(w.UNKNOWN,this._input.next())},j.prototype._read_comment_or_cdata=function(Z){var $=null,N=null,B=null;return\"<\"===Z&&(\"!\"===this._input.peek(1)&&((N=this.__patterns.comment.read())?(B=P.get_directives(N))&&\"start\"===B.ignore&&(N+=P.readIgnored(this._input)):N=this.__patterns.cdata.read()),N&&(($=this._create_token(w.COMMENT,N)).directives=B)),$},j.prototype._read_processing=function(Z){var $=null,N=null;if(\"<\"===Z){var U=this._input.peek(1);(\"!\"===U||\"?\"===U)&&(N=(N=this.__patterns.conditional_comment.read())||this.__patterns.processing.read()),N&&(($=this._create_token(w.COMMENT,N)).directives=null)}return $},j.prototype._read_open=function(Z,$){var N=null,B=null;return(!$||$.type===w.CONTROL_FLOW_OPEN)&&\"<\"===Z&&(N=this._input.next(),\"/\"===this._input.peek()&&(N+=this._input.next()),N+=this.__patterns.element_name.read(),B=this._create_token(w.TAG_OPEN,N)),B},j.prototype._read_open_handlebars=function(Z,$){var N=null,B=null;return(!$||$.type===w.CONTROL_FLOW_OPEN)&&this._options.indent_handlebars&&\"{\"===Z&&\"{\"===this._input.peek(1)&&(\"!\"===this._input.peek(2)?(N=(N=this.__patterns.handlebars_comment.read())||this.__patterns.handlebars.read(),B=this._create_token(w.COMMENT,N)):(N=this.__patterns.handlebars_open.read(),B=this._create_token(w.TAG_OPEN,N))),B},j.prototype._read_control_flows=function(Z,$){var N=\"\",B=null;if(!this._options.templating.includes(\"angular\")||!this._options.indent_handlebars)return B;if(\"@\"===Z){if(\"\"===(N=this.__patterns.angular_control_flow_start.read()))return B;for(var U=N.endsWith(\"(\")?1:0,ie=0;!N.endsWith(\"{\")||U!==ie;){var W=this._input.next();if(null===W)break;\"(\"===W?U++:\")\"===W&&ie++,N+=W}B=this._create_token(w.CONTROL_FLOW_OPEN,N)}else\"}\"===Z&&$&&$.type===w.CONTROL_FLOW_OPEN&&(N=this._input.next(),B=this._create_token(w.CONTROL_FLOW_CLOSE,N));return B},j.prototype._read_close=function(Z,$){var N=null,B=null;return $&&$.type===w.TAG_OPEN&&(\"<\"===$.text[0]&&(\">\"===Z||\"/\"===Z&&\">\"===this._input.peek(1))?(N=this._input.next(),\"/\"===Z&&(N+=this._input.next()),B=this._create_token(w.TAG_CLOSE,N)):\"{\"===$.text[0]&&\"}\"===Z&&\"}\"===this._input.peek(1)&&(this._input.next(),this._input.next(),B=this._create_token(w.TAG_CLOSE,\"}}\"))),B},j.prototype._read_attribute=function(Z,$,N){var B=null,U=\"\";if(N&&\"<\"===N.text[0])if(\"=\"===Z)B=this._create_token(w.EQUALS,this._input.next());else if('\"'===Z||\"'\"===Z){var ie=this._input.next();ie+='\"'===Z?this.__patterns.double_quote.read():this.__patterns.single_quote.read(),B=this._create_token(w.VALUE,ie)}else(U=this.__patterns.attribute.read())&&(B=this._create_token($.type===w.EQUALS?w.VALUE:w.ATTRIBUTE,U));return B},j.prototype._is_content_unformatted=function(Z){return-1===this._options.void_elements.indexOf(Z)&&(-1!==this._options.content_unformatted.indexOf(Z)||-1!==this._options.unformatted.indexOf(Z))},j.prototype._read_raw_content=function(Z,$,N){var B=\"\";if(N&&\"{\"===N.text[0])B=this.__patterns.handlebars_raw_close.read();else if($.type===w.TAG_CLOSE&&\"<\"===$.opened.text[0]&&\"/\"!==$.text[0]){var U=$.opened.text.substr(1).toLowerCase();if(\"script\"===U||\"style\"===U){var ie=this._read_comment_or_cdata(Z);if(ie)return ie.type=w.TEXT,ie;B=this._input.readUntil(new RegExp(\"</\"+U+\"[\\\\n\\\\r\\\\t ]*?>\",\"ig\"))}else this._is_content_unformatted(U)&&(B=this._input.readUntil(new RegExp(\"</\"+U+\"[\\\\n\\\\r\\\\t ]*?>\",\"ig\")))}return B?this._create_token(w.TEXT,B):null},j.prototype._read_content_word=function(Z,$){var N=\"\";if(this._options.unformatted_content_delimiter&&Z===this._options.unformatted_content_delimiter[0]&&(N=this.__patterns.unformatted_content_delimiter.read()),N||(N=$&&$.type===w.CONTROL_FLOW_OPEN?this.__patterns.word_control_flow_close_excluded.read():this.__patterns.word.read()),N)return this._create_token(w.TEXT,N)},D.exports.Tokenizer=j,D.exports.TOKEN=w}],te={},F=function z(D){var g=te[D];if(void 0!==g)return g.exports;var _=te[D]={exports:{}};return Oe[D](_,_.exports,z),_.exports}(18);Te=F}();var Ne=Te;xe=[it,it(405),it(7)],void 0!==(ve=function(Oe){var te=it(405),z=it(7);return{html_beautify:function(F,D){return Ne(F,D,te.js_beautify,z.css_beautify)}}}.apply(Wt,xe))&&(Tt.exports=ve)}()},405:(Tt,Wt)=>{var xe;!function(){var ve;!function(){\"use strict\";var Ne=[function(te,z,F){var D=F(1).Beautifier,g=F(5).Options;te.exports=function _(E,y){return new D(E,y).beautify()},te.exports.defaultOptions=function(){return new g}},function(te,z,F){var D=F(2).Output,g=F(3).Token,_=F(4),E=F(5).Options,y=F(7).Tokenizer,A=F(7).line_starters,x=F(7).positionable_operators,M=F(7).TOKEN;function w(S,Q){return-1!==Q.indexOf(S)}function P(S){return S.replace(/^\\s+/g,\"\")}function Z(S,Q){return S&&S.type===M.RESERVED&&S.text===Q}function $(S,Q){return S&&S.type===M.RESERVED&&w(S.text,Q)}var N=[\"case\",\"return\",\"do\",\"if\",\"throw\",\"else\",\"await\",\"break\",\"continue\",\"async\"],U=function j(S){for(var Q={},re=0;re<S.length;re++)Q[S[re].replace(/-/g,\"_\")]=S[re];return Q}([\"before-newline\",\"after-newline\",\"preserve-newline\"]),ie=[U.before_newline,U.preserve_newline];function ut(S,Q){Q.multiline_frame||\"ForInitializer\"===Q.mode||\"Conditional\"===Q.mode||S.remove_indent(Q.start_line_index)}function O(S){return\"ArrayLiteral\"===S}function K(S){return w(S,[\"Expression\",\"ForInitializer\",\"Conditional\"])}function q(S,Q){Q=Q||{},this._source_text=S||\"\",this._output=null,this._tokens=null,this._last_last_text=null,this._flags=null,this._previous_flags=null,this._flag_store=null,this._options=new E(Q)}q.prototype.create_flags=function(S,Q){var re=0;return S&&(re=S.indentation_level,!this._output.just_added_newline()&&S.line_indent_level>re&&(re=S.line_indent_level)),{mode:Q,parent:S,last_token:S?S.last_token:new g(M.START_BLOCK,\"\"),last_word:S?S.last_word:\"\",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,inline_frame:!1,if_block:!1,else_block:!1,class_start_block:!1,do_block:!1,do_while:!1,import_block:!1,in_case_statement:!1,in_case:!1,case_body:!1,case_block:!1,indentation_level:re,alignment:0,line_indent_level:S?S.line_indent_level:re,start_line_index:this._output.get_line_number(),ternary_depth:0}},q.prototype._reset=function(S){var Q=S.match(/^[\\t ]*/)[0];this._last_last_text=\"\",this._output=new D(this._options,Q),this._output.raw=this._options.test_output_raw,this._flag_store=[],this.set_mode(\"BlockStatement\");var re=new y(S,this._options);return this._tokens=re.tokenize(),S},q.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var Q=this._reset(this._source_text),re=this._options.eol;\"auto\"===this._options.eol&&(re=\"\\n\",Q&&_.lineBreak.test(Q||\"\")&&(re=Q.match(_.lineBreak)[0]));for(var ke=this._tokens.next();ke;)this.handle_token(ke),this._last_last_text=this._flags.last_token.text,this._flags.last_token=ke,ke=this._tokens.next();return this._output.get_code(re)},q.prototype.handle_token=function(S,Q){S.type===M.START_EXPR?this.handle_start_expr(S):S.type===M.END_EXPR?this.handle_end_expr(S):S.type===M.START_BLOCK?this.handle_start_block(S):S.type===M.END_BLOCK?this.handle_end_block(S):S.type===M.WORD||S.type===M.RESERVED?this.handle_word(S):S.type===M.SEMICOLON?this.handle_semicolon(S):S.type===M.STRING?this.handle_string(S):S.type===M.EQUALS?this.handle_equals(S):S.type===M.OPERATOR?this.handle_operator(S):S.type===M.COMMA?this.handle_comma(S):S.type===M.BLOCK_COMMENT?this.handle_block_comment(S,Q):S.type===M.COMMENT?this.handle_comment(S,Q):S.type===M.DOT?this.handle_dot(S):S.type===M.EOF?this.handle_eof(S):this.handle_unknown(S,Q)},q.prototype.handle_whitespace_and_comments=function(S,Q){var re=S.newlines,ke=this._options.keep_array_indentation&&O(this._flags.mode);if(S.comments_before)for(var Ye=S.comments_before.next();Ye;)this.handle_whitespace_and_comments(Ye,Q),this.handle_token(Ye,Q),Ye=S.comments_before.next();if(ke)for(var Yt=0;Yt<re;Yt+=1)this.print_newline(Yt>0,Q);else if(this._options.max_preserve_newlines&&re>this._options.max_preserve_newlines&&(re=this._options.max_preserve_newlines),this._options.preserve_newlines&&re>1){this.print_newline(!1,Q);for(var qt=1;qt<re;qt+=1)this.print_newline(!0,Q)}};var fe=[\"async\",\"break\",\"continue\",\"return\",\"throw\",\"yield\"];q.prototype.allow_wrap_or_preserved_newline=function(S,Q){if(Q=void 0!==Q&&Q,!this._output.just_added_newline()){var re=this._options.preserve_newlines&&S.newlines||Q;if(w(this._flags.last_token.text,x)||w(S.text,x)){var Ye=w(this._flags.last_token.text,x)&&w(this._options.operator_position,ie)||w(S.text,x);re=re&&Ye}if(re)this.print_newline(!1,!0);else if(this._options.wrap_line_length){if($(this._flags.last_token,fe))return;this._output.set_wrap_point()}}},q.prototype.print_newline=function(S,Q){if(!Q&&\";\"!==this._flags.last_token.text&&\",\"!==this._flags.last_token.text&&\"=\"!==this._flags.last_token.text&&(this._flags.last_token.type!==M.OPERATOR||\"--\"===this._flags.last_token.text||\"++\"===this._flags.last_token.text))for(var re=this._tokens.peek();!(\"Statement\"!==this._flags.mode||this._flags.if_block&&Z(re,\"else\")||this._flags.do_block);)this.restore_mode();this._output.add_new_line(S)&&(this._flags.multiline_frame=!0)},q.prototype.print_token_line_indentation=function(S){this._output.just_added_newline()&&(this._options.keep_array_indentation&&S.newlines&&(\"[\"===S.text||O(this._flags.mode))?(this._output.current_line.set_indent(-1),this._output.current_line.push(S.whitespace_before),this._output.space_before_token=!1):this._output.set_indent(this._flags.indentation_level,this._flags.alignment)&&(this._flags.line_indent_level=this._flags.indentation_level))},q.prototype.print_token=function(S){if(this._output.raw)this._output.add_raw_token(S);else{if(this._options.comma_first&&S.previous&&S.previous.type===M.COMMA&&this._output.just_added_newline()&&\",\"===this._output.previous_line.last()){var Q=this._output.previous_line.pop();this._output.previous_line.is_empty()&&(this._output.previous_line.push(Q),this._output.trim(!0),this._output.current_line.pop(),this._output.trim()),this.print_token_line_indentation(S),this._output.add_token(\",\"),this._output.space_before_token=!0}this.print_token_line_indentation(S),this._output.non_breaking_space=!0,this._output.add_token(S.text),this._output.previous_token_wrapped&&(this._flags.multiline_frame=!0)}},q.prototype.indent=function(){this._flags.indentation_level+=1,this._output.set_indent(this._flags.indentation_level,this._flags.alignment)},q.prototype.deindent=function(){this._flags.indentation_level>0&&(!this._flags.parent||this._flags.indentation_level>this._flags.parent.indentation_level)&&(this._flags.indentation_level-=1,this._output.set_indent(this._flags.indentation_level,this._flags.alignment))},q.prototype.set_mode=function(S){this._flags?(this._flag_store.push(this._flags),this._previous_flags=this._flags):this._previous_flags=this.create_flags(null,S),this._flags=this.create_flags(this._previous_flags,S),this._output.set_indent(this._flags.indentation_level,this._flags.alignment)},q.prototype.restore_mode=function(){this._flag_store.length>0&&(this._previous_flags=this._flags,this._flags=this._flag_store.pop(),\"Statement\"===this._previous_flags.mode&&ut(this._output,this._previous_flags),this._output.set_indent(this._flags.indentation_level,this._flags.alignment))},q.prototype.start_of_object_property=function(){return\"ObjectLiteral\"===this._flags.parent.mode&&\"Statement\"===this._flags.mode&&(\":\"===this._flags.last_token.text&&0===this._flags.ternary_depth||$(this._flags.last_token,[\"get\",\"set\"]))},q.prototype.start_of_statement=function(S){var Q=!1;return!!(Q=(Q=(Q=(Q=(Q=(Q=(Q=Q||$(this._flags.last_token,[\"var\",\"let\",\"const\"])&&S.type===M.WORD)||Z(this._flags.last_token,\"do\"))||!(\"ObjectLiteral\"===this._flags.parent.mode&&\"Statement\"===this._flags.mode)&&$(this._flags.last_token,fe)&&!S.newlines)||Z(this._flags.last_token,\"else\")&&!(Z(S,\"if\")&&!S.comments_before))||this._flags.last_token.type===M.END_EXPR&&(\"ForInitializer\"===this._previous_flags.mode||\"Conditional\"===this._previous_flags.mode))||this._flags.last_token.type===M.WORD&&\"BlockStatement\"===this._flags.mode&&!this._flags.in_case&&!(\"--\"===S.text||\"++\"===S.text)&&\"function\"!==this._last_last_text&&S.type!==M.WORD&&S.type!==M.RESERVED)||\"ObjectLiteral\"===this._flags.mode&&(\":\"===this._flags.last_token.text&&0===this._flags.ternary_depth||$(this._flags.last_token,[\"get\",\"set\"])))&&(this.set_mode(\"Statement\"),this.indent(),this.handle_whitespace_and_comments(S,!0),this.start_of_object_property()||this.allow_wrap_or_preserved_newline(S,$(S,[\"do\",\"for\",\"if\",\"while\"])),!0)},q.prototype.handle_start_expr=function(S){this.start_of_statement(S)||this.handle_whitespace_and_comments(S);var Q=\"Expression\";if(\"[\"===S.text){if(this._flags.last_token.type===M.WORD||\")\"===this._flags.last_token.text)return $(this._flags.last_token,A)&&(this._output.space_before_token=!0),this.print_token(S),this.set_mode(Q),this.indent(),void(this._options.space_in_paren&&(this._output.space_before_token=!0));Q=\"ArrayLiteral\",O(this._flags.mode)&&(\"[\"===this._flags.last_token.text||\",\"===this._flags.last_token.text&&(\"]\"===this._last_last_text||\"}\"===this._last_last_text))&&(this._options.keep_array_indentation||this.print_newline()),w(this._flags.last_token.type,[M.START_EXPR,M.END_EXPR,M.WORD,M.OPERATOR,M.DOT])||(this._output.space_before_token=!0)}else{if(this._flags.last_token.type===M.RESERVED)\"for\"===this._flags.last_token.text?(this._output.space_before_token=this._options.space_before_conditional,Q=\"ForInitializer\"):w(this._flags.last_token.text,[\"if\",\"while\",\"switch\"])?(this._output.space_before_token=this._options.space_before_conditional,Q=\"Conditional\"):w(this._flags.last_word,[\"await\",\"async\"])?this._output.space_before_token=!0:\"import\"===this._flags.last_token.text&&\"\"===S.whitespace_before?this._output.space_before_token=!1:(w(this._flags.last_token.text,A)||\"catch\"===this._flags.last_token.text)&&(this._output.space_before_token=!0);else if(this._flags.last_token.type===M.EQUALS||this._flags.last_token.type===M.OPERATOR)this.start_of_object_property()||this.allow_wrap_or_preserved_newline(S);else if(this._flags.last_token.type===M.WORD){this._output.space_before_token=!1;var re=this._tokens.peek(-3);if(this._options.space_after_named_function&&re){var ke=this._tokens.peek(-4);$(re,[\"async\",\"function\"])||\"*\"===re.text&&$(ke,[\"async\",\"function\"])?this._output.space_before_token=!0:\"ObjectLiteral\"===this._flags.mode?(\"{\"===re.text||\",\"===re.text||\"*\"===re.text&&(\"{\"===ke.text||\",\"===ke.text))&&(this._output.space_before_token=!0):this._flags.parent&&this._flags.parent.class_start_block&&(this._output.space_before_token=!0)}}else this.allow_wrap_or_preserved_newline(S);(this._flags.last_token.type===M.RESERVED&&(\"function\"===this._flags.last_word||\"typeof\"===this._flags.last_word)||\"*\"===this._flags.last_token.text&&(w(this._last_last_text,[\"function\",\"yield\"])||\"ObjectLiteral\"===this._flags.mode&&w(this._last_last_text,[\"{\",\",\"])))&&(this._output.space_before_token=this._options.space_after_anon_function)}\";\"===this._flags.last_token.text||this._flags.last_token.type===M.START_BLOCK?this.print_newline():(this._flags.last_token.type===M.END_EXPR||this._flags.last_token.type===M.START_EXPR||this._flags.last_token.type===M.END_BLOCK||\".\"===this._flags.last_token.text||this._flags.last_token.type===M.COMMA)&&this.allow_wrap_or_preserved_newline(S,S.newlines),this.print_token(S),this.set_mode(Q),this._options.space_in_paren&&(this._output.space_before_token=!0),this.indent()},q.prototype.handle_end_expr=function(S){for(;\"Statement\"===this._flags.mode;)this.restore_mode();this.handle_whitespace_and_comments(S),this._flags.multiline_frame&&this.allow_wrap_or_preserved_newline(S,\"]\"===S.text&&O(this._flags.mode)&&!this._options.keep_array_indentation),this._options.space_in_paren&&(this._flags.last_token.type!==M.START_EXPR||this._options.space_in_empty_paren?this._output.space_before_token=!0:(this._output.trim(),this._output.space_before_token=!1)),this.deindent(),this.print_token(S),this.restore_mode(),ut(this._output,this._previous_flags),this._flags.do_while&&\"Conditional\"===this._previous_flags.mode&&(this._previous_flags.mode=\"Expression\",this._flags.do_block=!1,this._flags.do_while=!1)},q.prototype.handle_start_block=function(S){this.handle_whitespace_and_comments(S);var Q=this._tokens.peek(),re=this._tokens.peek(1);\"switch\"===this._flags.last_word&&this._flags.last_token.type===M.END_EXPR?(this.set_mode(\"BlockStatement\"),this._flags.in_case_statement=!0):this._flags.case_body?this.set_mode(\"BlockStatement\"):re&&(w(re.text,[\":\",\",\"])&&w(Q.type,[M.STRING,M.WORD,M.RESERVED])||w(Q.text,[\"get\",\"set\",\"...\"])&&w(re.type,[M.WORD,M.RESERVED]))?w(this._last_last_text,[\"class\",\"interface\"])&&!w(re.text,[\":\",\",\"])?this.set_mode(\"BlockStatement\"):this.set_mode(\"ObjectLiteral\"):this._flags.last_token.type===M.OPERATOR&&\"=>\"===this._flags.last_token.text?this.set_mode(\"BlockStatement\"):w(this._flags.last_token.type,[M.EQUALS,M.START_EXPR,M.COMMA,M.OPERATOR])||$(this._flags.last_token,[\"return\",\"throw\",\"import\",\"default\"])?this.set_mode(\"ObjectLiteral\"):this.set_mode(\"BlockStatement\"),this._flags.last_token&&$(this._flags.last_token.previous,[\"class\",\"extends\"])&&(this._flags.class_start_block=!0);var ke=!Q.comments_before&&\"}\"===Q.text,Ye=ke&&\"function\"===this._flags.last_word&&this._flags.last_token.type===M.END_EXPR;if(this._options.brace_preserve_inline){var Yt=0,qt=null;this._flags.inline_frame=!0;do{if((qt=this._tokens.peek((Yt+=1)-1)).newlines){this._flags.inline_frame=!1;break}}while(qt.type!==M.EOF&&(qt.type!==M.END_BLOCK||qt.opened!==S))}(\"expand\"===this._options.brace_style||\"none\"===this._options.brace_style&&S.newlines)&&!this._flags.inline_frame?this._flags.last_token.type!==M.OPERATOR&&(Ye||this._flags.last_token.type===M.EQUALS||$(this._flags.last_token,N)&&\"else\"!==this._flags.last_token.text)?this._output.space_before_token=!0:this.print_newline(!1,!0):(O(this._previous_flags.mode)&&(this._flags.last_token.type===M.START_EXPR||this._flags.last_token.type===M.COMMA)&&((this._flags.last_token.type===M.COMMA||this._options.space_in_paren)&&(this._output.space_before_token=!0),(this._flags.last_token.type===M.COMMA||this._flags.last_token.type===M.START_EXPR&&this._flags.inline_frame)&&(this.allow_wrap_or_preserved_newline(S),this._previous_flags.multiline_frame=this._previous_flags.multiline_frame||this._flags.multiline_frame,this._flags.multiline_frame=!1)),this._flags.last_token.type!==M.OPERATOR&&this._flags.last_token.type!==M.START_EXPR&&(w(this._flags.last_token.type,[M.START_BLOCK,M.SEMICOLON])&&!this._flags.inline_frame?this.print_newline():this._output.space_before_token=!0)),this.print_token(S),this.indent(),!ke&&(!this._options.brace_preserve_inline||!this._flags.inline_frame)&&this.print_newline()},q.prototype.handle_end_block=function(S){for(this.handle_whitespace_and_comments(S);\"Statement\"===this._flags.mode;)this.restore_mode();var Q=this._flags.last_token.type===M.START_BLOCK;this._flags.inline_frame&&!Q?this._output.space_before_token=!0:\"expand\"===this._options.brace_style?Q||this.print_newline():Q||(O(this._flags.mode)&&this._options.keep_array_indentation?(this._options.keep_array_indentation=!1,this.print_newline(),this._options.keep_array_indentation=!0):this.print_newline()),this.restore_mode(),this.print_token(S)},q.prototype.handle_word=function(S){if(S.type===M.RESERVED&&(w(S.text,[\"set\",\"get\"])&&\"ObjectLiteral\"!==this._flags.mode||\"import\"===S.text&&w(this._tokens.peek().text,[\"(\",\".\"])||w(S.text,[\"as\",\"from\"])&&!this._flags.import_block||\"ObjectLiteral\"===this._flags.mode&&\":\"===this._tokens.peek().text)&&(S.type=M.WORD),this.start_of_statement(S)?$(this._flags.last_token,[\"var\",\"let\",\"const\"])&&S.type===M.WORD&&(this._flags.declaration_statement=!0):!S.newlines||K(this._flags.mode)||this._flags.last_token.type===M.OPERATOR&&\"--\"!==this._flags.last_token.text&&\"++\"!==this._flags.last_token.text||this._flags.last_token.type===M.EQUALS||!this._options.preserve_newlines&&$(this._flags.last_token,[\"var\",\"let\",\"const\",\"set\",\"get\"])?this.handle_whitespace_and_comments(S):(this.handle_whitespace_and_comments(S),this.print_newline()),this._flags.do_block&&!this._flags.do_while){if(Z(S,\"while\"))return this._output.space_before_token=!0,this.print_token(S),this._output.space_before_token=!0,void(this._flags.do_while=!0);this.print_newline(),this._flags.do_block=!1}if(this._flags.if_block)if(!this._flags.else_block&&Z(S,\"else\"))this._flags.else_block=!0;else{for(;\"Statement\"===this._flags.mode;)this.restore_mode();this._flags.if_block=!1,this._flags.else_block=!1}if(this._flags.in_case_statement&&$(S,[\"case\",\"default\"]))return this.print_newline(),!this._flags.case_block&&(this._flags.case_body||this._options.jslint_happy)&&this.deindent(),this._flags.case_body=!1,this.print_token(S),void(this._flags.in_case=!0);if((this._flags.last_token.type===M.COMMA||this._flags.last_token.type===M.START_EXPR||this._flags.last_token.type===M.EQUALS||this._flags.last_token.type===M.OPERATOR)&&!this.start_of_object_property()&&!(w(this._flags.last_token.text,[\"+\",\"-\"])&&\":\"===this._last_last_text&&\"ObjectLiteral\"===this._flags.parent.mode)&&this.allow_wrap_or_preserved_newline(S),Z(S,\"function\"))return(w(this._flags.last_token.text,[\"}\",\";\"])||this._output.just_added_newline()&&!(w(this._flags.last_token.text,[\"(\",\"[\",\"{\",\":\",\"=\",\",\"])||this._flags.last_token.type===M.OPERATOR))&&!this._output.just_added_blankline()&&!S.comments_before&&(this.print_newline(),this.print_newline(!0)),this._flags.last_token.type===M.RESERVED||this._flags.last_token.type===M.WORD?$(this._flags.last_token,[\"get\",\"set\",\"new\",\"export\"])||$(this._flags.last_token,fe)||Z(this._flags.last_token,\"default\")&&\"export\"===this._last_last_text||\"declare\"===this._flags.last_token.text?this._output.space_before_token=!0:this.print_newline():this._flags.last_token.type===M.OPERATOR||\"=\"===this._flags.last_token.text?this._output.space_before_token=!0:!this._flags.multiline_frame&&(K(this._flags.mode)||O(this._flags.mode))||this.print_newline(),this.print_token(S),void(this._flags.last_word=S.text);var re=\"NONE\";this._flags.last_token.type===M.END_BLOCK?this._previous_flags.inline_frame?re=\"SPACE\":$(S,[\"else\",\"catch\",\"finally\",\"from\"])?\"expand\"===this._options.brace_style||\"end-expand\"===this._options.brace_style||\"none\"===this._options.brace_style&&S.newlines?re=\"NEWLINE\":(re=\"SPACE\",this._output.space_before_token=!0):re=\"NEWLINE\":this._flags.last_token.type===M.SEMICOLON&&\"BlockStatement\"===this._flags.mode?re=\"NEWLINE\":this._flags.last_token.type===M.SEMICOLON&&K(this._flags.mode)?re=\"SPACE\":this._flags.last_token.type===M.STRING?re=\"NEWLINE\":this._flags.last_token.type===M.RESERVED||this._flags.last_token.type===M.WORD||\"*\"===this._flags.last_token.text&&(w(this._last_last_text,[\"function\",\"yield\"])||\"ObjectLiteral\"===this._flags.mode&&w(this._last_last_text,[\"{\",\",\"]))?re=\"SPACE\":this._flags.last_token.type===M.START_BLOCK?re=this._flags.inline_frame?\"SPACE\":\"NEWLINE\":this._flags.last_token.type===M.END_EXPR&&(this._output.space_before_token=!0,re=\"NEWLINE\"),$(S,A)&&\")\"!==this._flags.last_token.text&&(re=this._flags.inline_frame||\"else\"===this._flags.last_token.text||\"export\"===this._flags.last_token.text?\"SPACE\":\"NEWLINE\"),$(S,[\"else\",\"catch\",\"finally\"])?(this._flags.last_token.type!==M.END_BLOCK||\"BlockStatement\"!==this._previous_flags.mode||\"expand\"===this._options.brace_style||\"end-expand\"===this._options.brace_style||\"none\"===this._options.brace_style&&S.newlines)&&!this._flags.inline_frame?this.print_newline():(this._output.trim(!0),\"}\"!==this._output.current_line.last()&&this.print_newline(),this._output.space_before_token=!0):\"NEWLINE\"===re?$(this._flags.last_token,N)||\"declare\"===this._flags.last_token.text&&$(S,[\"var\",\"let\",\"const\"])?this._output.space_before_token=!0:this._flags.last_token.type!==M.END_EXPR?(this._flags.last_token.type!==M.START_EXPR||!$(S,[\"var\",\"let\",\"const\"]))&&\":\"!==this._flags.last_token.text&&(Z(S,\"if\")&&Z(S.previous,\"else\")?this._output.space_before_token=!0:this.print_newline()):$(S,A)&&\")\"!==this._flags.last_token.text&&this.print_newline():this._flags.multiline_frame&&O(this._flags.mode)&&\",\"===this._flags.last_token.text&&\"}\"===this._last_last_text?this.print_newline():\"SPACE\"===re&&(this._output.space_before_token=!0),S.previous&&(S.previous.type===M.WORD||S.previous.type===M.RESERVED)&&(this._output.space_before_token=!0),this.print_token(S),this._flags.last_word=S.text,S.type===M.RESERVED&&(\"do\"===S.text?this._flags.do_block=!0:\"if\"===S.text?this._flags.if_block=!0:\"import\"===S.text?this._flags.import_block=!0:this._flags.import_block&&Z(S,\"from\")&&(this._flags.import_block=!1))},q.prototype.handle_semicolon=function(S){this.start_of_statement(S)?this._output.space_before_token=!1:this.handle_whitespace_and_comments(S);for(var Q=this._tokens.peek();!(\"Statement\"!==this._flags.mode||this._flags.if_block&&Z(Q,\"else\")||this._flags.do_block);)this.restore_mode();this._flags.import_block&&(this._flags.import_block=!1),this.print_token(S)},q.prototype.handle_string=function(S){S.text.startsWith(\"`\")&&0===S.newlines&&\"\"===S.whitespace_before&&(\")\"===S.previous.text||this._flags.last_token.type===M.WORD)||(this.start_of_statement(S)?this._output.space_before_token=!0:(this.handle_whitespace_and_comments(S),this._flags.last_token.type===M.RESERVED||this._flags.last_token.type===M.WORD||this._flags.inline_frame?this._output.space_before_token=!0:this._flags.last_token.type===M.COMMA||this._flags.last_token.type===M.START_EXPR||this._flags.last_token.type===M.EQUALS||this._flags.last_token.type===M.OPERATOR?this.start_of_object_property()||this.allow_wrap_or_preserved_newline(S):!S.text.startsWith(\"`\")||this._flags.last_token.type!==M.END_EXPR||\"]\"!==S.previous.text&&\")\"!==S.previous.text||0!==S.newlines?this.print_newline():this._output.space_before_token=!0)),this.print_token(S)},q.prototype.handle_equals=function(S){this.start_of_statement(S)||this.handle_whitespace_and_comments(S),this._flags.declaration_statement&&(this._flags.declaration_assignment=!0),this._output.space_before_token=!0,this.print_token(S),this._output.space_before_token=!0},q.prototype.handle_comma=function(S){this.handle_whitespace_and_comments(S,!0),this.print_token(S),this._output.space_before_token=!0,this._flags.declaration_statement?(K(this._flags.parent.mode)&&(this._flags.declaration_assignment=!1),this._flags.declaration_assignment?(this._flags.declaration_assignment=!1,this.print_newline(!1,!0)):this._options.comma_first&&this.allow_wrap_or_preserved_newline(S)):\"ObjectLiteral\"===this._flags.mode||\"Statement\"===this._flags.mode&&\"ObjectLiteral\"===this._flags.parent.mode?(\"Statement\"===this._flags.mode&&this.restore_mode(),this._flags.inline_frame||this.print_newline()):this._options.comma_first&&this.allow_wrap_or_preserved_newline(S)},q.prototype.handle_operator=function(S){var Q=\"*\"===S.text&&($(this._flags.last_token,[\"function\",\"yield\"])||w(this._flags.last_token.type,[M.START_BLOCK,M.COMMA,M.END_BLOCK,M.SEMICOLON])),re=w(S.text,[\"-\",\"+\"])&&(w(this._flags.last_token.type,[M.START_BLOCK,M.START_EXPR,M.EQUALS,M.OPERATOR])||w(this._flags.last_token.text,A)||\",\"===this._flags.last_token.text);if(this.start_of_statement(S)||this.handle_whitespace_and_comments(S,!Q),\"*\"!==S.text||this._flags.last_token.type!==M.DOT)if(\"::\"!==S.text)if(w(S.text,[\"-\",\"+\"])&&this.start_of_object_property())this.print_token(S);else{if(this._flags.last_token.type===M.OPERATOR&&w(this._options.operator_position,ie)&&this.allow_wrap_or_preserved_newline(S),\":\"===S.text&&this._flags.in_case)return this.print_token(S),this._flags.in_case=!1,this._flags.case_body=!0,void(this._tokens.peek().type!==M.START_BLOCK?(this.indent(),this.print_newline(),this._flags.case_block=!1):(this._flags.case_block=!0,this._output.space_before_token=!0));var Ye=!0,Yt=!0,qt=!1;if(\":\"===S.text?0===this._flags.ternary_depth?Ye=!1:(this._flags.ternary_depth-=1,qt=!0):\"?\"===S.text&&(this._flags.ternary_depth+=1),!re&&!Q&&this._options.preserve_newlines&&w(S.text,x)){var xt=\":\"===S.text,Vn=xt&&qt,St=xt&&!qt;switch(this._options.operator_position){case U.before_newline:return this._output.space_before_token=!St,this.print_token(S),(!xt||Vn)&&this.allow_wrap_or_preserved_newline(S),void(this._output.space_before_token=!0);case U.after_newline:return this._output.space_before_token=!0,!xt||Vn?this._tokens.peek().newlines?this.print_newline(!1,!0):this.allow_wrap_or_preserved_newline(S):this._output.space_before_token=!1,this.print_token(S),void(this._output.space_before_token=!0);case U.preserve_newline:return St||this.allow_wrap_or_preserved_newline(S),Ye=!(this._output.just_added_newline()||St),this._output.space_before_token=Ye,this.print_token(S),void(this._output.space_before_token=!0)}}if(Q){this.allow_wrap_or_preserved_newline(S),Ye=!1;var yn=this._tokens.peek();Yt=yn&&w(yn.type,[M.WORD,M.RESERVED])}else if(\"...\"===S.text)this.allow_wrap_or_preserved_newline(S),Ye=this._flags.last_token.type===M.START_BLOCK,Yt=!1;else if(w(S.text,[\"--\",\"++\",\"!\",\"~\"])||re){if((this._flags.last_token.type===M.COMMA||this._flags.last_token.type===M.START_EXPR)&&this.allow_wrap_or_preserved_newline(S),Ye=!1,Yt=!1,S.newlines&&(\"--\"===S.text||\"++\"===S.text||\"~\"===S.text)){var cs=$(this._flags.last_token,N)&&S.newlines;cs&&(this._previous_flags.if_block||this._previous_flags.else_block)&&this.restore_mode(),this.print_newline(cs,!0)}\";\"===this._flags.last_token.text&&K(this._flags.mode)&&(Ye=!0),this._flags.last_token.type===M.RESERVED?Ye=!0:this._flags.last_token.type===M.END_EXPR?Ye=!(\"]\"===this._flags.last_token.text&&(\"--\"===S.text||\"++\"===S.text)):this._flags.last_token.type===M.OPERATOR&&(Ye=w(S.text,[\"--\",\"-\",\"++\",\"+\"])&&w(this._flags.last_token.text,[\"--\",\"-\",\"++\",\"+\"]),w(S.text,[\"+\",\"-\"])&&w(this._flags.last_token.text,[\"--\",\"++\"])&&(Yt=!0)),(\"BlockStatement\"===this._flags.mode&&!this._flags.inline_frame||\"Statement\"===this._flags.mode)&&(\"{\"===this._flags.last_token.text||\";\"===this._flags.last_token.text)&&this.print_newline()}this._output.space_before_token=this._output.space_before_token||Ye,this.print_token(S),this._output.space_before_token=Yt}else this.print_token(S);else this.print_token(S)},q.prototype.handle_block_comment=function(S,Q){return this._output.raw?(this._output.add_raw_token(S),void(S.directives&&\"end\"===S.directives.preserve&&(this._output.raw=this._options.test_output_raw))):S.directives?(this.print_newline(!1,Q),this.print_token(S),\"start\"===S.directives.preserve&&(this._output.raw=!0),void this.print_newline(!1,!0)):_.newline.test(S.text)||S.newlines?void this.print_block_commment(S,Q):(this._output.space_before_token=!0,this.print_token(S),void(this._output.space_before_token=!0))},q.prototype.print_block_commment=function(S,Q){var ke,re=function V(S){for(var Q=[],re=(S=S.replace(_.allLineBreaks,\"\\n\")).indexOf(\"\\n\");-1!==re;)Q.push(S.substring(0,re)),re=(S=S.substring(re+1)).indexOf(\"\\n\");return S.length&&Q.push(S),Q}(S.text),Ye=!1,Yt=!1,qt=S.whitespace_before,xt=qt.length;if(this.print_newline(!1,Q),this.print_token_line_indentation(S),this._output.add_token(re[0]),this.print_newline(!1,Q),re.length>1){for(Ye=function X(S,Q){for(var re=0;re<S.length;re++)if(S[re].trim().charAt(0)!==Q)return!1;return!0}(re=re.slice(1),\"*\"),Yt=function J(S,Q){for(var Ye,re=0,ke=S.length;re<ke;re++)if((Ye=S[re])&&0!==Ye.indexOf(Q))return!1;return!0}(re,qt),Ye&&(this._flags.alignment=1),ke=0;ke<re.length;ke++)Ye?(this.print_token_line_indentation(S),this._output.add_token(P(re[ke]))):Yt&&re[ke]?(this.print_token_line_indentation(S),this._output.add_token(re[ke].substring(xt))):(this._output.current_line.set_indent(-1),this._output.add_token(re[ke])),this.print_newline(!1,Q);this._flags.alignment=0}},q.prototype.handle_comment=function(S,Q){S.newlines?this.print_newline(!1,Q):this._output.trim(!0),this._output.space_before_token=!0,this.print_token(S),this.print_newline(!1,Q)},q.prototype.handle_dot=function(S){this.start_of_statement(S)||this.handle_whitespace_and_comments(S,!0),this._flags.last_token.text.match(\"^[0-9]+$\")&&(this._output.space_before_token=!0),$(this._flags.last_token,N)?this._output.space_before_token=!1:this.allow_wrap_or_preserved_newline(S,\")\"===this._flags.last_token.text&&this._options.break_chained_methods),this._options.unindent_chained_methods&&this._output.just_added_newline()&&this.deindent(),this.print_token(S)},q.prototype.handle_unknown=function(S,Q){this.print_token(S),\"\\n\"===S.text[S.text.length-1]&&this.print_newline(!1,Q)},q.prototype.handle_eof=function(S){for(;\"Statement\"===this._flags.mode;)this.restore_mode();this.handle_whitespace_and_comments(S)},te.exports.Beautifier=q},function(te){function z(g){this.__parent=g,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}function F(g,_){this.__cache=[\"\"],this.__indent_size=g.indent_size,this.__indent_string=g.indent_char,g.indent_with_tabs||(this.__indent_string=new Array(g.indent_size+1).join(g.indent_char)),_=_||\"\",g.indent_level>0&&(_=new Array(g.indent_level+1).join(this.__indent_string)),this.__base_string=_,this.__base_string_length=_.length}function D(g,_){this.__indent_cache=new F(g,_),this.raw=!1,this._end_with_newline=g.end_with_newline,this.indent_size=g.indent_size,this.wrap_line_length=g.wrap_line_length,this.indent_empty_lines=g.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new z(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}z.prototype.clone_empty=function(){var g=new z(this.__parent);return g.set_indent(this.__indent_count,this.__alignment_count),g},z.prototype.item=function(g){return g<0?this.__items[this.__items.length+g]:this.__items[g]},z.prototype.has_match=function(g){for(var _=this.__items.length-1;_>=0;_--)if(this.__items[_].match(g))return!0;return!1},z.prototype.set_indent=function(g,_){this.is_empty()&&(this.__indent_count=g||0,this.__alignment_count=_||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},z.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},z.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},z.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var g=this.__parent.current_line;return g.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),g.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),g.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,\" \"===g.__items[0]&&(g.__items.splice(0,1),g.__character_count-=1),!0}return!1},z.prototype.is_empty=function(){return 0===this.__items.length},z.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},z.prototype.push=function(g){this.__items.push(g);var _=g.lastIndexOf(\"\\n\");-1!==_?this.__character_count=g.length-_:this.__character_count+=g.length},z.prototype.pop=function(){var g=null;return this.is_empty()||(g=this.__items.pop(),this.__character_count-=g.length),g},z.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},z.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},z.prototype.trim=function(){for(;\" \"===this.last();)this.__items.pop(),this.__character_count-=1},z.prototype.toString=function(){var g=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(g=this.__parent.get_indent_string(this.__indent_count)):(g=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),g+=this.__items.join(\"\")),g},F.prototype.get_indent_size=function(g,_){var E=this.__base_string_length;return g<0&&(E=0),(E+=g*this.__indent_size)+(_||0)},F.prototype.get_indent_string=function(g,_){var E=this.__base_string;return _=_||0,g<0&&(g=0,E=\"\"),this.__ensure_cache(_+=g*this.__indent_size),E+this.__cache[_]},F.prototype.__ensure_cache=function(g){for(;g>=this.__cache.length;)this.__add_column()},F.prototype.__add_column=function(){var g=this.__cache.length,_=0,E=\"\";this.__indent_size&&g>=this.__indent_size&&(g-=(_=Math.floor(g/this.__indent_size))*this.__indent_size,E=new Array(_+1).join(this.__indent_string)),g&&(E+=new Array(g+1).join(\" \")),this.__cache.push(E)},D.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},D.prototype.get_line_number=function(){return this.__lines.length},D.prototype.get_indent_string=function(g,_){return this.__indent_cache.get_indent_string(g,_)},D.prototype.get_indent_size=function(g,_){return this.__indent_cache.get_indent_size(g,_)},D.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},D.prototype.add_new_line=function(g){return!(this.is_empty()||!g&&this.just_added_newline()||(this.raw||this.__add_outputline(),0))},D.prototype.get_code=function(g){this.trim(!0);var _=this.current_line.pop();_&&(\"\\n\"===_[_.length-1]&&(_=_.replace(/\\n+$/g,\"\")),this.current_line.push(_)),this._end_with_newline&&this.__add_outputline();var E=this.__lines.join(\"\\n\");return\"\\n\"!==g&&(E=E.replace(/[\\n]/g,g)),E},D.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},D.prototype.set_indent=function(g,_){return this.next_line.set_indent(g=g||0,_=_||0),this.__lines.length>1?(this.current_line.set_indent(g,_),!0):(this.current_line.set_indent(),!1)},D.prototype.add_raw_token=function(g){for(var _=0;_<g.newlines;_++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(g.whitespace_before),this.current_line.push(g.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},D.prototype.add_token=function(g){this.__add_space_before_token(),this.current_line.push(g),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},D.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},D.prototype.remove_indent=function(g){for(var _=this.__lines.length;g<_;)this.__lines[g]._remove_indent(),g++;this.current_line._remove_wrap_indent()},D.prototype.trim=function(g){for(g=void 0!==g&&g,this.current_line.trim();g&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},D.prototype.just_added_newline=function(){return this.current_line.is_empty()},D.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},D.prototype.ensure_empty_line_above=function(g,_){for(var E=this.__lines.length-2;E>=0;){var y=this.__lines[E];if(y.is_empty())break;if(0!==y.item(0).indexOf(g)&&y.item(-1)!==_){this.__lines.splice(E+1,0,new z(this)),this.previous_line=this.__lines[this.__lines.length-2];break}E--}},te.exports.Output=D},function(te){te.exports.Token=function z(F,D,g,_){this.type=F,this.text=D,this.comments_before=null,this.newlines=g||0,this.whitespace_before=_||\"\",this.parent=null,this.next=null,this.previous=null,this.opened=null,this.closed=null,this.directives=null}},function(te,z){var D=\"\\\\x24\\\\x30-\\\\x39\\\\x41-\\\\x5a\\\\x5f\\\\x61-\\\\x7a\",g=\"\\\\xaa\\\\xb5\\\\xba\\\\xc0-\\\\xd6\\\\xd8-\\\\xf6\\\\xf8-\\\\u02c1\\\\u02c6-\\\\u02d1\\\\u02e0-\\\\u02e4\\\\u02ec\\\\u02ee\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037a-\\\\u037d\\\\u0386\\\\u0388-\\\\u038a\\\\u038c\\\\u038e-\\\\u03a1\\\\u03a3-\\\\u03f5\\\\u03f7-\\\\u0481\\\\u048a-\\\\u0527\\\\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\\\\u08a2-\\\\u08ac\\\\u0904-\\\\u0939\\\\u093d\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0977\\\\u0979-\\\\u097f\\\\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\\\\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-\\\\u0c33\\\\u0c35-\\\\u0c39\\\\u0c3d\\\\u0c58\\\\u0c59\\\\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\\\\u0d60\\\\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-\\\\u13f4\\\\u1401-\\\\u166c\\\\u166f-\\\\u167f\\\\u1681-\\\\u169a\\\\u16a0-\\\\u16ea\\\\u16ee-\\\\u16f0\\\\u1700-\\\\u170c\\\\u170e-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176c\\\\u176e-\\\\u1770\\\\u1780-\\\\u17b3\\\\u17d7\\\\u17dc\\\\u1820-\\\\u1877\\\\u1880-\\\\u18a8\\\\u18aa\\\\u18b0-\\\\u18f5\\\\u1900-\\\\u191c\\\\u1950-\\\\u196d\\\\u1970-\\\\u1974\\\\u1980-\\\\u19ab\\\\u19c1-\\\\u19c7\\\\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\\\\u2119-\\\\u211d\\\\u2124\\\\u2126\\\\u2128\\\\u212a-\\\\u212d\\\\u212f-\\\\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\\\\u2e2f\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303c\\\\u3041-\\\\u3096\\\\u309d-\\\\u309f\\\\u30a1-\\\\u30fa\\\\u30fc-\\\\u30ff\\\\u3105-\\\\u312d\\\\u3131-\\\\u318e\\\\u31a0-\\\\u31ba\\\\u31f0-\\\\u31ff\\\\u3400-\\\\u4db5\\\\u4e00-\\\\u9fcc\\\\ua000-\\\\ua48c\\\\ua4d0-\\\\ua4fd\\\\ua500-\\\\ua60c\\\\ua610-\\\\ua61f\\\\ua62a\\\\ua62b\\\\ua640-\\\\ua66e\\\\ua67f-\\\\ua697\\\\ua6a0-\\\\ua6ef\\\\ua717-\\\\ua71f\\\\ua722-\\\\ua788\\\\ua78b-\\\\ua78e\\\\ua790-\\\\ua793\\\\ua7a0-\\\\ua7aa\\\\ua7f8-\\\\ua801\\\\ua803-\\\\ua805\\\\ua807-\\\\ua80a\\\\ua80c-\\\\ua822\\\\ua840-\\\\ua873\\\\ua882-\\\\ua8b3\\\\ua8f2-\\\\ua8f7\\\\ua8fb\\\\ua90a-\\\\ua925\\\\ua930-\\\\ua946\\\\ua960-\\\\ua97c\\\\ua984-\\\\ua9b2\\\\ua9cf\\\\uaa00-\\\\uaa28\\\\uaa40-\\\\uaa42\\\\uaa44-\\\\uaa4b\\\\uaa60-\\\\uaa76\\\\uaa7a\\\\uaa80-\\\\uaaaf\\\\uaab1\\\\uaab5\\\\uaab6\\\\uaab9-\\\\uaabd\\\\uaac0\\\\uaac2\\\\uaadb-\\\\uaadd\\\\uaae0-\\\\uaaea\\\\uaaf2-\\\\uaaf4\\\\uab01-\\\\uab06\\\\uab09-\\\\uab0e\\\\uab11-\\\\uab16\\\\uab20-\\\\uab26\\\\uab28-\\\\uab2e\\\\uabc0-\\\\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\",_=\"\\\\u0300-\\\\u036f\\\\u0483-\\\\u0487\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u0620-\\\\u0649\\\\u0672-\\\\u06d3\\\\u06e7-\\\\u06e8\\\\u06fb-\\\\u06fc\\\\u0730-\\\\u074a\\\\u0800-\\\\u0814\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0840-\\\\u0857\\\\u08e4-\\\\u08fe\\\\u0900-\\\\u0903\\\\u093a-\\\\u093c\\\\u093e-\\\\u094f\\\\u0951-\\\\u0957\\\\u0962-\\\\u0963\\\\u0966-\\\\u096f\\\\u0981-\\\\u0983\\\\u09bc\\\\u09be-\\\\u09c4\\\\u09c7\\\\u09c8\\\\u09d7\\\\u09df-\\\\u09e0\\\\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\\\\u0b01-\\\\u0b03\\\\u0b3c\\\\u0b3e-\\\\u0b44\\\\u0b47\\\\u0b48\\\\u0b4b-\\\\u0b4d\\\\u0b56\\\\u0b57\\\\u0b5f-\\\\u0b60\\\\u0b66-\\\\u0b6f\\\\u0b82\\\\u0bbe-\\\\u0bc2\\\\u0bc6-\\\\u0bc8\\\\u0bca-\\\\u0bcd\\\\u0bd7\\\\u0be6-\\\\u0bef\\\\u0c01-\\\\u0c03\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62-\\\\u0c63\\\\u0c66-\\\\u0c6f\\\\u0c82\\\\u0c83\\\\u0cbc\\\\u0cbe-\\\\u0cc4\\\\u0cc6-\\\\u0cc8\\\\u0cca-\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2-\\\\u0ce3\\\\u0ce6-\\\\u0cef\\\\u0d02\\\\u0d03\\\\u0d46-\\\\u0d48\\\\u0d57\\\\u0d62-\\\\u0d63\\\\u0d66-\\\\u0d6f\\\\u0d82\\\\u0d83\\\\u0dca\\\\u0dcf-\\\\u0dd4\\\\u0dd6\\\\u0dd8-\\\\u0ddf\\\\u0df2\\\\u0df3\\\\u0e34-\\\\u0e3a\\\\u0e40-\\\\u0e45\\\\u0e50-\\\\u0e59\\\\u0eb4-\\\\u0eb9\\\\u0ec8-\\\\u0ecd\\\\u0ed0-\\\\u0ed9\\\\u0f18\\\\u0f19\\\\u0f20-\\\\u0f29\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f41-\\\\u0f47\\\\u0f71-\\\\u0f84\\\\u0f86-\\\\u0f87\\\\u0f8d-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u1000-\\\\u1029\\\\u1040-\\\\u1049\\\\u1067-\\\\u106d\\\\u1071-\\\\u1074\\\\u1082-\\\\u108d\\\\u108f-\\\\u109d\\\\u135d-\\\\u135f\\\\u170e-\\\\u1710\\\\u1720-\\\\u1730\\\\u1740-\\\\u1750\\\\u1772\\\\u1773\\\\u1780-\\\\u17b2\\\\u17dd\\\\u17e0-\\\\u17e9\\\\u180b-\\\\u180d\\\\u1810-\\\\u1819\\\\u1920-\\\\u192b\\\\u1930-\\\\u193b\\\\u1951-\\\\u196d\\\\u19b0-\\\\u19c0\\\\u19c8-\\\\u19c9\\\\u19d0-\\\\u19d9\\\\u1a00-\\\\u1a15\\\\u1a20-\\\\u1a53\\\\u1a60-\\\\u1a7c\\\\u1a7f-\\\\u1a89\\\\u1a90-\\\\u1a99\\\\u1b46-\\\\u1b4b\\\\u1b50-\\\\u1b59\\\\u1b6b-\\\\u1b73\\\\u1bb0-\\\\u1bb9\\\\u1be6-\\\\u1bf3\\\\u1c00-\\\\u1c22\\\\u1c40-\\\\u1c49\\\\u1c5b-\\\\u1c7d\\\\u1cd0-\\\\u1cd2\\\\u1d00-\\\\u1dbe\\\\u1e01-\\\\u1f15\\\\u200c\\\\u200d\\\\u203f\\\\u2040\\\\u2054\\\\u20d0-\\\\u20dc\\\\u20e1\\\\u20e5-\\\\u20f0\\\\u2d81-\\\\u2d96\\\\u2de0-\\\\u2dff\\\\u3021-\\\\u3028\\\\u3099\\\\u309a\\\\ua640-\\\\ua66d\\\\ua674-\\\\ua67d\\\\ua69f\\\\ua6f0-\\\\ua6f1\\\\ua7f8-\\\\ua800\\\\ua806\\\\ua80b\\\\ua823-\\\\ua827\\\\ua880-\\\\ua881\\\\ua8b4-\\\\ua8c4\\\\ua8d0-\\\\ua8d9\\\\ua8f3-\\\\ua8f7\\\\ua900-\\\\ua909\\\\ua926-\\\\ua92d\\\\ua930-\\\\ua945\\\\ua980-\\\\ua983\\\\ua9b3-\\\\ua9c0\\\\uaa00-\\\\uaa27\\\\uaa40-\\\\uaa41\\\\uaa4c-\\\\uaa4d\\\\uaa50-\\\\uaa59\\\\uaa7b\\\\uaae0-\\\\uaae9\\\\uaaf2-\\\\uaaf3\\\\uabc0-\\\\uabe1\\\\uabec\\\\uabed\\\\uabf0-\\\\uabf9\\\\ufb20-\\\\ufb28\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe26\\\\ufe33\\\\ufe34\\\\ufe4d-\\\\ufe4f\\\\uff10-\\\\uff19\\\\uff3f\",E=\"\\\\\\\\u[0-9a-fA-F]{4}|\\\\\\\\u\\\\{[0-9a-fA-F]+\\\\}\",y=\"(?:\"+E+\"|[\\\\x23\\\\x24\\\\x40\\\\x41-\\\\x5a\\\\x5f\\\\x61-\\\\x7a\"+g+\"])\";z.identifier=new RegExp(y+\"(?:\"+E+\"|[\"+D+g+_+\"])*\",\"g\"),z.identifierStart=new RegExp(y),z.identifierMatch=new RegExp(\"(?:\"+E+\"|[\"+D+g+_+\"])+\"),z.newline=/[\\n\\r\\u2028\\u2029]/,z.lineBreak=new RegExp(\"\\r\\n|\"+z.newline.source),z.allLineBreaks=new RegExp(z.lineBreak.source,\"g\")},function(te,z,F){var D=F(6).Options,g=[\"before-newline\",\"after-newline\",\"preserve-newline\"];function _(E){D.call(this,E,\"js\");var y=this.raw_options.brace_style||null;\"expand-strict\"===y?this.raw_options.brace_style=\"expand\":\"collapse-preserve-inline\"===y?this.raw_options.brace_style=\"collapse,preserve-inline\":void 0!==this.raw_options.braces_on_own_line&&(this.raw_options.brace_style=this.raw_options.braces_on_own_line?\"expand\":\"collapse\");var A=this._get_selection_list(\"brace_style\",[\"collapse\",\"expand\",\"end-expand\",\"none\",\"preserve-inline\"]);this.brace_preserve_inline=!1,this.brace_style=\"collapse\";for(var x=0;x<A.length;x++)\"preserve-inline\"===A[x]?this.brace_preserve_inline=!0:this.brace_style=A[x];this.unindent_chained_methods=this._get_boolean(\"unindent_chained_methods\"),this.break_chained_methods=this._get_boolean(\"break_chained_methods\"),this.space_in_paren=this._get_boolean(\"space_in_paren\"),this.space_in_empty_paren=this._get_boolean(\"space_in_empty_paren\"),this.jslint_happy=this._get_boolean(\"jslint_happy\"),this.space_after_anon_function=this._get_boolean(\"space_after_anon_function\"),this.space_after_named_function=this._get_boolean(\"space_after_named_function\"),this.keep_array_indentation=this._get_boolean(\"keep_array_indentation\"),this.space_before_conditional=this._get_boolean(\"space_before_conditional\",!0),this.unescape_strings=this._get_boolean(\"unescape_strings\"),this.e4x=this._get_boolean(\"e4x\"),this.comma_first=this._get_boolean(\"comma_first\"),this.operator_position=this._get_selection(\"operator_position\",g),this.test_output_raw=this._get_boolean(\"test_output_raw\"),this.jslint_happy&&(this.space_after_anon_function=!0)}_.prototype=new D,te.exports.Options=_},function(te){function z(g,_){this.raw_options=F(g,_),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",\"\\t\"===this.indent_char),this.indent_with_tabs&&(this.indent_char=\"\\t\",1===this.indent_size&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"angular\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}function F(g,_){var y,E={};for(y in g=D(g))y!==_&&(E[y]=g[y]);if(_&&g[_])for(y in g[_])E[y]=g[_][y];return E}function D(g){var E,_={};for(E in g)_[E.replace(/-/g,\"_\")]=g[E];return _}z.prototype._get_array=function(g,_){var E=this.raw_options[g],y=_||[];return\"object\"==typeof E?null!==E&&\"function\"==typeof E.concat&&(y=E.concat()):\"string\"==typeof E&&(y=E.split(/[^a-zA-Z0-9_\\/\\-]+/)),y},z.prototype._get_boolean=function(g,_){var E=this.raw_options[g];return void 0===E?!!_:!!E},z.prototype._get_characters=function(g,_){var E=this.raw_options[g],y=_||\"\";return\"string\"==typeof E&&(y=E.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,\"\\n\").replace(/\\\\t/,\"\\t\")),y},z.prototype._get_number=function(g,_){var E=this.raw_options[g];_=parseInt(_,10),isNaN(_)&&(_=0);var y=parseInt(E,10);return isNaN(y)&&(y=_),y},z.prototype._get_selection=function(g,_,E){var y=this._get_selection_list(g,_,E);if(1!==y.length)throw new Error(\"Invalid Option Value: The option '\"+g+\"' can only be one of the following values:\\n\"+_+\"\\nYou passed in: '\"+this.raw_options[g]+\"'\");return y[0]},z.prototype._get_selection_list=function(g,_,E){if(!_||0===_.length)throw new Error(\"Selection list cannot be empty.\");if(!this._is_valid_selection(E=E||[_[0]],_))throw new Error(\"Invalid Default Value!\");var y=this._get_array(g,E);if(!this._is_valid_selection(y,_))throw new Error(\"Invalid Option Value: The option '\"+g+\"' can contain only the following values:\\n\"+_+\"\\nYou passed in: '\"+this.raw_options[g]+\"'\");return y},z.prototype._is_valid_selection=function(g,_){return g.length&&_.length&&!g.some(function(E){return-1===_.indexOf(E)})},te.exports.Options=z,te.exports.normalizeOpts=D,te.exports.mergeOpts=F},function(te,z,F){var D=F(8).InputScanner,g=F(9).Tokenizer,_=F(9).TOKEN,E=F(13).Directives,y=F(4),A=F(12).Pattern,x=F(14).TemplatablePattern;function M(X,J){return-1!==J.indexOf(X)}var w={START_EXPR:\"TK_START_EXPR\",END_EXPR:\"TK_END_EXPR\",START_BLOCK:\"TK_START_BLOCK\",END_BLOCK:\"TK_END_BLOCK\",WORD:\"TK_WORD\",RESERVED:\"TK_RESERVED\",SEMICOLON:\"TK_SEMICOLON\",STRING:\"TK_STRING\",EQUALS:\"TK_EQUALS\",OPERATOR:\"TK_OPERATOR\",COMMA:\"TK_COMMA\",BLOCK_COMMENT:\"TK_BLOCK_COMMENT\",COMMENT:\"TK_COMMENT\",DOT:\"TK_DOT\",UNKNOWN:\"TK_UNKNOWN\",START:_.START,RAW:_.RAW,EOF:_.EOF},P=new E(/\\/\\*/,/\\*\\//),j=/0[xX][0123456789abcdefABCDEF_]*n?|0[oO][01234567_]*n?|0[bB][01_]*n?|\\d[\\d_]*n|(?:\\.\\d[\\d_]*|\\d[\\d_]*\\.?[\\d_]*)(?:[eE][+-]?[\\d_]+)?/,Z=/[0-9]/,$=/[^\\d\\.]/,N=\">>> === !== &&= ??= ||= << && >= ** != == <= >> || ?? |> < / - + > : & % ? ^ | *\".split(\" \"),B=\">>>= ... >>= <<= === >>> !== **= &&= ??= ||= => ^= :: /= << <= == && -= >= >> != -- += ** || ?? ++ %= &= *= |= |> = ! ? > < : / ^ - + * & % ~ |\";B=(B=\"\\\\?\\\\.(?!\\\\d) \"+(B=B.replace(/[-[\\]{}()*+?.,\\\\^$|#]/g,\"\\\\$&\"))).replace(/ /g,\"|\");var V,U=new RegExp(B),ie=\"continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export\".split(\",\"),W=ie.concat([\"do\",\"in\",\"of\",\"else\",\"get\",\"set\",\"new\",\"catch\",\"finally\",\"typeof\",\"yield\",\"async\",\"await\",\"from\",\"as\",\"class\",\"extends\"]),ut=new RegExp(\"^(?:\"+W.join(\"|\")+\")$\"),O=function(X,J){g.call(this,X,J),this._patterns.whitespace=this._patterns.whitespace.matching(/\\u00A0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff/.source,/\\u2028\\u2029/.source);var q=new A(this._input),fe=new x(this._input).read_options(this._options);this.__patterns={template:fe,identifier:fe.starting_with(y.identifier).matching(y.identifierMatch),number:q.matching(j),punct:q.matching(U),comment:q.starting_with(/\\/\\//).until(/[\\n\\r\\u2028\\u2029]/),block_comment:q.starting_with(/\\/\\*/).until_after(/\\*\\//),html_comment_start:q.matching(/<!--/),html_comment_end:q.matching(/-->/),include:q.starting_with(/#include/).until_after(y.lineBreak),shebang:q.starting_with(/#!/).until_after(y.lineBreak),xml:q.matching(/[\\s\\S]*?<(\\/?)([-a-zA-Z:0-9_.]+|{[^}]+?}|!\\[CDATA\\[[^\\]]*?\\]\\]|)(\\s*{[^}]+?}|\\s+[-a-zA-Z:0-9_.]+|\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{([^{}]|{[^}]+?})+?}))*\\s*(\\/?)\\s*>/),single_quote:fe.until(/['\\\\\\n\\r\\u2028\\u2029]/),double_quote:fe.until(/[\"\\\\\\n\\r\\u2028\\u2029]/),template_text:fe.until(/[`\\\\$]/),template_expression:fe.until(/[`}\\\\]/)}};(O.prototype=new g)._is_comment=function(X){return X.type===w.COMMENT||X.type===w.BLOCK_COMMENT||X.type===w.UNKNOWN},O.prototype._is_opening=function(X){return X.type===w.START_BLOCK||X.type===w.START_EXPR},O.prototype._is_closing=function(X,J){return(X.type===w.END_BLOCK||X.type===w.END_EXPR)&&J&&(\"]\"===X.text&&\"[\"===J.text||\")\"===X.text&&\"(\"===J.text||\"}\"===X.text&&\"{\"===J.text)},O.prototype._reset=function(){V=!1},O.prototype._get_next_token=function(X,J){var q=null;this._readWhitespace();var fe=this._input.peek();return null===fe?this._create_token(w.EOF,\"\"):q=(q=(q=(q=(q=(q=(q=(q=(q=(q=q||this._read_non_javascript(fe))||this._read_string(fe))||this._read_pair(fe,this._input.peek(1)))||this._read_word(X))||this._read_singles(fe))||this._read_comment(fe))||this._read_regexp(fe,X))||this._read_xml(fe,X))||this._read_punctuation())||this._create_token(w.UNKNOWN,this._input.next())},O.prototype._read_word=function(X){var J;return\"\"!==(J=this.__patterns.identifier.read())?(J=J.replace(y.allLineBreaks,\"\\n\"),X.type!==w.DOT&&(X.type!==w.RESERVED||\"set\"!==X.text&&\"get\"!==X.text)&&ut.test(J)?this._create_token(\"in\"!==J&&\"of\"!==J||X.type!==w.WORD&&X.type!==w.STRING?w.RESERVED:w.OPERATOR,J):this._create_token(w.WORD,J)):\"\"!==(J=this.__patterns.number.read())?this._create_token(w.WORD,J):void 0},O.prototype._read_singles=function(X){var J=null;return\"(\"===X||\"[\"===X?J=this._create_token(w.START_EXPR,X):\")\"===X||\"]\"===X?J=this._create_token(w.END_EXPR,X):\"{\"===X?J=this._create_token(w.START_BLOCK,X):\"}\"===X?J=this._create_token(w.END_BLOCK,X):\";\"===X?J=this._create_token(w.SEMICOLON,X):\".\"===X&&$.test(this._input.peek(1))?J=this._create_token(w.DOT,X):\",\"===X&&(J=this._create_token(w.COMMA,X)),J&&this._input.next(),J},O.prototype._read_pair=function(X,J){var q=null;return\"#\"===X&&\"{\"===J&&(q=this._create_token(w.START_BLOCK,X+J)),q&&(this._input.next(),this._input.next()),q},O.prototype._read_punctuation=function(){var X=this.__patterns.punct.read();if(\"\"!==X)return this._create_token(\"=\"===X?w.EQUALS:\"?.\"===X?w.DOT:w.OPERATOR,X)},O.prototype._read_non_javascript=function(X){var J=\"\";if(\"#\"===X){if(this._is_first_token()&&(J=this.__patterns.shebang.read()))return this._create_token(w.UNKNOWN,J.trim()+\"\\n\");if(J=this.__patterns.include.read())return this._create_token(w.UNKNOWN,J.trim()+\"\\n\");X=this._input.next();var q=\"#\";if(this._input.hasNext()&&this._input.testChar(Z)){do{q+=X=this._input.next()}while(this._input.hasNext()&&\"#\"!==X&&\"=\"!==X);return\"#\"===X||(\"[\"===this._input.peek()&&\"]\"===this._input.peek(1)?(q+=\"[]\",this._input.next(),this._input.next()):\"{\"===this._input.peek()&&\"}\"===this._input.peek(1)&&(q+=\"{}\",this._input.next(),this._input.next())),this._create_token(w.WORD,q)}this._input.back()}else if(\"<\"===X&&this._is_first_token()){if(J=this.__patterns.html_comment_start.read()){for(;this._input.hasNext()&&!this._input.testChar(y.newline);)J+=this._input.next();return V=!0,this._create_token(w.COMMENT,J)}}else if(V&&\"-\"===X&&(J=this.__patterns.html_comment_end.read()))return V=!1,this._create_token(w.COMMENT,J);return null},O.prototype._read_comment=function(X){var J=null;if(\"/\"===X){var q=\"\";if(\"*\"===this._input.peek(1)){q=this.__patterns.block_comment.read();var fe=P.get_directives(q);fe&&\"start\"===fe.ignore&&(q+=P.readIgnored(this._input)),q=q.replace(y.allLineBreaks,\"\\n\"),(J=this._create_token(w.BLOCK_COMMENT,q)).directives=fe}else\"/\"===this._input.peek(1)&&(q=this.__patterns.comment.read(),J=this._create_token(w.COMMENT,q))}return J},O.prototype._read_string=function(X){if(\"`\"===X||\"'\"===X||'\"'===X){var J=this._input.next();return this.has_char_escapes=!1,J+=\"`\"===X?this._read_string_recursive(\"`\",!0,\"${\"):this._read_string_recursive(X),this.has_char_escapes&&this._options.unescape_strings&&(J=function K(X){for(var J=\"\",q=0,fe=new D(X),S=null;fe.hasNext();)if((S=fe.match(/([\\s]|[^\\\\]|\\\\\\\\)+/g))&&(J+=S[0]),\"\\\\\"===fe.peek()){if(fe.next(),\"x\"===fe.peek())S=fe.match(/x([0-9A-Fa-f]{2})/g);else{if(\"u\"!==fe.peek()){J+=\"\\\\\",fe.hasNext()&&(J+=fe.next());continue}(S=fe.match(/u([0-9A-Fa-f]{4})/g))||(S=fe.match(/u\\{([0-9A-Fa-f]+)\\}/g))}if(!S||(q=parseInt(S[1],16))>126&&q<=255&&0===S[0].indexOf(\"x\"))return X;J+=q>=0&&q<32||q>1114111?\"\\\\\"+S[0]:34===q||39===q||92===q?\"\\\\\"+String.fromCharCode(q):String.fromCharCode(q)}return J}(J)),this._input.peek()===X&&(J+=this._input.next()),J=J.replace(y.allLineBreaks,\"\\n\"),this._create_token(w.STRING,J)}return null},O.prototype._allow_regexp_or_xml=function(X){return X.type===w.RESERVED&&M(X.text,[\"return\",\"case\",\"throw\",\"else\",\"do\",\"typeof\",\"yield\"])||X.type===w.END_EXPR&&\")\"===X.text&&X.opened.previous.type===w.RESERVED&&M(X.opened.previous.text,[\"if\",\"while\",\"for\"])||M(X.type,[w.COMMENT,w.START_EXPR,w.START_BLOCK,w.START,w.END_BLOCK,w.OPERATOR,w.EQUALS,w.EOF,w.SEMICOLON,w.COMMA])},O.prototype._read_regexp=function(X,J){if(\"/\"===X&&this._allow_regexp_or_xml(J)){for(var q=this._input.next(),fe=!1,S=!1;this._input.hasNext()&&(fe||S||this._input.peek()!==X)&&!this._input.testChar(y.newline);)q+=this._input.peek(),fe?fe=!1:(fe=\"\\\\\"===this._input.peek(),\"[\"===this._input.peek()?S=!0:\"]\"===this._input.peek()&&(S=!1)),this._input.next();return this._input.peek()===X&&(q+=this._input.next(),q+=this._input.read(y.identifier)),this._create_token(w.STRING,q)}return null},O.prototype._read_xml=function(X,J){if(this._options.e4x&&\"<\"===X&&this._allow_regexp_or_xml(J)){var q=\"\",fe=this.__patterns.xml.read_match();if(fe){for(var S=fe[2].replace(/^{\\s+/,\"{\").replace(/\\s+}$/,\"}\"),Q=0===S.indexOf(\"{\"),re=0;fe;){var ke=!!fe[1],Ye=fe[2];if(!(fe[fe.length-1]||\"![CDATA[\"===Ye.slice(0,8))&&(Ye===S||Q&&Ye.replace(/^{\\s+/,\"{\").replace(/\\s+}$/,\"}\"))&&(ke?--re:++re),q+=fe[0],re<=0)break;fe=this.__patterns.xml.read_match()}return fe||(q+=this._input.match(/[\\s\\S]*/g)[0]),q=q.replace(y.allLineBreaks,\"\\n\"),this._create_token(w.STRING,q)}}return null},O.prototype._read_string_recursive=function(X,J,q){var fe,S;\"'\"===X?S=this.__patterns.single_quote:'\"'===X?S=this.__patterns.double_quote:\"`\"===X?S=this.__patterns.template_text:\"}\"===X&&(S=this.__patterns.template_expression);for(var Q=S.read(),re=\"\";this._input.hasNext();){if((re=this._input.next())===X||!J&&y.newline.test(re)){this._input.back();break}\"\\\\\"===re&&this._input.hasNext()?(\"x\"===(fe=this._input.peek())||\"u\"===fe?this.has_char_escapes=!0:\"\\r\"===fe&&\"\\n\"===this._input.peek(1)&&this._input.next(),re+=this._input.next()):q&&(\"${\"===q&&\"$\"===re&&\"{\"===this._input.peek()&&(re+=this._input.next()),q===re&&(re+=\"`\"===X?this._read_string_recursive(\"}\",J,\"`\"):this._read_string_recursive(\"`\",J,\"${\"),this._input.hasNext()&&(re+=this._input.next()))),Q+=re+=S.read()}return Q},te.exports.Tokenizer=O,te.exports.TOKEN=w,te.exports.positionable_operators=N.slice(),te.exports.line_starters=ie.slice()},function(te){var z=RegExp.prototype.hasOwnProperty(\"sticky\");function F(D){this.__input=D||\"\",this.__input_length=this.__input.length,this.__position=0}F.prototype.restart=function(){this.__position=0},F.prototype.back=function(){this.__position>0&&(this.__position-=1)},F.prototype.hasNext=function(){return this.__position<this.__input_length},F.prototype.next=function(){var D=null;return this.hasNext()&&(D=this.__input.charAt(this.__position),this.__position+=1),D},F.prototype.peek=function(D){var g=null;return D=D||0,(D+=this.__position)>=0&&D<this.__input_length&&(g=this.__input.charAt(D)),g},F.prototype.__match=function(D,g){D.lastIndex=g;var _=D.exec(this.__input);return _&&!(z&&D.sticky)&&_.index!==g&&(_=null),_},F.prototype.test=function(D,g){return g=g||0,(g+=this.__position)>=0&&g<this.__input_length&&!!this.__match(D,g)},F.prototype.testChar=function(D,g){var _=this.peek(g);return D.lastIndex=0,null!==_&&D.test(_)},F.prototype.match=function(D){var g=this.__match(D,this.__position);return g?this.__position+=g[0].length:g=null,g},F.prototype.read=function(D,g,_){var y,E=\"\";return D&&(y=this.match(D))&&(E+=y[0]),g&&(y||!D)&&(E+=this.readUntil(g,_)),E},F.prototype.readUntil=function(D,g){var _,E=this.__position;D.lastIndex=this.__position;var y=D.exec(this.__input);return y?(E=y.index,g&&(E+=y[0].length)):E=this.__input_length,_=this.__input.substring(this.__position,E),this.__position=E,_},F.prototype.readUntilAfter=function(D){return this.readUntil(D,!0)},F.prototype.get_regexp=function(D,g){var _=null,E=\"g\";return g&&z&&(E=\"y\"),\"string\"==typeof D&&\"\"!==D?_=new RegExp(D,E):D&&(_=new RegExp(D.source,E)),_},F.prototype.get_literal_regexp=function(D){return RegExp(D.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},F.prototype.peekUntilAfter=function(D){var g=this.__position,_=this.readUntilAfter(D);return this.__position=g,_},F.prototype.lookBack=function(D){var g=this.__position-1;return g>=D.length&&this.__input.substring(g-D.length,g).toLowerCase()===D},te.exports.InputScanner=F},function(te,z,F){var D=F(8).InputScanner,g=F(3).Token,_=F(10).TokenStream,E=F(11).WhitespacePattern,y={START:\"TK_START\",RAW:\"TK_RAW\",EOF:\"TK_EOF\"},A=function(x,M){this._input=new D(x),this._options=M||{},this.__tokens=null,this._patterns={},this._patterns.whitespace=new E(this._input)};A.prototype.tokenize=function(){this._input.restart(),this.__tokens=new _,this._reset();for(var x,M=new g(y.START,\"\"),w=null,P=[],j=new _;M.type!==y.EOF;){for(x=this._get_next_token(M,w);this._is_comment(x);)j.add(x),x=this._get_next_token(M,w);j.isEmpty()||(x.comments_before=j,j=new _),x.parent=w,this._is_opening(x)?(P.push(w),w=x):w&&this._is_closing(x,w)&&(x.opened=w,w.closed=x,w=P.pop(),x.parent=w),x.previous=M,M.next=x,this.__tokens.add(x),M=x}return this.__tokens},A.prototype._is_first_token=function(){return this.__tokens.isEmpty()},A.prototype._reset=function(){},A.prototype._get_next_token=function(x,M){this._readWhitespace();var w=this._input.read(/.+/g);return w?this._create_token(y.RAW,w):this._create_token(y.EOF,\"\")},A.prototype._is_comment=function(x){return!1},A.prototype._is_opening=function(x){return!1},A.prototype._is_closing=function(x,M){return!1},A.prototype._create_token=function(x,M){return new g(x,M,this._patterns.whitespace.newline_count,this._patterns.whitespace.whitespace_before_token)},A.prototype._readWhitespace=function(){return this._patterns.whitespace.read()},te.exports.Tokenizer=A,te.exports.TOKEN=y},function(te){function z(F){this.__tokens=[],this.__tokens_length=this.__tokens.length,this.__position=0,this.__parent_token=F}z.prototype.restart=function(){this.__position=0},z.prototype.isEmpty=function(){return 0===this.__tokens_length},z.prototype.hasNext=function(){return this.__position<this.__tokens_length},z.prototype.next=function(){var F=null;return this.hasNext()&&(F=this.__tokens[this.__position],this.__position+=1),F},z.prototype.peek=function(F){var D=null;return F=F||0,(F+=this.__position)>=0&&F<this.__tokens_length&&(D=this.__tokens[F]),D},z.prototype.add=function(F){this.__parent_token&&(F.parent=this.__parent_token),this.__tokens.push(F),this.__tokens_length+=1},te.exports.TokenStream=z},function(te,z,F){var D=F(12).Pattern;function g(_,E){D.call(this,_,E),E?this._line_regexp=this._input.get_regexp(E._line_regexp):this.__set_whitespace_patterns(\"\",\"\"),this.newline_count=0,this.whitespace_before_token=\"\"}(g.prototype=new D).__set_whitespace_patterns=function(_,E){this._match_pattern=this._input.get_regexp(\"[\"+(_+=\"\\\\t \")+(E+=\"\\\\n\\\\r\")+\"]+\",!0),this._newline_regexp=this._input.get_regexp(\"\\\\r\\\\n|[\"+E+\"]\")},g.prototype.read=function(){this.newline_count=0,this.whitespace_before_token=\"\";var _=this._input.read(this._match_pattern);if(\" \"===_)this.whitespace_before_token=\" \";else if(_){var E=this.__split(this._newline_regexp,_);this.newline_count=E.length-1,this.whitespace_before_token=E[this.newline_count]}return _},g.prototype.matching=function(_,E){var y=this._create();return y.__set_whitespace_patterns(_,E),y._update(),y},g.prototype._create=function(){return new g(this._input,this)},g.prototype.__split=function(_,E){_.lastIndex=0;for(var y=0,A=[],x=_.exec(E);x;)A.push(E.substring(y,x.index)),y=x.index+x[0].length,x=_.exec(E);return A.push(y<E.length?E.substring(y,E.length):\"\"),A},te.exports.WhitespacePattern=g},function(te){function z(F,D){this._input=F,this._starting_pattern=null,this._match_pattern=null,this._until_pattern=null,this._until_after=!1,D&&(this._starting_pattern=this._input.get_regexp(D._starting_pattern,!0),this._match_pattern=this._input.get_regexp(D._match_pattern,!0),this._until_pattern=this._input.get_regexp(D._until_pattern),this._until_after=D._until_after)}z.prototype.read=function(){var F=this._input.read(this._starting_pattern);return(!this._starting_pattern||F)&&(F+=this._input.read(this._match_pattern,this._until_pattern,this._until_after)),F},z.prototype.read_match=function(){return this._input.match(this._match_pattern)},z.prototype.until_after=function(F){var D=this._create();return D._until_after=!0,D._until_pattern=this._input.get_regexp(F),D._update(),D},z.prototype.until=function(F){var D=this._create();return D._until_after=!1,D._until_pattern=this._input.get_regexp(F),D._update(),D},z.prototype.starting_with=function(F){var D=this._create();return D._starting_pattern=this._input.get_regexp(F,!0),D._update(),D},z.prototype.matching=function(F){var D=this._create();return D._match_pattern=this._input.get_regexp(F,!0),D._update(),D},z.prototype._create=function(){return new z(this._input,this)},z.prototype._update=function(){},te.exports.Pattern=z},function(te){function z(F,D){F=\"string\"==typeof F?F:F.source,D=\"string\"==typeof D?D:D.source,this.__directives_block_pattern=new RegExp(F+/ beautify( \\w+[:]\\w+)+ /.source+D,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(F+/\\sbeautify\\signore:end\\s/.source+D,\"g\")}z.prototype.get_directives=function(F){if(!F.match(this.__directives_block_pattern))return null;var D={};this.__directive_pattern.lastIndex=0;for(var g=this.__directive_pattern.exec(F);g;)D[g[1]]=g[2],g=this.__directive_pattern.exec(F);return D},z.prototype.readIgnored=function(F){return F.readUntilAfter(this.__directives_end_ignore_pattern)},te.exports.Directives=z},function(te,z,F){var D=F(12).Pattern,g={django:!1,erb:!1,handlebars:!1,php:!1,smarty:!1,angular:!1};function _(E,y){D.call(this,E,y),this.__template_pattern=null,this._disabled=Object.assign({},g),this._excluded=Object.assign({},g),y&&(this.__template_pattern=this._input.get_regexp(y.__template_pattern),this._excluded=Object.assign(this._excluded,y._excluded),this._disabled=Object.assign(this._disabled,y._disabled));var A=new D(E);this.__patterns={handlebars_comment:A.starting_with(/{{!--/).until_after(/--}}/),handlebars_unescaped:A.starting_with(/{{{/).until_after(/}}}/),handlebars:A.starting_with(/{{/).until_after(/}}/),php:A.starting_with(/<\\?(?:[= ]|php)/).until_after(/\\?>/),erb:A.starting_with(/<%[^%]/).until_after(/[^%]%>/),django:A.starting_with(/{%/).until_after(/%}/),django_value:A.starting_with(/{{/).until_after(/}}/),django_comment:A.starting_with(/{#/).until_after(/#}/),smarty:A.starting_with(/{(?=[^}{\\s\\n])/).until_after(/[^\\s\\n]}/),smarty_comment:A.starting_with(/{\\*/).until_after(/\\*}/),smarty_literal:A.starting_with(/{literal}/).until_after(/{\\/literal}/)}}(_.prototype=new D)._create=function(){return new _(this._input,this)},_.prototype._update=function(){this.__set_templated_pattern()},_.prototype.disable=function(E){var y=this._create();return y._disabled[E]=!0,y._update(),y},_.prototype.read_options=function(E){var y=this._create();for(var A in g)y._disabled[A]=-1===E.templating.indexOf(A);return y._update(),y},_.prototype.exclude=function(E){var y=this._create();return y._excluded[E]=!0,y._update(),y},_.prototype.read=function(){var E=\"\";E=this._match_pattern?this._input.read(this._starting_pattern):this._input.read(this._starting_pattern,this.__template_pattern);for(var y=this._read_template();y;)E+=y+=this._match_pattern?this._input.read(this._match_pattern):this._input.readUntil(this.__template_pattern),y=this._read_template();return this._until_after&&(E+=this._input.readUntilAfter(this._until_pattern)),E},_.prototype.__set_templated_pattern=function(){var E=[];this._disabled.php||E.push(this.__patterns.php._starting_pattern.source),this._disabled.handlebars||E.push(this.__patterns.handlebars._starting_pattern.source),this._disabled.erb||E.push(this.__patterns.erb._starting_pattern.source),this._disabled.django||(E.push(this.__patterns.django._starting_pattern.source),E.push(this.__patterns.django_value._starting_pattern.source),E.push(this.__patterns.django_comment._starting_pattern.source)),this._disabled.smarty||E.push(this.__patterns.smarty._starting_pattern.source),this._until_pattern&&E.push(this._until_pattern.source),this.__template_pattern=this._input.get_regexp(\"(?:\"+E.join(\"|\")+\")\")},_.prototype._read_template=function(){var E=\"\",y=this._input.peek();if(\"<\"===y){var A=this._input.peek(1);!this._disabled.php&&!this._excluded.php&&\"?\"===A&&(E=E||this.__patterns.php.read()),!this._disabled.erb&&!this._excluded.erb&&\"%\"===A&&(E=E||this.__patterns.erb.read())}else\"{\"===y&&(!this._disabled.handlebars&&!this._excluded.handlebars&&(E=(E=(E=E||this.__patterns.handlebars_comment.read())||this.__patterns.handlebars_unescaped.read())||this.__patterns.handlebars.read()),this._disabled.django||(!this._excluded.django&&!this._excluded.handlebars&&(E=E||this.__patterns.django_value.read()),this._excluded.django||(E=(E=E||this.__patterns.django_comment.read())||this.__patterns.django.read())),this._disabled.smarty||this._disabled.django&&this._disabled.handlebars&&(E=(E=(E=E||this.__patterns.smarty_comment.read())||this.__patterns.smarty_literal.read())||this.__patterns.smarty.read()));return E},te.exports.TemplatablePattern=_}],Pe={},Oe=function le(te){var z=Pe[te];if(void 0!==z)return z.exports;var F=Pe[te]={exports:{}};return Ne[te](F,F.exports,le),F.exports}(0);ve=Oe}();var Te=ve;void 0!==(xe=function(){return{js_beautify:Te}}.apply(Wt,[]))&&(Tt.exports=xe)}()},25:(Tt,Wt,it)=>{\"use strict\";var xe=it(307),ve=it(387),Te=it(357),Ne=it(496),le=11102230246251565e-32,Oe=(3+16*le)*le,te=(7+56*le)*le;function z(w,P,j,Z){return function(N,B,U){var ie=w(w(P(B[1],U[0]),P(-U[1],B[0])),w(P(N[1],B[0]),P(-B[1],N[0]))),W=w(P(N[1],U[0]),P(-U[1],N[0])),ut=Z(ie,W);return ut[ut.length-1]}}function F(w,P,j,Z){return function(N,B,U,ie){var W=w(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),B[2]),w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),-U[2]),j(w(P(B[1],U[0]),P(-U[1],B[0])),ie[2]))),w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),ie[2])))),ut=w(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-U[2]),j(w(P(N[1],U[0]),P(-U[1],N[0])),ie[2]))),w(j(w(P(B[1],U[0]),P(-U[1],B[0])),N[2]),w(j(w(P(N[1],U[0]),P(-U[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),U[2])))),V=Z(W,ut);return V[V.length-1]}}function D(w,P,j,Z){return function(N,B,U,ie,W){var ut=w(w(w(j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),U[2]),w(j(w(P(U[1],W[0]),P(-W[1],U[0])),-ie[2]),j(w(P(U[1],ie[0]),P(-ie[1],U[0])),W[2]))),B[3]),w(j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),B[2]),w(j(w(P(B[1],W[0]),P(-W[1],B[0])),-ie[2]),j(w(P(B[1],ie[0]),P(-ie[1],B[0])),W[2]))),-U[3]),j(w(j(w(P(U[1],W[0]),P(-W[1],U[0])),B[2]),w(j(w(P(B[1],W[0]),P(-W[1],B[0])),-U[2]),j(w(P(B[1],U[0]),P(-U[1],B[0])),W[2]))),ie[3]))),w(j(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),B[2]),w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),-U[2]),j(w(P(B[1],U[0]),P(-U[1],B[0])),ie[2]))),-W[3]),w(j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),B[2]),w(j(w(P(B[1],W[0]),P(-W[1],B[0])),-ie[2]),j(w(P(B[1],ie[0]),P(-ie[1],B[0])),W[2]))),N[3]),j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-ie[2]),j(w(P(N[1],ie[0]),P(-ie[1],N[0])),W[2]))),-B[3])))),w(w(j(w(j(w(P(B[1],W[0]),P(-W[1],B[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),W[2]))),ie[3]),w(j(w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),ie[2]))),-W[3]),j(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),B[2]),w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),-U[2]),j(w(P(B[1],U[0]),P(-U[1],B[0])),ie[2]))),N[3]))),w(j(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-U[2]),j(w(P(N[1],U[0]),P(-U[1],N[0])),ie[2]))),-B[3]),w(j(w(j(w(P(B[1],ie[0]),P(-ie[1],B[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),ie[2]))),U[3]),j(w(j(w(P(B[1],U[0]),P(-U[1],B[0])),N[2]),w(j(w(P(N[1],U[0]),P(-U[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),U[2]))),-ie[3]))))),V=w(w(w(j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),U[2]),w(j(w(P(U[1],W[0]),P(-W[1],U[0])),-ie[2]),j(w(P(U[1],ie[0]),P(-ie[1],U[0])),W[2]))),N[3]),j(w(j(w(P(ie[1],W[0]),P(-W[1],ie[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-ie[2]),j(w(P(N[1],ie[0]),P(-ie[1],N[0])),W[2]))),-U[3])),w(j(w(j(w(P(U[1],W[0]),P(-W[1],U[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-U[2]),j(w(P(N[1],U[0]),P(-U[1],N[0])),W[2]))),ie[3]),j(w(j(w(P(U[1],ie[0]),P(-ie[1],U[0])),N[2]),w(j(w(P(N[1],ie[0]),P(-ie[1],N[0])),-U[2]),j(w(P(N[1],U[0]),P(-U[1],N[0])),ie[2]))),-W[3]))),w(w(j(w(j(w(P(U[1],W[0]),P(-W[1],U[0])),B[2]),w(j(w(P(B[1],W[0]),P(-W[1],B[0])),-U[2]),j(w(P(B[1],U[0]),P(-U[1],B[0])),W[2]))),N[3]),j(w(j(w(P(U[1],W[0]),P(-W[1],U[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-U[2]),j(w(P(N[1],U[0]),P(-U[1],N[0])),W[2]))),-B[3])),w(j(w(j(w(P(B[1],W[0]),P(-W[1],B[0])),N[2]),w(j(w(P(N[1],W[0]),P(-W[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),W[2]))),U[3]),j(w(j(w(P(B[1],U[0]),P(-U[1],B[0])),N[2]),w(j(w(P(N[1],U[0]),P(-U[1],N[0])),-B[2]),j(w(P(N[1],B[0]),P(-B[1],N[0])),U[2]))),-W[3])))),O=Z(ut,V);return O[O.length-1]}}function g(w){return(3===w?z:4===w?F:D)(ve,xe,Te,Ne)}var _=g(3),E=g(4),y=[function(){return 0},function(){return 0},function(P,j){return j[0]-P[0]},function(P,j,Z){var U,$=(P[1]-Z[1])*(j[0]-Z[0]),N=(P[0]-Z[0])*(j[1]-Z[1]),B=$-N;if($>0){if(N<=0)return B;U=$+N}else{if(!($<0))return B;if(N>=0)return B;U=-($+N)}var ie=Oe*U;return B>=ie||B<=-ie?B:_(P,j,Z)},function(P,j,Z,$){var N=P[0]-$[0],B=j[0]-$[0],U=Z[0]-$[0],ie=P[1]-$[1],W=j[1]-$[1],ut=Z[1]-$[1],V=P[2]-$[2],O=j[2]-$[2],K=Z[2]-$[2],X=B*ut,J=U*W,q=U*ie,fe=N*ut,S=N*W,Q=B*ie,re=V*(X-J)+O*(q-fe)+K*(S-Q),ke=(Math.abs(X)+Math.abs(J))*Math.abs(V)+(Math.abs(q)+Math.abs(fe))*Math.abs(O)+(Math.abs(S)+Math.abs(Q))*Math.abs(K),Ye=te*ke;return re>Ye||-re>Ye?re:E(P,j,Z,$)}];function A(w){var P=y[w.length];return P||(P=y[w.length]=g(w.length)),P.apply(void 0,w)}function x(w,P,j,Z,$,N,B){return function(ie,W,ut,V,O){switch(arguments.length){case 0:case 1:return 0;case 2:return Z(ie,W);case 3:return $(ie,W,ut);case 4:return N(ie,W,ut,V);case 5:return B(ie,W,ut,V,O)}for(var K=new Array(arguments.length),X=0;X<arguments.length;++X)K[X]=arguments[X];return w(K)}}!function M(){for(;y.length<=5;)y.push(g(y.length));Tt.exports=x.apply(void 0,[A].concat(y));for(var w=0;w<=5;++w)Tt.exports[w]=y[w]}()},38:(Tt,Wt,it)=>{Tt.exports=function ve(Te,Ne){for(var Pe=Ne[0],le=Ne[1],Oe=Te.length,te=1,z=Oe,F=0,D=Oe-1;F<z;D=F++){var g=Te[F],_=Te[D],E=g[1],y=_[1];if(y<E){if(y<le&&le<E){if(0===(A=xe(g,_,Ne)))return 0;te^=0<A|0}else if(le===E&&E<Te[(F+1)%Oe][1]){if(0===(A=xe(g,_,Ne)))return 0;te^=0<A|0}}else if(E<y){if(E<le&&le<y){if(0===(A=xe(g,_,Ne)))return 0;te^=A<0|0}else if(le===E&&Te[(F+1)%Oe][1]<E){var A;if(0===(A=xe(g,_,Ne)))return 0;te^=A<0|0}}else if(le===E){var w=Math.min(g[0],_[0]),P=Math.max(g[0],_[0]);if(0===F){for(;D>0;){var j=(D+Oe-1)%Oe;if((Z=Te[j])[1]!==le)break;var $=Z[0];w=Math.min(w,$),P=Math.max(P,$),D=j}if(0===D)return w<=Pe&&Pe<=P?0:1;z=D+1}for(var N=Te[(D+Oe-1)%Oe][1];F+1<z;){var Z;if((Z=Te[F+1])[1]!==le)break;$=Z[0],w=Math.min(w,$),P=Math.max(P,$),F+=1}if(w<=Pe&&Pe<=P)return 0;Pe<w&&N<le!=Te[(F+1)%Oe][1]<le&&(te^=1)}}return 2*te-1};var xe=it(25)},357:(Tt,Wt,it)=>{\"use strict\";var xe=it(307),ve=it(595);Tt.exports=function Te(Ne,Pe){var le=Ne.length;if(1===le){var Oe=xe(Ne[0],Pe);return Oe[0]?Oe:[Oe[1]]}var te=new Array(2*le),z=[.1,.1],F=[.1,.1],D=0;xe(Ne[0],Pe,z),z[0]&&(te[D++]=z[0]);for(var g=1;g<le;++g){xe(Ne[g],Pe,F),ve(z[1],F[0],z),z[0]&&(te[D++]=z[0]);var E=F[1],y=z[1],A=E+y,M=y-(A-E);z[1]=A,M&&(te[D++]=M)}return z[1]&&(te[D++]=z[1]),0===D&&(te[D++]=0),te.length=D,te}},496:Tt=>{\"use strict\";Tt.exports=function it(xe,ve){var Te=0|xe.length,Ne=0|ve.length;if(1===Te&&1===Ne)return function Wt(xe,ve){var Te=xe+ve,Ne=Te-xe,te=xe-(Te-Ne)+(ve-Ne);return te?[te,Te]:[Te]}(xe[0],-ve[0]);var y,A,le=new Array(Te+Ne),Oe=0,te=0,z=0,F=Math.abs,D=xe[te],g=F(D),_=-ve[z],E=F(_);g<E?(A=D,(te+=1)<Te&&(g=F(D=xe[te]))):(A=_,(z+=1)<Ne&&(E=F(_=-ve[z]))),te<Te&&g<E||z>=Ne?(y=D,(te+=1)<Te&&(g=F(D=xe[te]))):(y=_,(z+=1)<Ne&&(E=F(_=-ve[z])));for(var Z,$,x=y+A,M=x-y,w=A-M,P=w,j=x;te<Te&&z<Ne;)g<E?(y=D,(te+=1)<Te&&(g=F(D=xe[te]))):(y=_,(z+=1)<Ne&&(E=F(_=-ve[z]))),(w=(A=P)-(M=(x=y+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z;for(;te<Te;)(w=(A=P)-(M=(x=(y=D)+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z,(te+=1)<Te&&(D=xe[te]);for(;z<Ne;)(w=(A=P)-(M=(x=(y=_)+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z,(z+=1)<Ne&&(_=-ve[z]);return P&&(le[Oe++]=P),j&&(le[Oe++]=j),Oe||(le[Oe++]=0),le.length=Oe,le}},387:Tt=>{\"use strict\";Tt.exports=function it(xe,ve){var Te=0|xe.length,Ne=0|ve.length;if(1===Te&&1===Ne)return function Wt(xe,ve){var Te=xe+ve,Ne=Te-xe,te=xe-(Te-Ne)+(ve-Ne);return te?[te,Te]:[Te]}(xe[0],ve[0]);var y,A,le=new Array(Te+Ne),Oe=0,te=0,z=0,F=Math.abs,D=xe[te],g=F(D),_=ve[z],E=F(_);g<E?(A=D,(te+=1)<Te&&(g=F(D=xe[te]))):(A=_,(z+=1)<Ne&&(E=F(_=ve[z]))),te<Te&&g<E||z>=Ne?(y=D,(te+=1)<Te&&(g=F(D=xe[te]))):(y=_,(z+=1)<Ne&&(E=F(_=ve[z])));for(var Z,$,x=y+A,M=x-y,w=A-M,P=w,j=x;te<Te&&z<Ne;)g<E?(y=D,(te+=1)<Te&&(g=F(D=xe[te]))):(y=_,(z+=1)<Ne&&(E=F(_=ve[z]))),(w=(A=P)-(M=(x=y+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z;for(;te<Te;)(w=(A=P)-(M=(x=(y=D)+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z,(te+=1)<Te&&(D=xe[te]);for(;z<Ne;)(w=(A=P)-(M=(x=(y=_)+A)-y))&&(le[Oe++]=w),P=j-((Z=j+x)-($=Z-j))+(x-$),j=Z,(z+=1)<Ne&&(_=ve[z]);return P&&(le[Oe++]=P),j&&(le[Oe++]=j),Oe||(le[Oe++]=0),le.length=Oe,le}},307:Tt=>{\"use strict\";Tt.exports=function it(xe,ve,Te){var Ne=xe*ve,Pe=Wt*xe,Oe=Pe-(Pe-xe),te=xe-Oe,z=Wt*ve,D=z-(z-ve),g=ve-D,A=te*g-(Ne-Oe*D-te*D-Oe*g);return Te?(Te[0]=A,Te[1]=Ne,Te):[A,Ne]};var Wt=+(Math.pow(2,27)+1)},595:Tt=>{\"use strict\";Tt.exports=function Wt(it,xe,ve){var Te=it+xe,Ne=Te-it,le=xe-Ne,Oe=it-(Te-Ne);return ve?(ve[0]=Oe+le,ve[1]=Te,ve):[Oe+le,Te]}},501:(Tt,Wt,it)=>{\"use strict\";function xe(n,e){return Object.is(n,e)}let ve=null,Te=!1,Ne=1;const Pe=Symbol(\"SIGNAL\");function le(n){const e=ve;return ve=n,e}const F={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function D(n){if(Te)throw new Error(\"\");if(null===ve)return;ve.consumerOnSignalRead(n);const e=ve.nextProducerIndex++;N(ve),e<ve.producerNode.length&&ve.producerNode[e]!==n&&$(ve)&&Z(ve.producerNode[e],ve.producerIndexOfThis[e]),ve.producerNode[e]!==n&&(ve.producerNode[e]=n,ve.producerIndexOfThis[e]=$(ve)?j(n,ve,e):0),ve.producerLastReadVersion[e]=n.version}function _(n){if((!$(n)||n.dirty)&&(n.dirty||n.lastCleanEpoch!==Ne)){if(!n.producerMustRecompute(n)&&!w(n))return n.dirty=!1,void(n.lastCleanEpoch=Ne);n.producerRecomputeValue(n),n.dirty=!1,n.lastCleanEpoch=Ne}}function E(n){if(void 0===n.liveConsumerNode)return;const e=Te;Te=!0;try{for(const t of n.liveConsumerNode)t.dirty||A(t)}finally{Te=e}}function y(){return!1!==ve?.consumerAllowSignalWrites}function A(n){n.dirty=!0,E(n),n.consumerMarkedDirty?.(n)}function x(n){return n&&(n.nextProducerIndex=0),le(n)}function M(n,e){if(le(e),n&&void 0!==n.producerNode&&void 0!==n.producerIndexOfThis&&void 0!==n.producerLastReadVersion){if($(n))for(let t=n.nextProducerIndex;t<n.producerNode.length;t++)Z(n.producerNode[t],n.producerIndexOfThis[t]);for(;n.producerNode.length>n.nextProducerIndex;)n.producerNode.pop(),n.producerLastReadVersion.pop(),n.producerIndexOfThis.pop()}}function w(n){N(n);for(let e=0;e<n.producerNode.length;e++){const t=n.producerNode[e],i=n.producerLastReadVersion[e];if(i!==t.version||(_(t),i!==t.version))return!0}return!1}function P(n){if(N(n),$(n))for(let e=0;e<n.producerNode.length;e++)Z(n.producerNode[e],n.producerIndexOfThis[e]);n.producerNode.length=n.producerLastReadVersion.length=n.producerIndexOfThis.length=0,n.liveConsumerNode&&(n.liveConsumerNode.length=n.liveConsumerIndexOfThis.length=0)}function j(n,e,t){if(B(n),0===n.liveConsumerNode.length&&U(n))for(let i=0;i<n.producerNode.length;i++)n.producerIndexOfThis[i]=j(n.producerNode[i],n,i);return n.liveConsumerIndexOfThis.push(t),n.liveConsumerNode.push(e)-1}function Z(n,e){if(B(n),1===n.liveConsumerNode.length&&U(n))for(let i=0;i<n.producerNode.length;i++)Z(n.producerNode[i],n.producerIndexOfThis[i]);const t=n.liveConsumerNode.length-1;if(n.liveConsumerNode[e]=n.liveConsumerNode[t],n.liveConsumerIndexOfThis[e]=n.liveConsumerIndexOfThis[t],n.liveConsumerNode.length--,n.liveConsumerIndexOfThis.length--,e<n.liveConsumerNode.length){const i=n.liveConsumerIndexOfThis[e],r=n.liveConsumerNode[e];N(r),r.producerIndexOfThis[i]=e}}function $(n){return n.consumerIsAlwaysLive||(n?.liveConsumerNode?.length??0)>0}function N(n){n.producerNode??=[],n.producerIndexOfThis??=[],n.producerLastReadVersion??=[]}function B(n){n.liveConsumerNode??=[],n.liveConsumerIndexOfThis??=[]}function U(n){return void 0!==n.producerNode}const W=Symbol(\"UNSET\"),ut=Symbol(\"COMPUTING\"),V=Symbol(\"ERRORED\"),O={...F,value:W,dirty:!0,error:null,equal:xe,producerMustRecompute:n=>n.value===W||n.value===ut,producerRecomputeValue(n){if(n.value===ut)throw new Error(\"Detected cycle in computations.\");const e=n.value;n.value=ut;const t=x(n);let i;try{i=n.computation()}catch(r){i=V,n.error=r}finally{M(n,t)}e!==W&&e!==V&&i!==V&&n.equal(e,i)?n.value=e:(n.value=i,n.version++)}};let X=function K(){throw new Error};function J(){X()}let fe=null;function ke(n,e){y()||J(),n.equal(n.value,e)||(n.value=e,function xt(n){n.version++,function g(){Ne++}(),E(n),fe?.()}(n))}const qt={...F,equal:xe,value:void 0};const St=()=>{},yn={...F,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!1,consumerMarkedDirty:n=>{null!==n.schedule&&n.schedule(n.ref)},hasRun:!1,cleanupFn:St};function Pt(n){return\"function\"==typeof n}function ls(n){const t=n(i=>{Error.call(i),i.stack=(new Error).stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}const Nr=ls(n=>function(t){n(this),this.message=t?`${t.length} errors occurred during unsubscription:\\n${t.map((i,r)=>`${r+1}) ${i.toString()}`).join(\"\\n  \")}`:\"\",this.name=\"UnsubscriptionError\",this.errors=t});function lr(n,e){if(n){const t=n.indexOf(e);0<=t&&n.splice(t,1)}}class Xt{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;const{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(const s of t)s.remove(this);else t.remove(this);const{initialTeardown:i}=this;if(Pt(i))try{i()}catch(s){e=s instanceof Nr?s.errors:[s]}const{_finalizers:r}=this;if(r){this._finalizers=null;for(const s of r)try{cc(s)}catch(o){e=e??[],o instanceof Nr?e=[...e,...o.errors]:e.push(o)}}if(e)throw new Nr(e)}}add(e){var t;if(e&&e!==this)if(this.closed)cc(e);else{if(e instanceof Xt){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=null!==(t=this._finalizers)&&void 0!==t?t:[]).push(e)}}_hasParent(e){const{_parentage:t}=this;return t===e||Array.isArray(t)&&t.includes(e)}_addParent(e){const{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e}_removeParent(e){const{_parentage:t}=this;t===e?this._parentage=null:Array.isArray(t)&&lr(t,e)}remove(e){const{_finalizers:t}=this;t&&lr(t,e),e instanceof Xt&&e._removeParent(this)}}Xt.EMPTY=(()=>{const n=new Xt;return n.closed=!0,n})();const ur=Xt.EMPTY;function ac(n){return n instanceof Xt||n&&\"closed\"in n&&Pt(n.remove)&&Pt(n.add)&&Pt(n.unsubscribe)}function cc(n){Pt(n)?n():n.unsubscribe()}const Ai={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},xn={setTimeout(n,e,...t){const{delegate:i}=xn;return i?.setTimeout?i.setTimeout(n,e,...t):setTimeout(n,e,...t)},clearTimeout(n){const{delegate:e}=xn;return(e?.clearTimeout||clearTimeout)(n)},delegate:void 0};function bu(n){xn.setTimeout(()=>{const{onUnhandledError:e}=Ai;if(!e)throw n;e(n)})}function xo(){}const tp=Po(\"C\",void 0,void 0);function Po(n,e,t){return{kind:n,value:e,error:t}}let hr=null;function Ls(n){if(Ai.useDeprecatedSynchronousErrorHandling){const e=!hr;if(e&&(hr={errorThrown:!1,error:null}),n(),e){const{errorThrown:t,error:i}=hr;if(hr=null,t)throw i}}else n()}class us extends Xt{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,ac(e)&&e.add(this)):this.destination=op}static create(e,t,i){return new hc(e,t,i)}next(e){this.isStopped?hs(function ip(n){return Po(\"N\",n,void 0)}(e),this):this._next(e)}error(e){this.isStopped?hs(function np(n){return Po(\"E\",void 0,n)}(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?hs(tp,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const lc=Function.prototype.bind;function uc(n,e){return lc.call(n,e)}class rp{constructor(e){this.partialObserver=e}next(e){const{partialObserver:t}=this;if(t.next)try{t.next(e)}catch(i){Oo(i)}}error(e){const{partialObserver:t}=this;if(t.error)try{t.error(e)}catch(i){Oo(i)}else Oo(e)}complete(){const{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(t){Oo(t)}}}class hc extends us{constructor(e,t,i){let r;if(super(),Pt(e)||!e)r={next:e??void 0,error:t??void 0,complete:i??void 0};else{let s;this&&Ai.useDeprecatedNextContext?(s=Object.create(e),s.unsubscribe=()=>this.unsubscribe(),r={next:e.next&&uc(e.next,s),error:e.error&&uc(e.error,s),complete:e.complete&&uc(e.complete,s)}):r=e}this.destination=new rp(r)}}function Oo(n){Ai.useDeprecatedSynchronousErrorHandling?function Su(n){Ai.useDeprecatedSynchronousErrorHandling&&hr&&(hr.errorThrown=!0,hr.error=n)}(n):bu(n)}function hs(n,e){const{onStoppedNotification:t}=Ai;t&&xn.setTimeout(()=>t(n,e))}const op={closed:!0,next:xo,error:function sp(n){throw n},complete:xo},dc=\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\";function kr(n){return n}let sn=(()=>{class n{constructor(t){t&&(this._subscribe=t)}lift(t){const i=new n;return i.source=this,i.operator=t,i}subscribe(t,i,r){const s=function Tu(n){return n&&n instanceof us||function ap(n){return n&&Pt(n.next)&&Pt(n.error)&&Pt(n.complete)}(n)&&ac(n)}(t)?t:new hc(t,i,r);return Ls(()=>{const{operator:o,source:a}=this;s.add(o?o.call(s,a):a?this._subscribe(s):this._trySubscribe(s))}),s}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){return new(i=Du(i))((r,s)=>{const o=new hc({next:a=>{try{t(a)}catch(c){s(c),o.unsubscribe()}},error:s,complete:r});this.subscribe(o)})}_subscribe(t){var i;return null===(i=this.source)||void 0===i?void 0:i.subscribe(t)}[dc](){return this}pipe(...t){return function Ro(n){return 0===n.length?kr:1===n.length?n[0]:function(t){return n.reduce((i,r)=>r(i),t)}}(t)(this)}toPromise(t){return new(t=Du(t))((i,r)=>{let s;this.subscribe(o=>s=o,o=>r(o),()=>i(s))})}}return n.create=e=>new n(e),n})();function Du(n){var e;return null!==(e=n??Ai.Promise)&&void 0!==e?e:Promise}const cp=ls(n=>function(){n(this),this.name=\"ObjectUnsubscribedError\",this.message=\"object unsubscribed\"});let Ot=(()=>{class n extends sn{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){const i=new Iu(this,this);return i.operator=t,i}_throwIfClosed(){if(this.closed)throw new cp}next(t){Ls(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const i of this.currentObservers)i.next(t)}})}error(t){Ls(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;const{observers:i}=this;for(;i.length;)i.shift().error(t)}})}complete(){Ls(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return(null===(t=this.observers)||void 0===t?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:i,isStopped:r,observers:s}=this;return i||r?ur:(this.currentObservers=null,s.push(t),new Xt(()=>{this.currentObservers=null,lr(s,t)}))}_checkFinalizedStatuses(t){const{hasError:i,thrownError:r,isStopped:s}=this;i?t.error(r):s&&t.complete()}asObservable(){const t=new sn;return t.source=this,t}}return n.create=(e,t)=>new Iu(e,t),n})();class Iu extends Ot{constructor(e,t){super(),this.destination=e,this.source=t}next(e){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===i||i.call(t,e)}error(e){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===i||i.call(t,e)}complete(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)}_subscribe(e){var t,i;return null!==(i=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==i?i:ur}}class Hi extends Ot{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){const t=super._subscribe(e);return!t.closed&&e.next(this._value),t}getValue(){const{hasError:e,thrownError:t,_value:i}=this;if(e)throw t;return this._throwIfClosed(),i}next(e){super.next(this._value=e)}}function Pn(n){return e=>{if(function lp(n){return Pt(n?.lift)}(e))return e.lift(function(t){try{return n(t,this)}catch(i){this.error(i)}});throw new TypeError(\"Unable to lift unknown Observable type\")}}function hn(n,e,t,i,r){return new fc(n,e,t,i,r)}class fc extends us{constructor(e,t,i,r,s,o){super(e),this.onFinalize=s,this.shouldUnsubscribe=o,this._next=t?function(a){try{t(a)}catch(c){e.error(c)}}:super._next,this._error=r?function(a){try{r(a)}catch(c){e.error(c)}finally{this.unsubscribe()}}:super._error,this._complete=i?function(){try{i()}catch(a){e.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var e;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:t}=this;super.unsubscribe(),!t&&(null===(e=this.onFinalize)||void 0===e||e.call(this))}}}function ii(n,e){return Pn((t,i)=>{let r=0;t.subscribe(hn(i,s=>{i.next(n.call(e,s,r++))}))})}typeof navigator<\"u\"&&navigator,typeof navigator<\"u\"&&!/Opera/.test(navigator.userAgent)&&navigator,typeof navigator<\"u\"&&(/MSIE/.test(navigator.userAgent)||navigator),typeof navigator<\"u\"&&!/Opera|WebKit/.test(navigator.userAgent)&&navigator,typeof navigator<\"u\"&&navigator;class oe extends Error{constructor(e,t){super(function Bo(n,e){return`NG0${Math.abs(n)}${e?\": \"+e:\"\"}`}(e,t)),this.code=e}}function jr(n){return{toString:n}.toString()}const Kt=globalThis;function It(n){for(let e in n)if(n[e]===It)return e;throw Error(\"Could not find renamed property on target object.\")}function vn(n){if(\"string\"==typeof n)return n;if(Array.isArray(n))return\"[\"+n.map(vn).join(\", \")+\"]\";if(null==n)return\"\"+n;if(n.overriddenName)return`${n.overriddenName}`;if(n.name)return`${n.name}`;const e=n.toString();if(null==e)return\"\"+e;const t=e.indexOf(\"\\n\");return-1===t?e:e.substring(0,t)}function wp(n,e){return null==n||\"\"===n?null===e?\"\":e:null==e||\"\"===e?n:n+\" \"+e}const LO=It({__forward_ref__:It});function Ep(n){return n.__forward_ref__=Ep,n.toString=function(){return vn(this())},n}function qe(n){return function ju(n){return\"function\"==typeof n&&n.hasOwnProperty(LO)&&n.__forward_ref__===Ep}(n)?n():n}function He(n){return{token:n.token,providedIn:n.providedIn||null,factory:n.factory,value:void 0}}function Ho(n){return{providers:n.providers||[],imports:n.imports||[]}}function Vu(n){return Yw(n,Uu)||Yw(n,Xw)}function Yw(n,e){return n.hasOwnProperty(e)?n[e]:null}function zu(n){return n&&(n.hasOwnProperty(bp)||n.hasOwnProperty(zO))?n[bp]:null}const Uu=It({\\u0275prov:It}),bp=It({\\u0275inj:It}),Xw=It({ngInjectableDef:It}),zO=It({ngInjectorDef:It});class ye{constructor(e,t){this._desc=e,this.ngMetadataName=\"InjectionToken\",this.\\u0275prov=void 0,\"number\"==typeof t?this.__NG_ELEMENT_ID__=t:void 0!==t&&(this.\\u0275prov=He({token:this,providedIn:t.providedIn||\"root\",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function Ip(n){return n&&!!n.\\u0275providers}const Cc=It({\\u0275cmp:It}),Ap=It({\\u0275dir:It}),Mp=It({\\u0275pipe:It}),Vr=It({\\u0275fac:It}),Dc=It({__NG_ELEMENT_ID__:It}),Jw=It({__NG_ENV_ID__:It});function Je(n){return\"string\"==typeof n?n:null==n?\"\":String(n)}function xp(n,e){throw new oe(-201,!1)}var ct=function(n){return n[n.Default=0]=\"Default\",n[n.Host=1]=\"Host\",n[n.Self=2]=\"Self\",n[n.SkipSelf=4]=\"SkipSelf\",n[n.Optional=8]=\"Optional\",n}(ct||{});let Pp;function e0(){return Pp}function si(n){const e=Pp;return Pp=n,e}function t0(n,e,t){const i=Vu(n);return i&&\"root\"==i.providedIn?void 0===i.value?i.value=i.factory():i.value:t&ct.Optional?null:void 0!==e?e:void xp()}const Tc={},Op=\"__NG_DI_FLAG__\",Hu=\"ngTempTokenPath\",qO=/\\n/gm,n0=\"__source\";let Go;function gs(n){const e=Go;return Go=n,e}function XO(n,e=ct.Default){if(void 0===Go)throw new oe(-203,!1);return null===Go?t0(n,void 0,e):Go.get(n,e&ct.Optional?null:void 0,e)}function Le(n,e=ct.Default){return(e0()||XO)(qe(n),e)}function be(n,e=ct.Default){return Le(n,Gu(e))}function Gu(n){return typeof n>\"u\"||\"number\"==typeof n?n:(n.optional&&8)|(n.host&&1)|(n.self&&2)|(n.skipSelf&&4)}function Rp(n){const e=[];for(let t=0;t<n.length;t++){const i=qe(n[t]);if(Array.isArray(i)){if(0===i.length)throw new oe(900,!1);let r,s=ct.Default;for(let o=0;o<i.length;o++){const a=i[o],c=ZO(a);\"number\"==typeof c?-1===c?r=a.token:s|=c:r=a}e.push(Le(r,s))}else e.push(Le(i))}return e}function ZO(n){return n[Op]}function Vs(n,e){return n.hasOwnProperty(Vr)?n[Vr]:null}function $o(n,e){n.forEach(t=>Array.isArray(t)?$o(t,e):e(t))}function s0(n,e,t){e>=n.length?n.push(t):n.splice(e,0,t)}function $u(n,e){return e>=n.length-1?n.pop():n.splice(e,1)[0]}const fr={},dt=[],Mi=new ye(\"\"),c0=new ye(\"\",-1),Bp=new ye(\"\");class qu{get(e,t=Tc){if(t===Tc){const i=new Error(`NullInjectorError: No provider for ${vn(e)}!`);throw i.name=\"NullInjectorError\",i}return t}}var Ku=function(n){return n[n.OnPush=0]=\"OnPush\",n[n.Default=1]=\"Default\",n}(Ku||{}),Wi=function(n){return n[n.Emulated=0]=\"Emulated\",n[n.None=2]=\"None\",n[n.ShadowDom=3]=\"ShadowDom\",n}(Wi||{}),_s=function(n){return n[n.None=0]=\"None\",n[n.SignalBased=1]=\"SignalBased\",n[n.HasDecoratorInputTransform=2]=\"HasDecoratorInputTransform\",n}(_s||{});function rR(n,e,t){let i=n.length;for(;;){const r=n.indexOf(e,t);if(-1===r)return r;if(0===r||n.charCodeAt(r-1)<=32){const s=e.length;if(r+s===i||n.charCodeAt(r+s)<=32)return r}t=r+1}}function jp(n,e,t){let i=0;for(;i<t.length;){const r=t[i];if(\"number\"==typeof r){if(0!==r)break;i++;const s=t[i++],o=t[i++],a=t[i++];n.setAttribute(e,o,a,s)}else{const s=r,o=t[++i];u0(s)?n.setProperty(e,s,o):n.setAttribute(e,s,o),i++}}return i}function l0(n){return 3===n||4===n||6===n}function u0(n){return 64===n.charCodeAt(0)}function Ac(n,e){if(null!==e&&0!==e.length)if(null===n||0===n.length)n=e.slice();else{let t=-1;for(let i=0;i<e.length;i++){const r=e[i];\"number\"==typeof r?t=r:0===t||h0(n,t,r,null,-1===t||2===t?e[++i]:null)}}return n}function h0(n,e,t,i,r){let s=0,o=n.length;if(-1===e)o=-1;else for(;s<n.length;){const a=n[s++];if(\"number\"==typeof a){if(a===e){o=-1;break}if(a>e){o=s-1;break}}}for(;s<n.length;){const a=n[s];if(\"number\"==typeof a)break;if(a===t){if(null===i)return void(null!==r&&(n[s+1]=r));if(i===n[s+1])return void(n[s+2]=r)}s++,null!==i&&s++,null!==r&&s++}-1!==o&&(n.splice(o,0,e),s=o+1),n.splice(s++,0,t),null!==i&&n.splice(s++,0,i),null!==r&&n.splice(s++,0,r)}const d0=\"ng-template\";function sR(n,e,t,i){let r=0;if(i){for(;r<e.length&&\"string\"==typeof e[r];r+=2)if(\"class\"===e[r]&&-1!==rR(e[r+1].toLowerCase(),t,0))return!0}else if(Vp(n))return!1;if(r=e.indexOf(1,r),r>-1){let s;for(;++r<e.length&&\"string\"==typeof(s=e[r]);)if(s.toLowerCase()===t)return!0}return!1}function Vp(n){return 4===n.type&&n.value!==d0}function oR(n,e,t){return e===(4!==n.type||t?n.value:d0)}function aR(n,e,t){let i=4;const r=n.attrs,s=null!==r?function uR(n){for(let e=0;e<n.length;e++)if(l0(n[e]))return e;return n.length}(r):0;let o=!1;for(let a=0;a<e.length;a++){const c=e[a];if(\"number\"!=typeof c){if(!o)if(4&i){if(i=2|1&i,\"\"!==c&&!oR(n,c,t)||\"\"===c&&1===e.length){if(qi(i))return!1;o=!0}}else if(8&i){if(null===r||!sR(n,r,c,t)){if(qi(i))return!1;o=!0}}else{const l=e[++a],u=cR(c,r,Vp(n),t);if(-1===u){if(qi(i))return!1;o=!0;continue}if(\"\"!==l){let h;if(h=u>s?\"\":r[u+1].toLowerCase(),2&i&&l!==h){if(qi(i))return!1;o=!0}}}}else{if(!o&&!qi(i)&&!qi(c))return!1;if(o&&qi(c))continue;o=!1,i=c|1&i}}return qi(i)||o}function qi(n){return!(1&n)}function cR(n,e,t,i){if(null===e)return-1;let r=0;if(i||!t){let s=!1;for(;r<e.length;){const o=e[r];if(o===n)return r;if(3===o||6===o)s=!0;else{if(1===o||2===o){let a=e[++r];for(;\"string\"==typeof a;)a=e[++r];continue}if(4===o)break;if(0===o){r+=4;continue}}r+=s?1:2}return-1}return function hR(n,e){let t=n.indexOf(4);if(t>-1)for(t++;t<n.length;){const i=n[t];if(\"number\"==typeof i)return-1;if(i===e)return t;t++}return-1}(e,n)}function f0(n,e,t=!1){for(let i=0;i<e.length;i++)if(aR(n,e[i],t))return!0;return!1}function p0(n,e){return n?\":not(\"+e.trim()+\")\":e}function fR(n){let e=n[0],t=1,i=2,r=\"\",s=!1;for(;t<n.length;){let o=n[t];if(\"string\"==typeof o)if(2&i){const a=n[++t];r+=\"[\"+o+(a.length>0?'=\"'+a+'\"':\"\")+\"]\"}else 8&i?r+=\".\"+o:4&i&&(r+=\" \"+o);else\"\"!==r&&!qi(o)&&(e+=p0(s,r),r=\"\"),i=o,s=s||!qi(i);t++}return\"\"!==r&&(e+=p0(s,r)),e}function zp(n){return jr(()=>{const e=_0(n),t={...e,decls:n.decls,vars:n.vars,template:n.template,consts:n.consts||null,ngContentSelectors:n.ngContentSelectors,onPush:n.changeDetection===Ku.OnPush,directiveDefs:null,pipeDefs:null,dependencies:e.standalone&&n.dependencies||null,getStandaloneInjector:null,signals:n.signals??!1,data:n.data||{},encapsulation:n.encapsulation||Wi.Emulated,styles:n.styles||dt,_:null,schemas:n.schemas||null,tView:null,id:\"\"};m0(t);const i=n.dependencies;return t.directiveDefs=Yu(i,!1),t.pipeDefs=Yu(i,!0),t.id=function vR(n){let e=0;const t=[n.selectors,n.ngContentSelectors,n.hostVars,n.hostAttrs,n.consts,n.vars,n.decls,n.encapsulation,n.standalone,n.signals,n.exportAs,JSON.stringify(n.inputs),JSON.stringify(n.outputs),Object.getOwnPropertyNames(n.type.prototype),!!n.contentQueries,!!n.viewQuery].join(\"|\");for(const r of t)e=Math.imul(31,e)+r.charCodeAt(0)|0;return e+=2147483648,\"c\"+e}(t),t})}function _R(n){return at(n)||wn(n)}function mR(n){return null!==n}function Mc(n){return jr(()=>({type:n.type,bootstrap:n.bootstrap||dt,declarations:n.declarations||dt,imports:n.imports||dt,exports:n.exports||dt,transitiveCompileScopes:null,schemas:n.schemas||null,id:n.id||null}))}function g0(n,e){if(null==n)return fr;const t={};for(const i in n)if(n.hasOwnProperty(i)){const r=n[i];let s,o,a=_s.None;Array.isArray(r)?(a=r[0],s=r[1],o=r[2]??s):(s=r,o=r),e?(t[s]=a!==_s.None?[i,a]:i,e[s]=o):t[s]=i}return t}function xi(n){return jr(()=>{const e=_0(n);return m0(e),e})}function at(n){return n[Cc]||null}function wn(n){return n[Ap]||null}function On(n){return n[Mp]||null}function _0(n){const e={};return{type:n.type,providersResolver:null,factory:null,hostBindings:n.hostBindings||null,hostVars:n.hostVars||0,hostAttrs:n.hostAttrs||null,contentQueries:n.contentQueries||null,declaredInputs:e,inputTransforms:null,inputConfig:n.inputs||fr,exportAs:n.exportAs||null,standalone:!0===n.standalone,signals:!0===n.signals,selectors:n.selectors||dt,viewQuery:n.viewQuery||null,features:n.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:g0(n.inputs,e),outputs:g0(n.outputs),debugInfo:null}}function m0(n){n.features?.forEach(e=>e(n))}function Yu(n,e){if(!n)return null;const t=e?On:_R;return()=>(\"function\"==typeof n?n():n).map(i=>t(i)).filter(mR)}function y0(...n){return{\\u0275providers:Up(0,n),\\u0275fromNgModule:!0}}function Up(n,...e){const t=[],i=new Set;let r;const s=o=>{t.push(o)};return $o(e,o=>{const a=o;Zu(a,s,[],i)&&(r||=[],r.push(a))}),void 0!==r&&v0(r,s),t}function v0(n,e){for(let t=0;t<n.length;t++){const{ngModule:i,providers:r}=n[t];Hp(r,s=>{e(s,i)})}}function Zu(n,e,t,i){if(!(n=qe(n)))return!1;let r=null,s=zu(n);const o=!s&&at(n);if(s||o){if(o&&!o.standalone)return!1;r=n}else{const c=n.ngModule;if(s=zu(c),!s)return!1;r=c}const a=i.has(r);if(o){if(a)return!1;if(i.add(r),o.dependencies){const c=\"function\"==typeof o.dependencies?o.dependencies():o.dependencies;for(const l of c)Zu(l,e,t,i)}}else{if(!s)return!1;{if(null!=s.imports&&!a){let l;i.add(r);try{$o(s.imports,u=>{Zu(u,e,t,i)&&(l||=[],l.push(u))})}finally{}void 0!==l&&v0(l,e)}if(!a){const l=Vs(r)||(()=>new r);e({provide:r,useFactory:l,deps:dt},r),e({provide:Bp,useValue:r,multi:!0},r),e({provide:Mi,useValue:()=>Le(r),multi:!0},r)}const c=s.providers;if(null!=c&&!a){const l=n;Hp(c,u=>{e(u,l)})}}}return r!==n&&void 0!==n.providers}function Hp(n,e){for(let t of n)Ip(t)&&(t=t.\\u0275providers),Array.isArray(t)?Hp(t,e):e(t)}const wR=It({provide:String,useValue:It});function Gp(n){return null!==n&&\"object\"==typeof n&&wR in n}function Us(n){return\"function\"==typeof n}const $p=new ye(\"\"),Qu={},bR={};let Wp;function Ju(){return void 0===Wp&&(Wp=new qu),Wp}class Ki{}class qo extends Ki{get destroyed(){return this._destroyed}constructor(e,t,i,r){super(),this.parent=t,this.source=i,this.scopes=r,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Kp(e,o=>this.processProvider(o)),this.records.set(c0,Ko(void 0,this)),r.has(\"environment\")&&this.records.set(Ki,Ko(void 0,this));const s=this.records.get($p);null!=s&&\"string\"==typeof s.value&&this.scopes.add(s.value),this.injectorDefTypes=new Set(this.get(Bp,dt,ct.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;const e=le(null);try{for(const i of this._ngOnDestroyHooks)i.ngOnDestroy();const t=this._onDestroyHooks;this._onDestroyHooks=[];for(const i of t)i()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),le(e)}}onDestroy(e){return this.assertNotDestroyed(),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){this.assertNotDestroyed();const t=gs(this),i=si(void 0);try{return e()}finally{gs(t),si(i)}}get(e,t=Tc,i=ct.Default){if(this.assertNotDestroyed(),e.hasOwnProperty(Jw))return e[Jw](this);i=Gu(i);const s=gs(this),o=si(void 0);try{if(!(i&ct.SkipSelf)){let c=this.records.get(e);if(void 0===c){const l=function IR(n){return\"function\"==typeof n||\"object\"==typeof n&&n instanceof ye}(e)&&Vu(e);c=l&&this.injectableDefInScope(l)?Ko(qp(e),Qu):null,this.records.set(e,c)}if(null!=c)return this.hydrate(e,c)}return(i&ct.Self?Ju():this.parent).get(e,t=i&ct.Optional&&t===Tc?null:t)}catch(a){if(\"NullInjectorError\"===a.name){if((a[Hu]=a[Hu]||[]).unshift(vn(e)),s)throw a;return function QO(n,e,t,i){const r=n[Hu];throw e[n0]&&r.unshift(e[n0]),n.message=function JO(n,e,t,i=null){n=n&&\"\\n\"===n.charAt(0)&&\"\\u0275\"==n.charAt(1)?n.slice(2):n;let r=vn(e);if(Array.isArray(e))r=e.map(vn).join(\" -> \");else if(\"object\"==typeof e){let s=[];for(let o in e)if(e.hasOwnProperty(o)){let a=e[o];s.push(o+\":\"+(\"string\"==typeof a?JSON.stringify(a):vn(a)))}r=`{${s.join(\", \")}}`}return`${t}${i?\"(\"+i+\")\":\"\"}[${r}]: ${n.replace(qO,\"\\n  \")}`}(\"\\n\"+n.message,r,t,i),n.ngTokenPath=r,n[Hu]=null,n}(a,e,\"R3InjectorError\",this.source)}throw a}finally{si(o),gs(s)}}resolveInjectorInitializers(){const e=le(null),t=gs(this),i=si(void 0);try{const s=this.get(Mi,dt,ct.Self);for(const o of s)o()}finally{gs(t),si(i),le(e)}}toString(){const e=[],t=this.records;for(const i of t.keys())e.push(vn(i));return`R3Injector[${e.join(\", \")}]`}assertNotDestroyed(){if(this._destroyed)throw new oe(205,!1)}processProvider(e){let t=Us(e=qe(e))?e:qe(e&&e.provide);const i=function CR(n){return Gp(n)?Ko(void 0,n.useValue):Ko(function b0(n,e,t){let i;if(Us(n)){const r=qe(n);return Vs(r)||qp(r)}if(Gp(n))i=()=>qe(n.useValue);else if(function E0(n){return!(!n||!n.useFactory)}(n))i=()=>n.useFactory(...Rp(n.deps||[]));else if(function w0(n){return!(!n||!n.useExisting)}(n))i=()=>Le(qe(n.useExisting));else{const r=qe(n&&(n.useClass||n.provide));if(!function DR(n){return!!n.deps}(n))return Vs(r)||qp(r);i=()=>new r(...Rp(n.deps))}return i}(n),Qu)}(e);if(!Us(e)&&!0===e.multi){let r=this.records.get(t);r||(r=Ko(void 0,Qu,!0),r.factory=()=>Rp(r.multi),this.records.set(t,r)),t=e,r.multi.push(e)}this.records.set(t,i)}hydrate(e,t){const i=le(null);try{return t.value===Qu&&(t.value=bR,t.value=t.factory()),\"object\"==typeof t.value&&t.value&&function TR(n){return null!==n&&\"object\"==typeof n&&\"function\"==typeof n.ngOnDestroy}(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{le(i)}}injectableDefInScope(e){if(!e.providedIn)return!1;const t=qe(e.providedIn);return\"string\"==typeof t?\"any\"===t||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(e){const t=this._onDestroyHooks.indexOf(e);-1!==t&&this._onDestroyHooks.splice(t,1)}}function qp(n){const e=Vu(n),t=null!==e?e.factory:Vs(n);if(null!==t)return t;if(n instanceof ye)throw new oe(204,!1);if(n instanceof Function)return function SR(n){if(n.length>0)throw new oe(204,!1);const t=function VO(n){return n&&(n[Uu]||n[Xw])||null}(n);return null!==t?()=>t.factory(n):()=>new n}(n);throw new oe(204,!1)}function Ko(n,e,t=!1){return{factory:n,value:e,multi:t?[]:void 0}}function Kp(n,e){for(const t of n)Array.isArray(t)?Kp(t,e):t&&Ip(t)?Kp(t.\\u0275providers,e):e(t)}function S0(){return void 0!==e0()||null!=function YO(){return Go}()}function xc(n){if(!S0())throw new oe(-203,!1)}const Zt=0,ge=1,Ue=2,pn=3,Yi=4,Rn=5,Yn=6,Xo=7,Vt=8,gn=9,pr=10,Xe=11,Oc=12,D0=13,Zo=14,Qt=15,Hs=16,Qo=17,zr=18,Jo=19,T0=20,ms=21,th=22,Pi=23,Fe=25,Xp=1,gr=7,ea=9,on=10;var ih=function(n){return n[n.None=0]=\"None\",n[n.HasTransplantedViews=2]=\"HasTransplantedViews\",n}(ih||{});function bn(n){return Array.isArray(n)&&\"object\"==typeof n[Xp]}function Un(n){return Array.isArray(n)&&!0===n[Xp]}function Zp(n){return!!(4&n.flags)}function Gs(n){return n.componentOffset>-1}function rh(n){return!(1&~n.flags)}function Xi(n){return!!n.template}function Nc(n){return!!(512&n[Ue])}class P0{constructor(e,t,i){this.previousValue=e,this.currentValue=t,this.firstChange=i}isFirstChange(){return this.firstChange}}function O0(n,e,t,i){null!==e?e.applyValueToInputSignal(e,i):n[t]=i}function kc(){return R0}function R0(n){return n.type.prototype.ngOnChanges&&(n.setInput=VR),jR}function jR(){const n=k0(this),e=n?.current;if(e){const t=n.previous;if(t===fr)n.previous=e;else for(let i in e)t[i]=e[i];n.current=null,this.ngOnChanges(e)}}function VR(n,e,t,i,r){const s=this.declaredInputs[i],o=k0(n)||function zR(n,e){return n[N0]=e}(n,{previous:fr,current:null}),a=o.current||(o.current={}),c=o.previous,l=c[s];a[s]=new P0(l&&l.currentValue,t,c===fr),O0(n,e,r,t)}kc.ngInherit=!0;const N0=\"__ngSimpleChanges__\";function k0(n){return n[N0]||null}const _r=function(n,e,t){};function ft(n){for(;Array.isArray(n);)n=n[Zt];return n}function Xn(n,e){return ft(e[n.index])}function Fc(n,e){return n.data[e]}function mi(n,e){const t=e[n];return bn(t)?t:t[Zt]}function ng(n){return!(128&~n[Ue])}function Oi(n,e){return null==e?null:n[e]}function B0(n){n[Qo]=0}function j0(n){1024&n[Ue]||(n[Ue]|=1024,ng(n)&&oh(n))}function sh(n){return!!(9216&n[Ue]||n[Pi]?.dirty)}function ig(n){n[pr].changeDetectionScheduler?.notify(8),64&n[Ue]&&(n[Ue]|=1024),sh(n)&&oh(n)}function oh(n){n[pr].changeDetectionScheduler?.notify(0);let e=Ur(n);for(;null!==e&&!(8192&e[Ue])&&(e[Ue]|=8192,ng(e));)e=Ur(e)}function ah(n,e){if(!(256&~n[Ue]))throw new oe(911,!1);null===n[ms]&&(n[ms]=[]),n[ms].push(e)}function Ur(n){const e=n[pn];return Un(e)?e[pn]:e}const Ze={lFrame:eE(null),bindingsEnabled:!0,skipHydrationRootTNode:null};let z0=!1;function U0(){return Ze.bindingsEnabled}function ee(){return Ze.lFrame.lView}function st(){return Ze.lFrame.tView}function At(){let n=$0();for(;null!==n&&64===n.type;)n=n.parent;return n}function $0(){return Ze.lFrame.currentTNode}function Zi(n,e){const t=Ze.lFrame;t.currentTNode=n,t.isParent=e}function og(){return Ze.lFrame.isParent}function K0(){return z0}function Y0(n){z0=n}function Qi(){return Ze.lFrame.bindingIndex++}function tN(n,e){const t=Ze.lFrame;t.bindingIndex=t.bindingRootIndex=n,cg(e)}function cg(n){Ze.lFrame.currentDirectiveIndex=n}function ug(){return Ze.lFrame.currentQueryIndex}function lh(n){Ze.lFrame.currentQueryIndex=n}function iN(n){const e=n[ge];return 2===e.type?e.declTNode:1===e.type?n[Rn]:null}function Q0(n,e,t){if(t&ct.SkipSelf){let r=e,s=n;for(;!(r=r.parent,null!==r||t&ct.Host||(r=iN(s),null===r||(s=s[Zo],10&r.type))););if(null===r)return!1;e=r,n=s}const i=Ze.lFrame=J0();return i.currentTNode=e,i.lView=n,!0}function hg(n){const e=J0(),t=n[ge];Ze.lFrame=e,e.currentTNode=t.firstChild,e.lView=n,e.tView=t,e.contextLView=n,e.bindingIndex=t.bindingStartIndex,e.inI18n=!1}function J0(){const n=Ze.lFrame,e=null===n?null:n.child;return null===e?eE(n):e}function eE(n){const e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:n,child:null,inI18n:!1};return null!==n&&(n.child=e),e}function tE(){const n=Ze.lFrame;return Ze.lFrame=n.parent,n.currentTNode=null,n.lView=null,n}const nE=tE;function dg(){const n=tE();n.isParent=!0,n.tView=null,n.selectedIndex=-1,n.contextLView=null,n.elementDepthCount=0,n.currentDirectiveIndex=-1,n.currentNamespace=null,n.bindingRootIndex=-1,n.bindingIndex=-1,n.currentQueryIndex=0}function Nn(){return Ze.lFrame.selectedIndex}function qs(n){Ze.lFrame.selectedIndex=n}let rE=!0;function jc(){return rE}function mr(n){rE=n}function uh(n,e){for(let t=e.directiveStart,i=e.directiveEnd;t<i;t++){const s=n.data[t].type.prototype,{ngAfterContentInit:o,ngAfterContentChecked:a,ngAfterViewInit:c,ngAfterViewChecked:l,ngOnDestroy:u}=s;o&&(n.contentHooks??=[]).push(-t,o),a&&((n.contentHooks??=[]).push(t,a),(n.contentCheckHooks??=[]).push(t,a)),c&&(n.viewHooks??=[]).push(-t,c),l&&((n.viewHooks??=[]).push(t,l),(n.viewCheckHooks??=[]).push(t,l)),null!=u&&(n.destroyHooks??=[]).push(t,u)}}function hh(n,e,t){sE(n,e,3,t)}function dh(n,e,t,i){(3&n[Ue])===t&&sE(n,e,t,i)}function fg(n,e){let t=n[Ue];(3&t)===e&&(t&=16383,t+=1,n[Ue]=t)}function sE(n,e,t,i){const s=i??-1,o=e.length-1;let a=0;for(let c=void 0!==i?65535&n[Qo]:0;c<o;c++)if(\"number\"==typeof e[c+1]){if(a=e[c],null!=i&&a>=i)break}else e[c]<0&&(n[Qo]+=65536),(a<s||-1==s)&&(uN(n,t,e,c),n[Qo]=(4294901760&n[Qo])+c+2),c++}function oE(n,e){_r(4,n,e);const t=le(null);try{e.call(n)}finally{le(t),_r(5,n,e)}}function uN(n,e,t,i){const r=t[i]<0,s=t[i+1],a=n[r?-t[i]:t[i]];r?n[Ue]>>14<n[Qo]>>16&&(3&n[Ue])===e&&(n[Ue]+=16384,oE(a,s)):oE(a,s)}const ta=-1;class Vc{constructor(e,t,i){this.factory=e,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=i}}const gg={};class Ks{constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,i){i=Gu(i);const r=this.injector.get(e,gg,i);return r!==gg||t===gg?r:this.parentInjector.get(e,t,i)}}function _g(n){return n!==ta}function zc(n){return 32767&n}function Uc(n,e){let t=function pN(n){return n>>16}(n),i=e;for(;t>0;)i=i[Zo],t--;return i}let mg=!0;function fh(n){const e=mg;return mg=n,e}const cE=255,lE=5;let _N=0;const yr={};function ph(n,e){const t=uE(n,e);if(-1!==t)return t;const i=e[ge];i.firstCreatePass&&(n.injectorIndex=e.length,yg(i.data,n),yg(e,null),yg(i.blueprint,null));const r=gh(n,e),s=n.injectorIndex;if(_g(r)){const o=zc(r),a=Uc(r,e),c=a[ge].data;for(let l=0;l<8;l++)e[s+l]=a[o+l]|c[o+l]}return e[s+8]=r,s}function yg(n,e){n.push(0,0,0,0,0,0,0,0,e)}function uE(n,e){return-1===n.injectorIndex||n.parent&&n.parent.injectorIndex===n.injectorIndex||null===e[n.injectorIndex+8]?-1:n.injectorIndex}function gh(n,e){if(n.parent&&-1!==n.parent.injectorIndex)return n.parent.injectorIndex;let t=0,i=null,r=e;for(;null!==r;){if(i=yE(r),null===i)return ta;if(t++,r=r[Zo],-1!==i.injectorIndex)return i.injectorIndex|t<<16}return ta}function vg(n,e,t){!function mN(n,e,t){let i;\"string\"==typeof t?i=t.charCodeAt(0)||0:t.hasOwnProperty(Dc)&&(i=t[Dc]),null==i&&(i=t[Dc]=_N++);const r=i&cE;e.data[n+(r>>lE)]|=1<<r}(n,e,t)}function hE(n,e,t){if(t&ct.Optional||void 0!==n)return n;xp()}function dE(n,e,t,i){if(t&ct.Optional&&void 0===i&&(i=null),!(t&(ct.Self|ct.Host))){const r=n[gn],s=si(void 0);try{return r?r.get(e,i,t&ct.Optional):t0(e,i,t&ct.Optional)}finally{si(s)}}return hE(i,0,t)}function fE(n,e,t,i=ct.Default,r){if(null!==n){if(2048&e[Ue]&&!(i&ct.Self)){const o=function bN(n,e,t,i,r){let s=n,o=e;for(;null!==s&&null!==o&&2048&o[Ue]&&!(512&o[Ue]);){const a=pE(s,o,t,i|ct.Self,yr);if(a!==yr)return a;let c=s.parent;if(!c){const l=o[T0];if(l){const u=l.get(t,yr,i);if(u!==yr)return u}c=yE(o),o=o[Zo]}s=c}return r}(n,e,t,i,yr);if(o!==yr)return o}const s=pE(n,e,t,i,yr);if(s!==yr)return s}return dE(e,t,i,r)}function pE(n,e,t,i,r){const s=function wN(n){if(\"string\"==typeof n)return n.charCodeAt(0)||0;const e=n.hasOwnProperty(Dc)?n[Dc]:void 0;return\"number\"==typeof e?e>=0?e&cE:EN:e}(t);if(\"function\"==typeof s){if(!Q0(e,n,i))return i&ct.Host?hE(r,0,i):dE(e,t,i,r);try{let o;if(o=s(i),null!=o||i&ct.Optional)return o;xp()}finally{nE()}}else if(\"number\"==typeof s){let o=null,a=uE(n,e),c=ta,l=i&ct.Host?e[Qt][Rn]:null;for((-1===a||i&ct.SkipSelf)&&(c=-1===a?gh(n,e):e[a+8],c!==ta&&_E(i,!1)?(o=e[ge],a=zc(c),e=Uc(c,e)):a=-1);-1!==a;){const u=e[ge];if(gE(s,a,u.data)){const h=vN(a,e,t,o,i,l);if(h!==yr)return h}c=e[a+8],c!==ta&&_E(i,e[ge].data[a+8]===l)&&gE(s,a,e)?(o=u,a=zc(c),e=Uc(c,e)):a=-1}}return r}function vN(n,e,t,i,r,s){const o=e[ge],a=o.data[n+8],u=_h(a,o,t,null==i?Gs(a)&&mg:i!=o&&!!(3&a.type),r&ct.Host&&s===a);return null!==u?Ys(e,o,u,a):yr}function _h(n,e,t,i,r){const s=n.providerIndexes,o=e.data,a=1048575&s,c=n.directiveStart,u=s>>20,d=r?a+u:n.directiveEnd;for(let p=i?a:a+u;p<d;p++){const f=o[p];if(p<c&&t===f||p>=c&&f.type===t)return p}if(r){const p=o[c];if(p&&Xi(p)&&p.type===t)return c}return null}function Ys(n,e,t,i){let r=n[t];const s=e.data;if(function hN(n){return n instanceof Vc}(r)){const o=r;o.resolving&&function GO(n,e){throw e&&e.join(\" > \"),new oe(-200,n)}(function vt(n){return\"function\"==typeof n?n.name||n.toString():\"object\"==typeof n&&null!=n&&\"function\"==typeof n.type?n.type.name||n.type.toString():Je(n)}(s[t]));const a=fh(o.canSeeViewProviders);o.resolving=!0;const l=o.injectImpl?si(o.injectImpl):null;Q0(n,i,ct.Default);try{r=n[t]=o.factory(void 0,s,n,i),e.firstCreatePass&&t>=i.directiveStart&&function lN(n,e,t){const{ngOnChanges:i,ngOnInit:r,ngDoCheck:s}=e.type.prototype;if(i){const o=R0(e);(t.preOrderHooks??=[]).push(n,o),(t.preOrderCheckHooks??=[]).push(n,o)}r&&(t.preOrderHooks??=[]).push(0-n,r),s&&((t.preOrderHooks??=[]).push(n,s),(t.preOrderCheckHooks??=[]).push(n,s))}(t,s[t],e)}finally{null!==l&&si(l),fh(a),o.resolving=!1,nE()}}return r}function gE(n,e,t){return!!(t[e+(n>>lE)]&1<<n)}function _E(n,e){return!(n&ct.Self||n&ct.Host&&e)}class Sn{constructor(e,t){this._tNode=e,this._lView=t}get(e,t,i){return fE(this._tNode,this._lView,e,Gu(i),t)}}function EN(){return new Sn(At(),ee())}function yE(n){const e=n[ge],t=e.type;return 2===t?e.declTNode:1===t?n[Rn]:null}function SE(n,e=null,t=null,i){const r=function CE(n,e=null,t=null,i,r=new Set){const s=[t||dt,y0(n)];return i=i||(\"object\"==typeof n?void 0:vn(n)),new qo(s,e||Ju(),i||null,r)}(n,e,t,i);return r.resolveInjectorInitializers(),r}class kn{static{this.THROW_IF_NOT_FOUND=Tc}static{this.NULL=new qu}static create(e,t){if(Array.isArray(e))return SE({name:\"\"},t,e,\"\");{const i=e.name??\"\";return SE({name:i},e.parent,e.providers,i)}}static{this.\\u0275prov=He({token:kn,providedIn:\"any\",factory:()=>Le(c0)})}static{this.__NG_ELEMENT_ID__=-1}}new ye(\"\").__NG_ELEMENT_ID__=n=>{const e=At();if(null===e)throw new oe(204,!1);if(2&e.type)return e.value;if(n&ct.Optional)return null;throw new oe(204,!1)};function bg(n){return n.ngOriginalError}const TE=!0;let Ji=(()=>{class n{static{this.__NG_ELEMENT_ID__=ON}static{this.__NG_ENV_ID__=t=>t}}return n})();class PN extends Ji{constructor(e){super(),this._lView=e}onDestroy(e){return ah(this._lView,e),()=>function rg(n,e){if(null===n[ms])return;const t=n[ms].indexOf(e);-1!==t&&n[ms].splice(t,1)}(this._lView,e)}}function ON(){return new PN(ee())}let ra=(()=>{class n{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new Hi(!1)}get _hasPendingTasks(){return this.hasPendingTasks.value}add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);const t=this.taskId++;return this.pendingTasks.add(t),t}remove(t){this.pendingTasks.delete(t),0===this.pendingTasks.size&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}static{this.\\u0275prov=He({token:n,providedIn:\"root\",factory:()=>new n})}}return n})();const $r=class RN extends Ot{constructor(e=!1){super(),this.destroyRef=void 0,this.pendingTasks=void 0,this.__isAsync=e,S0()&&(this.destroyRef=be(Ji,{optional:!0})??void 0,this.pendingTasks=be(ra,{optional:!0})??void 0)}emit(e){const t=le(null);try{super.next(e)}finally{le(t)}}subscribe(e,t,i){let r=e,s=t||(()=>null),o=i;if(e&&\"object\"==typeof e){const c=e;r=c.next?.bind(c),s=c.error?.bind(c),o=c.complete?.bind(c)}this.__isAsync&&(s=this.wrapInTimeout(s),r&&(r=this.wrapInTimeout(r)),o&&(o=this.wrapInTimeout(o)));const a=super.subscribe({next:r,error:s,complete:o});return e instanceof Xt&&e.add(a),a}wrapInTimeout(e){return t=>{const i=this.pendingTasks?.add();setTimeout(()=>{e(t),void 0!==i&&this.pendingTasks?.remove(i)})}}};function vh(...n){}function IE(n){let e,t;function i(){n=vh;try{void 0!==t&&\"function\"==typeof cancelAnimationFrame&&cancelAnimationFrame(t),void 0!==e&&clearTimeout(e)}catch{}}return e=setTimeout(()=>{n(),i()}),\"function\"==typeof requestAnimationFrame&&(t=requestAnimationFrame(()=>{n(),i()})),()=>i()}function AE(n){return queueMicrotask(()=>n()),()=>{n=vh}}const Sg=\"isAngularZone\",wh=Sg+\"_ID\";let NN=0;class Ct{constructor(e){this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new $r(!1),this.onMicrotaskEmpty=new $r(!1),this.onStable=new $r(!1),this.onError=new $r(!1);const{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:i=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:s=TE}=e;if(typeof Zone>\"u\")throw new oe(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&i,o.shouldCoalesceRunChangeDetection=r,o.callbackScheduled=!1,o.scheduleInRootZone=s,function FN(n){const e=()=>{!function LN(n){function e(){IE(()=>{n.callbackScheduled=!1,Dg(n),n.isCheckStableRunning=!0,Cg(n),n.isCheckStableRunning=!1})}n.isCheckStableRunning||n.callbackScheduled||(n.callbackScheduled=!0,n.scheduleInRootZone?Zone.root.run(()=>{e()}):n._outer.run(()=>{e()}),Dg(n))}(n)},t=NN++;n._inner=n._inner.fork({name:\"angular\",properties:{[Sg]:!0,[wh]:t,[wh+t]:!0},onInvokeTask:(i,r,s,o,a,c)=>{if(function BN(n){return PE(n,\"__ignore_ng_zone__\")}(c))return i.invokeTask(s,o,a,c);try{return ME(n),i.invokeTask(s,o,a,c)}finally{(n.shouldCoalesceEventChangeDetection&&\"eventTask\"===o.type||n.shouldCoalesceRunChangeDetection)&&e(),xE(n)}},onInvoke:(i,r,s,o,a,c,l)=>{try{return ME(n),i.invoke(s,o,a,c,l)}finally{n.shouldCoalesceRunChangeDetection&&!n.callbackScheduled&&!function jN(n){return PE(n,\"__scheduler_tick__\")}(c)&&e(),xE(n)}},onHasTask:(i,r,s,o)=>{i.hasTask(s,o),r===s&&(\"microTask\"==o.change?(n._hasPendingMicrotasks=o.microTask,Dg(n),Cg(n)):\"macroTask\"==o.change&&(n.hasPendingMacrotasks=o.macroTask))},onHandleError:(i,r,s,o)=>(i.handleError(s,o),n.runOutsideAngular(()=>n.onError.emit(o)),!1)})}(o)}static isInAngularZone(){return typeof Zone<\"u\"&&!0===Zone.current.get(Sg)}static assertInAngularZone(){if(!Ct.isInAngularZone())throw new oe(909,!1)}static assertNotInAngularZone(){if(Ct.isInAngularZone())throw new oe(909,!1)}run(e,t,i){return this._inner.run(e,t,i)}runTask(e,t,i,r){const s=this._inner,o=s.scheduleEventTask(\"NgZoneEvent: \"+r,e,kN,vh,vh);try{return s.runTask(o,t,i)}finally{s.cancelTask(o)}}runGuarded(e,t,i){return this._inner.runGuarded(e,t,i)}runOutsideAngular(e){return this._outer.run(e)}}const kN={};function Cg(n){if(0==n._nesting&&!n.hasPendingMicrotasks&&!n.isStable)try{n._nesting++,n.onMicrotaskEmpty.emit(null)}finally{if(n._nesting--,!n.hasPendingMicrotasks)try{n.runOutsideAngular(()=>n.onStable.emit(null))}finally{n.isStable=!0}}}function Dg(n){n.hasPendingMicrotasks=!!(n._hasPendingMicrotasks||(n.shouldCoalesceEventChangeDetection||n.shouldCoalesceRunChangeDetection)&&!0===n.callbackScheduled)}function ME(n){n._nesting++,n.isStable&&(n.isStable=!1,n.onUnstable.emit(null))}function xE(n){n._nesting--,Cg(n)}class Tg{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new $r,this.onMicrotaskEmpty=new $r,this.onStable=new $r,this.onError=new $r}run(e,t,i){return e.apply(t,i)}runGuarded(e,t,i){return e.apply(t,i)}runOutsideAngular(e){return e()}runTask(e,t,i,r){return e.apply(t,i)}}function PE(n,e){return!(!Array.isArray(n)||1!==n.length)&&!0===n[0]?.data?.[e]}class vr{constructor(){this._console=console}handleError(e){const t=this._findOriginalError(e);this._console.error(\"ERROR\",e),t&&this._console.error(\"ORIGINAL ERROR\",t)}_findOriginalError(e){let t=e&&bg(e);for(;t&&bg(t);)t=bg(t);return t||null}}const zN=new ye(\"\",{providedIn:\"root\",factory:()=>{const n=be(Ct),e=be(vr);return t=>n.runOutsideAngular(()=>e.handleError(t))}});function UN(){return sa(At(),ee())}function sa(n,e){return new oa(Xn(n,e))}let oa=(()=>{class n{constructor(t){this.nativeElement=t}static{this.__NG_ELEMENT_ID__=UN}}return n})();function RE(n){return n instanceof oa?n.nativeElement:n}function HN(){return this._results[Symbol.iterator]()}class Ig{get changes(){return this._changes??=new $r}constructor(e=!1){this._emitDistinctChangesOnly=e,this.dirty=!0,this._onDirty=void 0,this._results=[],this._changesDetected=!1,this._changes=void 0,this.length=0,this.first=void 0,this.last=void 0;const t=Ig.prototype;t[Symbol.iterator]||(t[Symbol.iterator]=HN)}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){this.dirty=!1;const i=function oi(n){return n.flat(Number.POSITIVE_INFINITY)}(e);(this._changesDetected=!function iR(n,e,t){if(n.length!==e.length)return!1;for(let i=0;i<n.length;i++){let r=n[i],s=e[i];if(t&&(r=t(r),s=t(s)),s!==r)return!1}return!0}(this._results,i,t))&&(this._results=i,this.length=i.length,this.last=i[this.length-1],this.first=i[0])}notifyOnChanges(){void 0!==this._changes&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.emit(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){void 0!==this._changes&&(this._changes.complete(),this._changes.unsubscribe())}}function Gc(n){return!(128&~n.flags)}const Mg=new Map;let $N=0;function xg(n){Mg.delete(n[Jo])}const Eh=\"__ngContext__\";function Hn(n,e){bn(e)?(n[Eh]=e[Jo],function qN(n){Mg.set(n[Jo],n)}(e)):n[Eh]=e}function HE(n){return $E(n[Oc])}function GE(n){return $E(n[Yi])}function $E(n){for(;null!==n&&!Un(n);)n=n[Yi];return n}let Og;const ca=new ye(\"\",{providedIn:\"root\",factory:()=>uk}),uk=\"ng\",JE=new ye(\"\"),Xs=new ye(\"\",{providedIn:\"platform\",factory:()=>\"unknown\"}),eb=new ye(\"\"),tb=new ye(\"\",{providedIn:\"root\",factory:()=>function ys(){if(void 0!==Og)return Og;if(typeof document<\"u\")return document;throw new oe(210,!1)}().body?.querySelector(\"[ngCspNonce]\")?.getAttribute(\"ngCspNonce\")||null});let nb=()=>null;function jg(n,e,t=!1){return nb(n,e,t)}const ub=new ye(\"\",{providedIn:\"root\",factory:()=>!1});var ws=function(n){return n[n.Important=1]=\"Important\",n[n.DashCase=2]=\"DashCase\",n}(ws||{});let Qg;function Jg(n,e){return Qg(n,e)}function pa(n,e,t,i,r){if(null!=i){let s,o=!1;Un(i)?s=i:bn(i)&&(o=!0,i=i[Zt]);const a=ft(i);0===n&&null!==t?null==r?jb(e,t,a):Qs(e,t,a,r||null,!0):1===n&&null!==t?Qs(e,t,a,r||null,!0):2===n?function tl(n,e,t){n.removeChild(null,e,t)}(e,a,o):3===n&&e.destroyNode(a),null!=s&&function v2(n,e,t,i,r){const s=t[gr];s!==ft(t)&&pa(e,n,i,s,r);for(let a=on;a<t.length;a++){const c=t[a];Bh(c[ge],c,n,e,i,s)}}(e,n,s,t,r)}}function kh(n,e,t){return n.createElement(e,t)}function Lb(n,e){e[pr].changeDetectionScheduler?.notify(9),Bh(n,e,e[Xe],2,null,null)}function Fb(n,e){const t=n[ea],i=e[pn];(bn(i)||e[Qt]!==i[pn][Qt])&&(n[Ue]|=ih.HasTransplantedViews),null===t?n[ea]=[e]:t.push(e)}function n_(n,e){const t=n[ea],i=t.indexOf(e);t.splice(i,1)}function el(n,e){if(n.length<=on)return;const t=on+e,i=n[t];if(i){const r=i[Hs];null!==r&&r!==n&&n_(r,i),e>0&&(n[t-1][Yi]=i[Yi]);const s=$u(n,on+e);!function h2(n,e){Lb(n,e),e[Zt]=null,e[Rn]=null}(i[ge],i);const o=s[zr];null!==o&&o.detachView(s[ge]),i[pn]=null,i[Yi]=null,i[Ue]&=-129}return i}function Lh(n,e){if(!(256&e[Ue])){const t=e[Xe];t.destroyNode&&Bh(n,e,t,3,null,null),function f2(n){let e=n[Oc];if(!e)return i_(n[ge],n);for(;e;){let t=null;if(bn(e))t=e[Oc];else{const i=e[on];i&&(t=i)}if(!t){for(;e&&!e[Yi]&&e!==n;)bn(e)&&i_(e[ge],e),e=e[pn];null===e&&(e=n),bn(e)&&i_(e[ge],e),t=e&&e[Yi]}e=t}}(e)}}function i_(n,e){if(256&e[Ue])return;const t=le(null);try{e[Ue]&=-129,e[Ue]|=256,e[Pi]&&P(e[Pi]),function _2(n,e){let t;if(null!=n&&null!=(t=n.destroyHooks))for(let i=0;i<t.length;i+=2){const r=e[t[i]];if(!(r instanceof Vc)){const s=t[i+1];if(Array.isArray(s))for(let o=0;o<s.length;o+=2){const a=r[s[o]],c=s[o+1];_r(4,a,c);try{c.call(a)}finally{_r(5,a,c)}}else{_r(4,r,s);try{s.call(r)}finally{_r(5,r,s)}}}}}(n,e),function g2(n,e){const t=n.cleanup,i=e[Xo];if(null!==t)for(let s=0;s<t.length-1;s+=2)if(\"string\"==typeof t[s]){const o=t[s+3];o>=0?i[o]():i[-o].unsubscribe(),s+=2}else t[s].call(i[t[s+1]]);null!==i&&(e[Xo]=null);const r=e[ms];if(null!==r){e[ms]=null;for(let s=0;s<r.length;s++)(0,r[s])()}}(n,e),1===e[ge].type&&e[Xe].destroy();const i=e[Hs];if(null!==i&&Un(e[pn])){i!==e[pn]&&n_(i,e);const r=e[zr];null!==r&&r.detachView(n)}xg(e)}finally{le(t)}}function r_(n,e,t){return function Bb(n,e,t){let i=e;for(;null!==i&&168&i.type;)i=(e=i).parent;if(null===i)return t[Zt];{const{componentOffset:r}=i;if(r>-1){const{encapsulation:s}=n.data[i.directiveStart+r];if(s===Wi.None||s===Wi.Emulated)return null}return Xn(i,t)}}(n,e.parent,t)}function Qs(n,e,t,i,r){n.insertBefore(e,t,i,r)}function jb(n,e,t){n.appendChild(e,t)}function Vb(n,e,t,i,r){null!==i?Qs(n,e,t,i,r):jb(n,e,t)}function s_(n,e){return n.parentNode(e)}let o_,Hb=function Ub(n,e,t){return 40&n.type?Xn(n,t):null};function Fh(n,e,t,i){const r=r_(n,i,e),s=e[Xe],a=function zb(n,e,t){return Hb(n,e,t)}(i.parent||e[Rn],i,e);if(null!=r)if(Array.isArray(t))for(let c=0;c<t.length;c++)Vb(s,r,t[c],a,!1);else Vb(s,r,t,a,!1);void 0!==o_&&o_(s,i,e,t,r)}function Js(n,e){if(null!==e){const t=e.type;if(3&t)return Xn(e,n);if(4&t)return a_(-1,n[e.index]);if(8&t){const i=e.child;if(null!==i)return Js(n,i);{const r=n[e.index];return Un(r)?a_(-1,r):ft(r)}}if(128&t)return Js(n,e.next);if(32&t)return Jg(e,n)()||ft(n[e.index]);{const i=$b(n,e);return null!==i?Array.isArray(i)?i[0]:Js(Ur(n[Qt]),i):Js(n,e.next)}}return null}function $b(n,e){return null!==e?n[Qt][Rn].projection[e.projection]:null}function a_(n,e){const t=on+n+1;if(t<e.length){const i=e[t],r=i[ge].firstChild;if(null!==r)return Js(i,r)}return e[gr]}function c_(n,e,t,i,r,s,o){for(;null!=t;){if(128===t.type){t=t.next;continue}const a=i[t.index],c=t.type;if(o&&0===e&&(a&&Hn(ft(a),i),t.flags|=2),32&~t.flags)if(8&c)c_(n,e,t.child,i,r,s,!1),pa(e,n,r,a,s);else if(32&c){const l=Jg(t,i);let u;for(;u=l();)pa(e,n,r,u,s);pa(e,n,r,a,s)}else 16&c?qb(n,e,i,t,r,s):pa(e,n,r,a,s);t=o?t.projectionNext:t.next}}function Bh(n,e,t,i,r,s){c_(t,i,n.firstChild,e,r,s,!1)}function qb(n,e,t,i,r,s){const o=t[Qt],c=o[Rn].projection[i.projection];if(Array.isArray(c))for(let l=0;l<c.length;l++)pa(e,n,r,c[l],s);else{let l=c;const u=o[pn];Gc(i)&&(l.flags|=128),c_(n,e,l,u,r,s,!0)}}function Kb(n,e,t){\"\"===t?n.removeAttribute(e,\"class\"):n.setAttribute(e,\"class\",t)}function Yb(n,e,t){const{mergedAttrs:i,classes:r,styles:s}=t;null!==i&&jp(n,e,i),null!==r&&Kb(n,e,r),null!==s&&function E2(n,e,t){n.setAttribute(e,\"style\",t)}(n,e,s)}const et={};function l_(n=1){Xb(st(),ee(),Nn()+n,!1)}function Xb(n,e,t,i){if(!i)if(3&~e[Ue]){const s=n.preOrderHooks;null!==s&&dh(e,s,0,t)}else{const s=n.preOrderCheckHooks;null!==s&&hh(e,s,t)}qs(t)}function rt(n,e=ct.Default){const t=ee();return null===t?Le(n,e):fE(At(),t,qe(n),e)}function Zb(n,e,t,i,r,s){const o=le(null);try{let a=null;r&_s.SignalBased&&(a=e[i][Pe]),null!==a&&void 0!==a.transformFn&&(s=a.transformFn(s)),r&_s.HasDecoratorInputTransform&&(s=n.inputTransforms[i].call(e,s)),null!==n.setInput?n.setInput(e,a,s,t,i):O0(e,a,i,s)}finally{le(o)}}function jh(n,e,t,i,r,s,o,a,c,l,u){const h=e.blueprint.slice();return h[Zt]=r,h[Ue]=204|i,(null!==l||n&&2048&n[Ue])&&(h[Ue]|=2048),B0(h),h[pn]=h[Zo]=n,h[Vt]=t,h[pr]=o||n&&n[pr],h[Xe]=a||n&&n[Xe],h[gn]=c||n&&n[gn]||null,h[Rn]=s,h[Jo]=function WN(){return $N++}(),h[Yn]=u,h[T0]=l,h[Qt]=2==e.type?n[Qt]:h,h}function eo(n,e,t,i,r){let s=n.data[e];if(null===s)s=function u_(n,e,t,i,r){const s=$0(),o=og(),c=n.data[e]=function x2(n,e,t,i,r,s){let o=e?e.injectorIndex:-1,a=0;return function Ws(){return null!==Ze.skipHydrationRootTNode}()&&(a|=128),{type:t,index:i,insertBeforeIndex:null,injectorIndex:o,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:a,providerIndexes:0,value:r,attrs:s,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,o?s:s&&s.parent,t,e,i,r);return null===n.firstChild&&(n.firstChild=c),null!==s&&(o?null==s.child&&null!==c.parent&&(s.child=c):null===s.next&&(s.next=c,c.prev=s)),c}(n,e,t,i,r),function eN(){return Ze.lFrame.inI18n}()&&(s.flags|=32);else if(64&s.type){s.type=t,s.value=i,s.attrs=r;const o=function Bc(){const n=Ze.lFrame,e=n.currentTNode;return n.isParent?e:e.parent}();s.injectorIndex=null===o?-1:o.injectorIndex}return Zi(s,!0),s}function nl(n,e,t,i){if(0===t)return-1;const r=e.length;for(let s=0;s<t;s++)e.push(i),n.blueprint.push(i),n.data.push(null);return r}function Qb(n,e,t,i,r){const s=Nn(),o=2&i;try{qs(-1),o&&e.length>Fe&&Xb(n,e,Fe,!1),_r(o?2:0,r),t(i,r)}finally{qs(s),_r(o?3:1,r)}}function h_(n,e,t){if(Zp(e)){const i=le(null);try{const s=e.directiveEnd;for(let o=e.directiveStart;o<s;o++){const a=n.data[o];a.contentQueries&&a.contentQueries(1,t[o],o)}}finally{le(i)}}}function d_(n,e,t){U0()&&(function F2(n,e,t,i){const r=t.directiveStart,s=t.directiveEnd;Gs(t)&&function G2(n,e,t){const i=Xn(e,n),r=Jb(t);let o=16;t.signals?o=4096:t.onPush&&(o=64);const a=Vh(n,jh(n,r,null,o,i,e,null,n[pr].rendererFactory.createRenderer(i,t),null,null,null));n[e.index]=a}(e,t,n.data[r+t.componentOffset]),n.firstCreatePass||ph(t,e),Hn(i,e);const o=t.initialInputs;for(let a=r;a<s;a++){const c=n.data[a],l=Ys(e,n,a,t);Hn(l,e),null!==o&&$2(0,a-r,l,c,0,o),Xi(c)&&(mi(t.index,e)[Vt]=Ys(e,n,a,t))}}(n,e,t,Xn(t,e)),!(64&~t.flags)&&rS(n,e,t))}function f_(n,e,t=Xn){const i=e.localNames;if(null!==i){let r=e.index+1;for(let s=0;s<i.length;s+=2){const o=i[s+1],a=-1===o?t(e,n):n[o];n[r++]=a}}}function Jb(n){const e=n.tView;return null===e||e.incompleteFirstPass?n.tView=p_(1,null,n.template,n.decls,n.vars,n.directiveDefs,n.pipeDefs,n.viewQuery,n.schemas,n.consts,n.id):e}function p_(n,e,t,i,r,s,o,a,c,l,u){const h=Fe+i,d=h+r,p=function C2(n,e){const t=[];for(let i=0;i<e;i++)t.push(i<n?null:et);return t}(h,d),f=\"function\"==typeof l?l():l;return p[ge]={type:n,blueprint:p,template:t,queries:null,viewQuery:a,declTNode:e,data:p.slice().fill(null,h),bindingStartIndex:h,expandoStartIndex:d,hostBindingOpCodes:null,firstCreatePass:!0,firstUpdatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:\"function\"==typeof s?s():s,pipeRegistry:\"function\"==typeof o?o():o,firstChild:null,schemas:c,consts:f,incompleteFirstPass:!1,ssrId:u}}let eS=()=>null;function tS(n,e,t,i,r){for(let s in e){if(!e.hasOwnProperty(s))continue;const o=e[s];if(void 0===o)continue;i??={};let a,c=_s.None;Array.isArray(o)?(a=o[0],c=o[1]):a=o;let l=s;if(null!==r){if(!r.hasOwnProperty(s))continue;l=r[s]}0===n?nS(i,t,l,a,c):nS(i,t,l,a)}return i}function nS(n,e,t,i,r){let s;n.hasOwnProperty(t)?(s=n[t]).push(e,i):s=n[t]=[e,i],void 0!==r&&s.push(r)}function g_(n,e,t,i){if(U0()){const r=null===i?null:{\"\":-1},s=function j2(n,e){const t=n.directiveRegistry;let i=null,r=null;if(t)for(let s=0;s<t.length;s++){const o=t[s];if(f0(e,o.selectors,!1))if(i||(i=[]),Xi(o))if(null!==o.findHostDirectiveDefs){const a=[];r=r||new Map,o.findHostDirectiveDefs(o,a,r),i.unshift(...a,o),__(n,e,a.length)}else i.unshift(o),__(n,e,0);else r=r||new Map,o.findHostDirectiveDefs?.(o,i,r),i.push(o)}return null===i?null:[i,r]}(n,t);let o,a;null===s?o=a=null:[o,a]=s,null!==o&&iS(n,e,t,o,r,a),r&&function V2(n,e,t){if(e){const i=n.localNames=[];for(let r=0;r<e.length;r+=2){const s=t[e[r+1]];if(null==s)throw new oe(-301,!1);i.push(e[r],s)}}}(t,i,r)}t.mergedAttrs=Ac(t.mergedAttrs,t.attrs)}function iS(n,e,t,i,r,s){for(let l=0;l<i.length;l++)vg(ph(t,e),n,i[l].type);!function U2(n,e,t){n.flags|=1,n.directiveStart=e,n.directiveEnd=e+t,n.providerIndexes=e}(t,n.data.length,i.length);for(let l=0;l<i.length;l++){const u=i[l];u.providersResolver&&u.providersResolver(u)}let o=!1,a=!1,c=nl(n,e,i.length,null);for(let l=0;l<i.length;l++){const u=i[l];t.mergedAttrs=Ac(t.mergedAttrs,u.hostAttrs),H2(n,t,e,c,u),z2(c,u,r),null!==u.contentQueries&&(t.flags|=4),(null!==u.hostBindings||null!==u.hostAttrs||0!==u.hostVars)&&(t.flags|=64);const h=u.type.prototype;!o&&(h.ngOnChanges||h.ngOnInit||h.ngDoCheck)&&((n.preOrderHooks??=[]).push(t.index),o=!0),!a&&(h.ngOnChanges||h.ngDoCheck)&&((n.preOrderCheckHooks??=[]).push(t.index),a=!0),c++}!function P2(n,e,t){const r=e.directiveEnd,s=n.data,o=e.attrs,a=[];let c=null,l=null;for(let u=e.directiveStart;u<r;u++){const h=s[u],d=t?t.get(h):null,f=d?d.outputs:null;c=tS(0,h.inputs,u,c,d?d.inputs:null),l=tS(1,h.outputs,u,l,f);const m=null===c||null===o||Vp(e)?null:W2(c,u,o);a.push(m)}null!==c&&(c.hasOwnProperty(\"class\")&&(e.flags|=8),c.hasOwnProperty(\"style\")&&(e.flags|=16)),e.initialInputs=a,e.inputs=c,e.outputs=l}(n,t,s)}function rS(n,e,t){const i=t.directiveStart,r=t.directiveEnd,s=t.index,o=function nN(){return Ze.lFrame.currentDirectiveIndex}();try{qs(s);for(let a=i;a<r;a++){const c=n.data[a],l=e[a];cg(a),(null!==c.hostBindings||0!==c.hostVars||null!==c.hostAttrs)&&B2(c,l)}}finally{qs(-1),cg(o)}}function B2(n,e){null!==n.hostBindings&&n.hostBindings(1,e)}function __(n,e,t){e.componentOffset=t,(n.components??=[]).push(e.index)}function z2(n,e,t){if(t){if(e.exportAs)for(let i=0;i<e.exportAs.length;i++)t[e.exportAs[i]]=n;Xi(e)&&(t[\"\"]=n)}}function H2(n,e,t,i,r){n.data[i]=r;const s=r.factory||(r.factory=Vs(r.type)),o=new Vc(s,Xi(r),rt);n.blueprint[i]=o,t[i]=o,function k2(n,e,t,i,r){const s=r.hostBindings;if(s){let o=n.hostBindingOpCodes;null===o&&(o=n.hostBindingOpCodes=[]);const a=~e.index;(function L2(n){let e=n.length;for(;e>0;){const t=n[--e];if(\"number\"==typeof t&&t<0)return t}return 0})(o)!=a&&o.push(a),o.push(t,i,s)}}(n,e,i,nl(n,t,r.hostVars,et),r)}function $2(n,e,t,i,r,s){const o=s[e];if(null!==o)for(let a=0;a<o.length;)Zb(i,t,o[a++],o[a++],o[a++],o[a++])}function W2(n,e,t){let i=null,r=0;for(;r<t.length;){const s=t[r];if(0!==s)if(5!==s){if(\"number\"==typeof s)break;if(n.hasOwnProperty(s)){null===i&&(i=[]);const o=n[s];for(let a=0;a<o.length;a+=3)if(o[a]===e){i.push(s,o[a+1],o[a+2],t[r+1]);break}}r+=2}else r+=2;else r+=4}return i}function sS(n,e,t,i){return[n,!0,0,e,null,i,null,t,null,null]}function oS(n,e){const t=n.contentQueries;if(null!==t){const i=le(null);try{for(let r=0;r<t.length;r+=2){const o=t[r+1];if(-1!==o){const a=n.data[o];lh(t[r]),a.contentQueries(2,e[o],o)}}}finally{le(i)}}}function Vh(n,e){return n[Oc]?n[D0][Yi]=e:n[Oc]=e,n[D0]=e,e}function y_(n,e,t){lh(0);const i=le(null);try{e(n,t)}finally{le(i)}}function aS(n){return n[Xo]??=[]}function cS(n){return n.cleanup??=[]}function zh(n,e){const t=n[gn],i=t?t.get(vr,null):null;i&&i.handleError(e)}function v_(n,e,t,i,r){for(let s=0;s<t.length;){const o=t[s++],a=t[s++],c=t[s++];Zb(n.data[o],e[o],i,a,c,r)}}function qr(n,e,t){const i=function Lc(n,e){return ft(e[n])}(e,n);!function kb(n,e,t){n.setValue(e,t)}(n[Xe],i,t)}function q2(n,e){const t=mi(e,n),i=t[ge];!function K2(n,e){for(let t=e.length;t<n.blueprint.length;t++)e.push(n.blueprint[t])}(i,t);const r=t[Zt];null!==r&&null===t[Yn]&&(t[Yn]=jg(r,t[gn])),w_(i,t,t[Vt])}function w_(n,e,t){hg(e);try{const i=n.viewQuery;null!==i&&y_(1,i,t);const r=n.template;null!==r&&Qb(n,e,r,1,t),n.firstCreatePass&&(n.firstCreatePass=!1),e[zr]?.finishViewCreation(n),n.staticContentQueries&&oS(n,e),n.staticViewQueries&&y_(2,n.viewQuery,t);const s=n.components;null!==s&&function Y2(n,e){for(let t=0;t<e.length;t++)q2(n,e[t])}(e,s)}catch(i){throw n.firstCreatePass&&(n.incompleteFirstPass=!0,n.firstCreatePass=!1),i}finally{e[Ue]&=-5,dg()}}function to(n,e){return!e||null===e.firstChild||Gc(n)}function il(n,e,t,i,r=!1){for(;null!==t;){if(128===t.type){t=r?t.projectionNext:t.next;continue}const s=e[t.index];null!==s&&i.push(ft(s)),Un(s)&&hS(s,i);const o=t.type;if(8&o)il(n,e,t.child,i);else if(32&o){const a=Jg(t,e);let c;for(;c=a();)i.push(c)}else if(16&o){const a=$b(e,t);if(Array.isArray(a))i.push(...a);else{const c=Ur(e[Qt]);il(c[ge],c,a,i,!0)}}t=r?t.projectionNext:t.next}return i}function hS(n,e){for(let t=on;t<n.length;t++){const i=n[t],r=i[ge].firstChild;null!==r&&il(i[ge],i,r,e)}n[gr]!==n[Zt]&&e.push(n[gr])}let dS=[];const J2={...F,consumerIsAlwaysLive:!0,consumerMarkedDirty:n=>{oh(n.lView)},consumerOnSignalRead(){this.lView[Pi]=this}},tL={...F,consumerIsAlwaysLive:!0,consumerMarkedDirty:n=>{let e=Ur(n.lView);for(;e&&!fS(e[ge]);)e=Ur(e);e&&j0(e)},consumerOnSignalRead(){this.lView[Pi]=this}};function fS(n){return 2!==n.type}const nL=100;function Uh(n,e=!0,t=0){const i=n[pr],r=i.rendererFactory;r.begin?.();try{!function iL(n,e){const t=K0();try{Y0(!0),b_(n,e);let i=0;for(;sh(n);){if(i===nL)throw new oe(103,!1);i++,b_(n,1)}}finally{Y0(t)}}(n,t)}catch(o){throw e&&zh(n,o),o}finally{r.end?.(),i.inlineEffectRunner?.flush()}}function rL(n,e,t,i){const r=e[Ue];if(!(256&~r))return;e[pr].inlineEffectRunner?.flush(),hg(e);let a=!0,c=null,l=null;fS(n)?(l=function X2(n){return n[Pi]??function Z2(n){const e=dS.pop()??Object.create(J2);return e.lView=n,e}(n)}(e),c=x(l)):null===function Oe(){return ve}()?(a=!1,l=function eL(n){const e=n[Pi]??Object.create(tL);return e.lView=n,e}(e),c=x(l)):e[Pi]&&(P(e[Pi]),e[Pi]=null);try{B0(e),function X0(n){return Ze.lFrame.bindingIndex=n}(n.bindingStartIndex),null!==t&&Qb(n,e,t,2,i);const u=!(3&~r);if(u){const p=n.preOrderCheckHooks;null!==p&&hh(e,p,null)}else{const p=n.preOrderHooks;null!==p&&dh(e,p,0,null),fg(e,0)}if(function sL(n){for(let e=HE(n);null!==e;e=GE(e)){if(!(e[Ue]&ih.HasTransplantedViews))continue;const t=e[ea];for(let i=0;i<t.length;i++)j0(t[i])}}(e),gS(e,0),null!==n.contentQueries&&oS(n,e),u){const p=n.contentCheckHooks;null!==p&&hh(e,p)}else{const p=n.contentHooks;null!==p&&dh(e,p,1),fg(e,1)}!function S2(n,e){const t=n.hostBindingOpCodes;if(null!==t)try{for(let i=0;i<t.length;i++){const r=t[i];if(r<0)qs(~r);else{const s=r,o=t[++i],a=t[++i];tN(o,s),a(2,e[s])}}}finally{qs(-1)}}(n,e);const h=n.components;null!==h&&mS(e,h,0);const d=n.viewQuery;if(null!==d&&y_(2,d,i),u){const p=n.viewCheckHooks;null!==p&&hh(e,p)}else{const p=n.viewHooks;null!==p&&dh(e,p,2),fg(e,2)}if(!0===n.firstUpdatePass&&(n.firstUpdatePass=!1),e[th]){for(const p of e[th])p();e[th]=null}e[Ue]&=-73}catch(u){throw oh(e),u}finally{null!==l&&(M(l,c),a&&function Q2(n){n.lView[Pi]!==n&&(n.lView=null,dS.push(n))}(l)),dg()}}function gS(n,e){for(let t=HE(n);null!==t;t=GE(t))for(let i=on;i<t.length;i++)_S(t[i],e)}function oL(n,e,t){_S(mi(e,n),t)}function _S(n,e){ng(n)&&b_(n,e)}function b_(n,e){const i=n[ge],r=n[Ue],s=n[Pi];let o=!!(0===e&&16&r);if(o||=!!(64&r&&0===e),o||=!!(1024&r),o||=!(!s?.dirty||!w(s)),o||=!1,s&&(s.dirty=!1),n[Ue]&=-9217,o)rL(i,n,i.template,n[Vt]);else if(8192&r){gS(n,1);const a=i.components;null!==a&&mS(n,a,1)}}function mS(n,e,t){for(let i=0;i<e.length;i++)oL(n,e[i],t)}function rl(n,e){const t=K0()?64:1088;for(n[pr].changeDetectionScheduler?.notify(e);n;){n[Ue]|=t;const i=Ur(n);if(Nc(n)&&!i)return n;n=i}return null}class sl{get rootNodes(){const e=this._lView,t=e[ge];return il(t,e,t.firstChild,[])}constructor(e,t,i=!0){this._lView=e,this._cdRefInjectingView=t,this.notifyErrorHandler=i,this._appRef=null,this._attachedToViewContainer=!1}get context(){return this._lView[Vt]}set context(e){this._lView[Vt]=e}get destroyed(){return!(256&~this._lView[Ue])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._attachedToViewContainer){const e=this._lView[pn];if(Un(e)){const t=e[8],i=t?t.indexOf(this):-1;i>-1&&(el(e,i),$u(t,i))}this._attachedToViewContainer=!1}Lh(this._lView[ge],this._lView)}onDestroy(e){ah(this._lView,e)}markForCheck(){rl(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[Ue]&=-129}reattach(){ig(this._lView),this._lView[Ue]|=128}detectChanges(){this._lView[Ue]|=1024,Uh(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new oe(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;const e=Nc(this._lView),t=this._lView[Hs];null!==t&&!e&&n_(t,this._lView),Lb(this._lView[ge],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new oe(902,!1);this._appRef=e;const t=Nc(this._lView),i=this._lView[Hs];null!==i&&!t&&Fb(i,this._lView),ig(this._lView)}}let Kr=(()=>{class n{static{this.__NG_ELEMENT_ID__=lL}}return n})();const aL=Kr,cL=class extends aL{constructor(e,t,i){super(),this._declarationLView=e,this._declarationTContainer=t,this.elementRef=i}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,i){const r=function ga(n,e,t,i){const r=le(null);try{const s=e.tView,c=jh(n,s,t,4096&n[Ue]?4096:16,null,e,null,null,i?.injector??null,i?.embeddedViewInjector??null,i?.dehydratedView??null);c[Hs]=n[e.index];const u=n[zr];return null!==u&&(c[zr]=u.createEmbeddedView(s)),w_(s,c,t),c}finally{le(r)}}(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:i});return new sl(r)}};function lL(){return Hh(At(),ee())}function Hh(n,e){return 4&n.type?new cL(e,n,sa(n,e)):null}class ya{}const fl=new ye(\"\",{providedIn:\"root\",factory:()=>!1}),jS=new ye(\"\"),R_=new ye(\"\");class tF{}class VS{}class iF{resolveComponentFactory(e){throw function nF(n){const e=Error(`No component factory found for ${vn(n)}.`);return e.ngComponent=n,e}(e)}}class va{static{this.NULL=new iF}}class Yh{}let US=(()=>{class n{constructor(){this.destroyNode=null}static{this.__NG_ELEMENT_ID__=()=>function rF(){const n=ee(),t=mi(At().index,n);return(bn(t)?t:n)[Xe]}()}}return n})(),sF=(()=>{class n{static{this.\\u0275prov=He({token:n,providedIn:\"root\",factory:()=>null})}}return n})();function Zh(n,e,t){let i=t?n.styles:null,r=t?n.classes:null,s=0;if(null!==e)for(let o=0;o<e.length;o++){const a=e[o];\"number\"==typeof a?s=a:1==s?r=wp(r,a):2==s&&(i=wp(i,a+\": \"+e[++o]+\";\"))}t?n.styles=i:n.stylesWithoutHost=i,t?n.classes=r:n.classesWithoutHost=r}class $S extends va{constructor(e){super(),this.ngModule=e}resolveComponentFactory(e){const t=at(e);return new _l(t,this.ngModule)}}function WS(n,e){const t=[];for(const i in n){if(!n.hasOwnProperty(i))continue;const r=n[i];if(void 0===r)continue;const s=Array.isArray(r),o=s?r[0]:r;t.push(e?{propName:o,templateName:i,isSignal:!!((s?r[1]:_s.None)&_s.SignalBased)}:{propName:o,templateName:i})}return t}class _l extends VS{get inputs(){const e=this.componentDef,t=e.inputTransforms,i=WS(e.inputs,!0);if(null!==t)for(const r of i)t.hasOwnProperty(r.propName)&&(r.transform=t[r.propName]);return i}get outputs(){return WS(this.componentDef.outputs,!1)}constructor(e,t){super(),this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=function pR(n){return n.map(fR).join(\",\")}(e.selectors),this.ngContentSelectors=e.ngContentSelectors?e.ngContentSelectors:[],this.isBoundToModule=!!t}create(e,t,i,r){const s=le(null);try{let o=(r=r||this.ngModule)instanceof Ki?r:r?.injector;o&&null!==this.componentDef.getStandaloneInjector&&(o=this.componentDef.getStandaloneInjector(o)||o);const a=o?new Ks(e,o):e,c=a.get(Yh,null);if(null===c)throw new oe(407,!1);const h={rendererFactory:c,sanitizer:a.get(sF,null),inlineEffectRunner:null,changeDetectionScheduler:a.get(ya,null)},d=c.createRenderer(null,this.componentDef),p=this.componentDef.selectors[0][0]||\"div\",f=i?function D2(n,e,t,i){const s=i.get(ub,!1)||t===Wi.ShadowDom,o=n.selectRootElement(e,s);return function T2(n){eS(n)}(o),o}(d,i,this.componentDef.encapsulation,a):kh(d,p,function cF(n){const e=n.toLowerCase();return\"svg\"===e?\"svg\":\"math\"===e?\"math\":null}(p));let m=512;this.componentDef.signals?m|=4096:this.componentDef.onPush||(m|=16);let v=null;null!==f&&(v=jg(f,a,!0));const C=p_(0,null,null,1,0,null,null,null,null,null,null),I=jh(null,C,null,m,null,null,h,d,a,null,v);hg(I);let L,H,ne=null;try{const se=this.componentDef;let ce,pe=null;se.findHostDirectiveDefs?(ce=[],pe=new Map,se.findHostDirectiveDefs(se,ce,pe),ce.push(se)):ce=[se];const De=function uF(n,e){const t=n[ge],i=Fe;return n[i]=e,eo(t,i,2,\"#host\",null)}(I,f);ne=function hF(n,e,t,i,r,s,o){const a=r[ge];!function dF(n,e,t,i){for(const r of n)e.mergedAttrs=Ac(e.mergedAttrs,r.hostAttrs);null!==e.mergedAttrs&&(Zh(e,e.mergedAttrs,!0),null!==t&&Yb(i,t,e))}(i,n,e,o);let c=null;null!==e&&(c=jg(e,r[gn]));const l=s.rendererFactory.createRenderer(e,t);let u=16;t.signals?u=4096:t.onPush&&(u=64);const h=jh(r,Jb(t),null,u,r[n.index],n,s,l,null,null,c);return a.firstCreatePass&&__(a,n,i.length-1),Vh(r,h),r[n.index]=h}(De,f,se,ce,I,h,d),H=Fc(C,Fe),f&&function pF(n,e,t,i){if(i)jp(n,t,[\"ng-version\",\"18.2.3\"]);else{const{attrs:r,classes:s}=function gR(n){const e=[],t=[];let i=1,r=2;for(;i<n.length;){let s=n[i];if(\"string\"==typeof s)2===r?\"\"!==s&&e.push(s,n[++i]):8===r&&t.push(s);else{if(!qi(r))break;r=s}i++}return{attrs:e,classes:t}}(e.selectors[0]);r&&jp(n,t,r),s&&s.length>0&&Kb(n,t,s.join(\" \"))}}(d,se,f,i),void 0!==t&&function gF(n,e,t){const i=n.projection=[];for(let r=0;r<e.length;r++){const s=t[r];i.push(null!=s?Array.from(s):null)}}(H,this.ngContentSelectors,t),L=function fF(n,e,t,i,r,s){const o=At(),a=r[ge],c=Xn(o,r);iS(a,r,o,t,null,i);for(let u=0;u<t.length;u++)Hn(Ys(r,a,o.directiveStart+u,o),r);rS(a,r,o),c&&Hn(c,r);const l=Ys(r,a,o.directiveStart+o.componentOffset,o);if(n[Vt]=r[Vt]=l,null!==s)for(const u of s)u(l,e);return h_(a,o,r),l}(ne,se,ce,pe,I,[_F]),w_(C,I,null)}catch(se){throw null!==ne&&xg(ne),xg(I),se}finally{dg()}return new lF(this.componentType,L,sa(H,I),I,H)}finally{le(s)}}}class lF extends tF{constructor(e,t,i,r,s){super(),this.location=i,this._rootLView=r,this._tNode=s,this.previousInputValues=null,this.instance=t,this.hostView=this.changeDetectorRef=new sl(r,void 0,!1),this.componentType=e}setInput(e,t){const i=this._tNode.inputs;let r;if(null!==i&&(r=i[e])){if(this.previousInputValues??=new Map,this.previousInputValues.has(e)&&Object.is(this.previousInputValues.get(e),t))return;const s=this._rootLView;v_(s[ge],s,r,e,t),this.previousInputValues.set(e,t),rl(mi(this._tNode.index,s),1)}}get injector(){return new Sn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}}function _F(){const n=At();uh(ee()[ge],n)}let Er=(()=>{class n{static{this.__NG_ELEMENT_ID__=mF}}return n})();function mF(){return YS(At(),ee())}const yF=Er,qS=class extends yF{constructor(e,t,i){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=i}get element(){return sa(this._hostTNode,this._hostLView)}get injector(){return new Sn(this._hostTNode,this._hostLView)}get parentInjector(){const e=gh(this._hostTNode,this._hostLView);if(_g(e)){const t=Uc(e,this._hostLView),i=zc(e);return new Sn(t[ge].data[i+8],t)}return new Sn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){const t=KS(this._lContainer);return null!==t&&t[e]||null}get length(){return this._lContainer.length-on}createEmbeddedView(e,t,i){let r,s;\"number\"==typeof i?r=i:null!=i&&(r=i.index,s=i.injector);const a=e.createEmbeddedViewImpl(t||{},s,null);return this.insertImpl(a,r,to(this._hostTNode,null)),a}createComponent(e,t,i,r,s){const o=e&&!function Pc(n){return\"function\"==typeof n}(e);let a;if(o)a=t;else{const f=t||{};a=f.index,i=f.injector,r=f.projectableNodes,s=f.environmentInjector||f.ngModuleRef}const c=o?e:new _l(at(e)),l=i||this.parentInjector;if(!s&&null==c.ngModule){const m=(o?l:this.parentInjector).get(Ki,null);m&&(s=m)}at(c.componentType??{});const p=c.create(l,r,null,s);return this.insertImpl(p.hostView,a,to(this._hostTNode,null)),p}insert(e,t){return this.insertImpl(e,t,!0)}insertImpl(e,t,i){const r=e._lView;if(function $R(n){return Un(n[pn])}(r)){const a=this.indexOf(e);if(-1!==a)this.detach(a);else{const c=r[pn],l=new qS(c,c[Rn],c[pn]);l.detach(l.indexOf(e))}}const s=this._adjustIndex(t),o=this._lContainer;return function _a(n,e,t,i=!0){const r=e[ge];if(function p2(n,e,t,i){const r=on+i,s=t.length;i>0&&(t[r-1][Yi]=e),i<s-on?(e[Yi]=t[r],s0(t,on+i,e)):(t.push(e),e[Yi]=null),e[pn]=t;const o=e[Hs];null!==o&&t!==o&&Fb(o,e);const a=e[zr];null!==a&&a.insertView(n),ig(e),e[Ue]|=128}(r,e,n,t),i){const o=a_(t,n),a=e[Xe],c=s_(a,n[gr]);null!==c&&function d2(n,e,t,i,r,s){i[Zt]=r,i[Rn]=e,Bh(n,i,t,1,r,s)}(r,n[Rn],a,e,c,o)}const s=e[Yn];null!==s&&null!==s.firstChild&&(s.firstChild=null)}(o,r,s,i),e.attachToViewContainerRef(),s0(L_(o),s,e),e}move(e,t){return this.insert(e,t)}indexOf(e){const t=KS(this._lContainer);return null!==t?t.indexOf(e):-1}remove(e){const t=this._adjustIndex(e,-1),i=el(this._lContainer,t);i&&($u(L_(this._lContainer),t),Lh(i[ge],i))}detach(e){const t=this._adjustIndex(e,-1),i=el(this._lContainer,t);return i&&null!=$u(L_(this._lContainer),t)?new sl(i):null}_adjustIndex(e,t=0){return e??this.length+t}};function KS(n){return n[8]}function L_(n){return n[8]||(n[8]=[])}function YS(n,e){let t;const i=e[n.index];return Un(i)?t=i:(t=sS(i,e,null,n),e[n.index]=t,Vh(e,t)),XS(t,e,n,i),new qS(t,n,e)}let XS=function QS(n,e,t,i){if(n[gr])return;let r;r=8&t.type?ft(i):function vF(n,e){const t=n[Xe],i=t.createComment(\"\"),r=Xn(e,n);return Qs(t,s_(t,r),i,function m2(n,e){return n.nextSibling(e)}(t,r),!1),i}(e,t),n[gr]=r},F_=()=>!1;class B_{constructor(e){this.queryList=e,this.matches=null}clone(){return new B_(this.queryList)}setDirty(){this.queryList.setDirty()}}class j_{constructor(e=[]){this.queries=e}createEmbeddedView(e){const t=e.queries;if(null!==t){const i=null!==e.contentQueries?e.contentQueries[0]:t.length,r=[];for(let s=0;s<i;s++){const o=t.getByIndex(s);r.push(this.queries[o.indexInDeclarationView].clone())}return new j_(r)}return null}insertView(e){this.dirtyQueriesWithMatches(e)}detachView(e){this.dirtyQueriesWithMatches(e)}finishViewCreation(e){this.dirtyQueriesWithMatches(e)}dirtyQueriesWithMatches(e){for(let t=0;t<this.queries.length;t++)null!==G_(e,t).matches&&this.queries[t].setDirty()}}class JS{constructor(e,t,i=null){this.flags=t,this.read=i,this.predicate=\"string\"==typeof e?function IF(n){return n.split(\",\").map(e=>e.trim())}(e):e}}class V_{constructor(e=[]){this.queries=e}elementStart(e,t){for(let i=0;i<this.queries.length;i++)this.queries[i].elementStart(e,t)}elementEnd(e){for(let t=0;t<this.queries.length;t++)this.queries[t].elementEnd(e)}embeddedTView(e){let t=null;for(let i=0;i<this.length;i++){const r=null!==t?t.length:0,s=this.getByIndex(i).embeddedTView(e,r);s&&(s.indexInDeclarationView=i,null!==t?t.push(s):t=[s])}return null!==t?new V_(t):null}template(e,t){for(let i=0;i<this.queries.length;i++)this.queries[i].template(e,t)}getByIndex(e){return this.queries[e]}get length(){return this.queries.length}track(e){this.queries.push(e)}}class z_{constructor(e,t=-1){this.metadata=e,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=t}elementStart(e,t){this.isApplyingToNode(t)&&this.matchTNode(e,t)}elementEnd(e){this._declarationNodeIndex===e.index&&(this._appliesToNextNode=!1)}template(e,t){this.elementStart(e,t)}embeddedTView(e,t){return this.isApplyingToNode(e)?(this.crossesNgTemplate=!0,this.addMatch(-e.index,t),new z_(this.metadata)):null}isApplyingToNode(e){if(this._appliesToNextNode&&1&~this.metadata.flags){const t=this._declarationNodeIndex;let i=e.parent;for(;null!==i&&8&i.type&&i.index!==t;)i=i.parent;return t===(null!==i?i.index:-1)}return this._appliesToNextNode}matchTNode(e,t){const i=this.metadata.predicate;if(Array.isArray(i))for(let r=0;r<i.length;r++){const s=i[r];this.matchTNodeWithReadOption(e,t,SF(t,s)),this.matchTNodeWithReadOption(e,t,_h(t,e,s,!1,!1))}else i===Kr?4&t.type&&this.matchTNodeWithReadOption(e,t,-1):this.matchTNodeWithReadOption(e,t,_h(t,e,i,!1,!1))}matchTNodeWithReadOption(e,t,i){if(null!==i){const r=this.metadata.read;if(null!==r)if(r===oa||r===Er||r===Kr&&4&t.type)this.addMatch(t.index,-2);else{const s=_h(t,e,r,!1,!1);null!==s&&this.addMatch(t.index,s)}else this.addMatch(t.index,i)}}addMatch(e,t){null===this.matches?this.matches=[e,t]:this.matches.push(e,t)}}function SF(n,e){const t=n.localNames;if(null!==t)for(let i=0;i<t.length;i+=2)if(t[i]===e)return t[i+1];return null}function DF(n,e,t,i){return-1===t?function CF(n,e){return 11&n.type?sa(n,e):4&n.type?Hh(n,e):null}(e,n):-2===t?function TF(n,e,t){return t===oa?sa(e,n):t===Kr?Hh(e,n):t===Er?YS(e,n):void 0}(n,e,i):Ys(n,n[ge],t,e)}function eC(n,e,t,i){const r=e[zr].queries[i];if(null===r.matches){const s=n.data,o=t.matches,a=[];for(let c=0;null!==o&&c<o.length;c+=2){const l=o[c];a.push(l<0?null:DF(e,s[l],o[c+1],t.metadata.read))}r.matches=a}return r.matches}function U_(n,e,t,i){const r=n.queries.getByIndex(t),s=r.matches;if(null!==s){const o=eC(n,e,r,t);for(let a=0;a<s.length;a+=2){const c=s[a];if(c>0)i.push(o[a/2]);else{const l=s[a+1],u=e[-c];for(let h=on;h<u.length;h++){const d=u[h];d[Hs]===d[pn]&&U_(d[ge],d,l,i)}if(null!==u[ea]){const h=u[ea];for(let d=0;d<h.length;d++){const p=h[d];U_(p[ge],p,l,i)}}}}}return i}function nC(n,e,t){const i=st();return i.firstCreatePass&&(function rC(n,e,t){null===n.queries&&(n.queries=new V_),n.queries.track(new z_(e,t))}(i,new JS(n,e,t),-1),!(2&~e)&&(i.staticViewQueries=!0)),function tC(n,e,t){const i=new Ig(!(4&~t));return function M2(n,e,t,i){const r=aS(e);r.push(t),n.firstCreatePass&&cS(n).push(i,r.length-1)}(n,e,i,i.destroy),(e[zr]??=new j_).queries.push(new B_(i))-1}(i,ee(),e)}function G_(n,e){return n.queries.getByIndex(e)}function sC(n,e){const t=n[ge],i=G_(t,e);return i.crossesNgTemplate?U_(t,n,e,[]):eC(t,n,i,e)}const oC=new Set;function Qn(n){oC.has(n)||(oC.add(n),performance?.mark?.(\"mark_feature_usage\",{detail:{feature:n}}))}function so(n,e){Qn(\"NgSignals\");const t=function S(n){const e=Object.create(qt);e.value=n;const t=()=>(D(e),e.value);return t[Pe]=e,t}(n),i=t[Pe];return e?.equal&&(i.equal=e.equal),t.set=r=>ke(i,r),t.update=r=>function Ye(n,e){y()||J(),ke(n,e(n.value))}(i,r),t.asReadonly=aC.bind(t),t}function aC(){const n=this[Pe];if(void 0===n.readonlyFn){const e=()=>this();e[Pe]=n,n.readonlyFn=e}return n.readonlyFn}class oo{}class CC extends oo{constructor(e){super(),this.componentFactoryResolver=new $S(this),this.instance=null;const t=new qo([...e.providers,{provide:oo,useValue:this},{provide:va,useValue:this.componentFactoryResolver}],e.parent||Ju(),e.debugName,new Set([\"environment\"]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}}function an(n,e,t){return!Object.is(n[e],t)&&(n[e]=t,!0)}function vl(n,e,t,i,r,s,o,a,c,l){const u=t+Fe,h=e.firstCreatePass?function nB(n,e,t,i,r,s,o,a,c){const l=e.consts,u=eo(e,n,4,o||null,a||null);g_(e,t,u,Oi(l,c)),uh(e,u);const h=u.tView=p_(2,u,i,r,s,e.directiveRegistry,e.pipeRegistry,null,e.schemas,l,null);return null!==e.queries&&(e.queries.template(e,u),h.queries=e.queries.embeddedTView(u)),u}(u,e,n,i,r,s,o,a,c):e.data[u];Zi(h,!1);const d=TC(e,n,h,t);jc()&&Fh(e,n,d,h),Hn(d,n);const p=sS(d,n,d,h);return n[u]=p,Vh(n,p),function ZS(n,e,t){return F_(n,e,t)}(p,h,n),rh(h)&&d_(e,n,h),null!=c&&f_(n,h,l),h}function X_(n,e,t,i,r,s,o,a){const c=ee(),l=st();return vl(c,l,n,e,t,i,r,Oi(l.consts,s),o,a),X_}let TC=function IC(n,e,t,i){return mr(!0),e[Xe].createComment(\"\")};var Sa=function(n){return n[n.EarlyRead=0]=\"EarlyRead\",n[n.Write=1]=\"Write\",n[n.MixedReadWrite=2]=\"MixedReadWrite\",n[n.Read=3]=\"Read\",n}(Sa||{});let RC=(()=>{class n{constructor(){this.impl=null}execute(){this.impl?.execute()}static{this.\\u0275prov=He({token:n,providedIn:\"root\",factory:()=>new n})}}return n})();class bl{constructor(){this.ngZone=be(Ct),this.scheduler=be(ya),this.errorHandler=be(vr,{optional:!0}),this.sequences=new Set,this.deferredRegistrations=new Set,this.executing=!1}static{this.PHASES=[Sa.EarlyRead,Sa.Write,Sa.MixedReadWrite,Sa.Read]}execute(){this.executing=!0;for(const e of bl.PHASES)for(const t of this.sequences)if(!t.erroredOrDestroyed&&t.hooks[e])try{t.pipelinedValue=this.ngZone.runOutsideAngular(()=>t.hooks[e](t.pipelinedValue))}catch(i){t.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(const e of this.sequences)e.afterRun(),e.once&&this.sequences.delete(e);for(const e of this.deferredRegistrations)this.sequences.add(e);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear()}register(e){this.executing?this.deferredRegistrations.add(e):(this.sequences.add(e),this.scheduler.notify(6))}unregister(e){this.executing&&this.sequences.has(e)?(e.erroredOrDestroyed=!0,e.pipelinedValue=void 0,e.once=!0):(this.sequences.delete(e),this.deferredRegistrations.delete(e))}static{this.\\u0275prov=He({token:bl,providedIn:\"root\",factory:()=>new bl})}}function Cl(n,e,t){const i=ee();return an(i,Qi(),e)&&function li(n,e,t,i,r,s,o,a){const c=Xn(e,t);let u,l=e.inputs;!a&&null!=l&&(u=l[i])?(v_(n,t,u,i,r),Gs(e)&&function R2(n,e){const t=mi(e,n);16&t[Ue]||(t[Ue]|=64)}(t,e.index)):3&e.type&&(i=function O2(n){return\"class\"===n?\"className\":\"for\"===n?\"htmlFor\":\"formaction\"===n?\"formAction\":\"innerHtml\"===n?\"innerHTML\":\"readonly\"===n?\"readOnly\":\"tabindex\"===n?\"tabIndex\":n}(i),r=null!=o?o(r,e.value||\"\",i):r,s.setProperty(c,i,r))}(st(),function zt(){const n=Ze.lFrame;return Fc(n.tView,n.selectedIndex)}(),i,n,e,i[Xe],t,!1),Cl}function hm(n,e,t,i,r){const o=r?\"class\":\"style\";v_(n,t,e.inputs[o],o,i)}function Tl(n,e,t,i){const r=ee(),s=st(),o=Fe+n,a=r[Xe],c=s.firstCreatePass?function Mj(n,e,t,i,r,s){const o=e.consts,c=eo(e,n,2,i,Oi(o,r));return g_(e,t,c,Oi(o,s)),null!==c.attrs&&Zh(c,c.attrs,!1),null!==c.mergedAttrs&&Zh(c,c.mergedAttrs,!0),null!==e.queries&&e.queries.elementStart(e,c),c}(o,s,r,e,t,i):s.data[o],l=TD(s,r,c,a,e,n);r[o]=l;const u=rh(c);return Zi(c,!0),Yb(a,l,c),!function Ea(n){return!(32&~n.flags)}(c)&&jc()&&Fh(s,r,l,c),0===function WR(){return Ze.lFrame.elementDepthCount}()&&Hn(l,r),function qR(){Ze.lFrame.elementDepthCount++}(),u&&(d_(s,r,c),h_(s,c,r)),null!==i&&f_(r,c),Tl}function ud(){let n=At();og()?function ag(){Ze.lFrame.isParent=!1}():(n=n.parent,Zi(n,!1));const e=n;(function YR(n){return Ze.skipHydrationRootTNode===n})(e)&&function JR(){Ze.skipHydrationRootTNode=null}(),function KR(){Ze.lFrame.elementDepthCount--}();const t=st();return t.firstCreatePass&&(uh(t,n),Zp(n)&&t.queries.elementEnd(n)),null!=e.classesWithoutHost&&function dN(n){return!!(8&n.flags)}(e)&&hm(t,e,ee(),e.classesWithoutHost,!0),null!=e.stylesWithoutHost&&function fN(n){return!!(16&n.flags)}(e)&&hm(t,e,ee(),e.stylesWithoutHost,!1),ud}function hd(n,e,t,i){return Tl(n,e,t,i),ud(),hd}let TD=(n,e,t,i,r,s)=>(mr(!0),kh(i,r,function iE(){return Ze.lFrame.currentNamespace}()));const dd=\"en-US\";let ND=dd,QD=(n,e,t)=>{};function wm(n,e,t,i){const r=ee(),s=st(),o=At();return function Em(n,e,t,i,r,s,o){const a=rh(i),l=n.firstCreatePass&&cS(n),u=e[Vt],h=aS(e);let d=!0;if(3&i.type||o){const m=Xn(i,e),v=o?o(m):m,C=h.length,I=o?H=>o(ft(H[i.index])):i.index;let L=null;if(!o&&a&&(L=function D5(n,e,t,i){const r=n.cleanup;if(null!=r)for(let s=0;s<r.length-1;s+=2){const o=r[s];if(o===t&&r[s+1]===i){const a=e[Xo],c=r[s+2];return a.length>c?a[c]:null}\"string\"==typeof o&&(s+=2)}return null}(n,e,r,i.index)),null!==L)(L.__ngLastListenerFn__||L).__ngNextListenerFn__=s,L.__ngLastListenerFn__=s,d=!1;else{s=nT(i,e,u,s),QD(m,r,s);const H=t.listen(v,r,s);h.push(s,H),l&&l.push(r,I,C,C+1)}}else s=nT(i,e,u,s);const p=i.outputs;let f;if(d&&null!==p&&(f=p[r])){const m=f.length;if(m)for(let v=0;v<m;v+=2){const ne=e[f[v]][f[v+1]].subscribe(s),se=h.length;h.push(s,ne),l&&l.push(r,i.index,se,-(se+1))}}}(s,r,r[Xe],o,n,e,i),wm}function tT(n,e,t,i){const r=le(null);try{return _r(6,e,t),!1!==t(i)}catch(s){return zh(n,s),!1}finally{_r(7,e,t),le(r)}}function nT(n,e,t,i){return function r(s){if(s===Function)return i;rl(n.componentOffset>-1?mi(n.index,e):e,5);let a=tT(e,t,i,s),c=r.__ngNextListenerFn__;for(;c;)a=tT(e,t,c,s)&&a,c=c.__ngNextListenerFn__;return a}}function bm(n=1){return function rN(n){return(Ze.lFrame.contextLView=function V0(n,e){for(;n>0;)e=e[Zo],n--;return e}(n,Ze.lFrame.contextLView))[Vt]}(n)}function pT(){return function H_(n,e){return n[zr].queries[e].queryList}(ee(),ug())}let DT=(n,e,t,i,r)=>(mr(!0),function e_(n,e){return n.createText(e)}(e[Xe],i));function Dm(n){return Tm(\"\",n,\"\"),Dm}function Tm(n,e,t){const i=ee(),r=function xa(n,e,t,i){return an(n,Qi(),t)?e+Je(t)+i:et}(i,n,e,t);return r!==et&&qr(i,Nn(),r),Tm}let e3=(()=>{class n{constructor(t){this._injector=t,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){const i=Up(0,t.type),r=i.length>0?function DC(n,e,t=null){return new CC({providers:n,parent:e,debugName:t,runEnvironmentInitializers:!0}).injector}([i],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t,r)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(const t of this.cachedInjectors.values())null!==t&&t.destroy()}finally{this.cachedInjectors.clear()}}static{this.\\u0275prov=He({token:n,providedIn:\"environment\",factory:()=>new n(Le(Ki))})}}return n})();function Pm(n){Qn(\"NgStandalone\"),n.getStandaloneInjector=e=>e.get(e3).getOrCreateStandaloneInjector(n)}function zT(n,e,t,i,r){return function HT(n,e,t,i,r,s,o){const a=e+t;return function ao(n,e,t,i){const r=an(n,e,t);return an(n,e+1,i)||r}(n,a,r,s)?function br(n,e,t){return n[e]=t}(n,a+2,o?i.call(o,r,s):i(r,s)):function Ol(n,e){const t=n[e];return t===et?void 0:t}(n,a+2)}(ee(),function Zn(){const n=Ze.lFrame;let e=n.bindingRootIndex;return-1===e&&(e=n.bindingRootIndex=n.tView.bindingStartIndex),e}(),n,e,t,i,r)}const dI=new ye(\"\"),Ed=new ye(\"\");let jm,Fm=(()=>{class n{constructor(t,i,r){this._ngZone=t,this.registry=i,this._isZoneStable=!0,this._callbacks=[],this.taskTrackingZone=null,jm||(function gV(n){jm=n}(r),r.addToWindow(i)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>\"u\"?null:Zone.current.get(\"TaskTrackingZone\")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Ct.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb()}});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(t)||(clearTimeout(i.timeoutId),!1))}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,i,r){let s=-1;i&&i>0&&(s=setTimeout(()=>{this._callbacks=this._callbacks.filter(o=>o.timeoutId!==s),t()},i)),this._callbacks.push({doneCb:t,timeoutId:s,updateCb:r})}whenStable(t,i,r){if(r&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is \"zone.js/plugins/task-tracking\" loaded?');this.addCallback(t,i,r),this._runCallbacksIfReady()}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,i,r){return[]}static{this.\\u0275fac=function(i){return new(i||n)(Le(Ct),Le(Bm),Le(Ed))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})(),Bm=(()=>{class n{constructor(){this._applications=new Map}registerApplication(t,i){this._applications.set(t,i)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,i=!0){return jm?.findTestabilityInTree(this,t,i)??null}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"platform\"})}}return n})();function Vm(n){return!!n&&\"function\"==typeof n.then}function fI(n){return!!n&&\"function\"==typeof n.subscribe}const _V=new ye(\"\");let pI=(()=>{class n{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,i)=>{this.resolve=t,this.reject=i}),this.appInits=be(_V,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const t=[];for(const r of this.appInits){const s=r();if(Vm(s))t.push(s);else if(fI(s)){const o=new Promise((a,c)=>{s.subscribe({complete:a,error:c})});t.push(o)}}const i=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{i()}).catch(r=>{this.reject(r)}),0===t.length&&i(),this.initialized=!0}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();const zm=new ye(\"\");let Dr=(()=>{class n{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=be(zN),this.afterRenderManager=be(RC),this.zonelessEnabled=be(fl),this.dirtyFlags=0,this.deferredDirtyFlags=0,this.externalTestViews=new Set,this.beforeRender=new Ot,this.afterTick=new Ot,this.componentTypes=[],this.components=[],this.isStable=be(ra).hasPendingTasks.pipe(ii(t=>!t)),this._injector=be(Ki)}get allViews(){return[...this.externalTestViews.keys(),...this._views]}get destroyed(){return this._destroyed}whenStable(){let t;return new Promise(i=>{t=this.isStable.subscribe({next:r=>{r&&i()}})}).finally(()=>{t.unsubscribe()})}get injector(){return this._injector}bootstrap(t,i){const r=t instanceof VS;if(!this._injector.get(pI).done)throw!r&&function zs(n){const e=at(n)||wn(n)||On(n);return null!==e&&e.standalone}(t),new oe(405,!1);let o;o=r?t:this._injector.get(va).resolveComponentFactory(t),this.componentTypes.push(o.componentType);const a=function mV(n){return n.isBoundToModule}(o)?void 0:this._injector.get(oo),l=o.create(kn.NULL,[],i||o.selector,a),u=l.location.nativeElement,h=l.injector.get(dI,null);return h?.registerApplication(u),l.onDestroy(()=>{this.detachView(l.hostView),bd(this.components,l),h?.unregisterApplication(u)}),this._loadComponent(l),l}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){if(this._runningTick)throw new oe(101,!1);const t=le(null);try{this._runningTick=!0,this.synchronize()}catch(i){this.internalErrorHandler(i)}finally{this._runningTick=!1,le(t),this.afterTick.next()}}synchronize(){let t=null;this._injector.destroyed||(t=this._injector.get(Yh,null,{optional:!0})),this.dirtyFlags|=this.deferredDirtyFlags,this.deferredDirtyFlags=0;let i=0;for(;0!==this.dirtyFlags&&i++<10;)this.synchronizeOnce(t)}synchronizeOnce(t){if(this.dirtyFlags|=this.deferredDirtyFlags,this.deferredDirtyFlags=0,7&this.dirtyFlags){const i=!!(1&this.dirtyFlags);this.dirtyFlags&=-8,this.dirtyFlags|=8,this.beforeRender.next(i);for(let{_lView:r,notifyErrorHandler:s}of this._views)wV(r,s,i,this.zonelessEnabled);if(this.dirtyFlags&=-5,this.syncDirtyFlagsWithViews(),7&this.dirtyFlags)return}else t?.begin?.(),t?.end?.();8&this.dirtyFlags&&(this.dirtyFlags&=-9,this.afterRenderManager.execute()),this.syncDirtyFlagsWithViews()}syncDirtyFlagsWithViews(){this.allViews.some(({_lView:t})=>sh(t))?this.dirtyFlags|=2:this.dirtyFlags&=-8}attachView(t){const i=t;this._views.push(i),i.attachToAppRef(this)}detachView(t){const i=t;bd(this._views,i),i.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);const i=this._injector.get(zm,[]);[...this._bootstrapListeners,...i].forEach(r=>r(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>bd(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new oe(406,!1);const t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();function bd(n,e){const t=n.indexOf(e);t>-1&&n.splice(t,1)}function wV(n,e,t,i){(t||sh(n))&&Uh(n,e,t&&!i?0:1)}let CV=(()=>{class n{constructor(){this.zone=be(Ct),this.changeDetectionScheduler=be(ya),this.applicationRef=be(Dr)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.changeDetectionScheduler.runningTick||this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();function Um({ngZoneFactory:n,ignoreChangesOutsideZone:e,scheduleInRootZone:t}){return n??=()=>new Ct({...Hm(),scheduleInRootZone:t}),[{provide:Ct,useFactory:n},{provide:Mi,multi:!0,useFactory:()=>{const i=be(CV,{optional:!0});return()=>i.initialize()}},{provide:Mi,multi:!0,useFactory:()=>{const i=be(TV);return()=>{i.initialize()}}},!0===e?{provide:jS,useValue:!0}:[],{provide:R_,useValue:t??TE}]}function Hm(n){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:n?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:n?.runCoalescing??!1}}let TV=(()=>{class n{constructor(){this.subscription=new Xt,this.initialized=!1,this.zone=be(Ct),this.pendingTasks=be(ra)}initialize(){if(this.initialized)return;this.initialized=!0;let t=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(t=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{Ct.assertNotInAngularZone(),queueMicrotask(()=>{null!==t&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(t),t=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{Ct.assertInAngularZone(),t??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})(),Ll=(()=>{class n{constructor(){this.appRef=be(Dr),this.taskService=be(ra),this.ngZone=be(Ct),this.zonelessEnabled=be(fl),this.disableScheduling=be(jS,{optional:!0})??!1,this.zoneIsDefined=typeof Zone<\"u\"&&!!Zone.root.run,this.schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}],this.subscriptions=new Xt,this.angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(wh):null,this.scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(be(R_,{optional:!0})??!1),this.cancelScheduledCallback=null,this.useMicrotaskScheduler=!1,this.runningTick=!1,this.pendingRenderTaskId=null,this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{this.runningTick||this.cleanup()})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()})),this.disableScheduling||=!this.zonelessEnabled&&(this.ngZone instanceof Tg||!this.zoneIsDefined)}notify(t){if(!this.zonelessEnabled&&5===t)return;switch(t){case 0:this.appRef.dirtyFlags|=2;break;case 3:case 2:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 7:this.appRef.deferredDirtyFlags|=8;break;default:this.appRef.dirtyFlags|=8}if(!this.shouldScheduleTick())return;const i=this.useMicrotaskScheduler?AE:IE;this.pendingRenderTaskId=this.taskService.add(),this.cancelScheduledCallback=this.scheduleInRootZone?Zone.root.run(()=>i(()=>this.tick())):this.ngZone.runOutsideAngular(()=>i(()=>this.tick()))}shouldScheduleTick(){return!(this.disableScheduling||null!==this.pendingRenderTaskId||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(wh+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;!this.zonelessEnabled&&7&this.appRef.dirtyFlags&&(this.appRef.dirtyFlags|=1);const t=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(i){throw this.taskService.remove(t),i}finally{this.cleanup()}this.useMicrotaskScheduler=!0,AE(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(t)})}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,null!==this.pendingRenderTaskId){const t=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(t)}}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();const Cs=new ye(\"\",{providedIn:\"root\",factory:()=>be(Cs,ct.Optional|ct.SkipSelf)||function AV(){return typeof $localize<\"u\"&&$localize.locale||dd}()}),$m=new ye(\"\");function Cd(n){return!!n.platformInjector}let Ds=null;let qm=(()=>{class n{static{this.__NG_ELEMENT_ID__=jV}}return n})();function jV(n){return function VV(n,e,t){if(Gs(n)&&!t){const i=mi(n.index,e);return new sl(i,i)}return 175&n.type?new sl(e[Qt],e):null}(At(),ee(),!(16&~n))}let QV=(()=>{class n{constructor(t){}static{this.\\u0275fac=function(i){return new(i||n)(Le(Dr))}}static{this.\\u0275mod=Mc({type:n})}static{this.\\u0275inj=Ho({})}}return n})();function uz(n){try{const{rootComponent:e,appProviders:t,platformProviders:i}=n,r=function FV(n=[]){if(Ds)return Ds;const e=function DI(n=[],e){return kn.create({name:e,providers:[{provide:$p,useValue:\"platform\"},{provide:$m,useValue:new Set([()=>Ds=null])},...n]})}(n);return Ds=e,function gI(){!function q(n){X=n}(()=>{throw new oe(600,!1)})}(),function TI(n){n.get(JE,null)?.forEach(t=>t())}(e),e}(i),s=[Um({}),{provide:ya,useExisting:Ll},...t||[]];return function bI(n){const e=Cd(n)?n.r3Injector:n.moduleRef.injector,t=e.get(Ct);return t.run(()=>{Cd(n)?n.r3Injector.resolveInjectorInitializers():n.moduleRef.resolveInjectorInitializers();const i=e.get(vr,null);let r;if(t.runOutsideAngular(()=>{r=t.onError.subscribe({next:s=>{i.handleError(s)}})}),Cd(n)){const s=()=>e.destroy(),o=n.platformInjector.get($m);o.add(s),e.onDestroy(()=>{r.unsubscribe(),o.delete(s)})}else n.moduleRef.onDestroy(()=>{bd(n.allPlatformModules,n.moduleRef),r.unsubscribe()});return function vV(n,e,t){try{const i=t();return Vm(i)?i.catch(r=>{throw e.runOutsideAngular(()=>n.handleError(r)),r}):i}catch(i){throw e.runOutsideAngular(()=>n.handleError(i)),i}}(i,t,()=>{const s=e.get(pI);return s.runInitializers(),s.donePromise.then(()=>{if(function zj(n){\"string\"==typeof n&&(ND=n.toLowerCase().replace(/_/g,\"-\"))}(e.get(Cs,dd)||dd),Cd(n)){const a=e.get(Dr);return void 0!==n.rootComponent&&a.bootstrap(n.rootComponent),a}return function NV(n,e){const t=n.injector.get(Dr);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(i=>t.bootstrap(i));else{if(!n.instance.ngDoBootstrap)throw new oe(-403,!1);n.instance.ngDoBootstrap(t)}e.push(n)}(n.moduleRef,n.allPlatformModules),n.moduleRef})})})}({r3Injector:new CC({providers:s,parent:r,debugName:\"\",runEnvironmentInitializers:!1}).injector,platformInjector:r,rootComponent:e})}catch(e){return Promise.reject(e)}}const QI=new ye(\"\");function Ts(n,e){Qn(\"NgSignals\");const t=function ie(n){const e=Object.create(O);e.computation=n;const t=()=>{if(_(e),D(e),e.value===V)throw e.error;return e.value};return t[Pe]=e,t}(n);return e?.equal&&(t[Pe].equal=e.equal),t}function Nd(n){const e=le(null);try{return n()}finally{le(e)}}const Pz=new ye(\"\",{providedIn:\"root\",factory:()=>be(Oz)});let Oz=(()=>{class n{static{this.\\u0275prov=He({token:n,providedIn:\"root\",factory:()=>new Rz})}}return n})();class Rz{constructor(){this.queuedEffectCount=0,this.queues=new Map,this.pendingTasks=be(ra),this.taskId=null}scheduleEffect(e){if(this.enqueue(e),null===this.taskId){const t=this.taskId=this.pendingTasks.add();queueMicrotask(()=>{this.flush(),this.pendingTasks.remove(t),this.taskId=null})}}enqueue(e){const t=e.creationZone;this.queues.has(t)||this.queues.set(t,new Set);const i=this.queues.get(t);i.has(e)||(this.queuedEffectCount++,i.add(e))}flush(){for(;this.queuedEffectCount>0;)for(const[e,t]of this.queues)null===e?this.flushQueue(t):e.run(()=>this.flushQueue(t))}flushQueue(e){for(const t of e)e.delete(t),this.queuedEffectCount--,t.run()}}class Nz{constructor(e,t,i,r,s,o){this.scheduler=e,this.effectFn=t,this.creationZone=i,this.injector=s,this.watcher=function Vn(n,e,t){const i=Object.create(yn);t&&(i.consumerAllowSignalWrites=!0),i.fn=n,i.schedule=e;const r=c=>{i.cleanupFn=c};return i.ref={notify:()=>A(i),run:()=>{if(null===i.fn)return;if(function te(){return Te}())throw new Error(\"Schedulers cannot synchronously execute watches while scheduling.\");if(i.dirty=!1,i.hasRun&&!w(i))return;i.hasRun=!0;const c=x(i);try{i.cleanupFn(),i.cleanupFn=St,i.fn(r)}finally{M(i,c)}},cleanup:()=>i.cleanupFn(),destroy:()=>function o(c){(function s(c){return null===c.fn&&null===c.schedule})(c)||(P(c),c.cleanupFn(),c.fn=null,c.schedule=null,c.cleanupFn=St)}(i),[Pe]:i},i.ref}(a=>this.runEffect(a),()=>this.schedule(),o),this.unregisterOnDestroy=r?.onDestroy(()=>this.destroy())}runEffect(e){try{this.effectFn(e)}catch(t){this.injector.get(vr,null,{optional:!0})?.handleError(t)}}run(){this.watcher.run()}schedule(){this.scheduler.scheduleEffect(this)}destroy(){this.watcher.destroy(),this.unregisterOnDestroy?.()}}let u1=null;function ny(){return u1}class Lz{}const Yr=new ye(\"\"),dy=/\\s+/,v1=[];let w1=(()=>{class n{constructor(t,i){this._ngEl=t,this._renderer=i,this.initialClasses=v1,this.stateMap=new Map}set klass(t){this.initialClasses=null!=t?t.trim().split(dy):v1}set ngClass(t){this.rawClass=\"string\"==typeof t?t.trim().split(dy):t}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const t=this.rawClass;if(Array.isArray(t)||t instanceof Set)for(const i of t)this._updateState(i,!0);else if(null!=t)for(const i of Object.keys(t))this._updateState(i,!!t[i]);this._applyStateDiff()}_updateState(t,i){const r=this.stateMap.get(t);void 0!==r?(r.enabled!==i&&(r.changed=!0,r.enabled=i),r.touched=!0):this.stateMap.set(t,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const t of this.stateMap){const i=t[0],r=t[1];r.changed?(this._toggleClass(i,r.enabled),r.changed=!1):r.touched||(r.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),r.touched=!1}}_toggleClass(t,i){(t=t.trim()).length>0&&t.split(dy).forEach(r=>{i?this._renderer.addClass(this._ngEl.nativeElement,r):this._renderer.removeClass(this._ngEl.nativeElement,r)})}static{this.\\u0275fac=function(i){return new(i||n)(rt(oa),rt(US))}}static{this.\\u0275dir=xi({type:n,selectors:[[\"\",\"ngClass\",\"\"]],inputs:{klass:[0,\"class\",\"klass\"],ngClass:\"ngClass\"},standalone:!0})}}return n})(),S1=(()=>{class n{constructor(t,i){this._viewContainer=t,this._context=new TU,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){C1(\"ngIfThen\",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){C1(\"ngIfElse\",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,i){return!0}static{this.\\u0275fac=function(i){return new(i||n)(rt(Er),rt(Kr))}}static{this.\\u0275dir=xi({type:n,selectors:[[\"\",\"ngIf\",\"\"]],inputs:{ngIf:\"ngIf\",ngIfThen:\"ngIfThen\",ngIfElse:\"ngIfElse\"},standalone:!0})}}return n})();class TU{constructor(){this.$implicit=null,this.ngIf=null}}function C1(n,e){if(e&&!e.createEmbeddedView)throw new Error(`${n} must be a TemplateRef, but received '${vn(e)}'.`)}let my=(()=>{class n{static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275mod=Mc({type:n})}static{this.\\u0275inj=Ho({})}}return n})();function A1(n){return\"server\"===n}class IH extends Lz{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class Ey extends IH{static makeCurrent(){!function kz(n){u1??=n}(new Ey)}onAndCancel(e,t,i){return e.addEventListener(t,i),()=>{e.removeEventListener(t,i)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.remove()}createElement(e,t){return(t=t||this.getDefaultDocument()).createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument(\"fakeTitle\")}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return\"window\"===t?window:\"document\"===t?e:\"body\"===t?e.body:null}getBaseHref(e){const t=function AH(){return Hl=Hl||document.querySelector(\"base\"),Hl?Hl.getAttribute(\"href\"):null}();return null==t?null:function MH(n){return new URL(n,document.baseURI).pathname}(t)}resetBaseElement(){Hl=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return function bU(n,e){e=encodeURIComponent(e);for(const t of n.split(\";\")){const i=t.indexOf(\"=\"),[r,s]=-1==i?[t,\"\"]:[t.slice(0,i),t.slice(i+1)];if(r.trim()===e)return decodeURIComponent(s)}return null}(document.cookie,e)}}let Hl=null,PH=(()=>{class n{build(){return new XMLHttpRequest}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();const Yd=new ye(\"\");let B1=(()=>{class n{constructor(t,i){this._zone=i,this._eventNameToPlugin=new Map,t.forEach(r=>{r.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,i,r){return this._findPluginFor(i).addEventListener(t,i,r)}getZone(){return this._zone}_findPluginFor(t){let i=this._eventNameToPlugin.get(t);if(i)return i;if(i=this._plugins.find(s=>s.supports(t)),!i)throw new oe(5101,!1);return this._eventNameToPlugin.set(t,i),i}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yd),Le(Ct))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();class by{constructor(e){this._doc=e}}const Sy=\"ng-app-id\";let j1=(()=>{class n{constructor(t,i,r,s={}){this.doc=t,this.appId=i,this.nonce=r,this.platformId=s,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=A1(s),this.resetHostNodes()}addStyles(t){for(const i of t)1===this.changeUsageCount(i,1)&&this.onStyleAdded(i)}removeStyles(t){for(const i of t)this.changeUsageCount(i,-1)<=0&&this.onStyleRemoved(i)}ngOnDestroy(){const t=this.styleNodesInDOM;t&&(t.forEach(i=>i.remove()),t.clear());for(const i of this.getAllStyles())this.onStyleRemoved(i);this.resetHostNodes()}addHost(t){this.hostNodes.add(t);for(const i of this.getAllStyles())this.addStyleToHost(t,i)}removeHost(t){this.hostNodes.delete(t)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(t){for(const i of this.hostNodes)this.addStyleToHost(i,t)}onStyleRemoved(t){const i=this.styleRef;i.get(t)?.elements?.forEach(r=>r.remove()),i.delete(t)}collectServerRenderedStyles(){const t=this.doc.head?.querySelectorAll(`style[${Sy}=\"${this.appId}\"]`);if(t?.length){const i=new Map;return t.forEach(r=>{null!=r.textContent&&i.set(r.textContent,r)}),i}return null}changeUsageCount(t,i){const r=this.styleRef;if(r.has(t)){const s=r.get(t);return s.usage+=i,s.usage}return r.set(t,{usage:i,elements:[]}),i}getStyleElement(t,i){const r=this.styleNodesInDOM,s=r?.get(i);if(s?.parentNode===t)return r.delete(i),s.removeAttribute(Sy),s;{const o=this.doc.createElement(\"style\");return this.nonce&&o.setAttribute(\"nonce\",this.nonce),o.textContent=i,this.platformIsServer&&o.setAttribute(Sy,this.appId),t.appendChild(o),o}}addStyleToHost(t,i){const r=this.getStyleElement(t,i),s=this.styleRef,o=s.get(i)?.elements;o?o.push(r):s.set(i,{elements:[r],usage:1})}resetHostNodes(){const t=this.hostNodes;t.clear(),t.add(this.doc.head)}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yr),Le(ca),Le(tb,8),Le(Xs))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();const Cy={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\",math:\"http://www.w3.org/1998/Math/MathML\"},Dy=/%COMP%/g,kH=new ye(\"\",{providedIn:\"root\",factory:()=>!0});function z1(n,e){return e.map(t=>t.replace(Dy,n))}let Ty=(()=>{class n{constructor(t,i,r,s,o,a,c,l=null){this.eventManager=t,this.sharedStylesHost=i,this.appId=r,this.removeStylesOnCompDestroy=s,this.doc=o,this.platformId=a,this.ngZone=c,this.nonce=l,this.rendererByCompId=new Map,this.platformIsServer=A1(a),this.defaultRenderer=new Iy(t,o,c,this.platformIsServer)}createRenderer(t,i){if(!t||!i)return this.defaultRenderer;this.platformIsServer&&i.encapsulation===Wi.ShadowDom&&(i={...i,encapsulation:Wi.Emulated});const r=this.getOrCreateRenderer(t,i);return r instanceof H1?r.applyToHost(t):r instanceof Ay&&r.applyStyles(),r}getOrCreateRenderer(t,i){const r=this.rendererByCompId;let s=r.get(i.id);if(!s){const o=this.doc,a=this.ngZone,c=this.eventManager,l=this.sharedStylesHost,u=this.removeStylesOnCompDestroy,h=this.platformIsServer;switch(i.encapsulation){case Wi.Emulated:s=new H1(c,l,i,this.appId,u,o,a,h);break;case Wi.ShadowDom:return new jH(c,l,t,i,o,a,this.nonce,h);default:s=new Ay(c,l,i,u,o,a,h)}r.set(i.id,s)}return s}ngOnDestroy(){this.rendererByCompId.clear()}static{this.\\u0275fac=function(i){return new(i||n)(Le(B1),Le(j1),Le(ca),Le(kH),Le(Yr),Le(Xs),Le(Ct),Le(tb))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();class Iy{constructor(e,t,i,r){this.eventManager=e,this.doc=t,this.ngZone=i,this.platformIsServer=r,this.data=Object.create(null),this.throwOnSyntheticProps=!0,this.destroyNode=null}destroy(){}createElement(e,t){return t?this.doc.createElementNS(Cy[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(U1(e)?e.content:e).appendChild(t)}insertBefore(e,t,i){e&&(U1(e)?e.content:e).insertBefore(t,i)}removeChild(e,t){t.remove()}selectRootElement(e,t){let i=\"string\"==typeof e?this.doc.querySelector(e):e;if(!i)throw new oe(-5104,!1);return t||(i.textContent=\"\"),i}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,i,r){if(r){t=r+\":\"+t;const s=Cy[r];s?e.setAttributeNS(s,t,i):e.setAttribute(t,i)}else e.setAttribute(t,i)}removeAttribute(e,t,i){if(i){const r=Cy[i];r?e.removeAttributeNS(r,t):e.removeAttribute(`${i}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,i,r){r&(ws.DashCase|ws.Important)?e.style.setProperty(t,i,r&ws.Important?\"important\":\"\"):e.style[t]=i}removeStyle(e,t,i){i&ws.DashCase?e.style.removeProperty(t):e.style[t]=\"\"}setProperty(e,t,i){null!=e&&(e[t]=i)}setValue(e,t){e.nodeValue=t}listen(e,t,i){if(\"string\"==typeof e&&!(e=ny().getGlobalEventTarget(this.doc,e)))throw new Error(`Unsupported event target ${e} for event ${t}`);return this.eventManager.addEventListener(e,t,this.decoratePreventDefault(i))}decoratePreventDefault(e){return t=>{if(\"__ngUnwrap__\"===t)return e;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>e(t)):e(t))&&t.preventDefault()}}}function U1(n){return\"TEMPLATE\"===n.tagName&&void 0!==n.content}class jH extends Iy{constructor(e,t,i,r,s,o,a,c){super(e,s,o,c),this.sharedStylesHost=t,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:\"open\"}),this.sharedStylesHost.addHost(this.shadowRoot);const l=z1(r.id,r.styles);for(const u of l){const h=document.createElement(\"style\");a&&h.setAttribute(\"nonce\",a),h.textContent=u,this.shadowRoot.appendChild(h)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,i){return super.insertBefore(this.nodeOrShadowRoot(e),t,i)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class Ay extends Iy{constructor(e,t,i,r,s,o,a,c){super(e,s,o,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=r,this.styles=c?z1(c,i.styles):i.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class H1 extends Ay{constructor(e,t,i,r,s,o,a,c){const l=r+\"-\"+i.id;super(e,t,i,s,o,a,c,l),this.contentAttr=function LH(n){return\"_ngcontent-%COMP%\".replace(Dy,n)}(l),this.hostAttr=function FH(n){return\"_nghost-%COMP%\".replace(Dy,n)}(l)}applyToHost(e){this.applyStyles(),this.setAttribute(e,this.hostAttr,\"\")}createElement(e,t){const i=super.createElement(e,t);return super.setAttribute(i,this.contentAttr,\"\"),i}}let VH=(()=>{class n extends by{constructor(t){super(t)}supports(t){return!0}addEventListener(t,i,r){return t.addEventListener(i,r,!1),()=>this.removeEventListener(t,i,r)}removeEventListener(t,i,r){return t.removeEventListener(i,r)}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yr))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})(),zH=(()=>{class n extends by{constructor(t){super(t),this.delegate=be(QI,{optional:!0})}supports(t){return!!this.delegate&&this.delegate.supports(t)}addEventListener(t,i,r){return this.delegate.addEventListener(t,i,r)}removeEventListener(t,i,r){return this.delegate.removeEventListener(t,i,r)}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yr))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();const G1=[\"alt\",\"control\",\"meta\",\"shift\"],UH={\"\\b\":\"Backspace\",\"\\t\":\"Tab\",\"\\x7f\":\"Delete\",\"\\x1b\":\"Escape\",Del:\"Delete\",Esc:\"Escape\",Left:\"ArrowLeft\",Right:\"ArrowRight\",Up:\"ArrowUp\",Down:\"ArrowDown\",Menu:\"ContextMenu\",Scroll:\"ScrollLock\",Win:\"OS\"},HH={alt:n=>n.altKey,control:n=>n.ctrlKey,meta:n=>n.metaKey,shift:n=>n.shiftKey};let GH=(()=>{class n extends by{constructor(t){super(t)}supports(t){return null!=n.parseEventName(t)}addEventListener(t,i,r){const s=n.parseEventName(i),o=n.eventCallback(s.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>ny().onAndCancel(t,s.domEventName,o))}static parseEventName(t){const i=t.toLowerCase().split(\".\"),r=i.shift();if(0===i.length||\"keydown\"!==r&&\"keyup\"!==r)return null;const s=n._normalizeKey(i.pop());let o=\"\",a=i.indexOf(\"code\");if(a>-1&&(i.splice(a,1),o=\"code.\"),G1.forEach(l=>{const u=i.indexOf(l);u>-1&&(i.splice(u,1),o+=l+\".\")}),o+=s,0!=i.length||0===s.length)return null;const c={};return c.domEventName=r,c.fullKey=o,c}static matchEventFullKeyCode(t,i){let r=UH[t.key]||t.key,s=\"\";return i.indexOf(\"code.\")>-1&&(r=t.code,s=\"code.\"),!(null==r||!r)&&(r=r.toLowerCase(),\" \"===r?r=\"space\":\".\"===r&&(r=\"dot\"),G1.forEach(o=>{o!==r&&(0,HH[o])(t)&&(s+=o+\".\")}),s+=r,s===i)}static eventCallback(t,i,r){return s=>{n.matchEventFullKeyCode(s,t)&&r.runGuarded(()=>i(s))}}static _normalizeKey(t){return\"esc\"===t?\"escape\":t}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yr))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();const YH=[{provide:Xs,useValue:\"browser\"},{provide:JE,useValue:function WH(){Ey.makeCurrent()},multi:!0},{provide:Yr,useFactory:function KH(){return function lk(n){Og=n}(document),document},deps:[]}],XH=new ye(\"\"),W1=[{provide:Ed,useClass:class xH{addToWindow(e){Kt.getAngularTestability=(i,r=!0)=>{const s=e.findTestabilityInTree(i,r);if(null==s)throw new oe(5103,!1);return s},Kt.getAllAngularTestabilities=()=>e.getAllTestabilities(),Kt.getAllAngularRootElements=()=>e.getAllRootElements(),Kt.frameworkStabilizers||(Kt.frameworkStabilizers=[]),Kt.frameworkStabilizers.push(i=>{const r=Kt.getAllAngularTestabilities();let s=r.length;const o=function(){s--,0==s&&i()};r.forEach(a=>{a.whenStable(o)})})}findTestabilityInTree(e,t,i){return null==t?null:e.getTestability(t)??(i?ny().isShadowRoot(t)?this.findTestabilityInTree(e,t.host,!0):this.findTestabilityInTree(e,t.parentElement,!0):null)}},deps:[]},{provide:dI,useClass:Fm,deps:[Ct,Bm,Ed]},{provide:Fm,useClass:Fm,deps:[Ct,Bm,Ed]}],q1=[{provide:$p,useValue:\"root\"},{provide:vr,useFactory:function qH(){return new vr},deps:[]},{provide:Yd,useClass:VH,multi:!0,deps:[Yr,Ct,Xs]},{provide:Yd,useClass:GH,multi:!0,deps:[Yr]},{provide:Yd,useClass:zH,multi:!0},Ty,j1,B1,{provide:Yh,useExisting:Ty},{provide:class JU{},useClass:PH,deps:[]},[]];let ZH=(()=>{class n{constructor(t){}static withServerTransition(t){return{ngModule:n,providers:[{provide:ca,useValue:t.appId}]}}static{this.\\u0275fac=function(i){return new(i||n)(Le(XH,12))}}static{this.\\u0275mod=Mc({type:n})}static{this.\\u0275inj=Ho({providers:[...q1,...W1],imports:[my,QV]})}}return n})();const My={now:()=>(My.delegate||Date).now(),delegate:void 0};class tG extends Ot{constructor(e=1/0,t=1/0,i=My){super(),this._bufferSize=e,this._windowTime=t,this._timestampProvider=i,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=t===1/0,this._bufferSize=Math.max(1,e),this._windowTime=Math.max(1,t)}next(e){const{isStopped:t,_buffer:i,_infiniteTimeWindow:r,_timestampProvider:s,_windowTime:o}=this;t||(i.push(e),!r&&i.push(s.now()+o)),this._trimBuffer(),super.next(e)}_subscribe(e){this._throwIfClosed(),this._trimBuffer();const t=this._innerSubscribe(e),{_infiniteTimeWindow:i,_buffer:r}=this,s=r.slice();for(let o=0;o<s.length&&!e.closed;o+=i?1:2)e.next(s[o]);return this._checkFinalizedStatuses(e),t}_trimBuffer(){const{_bufferSize:e,_timestampProvider:t,_buffer:i,_infiniteTimeWindow:r}=this,s=(r?1:2)*e;if(e<1/0&&s<i.length&&i.splice(0,i.length-s),!r){const o=t.now();let a=0;for(let c=1;c<i.length&&i[c]<=o;c+=2)a=c;a&&i.splice(0,a+1)}}}function Is(n){return this instanceof Is?(this.v=n,this):new Is(n)}function J1(n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var t,e=n[Symbol.asyncIterator];return e?e.call(n):(n=function Ry(n){var e=\"function\"==typeof Symbol&&Symbol.iterator,t=e&&n[e],i=0;if(t)return t.call(n);if(n&&\"number\"==typeof n.length)return{next:function(){return n&&i>=n.length&&(n=void 0),{value:n&&n[i++],done:!n}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(n),t={},i(\"next\"),i(\"throw\"),i(\"return\"),t[Symbol.asyncIterator]=function(){return this},t);function i(s){t[s]=n[s]&&function(o){return new Promise(function(a,c){!function r(s,o,a,c){Promise.resolve(c).then(function(l){s({value:l,done:a})},o)}(a,c,(o=n[s](o)).done,o.value)})}}}\"function\"==typeof SuppressedError&&SuppressedError;const eA=n=>n&&\"number\"==typeof n.length&&\"function\"!=typeof n;function tA(n){return Pt(n?.then)}function nA(n){return Pt(n[dc])}function iA(n){return Symbol.asyncIterator&&Pt(n?.[Symbol.asyncIterator])}function rA(n){return new TypeError(`You provided ${null!==n&&\"object\"==typeof n?\"an invalid object\":`'${n}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const sA=function SG(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}();function oA(n){return Pt(n?.[sA])}function aA(n){return function Q1(n,e,t){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,i=t.apply(n,e||[]),s=[];return r=Object.create((\"function\"==typeof AsyncIterator?AsyncIterator:Object).prototype),a(\"next\"),a(\"throw\"),a(\"return\",function o(p){return function(f){return Promise.resolve(f).then(p,h)}}),r[Symbol.asyncIterator]=function(){return this},r;function a(p,f){i[p]&&(r[p]=function(m){return new Promise(function(v,C){s.push([p,m,v,C])>1||c(p,m)})},f&&(r[p]=f(r[p])))}function c(p,f){try{!function l(p){p.value instanceof Is?Promise.resolve(p.value.v).then(u,h):d(s[0][2],p)}(i[p](f))}catch(m){d(s[0][3],m)}}function u(p){c(\"next\",p)}function h(p){c(\"throw\",p)}function d(p,f){p(f),s.shift(),s.length&&c(s[0][0],s[0][1])}}(this,arguments,function*(){const t=n.getReader();try{for(;;){const{value:i,done:r}=yield Is(t.read());if(r)return yield Is(void 0);yield yield Is(i)}}finally{t.releaseLock()}})}function cA(n){return Pt(n?.getReader)}function Tr(n){if(n instanceof sn)return n;if(null!=n){if(nA(n))return function CG(n){return new sn(e=>{const t=n[dc]();if(Pt(t.subscribe))return t.subscribe(e);throw new TypeError(\"Provided object does not correctly implement Symbol.observable\")})}(n);if(eA(n))return function DG(n){return new sn(e=>{for(let t=0;t<n.length&&!e.closed;t++)e.next(n[t]);e.complete()})}(n);if(tA(n))return function TG(n){return new sn(e=>{n.then(t=>{e.closed||(e.next(t),e.complete())},t=>e.error(t)).then(null,bu)})}(n);if(iA(n))return lA(n);if(oA(n))return function IG(n){return new sn(e=>{for(const t of n)if(e.next(t),e.closed)return;e.complete()})}(n);if(cA(n))return function AG(n){return lA(aA(n))}(n)}throw rA(n)}function lA(n){return new sn(e=>{(function MG(n,e){var t,i,r,s;return function X1(n,e,t,i){return new(t||(t=Promise))(function(s,o){function a(u){try{l(i.next(u))}catch(h){o(h)}}function c(u){try{l(i.throw(u))}catch(h){o(h)}}function l(u){u.done?s(u.value):function r(s){return s instanceof t?s:new t(function(o){o(s)})}(u.value).then(a,c)}l((i=i.apply(n,e||[])).next())})}(this,void 0,void 0,function*(){try{for(t=J1(n);!(i=yield t.next()).done;)if(e.next(i.value),e.closed)return}catch(o){r={error:o}}finally{try{i&&!i.done&&(s=t.return)&&(yield s.call(t))}finally{if(r)throw r.error}}e.complete()})})(n,e).catch(t=>e.error(t))})}function Qr(n,e,t,i=0,r=!1){const s=e.schedule(function(){t(),r?n.add(this.schedule(null,i)):this.unsubscribe()},i);if(n.add(s),!r)return s}function Zd(n,e,t=1/0){return Pt(e)?Zd((i,r)=>ii((s,o)=>e(i,s,r,o))(Tr(n(i,r))),t):(\"number\"==typeof e&&(t=e),Pn((i,r)=>function xG(n,e,t,i,r,s,o,a){const c=[];let l=0,u=0,h=!1;const d=()=>{h&&!c.length&&!l&&e.complete()},p=m=>l<i?f(m):c.push(m),f=m=>{s&&e.next(m),l++;let v=!1;Tr(t(m,u++)).subscribe(hn(e,C=>{r?.(C),s?p(C):e.next(C)},()=>{v=!0},void 0,()=>{if(v)try{for(l--;c.length&&l<i;){const C=c.shift();o?Qr(e,o,()=>f(C)):f(C)}d()}catch(C){e.error(C)}}))};return n.subscribe(hn(e,p,()=>{h=!0,d()})),()=>{a?.()}}(i,r,n,t)))}const uA=new sn(n=>n.complete());function Ny(n){return n[n.length-1]}function dA(n){return function RG(n){return n&&Pt(n.schedule)}(Ny(n))?n.pop():void 0}function ky(n,e=0){return Pn((t,i)=>{t.subscribe(hn(i,r=>Qr(i,n,()=>i.next(r),e),()=>Qr(i,n,()=>i.complete(),e),r=>Qr(i,n,()=>i.error(r),e)))})}function fA(n,e=0){return Pn((t,i)=>{i.add(n.schedule(()=>t.subscribe(i),e))})}function pA(n,e){if(!n)throw new Error(\"Iterable cannot be null\");return new sn(t=>{Qr(t,e,()=>{const i=n[Symbol.asyncIterator]();Qr(t,e,()=>{i.next().then(r=>{r.done?t.complete():t.next(r.value)})},0,!0)})})}function Ly(n,e){return e?function VG(n,e){if(null!=n){if(nA(n))return function kG(n,e){return Tr(n).pipe(fA(e),ky(e))}(n,e);if(eA(n))return function FG(n,e){return new sn(t=>{let i=0;return e.schedule(function(){i===n.length?t.complete():(t.next(n[i++]),t.closed||this.schedule())})})}(n,e);if(tA(n))return function LG(n,e){return Tr(n).pipe(fA(e),ky(e))}(n,e);if(iA(n))return pA(n,e);if(oA(n))return function BG(n,e){return new sn(t=>{let i;return Qr(t,e,()=>{i=n[sA](),Qr(t,e,()=>{let r,s;try{({value:r,done:s}=i.next())}catch(o){return void t.error(o)}s?t.complete():t.next(r)},0,!0)}),()=>Pt(i?.return)&&i.return()})}(n,e);if(cA(n))return function jG(n,e){return pA(aA(n),e)}(n,e)}throw rA(n)}(n,e):Tr(n)}const Qd={schedule(n,e){const t=setTimeout(n,e);return()=>clearTimeout(t)},scheduleBeforeRender(n){if(typeof window>\"u\")return Qd.schedule(n,0);if(typeof window.requestAnimationFrame>\"u\")return Qd.schedule(n,16);const e=window.requestAnimationFrame(n);return()=>window.cancelAnimationFrame(e)}};let Fy;function ZG(n,e,t){let i=t;return function GG(n){return!!n&&n.nodeType===Node.ELEMENT_NODE}(n)&&e.some((r,s)=>!(\"*\"===r||!function WG(n,e){if(!Fy){const t=Element.prototype;Fy=t.matches||t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}return n.nodeType===Node.ELEMENT_NODE&&Fy.call(n,e)}(n,r)||(i=s,0))),i}class JG{constructor(e,t){this.componentFactory=t.get(va).resolveComponentFactory(e)}create(e){return new e$(this.componentFactory,e)}}class e${constructor(e,t){this.componentFactory=e,this.injector=t,this.eventEmitters=new tG(1),this.events=this.eventEmitters.pipe(function UG(n,e){return Pn((t,i)=>{let r=null,s=0,o=!1;const a=()=>o&&!r&&i.complete();t.subscribe(hn(i,c=>{r?.unsubscribe();let l=0;const u=s++;Tr(n(c,u)).subscribe(r=hn(i,h=>i.next(e?e(c,h,u,l++):h),()=>{r=null,a()}))},()=>{o=!0,a()}))})}(i=>function zG(...n){const e=dA(n),t=function NG(n,e){return\"number\"==typeof Ny(n)?n.pop():e}(n,1/0),i=n;return i.length?1===i.length?Tr(i[0]):function PG(n=1/0){return Zd(kr,n)}(t)(Ly(i,e)):uA}(...i))),this.componentRef=null,this.viewChangeDetectorRef=null,this.inputChanges=null,this.hasInputChanges=!1,this.implementsOnChanges=!1,this.scheduledChangeDetectionFn=null,this.scheduledDestroyFn=null,this.initialInputValues=new Map,this.unchangedInputs=new Set(this.componentFactory.inputs.map(({propName:i})=>i)),this.ngZone=this.injector.get(Ct),this.elementZone=typeof Zone>\"u\"?null:this.ngZone.run(()=>Zone.current)}connect(e){this.runInZone(()=>{if(null!==this.scheduledDestroyFn)return this.scheduledDestroyFn(),void(this.scheduledDestroyFn=null);null===this.componentRef&&this.initializeComponent(e)})}disconnect(){this.runInZone(()=>{null===this.componentRef||null!==this.scheduledDestroyFn||(this.scheduledDestroyFn=Qd.schedule(()=>{null!==this.componentRef&&(this.componentRef.destroy(),this.componentRef=null,this.viewChangeDetectorRef=null)},10))})}getInputValue(e){return this.runInZone(()=>null===this.componentRef?this.initialInputValues.get(e):this.componentRef.instance[e])}setInputValue(e,t,i){this.runInZone(()=>{i&&(t=i.call(this.componentRef?.instance,t)),null!==this.componentRef?function qG(n,e){return n===e||n!=n&&e!=e}(t,this.getInputValue(e))&&(void 0!==t||!this.unchangedInputs.has(e))||(this.recordInputChange(e,t),this.unchangedInputs.delete(e),this.hasInputChanges=!0,this.componentRef.instance[e]=t,this.scheduleDetectChanges()):this.initialInputValues.set(e,t)})}initializeComponent(e){const t=kn.create({providers:[],parent:this.injector}),i=function XG(n,e){const t=n.childNodes,i=e.map(()=>[]);let r=-1;e.some((s,o)=>\"*\"===s&&(r=o,!0));for(let s=0,o=t.length;s<o;++s){const a=t[s],c=ZG(a,e,r);-1!==c&&i[c].push(a)}return i}(e,this.componentFactory.ngContentSelectors);this.componentRef=this.componentFactory.create(t,i,e),this.viewChangeDetectorRef=this.componentRef.injector.get(qm),this.implementsOnChanges=function $G(n){return\"function\"==typeof n}(this.componentRef.instance.ngOnChanges),this.initializeInputs(),this.initializeOutputs(this.componentRef),this.detectChanges(),this.injector.get(Dr).attachView(this.componentRef.hostView)}initializeInputs(){this.componentFactory.inputs.forEach(({propName:e,transform:t})=>{this.initialInputValues.has(e)&&this.setInputValue(e,this.initialInputValues.get(e),t)}),this.initialInputValues.clear()}initializeOutputs(e){const t=this.componentFactory.outputs.map(({propName:i,templateName:r})=>e.instance[i].pipe(ii(o=>({name:r,value:o}))));this.eventEmitters.next(t)}callNgOnChanges(e){if(!this.implementsOnChanges||null===this.inputChanges)return;const t=this.inputChanges;this.inputChanges=null,e.instance.ngOnChanges(t)}markViewForCheck(e){this.hasInputChanges&&(this.hasInputChanges=!1,e.markForCheck())}scheduleDetectChanges(){this.scheduledChangeDetectionFn||(this.scheduledChangeDetectionFn=Qd.scheduleBeforeRender(()=>{this.scheduledChangeDetectionFn=null,this.detectChanges()}))}recordInputChange(e,t){if(!this.implementsOnChanges)return;null===this.inputChanges&&(this.inputChanges={});const i=this.inputChanges[e];if(i)return void(i.currentValue=t);const r=this.unchangedInputs.has(e),s=r?void 0:this.getInputValue(e);this.inputChanges[e]=new P0(s,t,r)}detectChanges(){null!==this.componentRef&&(this.callNgOnChanges(this.componentRef),this.markViewForCheck(this.viewChangeDetectorRef),this.componentRef.changeDetectorRef.detectChanges())}runInZone(e){return this.elementZone&&Zone.current!==this.elementZone?this.ngZone.run(e):e()}}class t$ extends HTMLElement{constructor(){super(...arguments),this.ngElementEventsSubscription=null}}var rr=function(n){return n.AREA=\"Area\",n.FILLING=\"Filling\",n.FRAME=\"Frame\",n.WING=\"Wing\",n.DIVIDER=\"Divider\",n.BEAM=\"Beam\",n.DIMENSION=\"Dimension\",n}(rr||{});class By{constructor(e){this.parent=null,this.children=[],this.data=e}addChildren(e){for(const t of e)this.addChild(t)}addChild(e){if(e.parent)throw Error(\"child has already had parent\");e.parent=this,this.children.push(e)}createChild(e){const t=new By(e);return t.parent=this,this.children.push(t),t}removeChild(e){const t=this.children.indexOf(e);return t>0&&(this.children.splice(t,1),!0)}}class a${constructor(e,t,i=\"\"){this.id=e,this.root=t,this.title=i}setRoot(e){this.root=e}addElement(e,t){t.createChild(e)}removeElement(e){return!!e.parent?.removeChild(e)}getElementById(e,t=this.root){if(!t)return null;if(t.data.id===e)return t;for(const i of t.children){const r=this.getElementById(e,i);if(r)return r}return null}}class Ga extends By{constructor(e){super(e)}}class _A extends Ga{constructor(e){super(e)}get type(){return\"beam\"}}class c$ extends Ga{constructor(e){super(e)}get type(){return\"filling\"}}class l$ extends Ga{constructor(e){super(e)}get type(){return\"wing\"}}class u$ extends Ga{constructor(e){super(e)}get type(){return\"construction\"}}class h$ extends Ga{constructor(e){super(e)}get type(){return\"frame\"}}class d$ extends Ga{constructor(e){super(e)}get type(){return\"divider\"}}class f$ extends a${}function jy(n){return{...n}}function mA(n,e,t=1){return{title:n,values:e,order:t}}function Gl(n,e,t,i){return{name:n,description:e,order:t,icon:i}}function yA(n,e,t){return{name:n,description:e,order:t}}var As=function(n){return n.DEFAULT=\"DEFAULT\",n.DRAW_IMPOST=\"DRAW_IMPOST\",n.DRAW_FRAME=\"DRAW_FRAME\",n.DRAW_WING=\"DRAW_WING\",n.DIMLINEAR=\"DIMLINEAR\",n.DIMALIGNED=\"DIMALIGNED\",n}(As||{});function Ln(n,e){return Math.sqrt((e.x-n.x)*(e.x-n.x)+(e.y-n.y)*(e.y-n.y))}function wA(n,e){return new Array(e).fill(n)}function Li(n){return n.reduce((e,t)=>e+t,0)}function SA(n){return n.reduce((e,t)=>e.concat(Array.isArray(t)?SA(t):t),[])}Error;var O$=Object.defineProperty,$y=(n,e)=>{for(var t in e)O$(n,t,{get:e[t],enumerable:!0})},tf=1e-6;function lt(n,e,t=tf){return!isNaN(n)&&!isNaN(e)&&Math.abs(n-e)<t}function Ir(n,e,t,i=tf){return e>t&&([e,t]=[t,e]),n>e+i&&n<t-i}function AA(n,e=1){return Math.round(n/e)*e}function $a(n,e=-1/0,t=1/0){return Math.min(t,Math.max(e,n))}function qy(n,e,t=.5){return n+(e-n)*t}function sr(n){return n*n}function G$(n,e=0){const i=xA(n.slice(0));return e?i.filter(r=>r.length===e):i}function xA(n){if(1===n.length)return[[],n];const e=n.pop(),t=xA(n),i=[];for(const r of t)i.push(r,[...r,e]);return i}function OA(n,e,t){return function EA(n,e,t){const i=[];for(let r=0;r<e;++r)i.push(wA(n,t));return i}(n,e,t)}function RA(n=2){const e=OA(0,n,n);for(let t=0;t<n;++t)e[t][t]=1;return e}function K$(n){const e=Math.sin(n),t=Math.cos(n);return[[t,-e],[e,t]]}function Y$(n){return[[1,n],[0,1]]}function X$(n){const e=Math.sin(2*n),t=Math.cos(2*n);return[[t,e],[e,-t]]}function NA(...n){const[e,...t]=n,i=t.length>1?NA(...t):t[0];if(e.length!==i.length||e[0].length!==i[0].length)throw new Error(\"Matrix sizes don\\u2019t match\");const r=[];for(let s=0;s<e.length;++s){const o=[];for(let a=0;a<e[s].length;++a)o.push(e[s][a]+i[s][a]);r.push(o)}return r}function Z$(n,e){return n.map(t=>t.map(i=>i*e))}function cf(...n){const[e,...t]=n,i=t.length>1?cf(...t):t[0];if(e[0].length!==i.length)throw new Error(\"Matrix sizes don\\u2019t match.\");const r=[];for(let s=0;s<e.length;++s){const o=[];for(let a=0;a<i[0].length;++a){let c=0;for(let l=0;l<i.length;++l)c+=e[s][l]*i[l][a];o.push(c)}r.push(o)}return r}function kA(n){const e=[];for(let t=0;t<n[0].length;++t){const i=[];for(let r=0;r<n.length;++r)i.push(n[r][t]);e.push(i)}return e}function Q$(n){if(n.length!==n[0].length)throw new Error(\"Not a square matrix.\");const e=n.length;if(1===e)return n[0][0];if(2===e)return n[0][0]*n[1][1]-n[0][1]*n[1][0];let t=0;for(let i=0;i<e;++i){let r=n[0][i],s=n[0][i];for(let o=1;o<e;++o)s*=n[o][(i+o)%e],r*=n[o][(i-o+e)%e];t+=s-r}return t}function LA(n){const e=n.length;if(e!==n[0].length)throw new Error(\"Not a square matrix.\");const t=RA(e),i=function b$(n,e,t){const i=[];for(let r=0;r<e;++r){const s=[];for(let o=0;o<t;++o)s.push(n(r,o));i.push(s)}return i}((r,s)=>n[r][s],e,e);for(let r=0;r<e;++r){let s=i[r][r];if(lt(s,0)){for(let o=r+1;o<e;++o)if(0!==i[o][r]){for(let a=0;a<e;++a)[i[o][a],i[r][a]]=[i[r][a],i[o][a]],[t[o][a],t[r][a]]=[t[r][a],t[o][a]];break}if(s=i[r][r],lt(s,0))throw new Error(\"Matrix not invertible.\")}for(let o=0;o<e;++o)i[r][o]=i[r][o]/s,t[r][o]=t[r][o]/s;for(let o=0;o<e;++o){if(o===r)continue;const a=i[o][r];for(let c=0;c<e;++c)i[o][c]-=a*i[r][c],t[o][c]-=a*t[r][c]}}return t}$y({},{determinant:()=>Q$,fill:()=>OA,identity:()=>RA,inverse:()=>LA,product:()=>cf,reflection:()=>X$,rotation:()=>K$,scalarProduct:()=>Z$,shear:()=>Y$,sum:()=>NA,transpose:()=>kA});var Xy={};function J$(n){for(let e=(n=n.slice(0)).length-1;e>0;--e){const t=Math.floor(Math.random()*(e+1));[n[e],n[t]]=[n[t],n[e]]}return n}function e8(n,e){return(void 0===e?0:n)+Math.floor((void 0===e?n:e-n+1)*Math.random())}function FA(n){const e=Math.random()*Li(n);let t=0;return n.findIndex(i=>(t+=i)>=e)}function t8(n){return n[Math.floor(n.length*Math.random())]}$y(Xy,{bernoulli:()=>BA,binomial:()=>i8,cauchy:()=>l8,chiCDF:()=>h8,exponential:()=>a8,find:()=>t8,geometric:()=>c8,integer:()=>e8,integrate:()=>UA,normal:()=>o8,normalPDF:()=>u8,poisson:()=>r8,shuffle:()=>J$,smart:()=>n8,uniform:()=>s8,weighted:()=>FA});var lf=new Map;function n8(n,e){e||(e=function y$(n=10){return Math.random().toString(36).substr(2,n)}()),lf.has(e)||lf.set(e,wA(1,n));const t=lf.get(e),i=FA(t.map(r=>r*r));return t[i]-=1,t[i]<=0&&lf.set(e,t.map(r=>r+1)),i}function BA(n=.5){return Math.random()<n?1:0}function i8(n=1,e=.5){let t=0;for(let i=0;i<n;++i)t+=BA(e);return t}function r8(n=1){if(n<=0)return 0;const e=Math.exp(-n);let t=1,i=0;for(;t>e;++i)t*=Math.random();return i-1}function s8(n=0,e=1){return n+(e-n)*Math.random()}function o8(n=0,e=1){const t=Math.random(),i=Math.random();return Math.sqrt(-2*Math.log(t))*Math.cos(2*Math.PI*i)*Math.sqrt(e)+n}function a8(n=1){return n<=0?0:-Math.log(Math.random())/n}function c8(n=.5){if(!(n<=0||n>1))return Math.floor(Math.log(Math.random())/Math.log(1-n))}function l8(){let n,e,t;do{e=2*Math.random()-1,t=2*Math.random()-1,n=e*e+t*t}while(n>=1);return e/t}function u8(n,e=1,t=0){return Math.exp(-((n-e)**2)/(2*t))/Math.sqrt(2*Math.PI*t)}var jA=7,VA=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7];function zA(n){if(n<.5)return Math.PI/(Math.sin(Math.PI*n)*zA(1-n));n-=1;let e=VA[0];for(let i=1;i<jA+2;i++)e+=VA[i]/(n+i);const t=n+jA+.5;return Math.sqrt(2*Math.PI)*Math.pow(t,n+.5)*Math.exp(-t)*e}function UA(n,e,t,i=1){let r=0;for(let s=e;s<t;s+=i)r+=n(s)*i||0;return r}function h8(n,e){return 1-UA(i=>Math.pow(i,(e-2)/2)*Math.exp(-i/2),0,n)/Math.pow(2,e/2)/zA(e/2)}function f8(n,e){let t=1,i=n[0];for(let r=1;r<n.length;++r)t*=e,i+=t*n[r];return i}function p8(n,e=!1){let t=0,i=0,r=0,s=0;const o=n.length;for(let l=0;l<o;l++)t+=n[l][0],i+=n[l][1],r+=n[l][0]*n[l][0],s+=n[l][0]*n[l][1];if(e)return[0,s/r];const a=(o*s-t*i)/(o*r-t*t);return[i/o-a*t/o,a]}function g8(n){const e=[0,0,0,0,0,0];for(const s of n)e[0]+=s[0],e[1]+=s[1],e[2]+=s[0]*s[0]*s[1],e[3]+=s[1]*Math.log(s[1]),e[4]+=s[0]*s[1]*Math.log(s[1]),e[5]+=s[0]*s[1];const t=e[1]*e[2]-e[5]*e[5];return[Math.exp((e[2]*e[3]-e[5]*e[4])/t),(e[1]*e[4]-e[5]*e[3])/t]}function _8(n){const e=[0,0,0,0],t=n.length;for(const s of n)e[0]+=Math.log(s[0]),e[1]+=s[1]*Math.log(s[0]),e[2]+=s[1],e[3]+=Math.pow(Math.log(s[0]),2);const i=(t*e[1]-e[2]*e[0])/(t*e[3]-e[0]*e[0]);return[(e[2]-i*e[0])/t,i]}function m8(n){const e=[0,0,0,0],t=n.length;for(const s of n)e[0]+=Math.log(s[0]),e[1]+=Math.log(s[1])*Math.log(s[0]),e[2]+=Math.log(s[1]),e[3]+=Math.pow(Math.log(s[0]),2);const i=(t*e[1]-e[2]*e[0])/(t*e[3]-e[0]*e[0]);return[Math.exp((e[2]-i*e[0])/t),i]}function HA(n,e=2){const t=n.map(c=>function S$(n,e,t=1){const i=[];if(void 0===e&&n>=0)for(let r=0;r<n;r+=t)i.push(r);else if(void 0===e)for(let r=0;r>n;r-=t)i.push(r);else if(n<=e)for(let r=n;r<=e;r+=t)i.push(r);else for(let r=n;r>=e;r-=t)i.push(r);return i}(e+1).map(l=>Math.pow(c[0],l))),i=kA(t),r=n.map(c=>[c[1]]),s=cf(i,t);return cf(LA(s),i,r).map(c=>c[0])}function GA(n,e){const i=n.reduce((o,a)=>o+a[1],0)/n.length,r=n.reduce((o,a)=>o+(a[1]-i)**2,0);return 1-n.reduce((o,a)=>o+(a[1]-e(a[0]))**2,0)/r}function y8(n,e=.85,t=8){if(!(n.length<=1))for(let i=1;i<t;++i){const r=HA(n,i),s=a=>f8(r,a);if(GA(n,s)>=e)return{order:i,coefficients:r,fn:s}}}$y({},{bestPolynomial:()=>y8,coefficient:()=>GA,exponential:()=>g8,linear:()=>p8,logarithmic:()=>_8,polynomial:()=>HA,power:()=>m8});var Gn=2*Math.PI;function $l(n,e){return function U$(n,e){return(n%e+e)%e}(Math.atan2(n.y-(e?e.y:0),n.x-(e?e.x:0)),Gn)}function WA(n,e){let t,i=1/0,r=-1;for(const[s,o]of e.entries()){const a=o.project(n),c=Se.distance(n,a);c<i&&(t=a,i=c,r=s)}return t?[t,r]:void 0}var Se=class kt{constructor(e=0,t=0){this.x=e,this.y=t,this.type=\"point\"}get unitVector(){return lt(this.length,0)?new kt(1,0):this.scale(1/this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}get inverse(){return new kt(-this.x,-this.y)}get flip(){return new kt(this.y,this.x)}get perpendicular(){return new kt(-this.y,this.x)}get array(){return[this.x,this.y]}distanceFromLine(e){return kt.distance(this,e.project(this))}clamp(e,t=0){const i=$a(this.x,e.xMin+t,e.xMax-t),r=$a(this.y,e.yMin+t,e.yMax-t);return new kt(i,r)}changeCoordinates(e,t){return new kt(t.xMin+(this.x-e.xMin)/e.dx*t.dx,t.yMin+(this.y-e.yMin)/e.dy*t.dy)}add(e){return kt.sum(this,e)}subtract(e){return kt.difference(this,e)}round(e=1){return new kt(AA(this.x,e),AA(this.y,e))}floor(){return new kt(Math.floor(this.x),Math.floor(this.y))}mod(e,t=e){return new kt(this.x%e,this.y%t)}angle(e=Fi){return $l(this,e)}snap(e,t=5){return lt(this.x,e.x,t)?new kt(e.x,this.y):lt(this.y,e.y,t)?new kt(this.x,e.y):this}static average(...e){const t=Li(e.map(r=>r.x))/e.length,i=Li(e.map(r=>r.y))/e.length;return new kt(t,i)}static dot(e,t){return e.x*t.x+e.y*t.y}static sum(e,t){return new kt(e.x+t.x,e.y+t.y)}static difference(e,t){return new kt(e.x-t.x,e.y-t.y)}static distance(e,t){return Math.sqrt(sr(e.x-t.x)+sr(e.y-t.y))}static manhattan(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)}static interpolate(e,t,i=.5){return new kt(qy(e.x,t.x,i),qy(e.y,t.y,i))}static interpolateList(e,t=.5){const i=e.length-1,r=Math.floor($a(t,0,1)*i);return kt.interpolate(e[r],e[r+1],i*t-r)}static fromPolar(e,t=1){return new kt(t*Math.cos(e),t*Math.sin(e))}static random(e){const t=Xy.uniform(e.xMin,e.xMax),i=Xy.uniform(e.yMin,e.yMax);return new kt(t,i)}static equals(e,t,i){return lt(e.x,t.x,i)&&lt(e.y,t.y,i)}static colinear(e,t,i,r){return lt((e.x-t.x)*(t.y-i.y),(t.x-i.x)*(e.y-t.y),r)}transform(e){return new kt(e[0][0]*this.x+e[0][1]*this.y+e[0][2],e[1][0]*this.x+e[1][1]*this.y+e[1][2])}rotate(e,t=Fi){if(lt(e,0))return this;const i=this.x-t.x,r=this.y-t.y,s=Math.cos(e),o=Math.sin(e);return new kt(i*s-r*o+t.x,i*o+r*s+t.y)}reflect(e){const t=e.p2.x-e.p1.x,i=e.p2.y-e.p1.y,o=(t*(this.y-e.p1.y)-i*(this.x-e.p1.x))/(t*t+i*i);return new kt(this.x+2*o*i,this.y-2*o*t)}scale(e,t=e){return new kt(this.x*e,this.y*t)}shift(e,t=e){return new kt(this.x+e,this.y+t)}translate(e){return this.shift(e.x,e.y)}equals(e,t){return kt.equals(this,e,t)}toString(){return`point(${this.x},${this.y})`}},Fi=new Se(0,0);function Zy(n){return[\"polygon\",\"polyline\",\"rectangle\",\"triangle\"].includes(n.type)}function Wa(n){return[\"line\",\"ray\",\"segment\"].includes(n.type)}function uf(n){return\"ray\"===n.type}function hf(n){return\"segment\"===n.type}function qa(n){return\"circle\"===n.type}function df(n){return\"arc\"===n.type}function ff(n){return\"angle\"===n.type}var $n=class wu{constructor(e,t){this.p1=e,this.p2=t,this.type=\"line\"}get length(){return Se.distance(this.p1,this.p2)}get lengthSquared(){return(this.p1.x-this.p2.x)**2+(this.p1.y-this.p2.y)**2}get midpoint(){return Se.average(this.p1,this.p2)}get slope(){return(this.p2.y-this.p1.y)/(this.p2.x-this.p1.x)}get intercept(){return this.p1.y-this.slope*this.p1.x}get angle(){return $l(this.p2,this.p1)}get unitVector(){return this.p2.subtract(this.p1).unitVector}get perpendicularVector(){return new Se(this.p2.y-this.p1.y,this.p1.x-this.p2.x).unitVector}parallel(e){return new wu(e,e.add(this.p2).subtract(this.p1))}perpendicular(e){const t=this.line.project(e);return Se.equals(e,t)?new wu(t,t.add(this.perpendicularVector.scale(this.length/2))):new wu(t,e)}get perpendicularBisector(){return this.perpendicular(this.midpoint)}distanceSquared(e){const t=this.project(e);return(e.x-t.x)**2+(e.y-t.y)**2}get line(){return\"line\"===this.type?this:new wu(this.p1,this.p2)}get ray(){return uf(this)?this:new T8(this.p1,this.p2)}get segment(){return hf(this)?this:new Wl(this.p1,this.p2)}offset(e){const t=Se.difference(this.p2,this.p1),i=Se.difference(e,this.p1);return Se.dot(t,i)/this.lengthSquared}project(e){return this.at(this.offset(e))}side(e,t){const i=Se.difference(this.p2,this.p1),r=Se.difference(e,this.p1),s=r.x*i.y-r.y*i.x;return lt(s,0,t)?0:Math.sign(s)}contains(e,t){return 0===this.side(e,t)}at(e){return Se.interpolate(this.p1,this.p2,e)}transform(e){return new this.constructor(this.p1.transform(e),this.p2.transform(e))}rotate(e,t=Fi){return lt(e,0)?this:new this.constructor(this.p1.rotate(e,t),this.p2.rotate(e,t))}reflect(e){return new this.constructor(this.p1.reflect(e),this.p2.reflect(e))}scale(e,t=e){return new this.constructor(this.p1.scale(e,t),this.p2.scale(e,t))}shift(e,t=e){return new this.constructor(this.p1.shift(e,t),this.p2.shift(e,t))}translate(e){return this.shift(e.x,e.y)}equals(e,t){return this.contains(e.p1,t)&&this.contains(e.p2,t)}toString(){return`line(${this.p1},${this.p2})`}},T8=class extends $n{constructor(){super(...arguments),this.type=\"ray\"}equals(n,e){return!(\"ray\"!==n.type||!this.p1.equals(n.p1,e))&&(!!this.p2.equals(n.p2,e)||n.contains(this.p2,e)||this.contains(n.p2,e))}contains(n,e){if(!super.contains(n,e))return!1;const t=this.offset(n);return lt(t,0,e)||t>0}toString(){return`ray(${this.p1},${this.p2})`}},Wl=class rO extends $n{constructor(){super(...arguments),this.type=\"segment\"}contains(e,t){return!!super.contains(e,t)&&(!(!this.p1.equals(e,t)&&!this.p2.equals(e,t))||(lt(this.p1.x,this.p2.x,t)?Ir(e.y,this.p1.y,this.p2.y):Ir(e.x,this.p1.x,this.p2.x)))}project(e){const t=Se.difference(this.p2,this.p1),i=Se.difference(e,this.p1),r=$a(Se.dot(t,i)/this.lengthSquared,0,1);return this.p1.add(t.scale(r))}contract(e){return new rO(this.at(e),this.at(1-e))}equals(e,t,i=!1){return\"segment\"===e.type&&(this.p1.equals(e.p1,t)&&this.p2.equals(e.p2,t)||!i&&this.p1.equals(e.p2,t)&&this.p2.equals(e.p1,t))}toString(){return`segment(${this.p1},${this.p2})`}},po=class sc{constructor(e=Fi,t=1){this.c=e,this.r=t,this.type=\"circle\"}get circumference(){return Gn*this.r}get area(){return Math.PI*this.r**2}get arc(){const e=this.c.shift(this.r,0);return new go(this.c,e,Gn)}tangentAt(e){const t=this.at(e),i=this.c.rotate(Math.PI/2,t);return new $n(t,i)}collision(e){return Se.distance(this.c,new Se(this.c.x<e.p.x?e.p.x:this.c.x>e.p.x+e.w?e.p.x+e.w:this.c.x,this.c.y<e.p.y?e.p.y:this.c.y>e.p.y+e.h?e.p.y+e.h:this.c.y))<=this.r}project(e){const t=e.subtract(this.c).unitVector.scale(this.r);return Se.sum(this.c,t)}at(e){const t=Gn*e;return this.c.shift(this.r*Math.cos(t),this.r*Math.sin(t))}offset(e){return $l(e,this.c)/Gn}contains(e){return Se.distance(e,this.c)<=this.r}transform(e){const t=Math.abs(e[0][0])+Math.abs(e[1][1]);return new sc(this.c.transform(e),this.r*t/2)}rotate(e,t=Fi){return lt(e,0)?this:new sc(this.c.rotate(e,t),this.r)}reflect(e){return new sc(this.c.reflect(e),this.r)}scale(e,t=e){return new sc(this.c.scale(e,t),this.r*(e+t)/2)}shift(e,t=e){return new sc(this.c.shift(e,t),this.r)}translate(e){return this.shift(e.x,e.y)}equals(e,t){return lt(this.r,e.r,t)&&this.c.equals(e.c,t)}toString(){return`circle(${this.c},${this.r})`}},go=class{constructor(n,e,t){this.c=n,this.start=e,this.angle=t,this.type=\"arc\"}get circle(){return new po(this.c,this.radius)}get radius(){return Se.distance(this.c,this.start)}get end(){return this.start.rotate(this.angle,this.c)}get startAngle(){return $l(this.start,this.c)}contract(n){return new this.constructor(this.c,this.at(n/2),this.angle*(1-n))}get minor(){return this.angle<=Math.PI?this:new this.constructor(this.c,this.end,Gn-this.angle)}get major(){return this.angle>=Math.PI?this:new this.constructor(this.c,this.end,Gn-this.angle)}get center(){return this.at(.5)}project(n){const e=this.startAngle,t=e+this.angle;let i=$l(n,this.c);return t>Gn&&i<t-Gn&&(i+=Gn),i=$a(i,e,t),this.c.shift(this.radius,0).rotate(i,this.c)}at(n){return this.start.rotate(this.angle*n,this.c)}offset(n){return new Qy(this.start,this.c,n).rad/this.angle}contains(n){return n.equals(this.project(n))}transform(n){return new this.constructor(this.c.transform(n),this.start.transform(n),this.angle)}rotate(n,e=Fi){return lt(n,0)?this:new this.constructor(this.c.rotate(n,e),this.start.rotate(n,e),this.angle)}reflect(n){return new this.constructor(this.c.reflect(n),this.start.reflect(n),this.angle)}scale(n,e=n){return new this.constructor(this.c.scale(n,e),this.start.scale(n,e),this.angle)}shift(n,e=n){return new this.constructor(this.c.shift(n,e),this.start.shift(n,e),this.angle)}translate(n){return this.shift(n.x,n.y)}equals(){return!1}toString(){return`arc(${this.c},${this.start},${this.angle})`}},XA=class extends go{constructor(){super(...arguments),this.type=\"sector\"}contains(n){return Se.distance(n,this.c)<=this.radius&&new Qy(this.start,this.c,n).rad<=this.angle}toString(){return`sector(${this.c},${this.start},${this.angle})`}};function I8(n,e){return lt(n.p1.x,n.p2.x)?Ir(e.y,n.p1.y,n.p2.y):Ir(e.x,n.p1.x,n.p2.x)}function A8(n,e){return lt(n.p1.x,n.p2.x)?(e.y-n.p1.y)/(n.p2.y-n.p1.y)>0:(e.x-n.p1.x)/(n.p2.x-n.p1.x)>0}function M8(n,e){return Ir(n.offset(e),0,1)}function ZA(n,e){const t=n.p2.x-n.p1.x,i=n.p2.y-n.p1.y,r=sr(t)+sr(i),s=e.c.x,o=e.c.y,a=(n.p1.x-s)*(n.p2.y-o)-(n.p2.x-s)*(n.p1.y-o),c=sr(e.r)*r-sr(a);if(c<0)return[];const l=a*i/r,u=-a*t/r;if(lt(c,0))return[e.c.shift(l,u)];const h=t*(i<0?-1:1)*Math.sqrt(c)/r,d=Math.abs(i)*Math.sqrt(c)/r;return[e.c.shift(l+h,u+d),e.c.shift(l-h,u-d)]}function en(...n){if(n.length<2)return[];if(n.length>2)return SA(G$(n,2).map(i=>en(...i)));let[e,t]=n;if(ff(e)&&(e=e.shape(!0)),ff(t)&&(t=t.shape(!0)),Zy(t)&&([e,t]=[t,e]),Zy(e)){const i=Wa(t)?e.points.filter(r=>t.contains(r)):[];for(const r of e.edges)i.push(...en(r,t));return i}return function O8(n,e){let t=[];const i=df(n)?n.circle:n,r=df(e)?e.circle:e;Wa(n)&&Wa(e)?t=function x8(n,e){const t=n.p1.x-n.p2.x,i=n.p1.y-n.p2.y,r=e.p1.x-e.p2.x,s=e.p1.y-e.p2.y,o=t*s-i*r;if(lt(o,0))return[];const a=n.p1.x*n.p2.y-n.p1.y*n.p2.x,c=e.p1.x*e.p2.y-e.p1.y*e.p2.x;return[new Se((a*r-t*c)/o,(a*s-i*c)/o)]}(n,e):Wa(i)&&qa(r)?t=ZA(i,r):qa(i)&&Wa(r)?t=ZA(r,i):qa(i)&&qa(r)&&(t=function P8(n,e){const t=Se.distance(n.c,e.c);if(t>n.r+e.r)return[];if(t<Math.abs(n.r-e.r))return[];if(lt(t,0)&&lt(n.r,e.r))return[];if(lt(t,n.r+e.r))return[new $n(n.c,e.c).midpoint];const i=(sr(n.r)-sr(e.r)+sr(t))/(2*t),r=Math.sqrt(sr(n.r)-sr(i)),a=(e.c.x-n.c.x)*i/t-(e.c.y-n.c.y)*r/t+n.c.x,c=(e.c.y-n.c.y)*i/t+(e.c.x-n.c.x)*r/t+n.c.y;return[new Se((e.c.x-n.c.x)*i/t+(e.c.y-n.c.y)*r/t+n.c.x,(e.c.y-n.c.y)*i/t-(e.c.x-n.c.x)*r/t+n.c.y),new Se(a,c)]}(i,r));for(const s of[n,e])hf(s)&&(t=t.filter(o=>I8(s,o))),uf(s)&&(t=t.filter(o=>A8(s,o))),df(s)&&(t=t.filter(o=>M8(s,o)));return t}(e,t)}var xs=class Eu{constructor(...e){this.type=\"polygon\",this.points=e}get circumference(){if(this.points.length<=1)return 0;let e=Se.distance(this.points[0],function bA(n,e=0){return n[n.length-1-e]}(this.points));for(let t=1;t<this.points.length;++t)e+=Se.distance(this.points[t-1],this.points[t]);return e}get signedArea(){const e=this.points,t=e.length;let i=e[t-1].x*e[0].y-e[0].x*e[t-1].y;for(let r=1;r<t;++r)i+=e[r-1].x*e[r].y-e[r].x*e[r-1].y;return i/2}get area(){return Math.abs(this.signedArea)}get centroid(){const e=this.points,t=e.length;let i=0;for(let s=0;s<t;++s)i+=e[s].x;let r=0;for(let s=0;s<t;++s)r+=e[s].y;return new Se(i/t,r/t)}get edges(){const e=this.points.length,t=[];for(let i=0;i<e;++i)t.push(new Wl(this.points[i],this.points[(i+1)%e]));return t}get radius(){const e=this.centroid,t=this.points.map(i=>Se.distance(i,e));return Math.max(...t)}get oriented(){if(this.signedArea>=0)return this;const e=[...this.points].reverse();return new this.constructor(...e)}static collision(e,t,i){if(e.points.some(r=>t.contains(r))||t.points.some(r=>e.contains(r)))return!0;for(const r of e.edges)for(const s of t.edges)if(en(r,s)[0])return!0;return e.equals(t,i)}static regular(e,t=1){const i=Gn/e,r=Math.PI/2-i/2,s=function zy(n,e){const t=[];for(let i=0;i<e;++i)t.push(n(i));return t}(o=>Se.fromPolar(r+i*o,t),e);return new Eu(...s)}static interpolate(e,t,i=.5){const r=e.points.map((s,o)=>Se.interpolate(s,t.points[o],i));return new Eu(...r)}static convexHull(...e){if(e.length<=3)return new Eu(...e);const t=e.sort((o,a)=>o.x!==a.x?o.x-a.x:o.y-a.y),i=t.slice(0).reverse(),r=[],s=[];for(const[o,a]of[[t,r],[i,s]]){for(const c of o){for(;a.length>=2;){const l=a[a.length-1],u=a[a.length-2];if(!((l.x-u.x)*(c.y-u.y)>=(c.x-u.x)*(l.y-u.y)))break;a.pop()}a.push(c)}a.pop()}return new Eu(...r.concat(s))}contains(e){let t=!1;for(const i of this.edges){if(i.p1.equals(e)||i.contains(e))return!1;i.p1.y>e.y!=i.p2.y>e.y&&(e.x<(i.p2.x-i.p1.x)/(i.p2.y-i.p1.y)*(e.y-i.p1.y)+i.p1.x&&(t=!t))}return t}at(e){e<0&&(e+=Math.floor(e));const t=e*this.circumference;let i=0;for(const r of this.edges){const s=r.length;if(i+s>t)return r.at((t-i)/s);i+=s}return this.points[0]}offset(e){const t=this.edges,i=WA(e,this.edges)||[this.points[0],0];let r=0;for(let s=0;s<i[1];++s)r+=t[s].length;return r+=t[i[1]].offset(e)*t[i[1]].length,r/this.circumference}project(e){const t=WA(e,this.edges);return t?t[0]:this.points[0]}centerAt(e=Fi){return this.translate(e.subtract(this.centroid))}transform(e){return new this.constructor(...this.points.map(t=>t.transform(e)))}rotate(e,t=Fi){if(lt(e,0))return this;const i=this.points.map(r=>r.rotate(e,t));return new this.constructor(...i)}reflect(e){const t=this.points.map(i=>i.reflect(e));return new this.constructor(...t)}scale(e,t=e){const i=this.points.map(r=>r.scale(e,t));return new this.constructor(...i)}shift(e,t=e){const i=this.points.map(r=>r.shift(e,t));return new this.constructor(...i)}translate(e){return this.shift(e.x,e.y)}equals(e,t,i){const r=this.points.length;if(r!==e.points.length)return!1;const s=i?this:this.oriented,o=i?e:e.oriented;for(let a=0;a<r;++a)if(s.points.every((c,l)=>c.equals(o.points[(l+a)%r],t)))return!0;return!1}toString(){return`polygon(${this.points.join(\",\")})`}},R8=class extends xs{constructor(){super(...arguments),this.type=\"polyline\"}get circumference(){return this.length}get length(){let n=0;for(let e=1;e<this.points.length;++e)n+=Se.distance(this.points[e-1],this.points[e]);return n}get edges(){const n=[];for(let e=0;e<this.points.length-1;++e)n.push(new Wl(this.points[e],this.points[e+1]));return n}toString(){return`polyline(${this.points.join(\",\")})`}};Math,Math;var Qy=class cr{constructor(e,t,i){this.a=e,this.b=t,this.c=i,this.type=\"angle\"}static fromDegrees(e){return cr.fromRadians(e*(Math.PI/180))}static fromRadians(e){const t=new Se(1,0),i=t.rotate(e);return new cr(t,Fi,i)}static equals(e,t,i=Math.PI/360){return lt(e.rad,t.rad,i)}get rad(){const e=Math.atan2(this.a.y-this.b.y,this.a.x-this.b.x);let i=Math.atan2(this.c.y-this.b.y,this.c.x-this.b.x)-e;return i<0&&(i+=Gn),i}get deg(){return 180*this.rad/Math.PI}get isRight(){return lt(this.rad,Math.PI/2,Math.PI/360)}get bisector(){if(this.b.equals(this.a)||this.b.equals(this.c))return;const e=Math.atan2(this.a.y-this.b.y,this.a.x-this.b.x),t=Math.atan2(this.c.y-this.b.y,this.c.x-this.b.x);let i=(e+t)/2;e>t&&(i+=Math.PI);const r=Math.cos(i)+this.b.x,s=Math.sin(i)+this.b.y;return new $n(this.b,new Se(r,s))}get sup(){return this.rad<Math.PI?this:new cr(this.c,this.b,this.a)}get arc(){return new go(this.b,this.a,this.rad)}get radius(){return 24+20*(1-$a(this.rad,0,Math.PI)/Math.PI)}shape(e=!0,t,i){if(this.a.equals(this.b)||this.c.equals(this.b))return new xs(Fi);const r=this.isRight&&!i;t||(t=r?20:this.radius);const s=new Wl(this.b,this.a),o=s.at(t/s.length);if(r){const a=Se.difference(this.c,this.b).unitVector.scale(t);return e?new xs(this.b,o,o.add(a),this.b.add(a)):new R8(o,o.add(a),this.b.add(a))}return e?new XA(this.b,o,this.rad):new go(this.b,o,this.rad)}project(e){return this.contains(e)?e:this.shape(!0).project(e)}at(){return this.c}offset(){return 0}contains(e){return this.shape(!0).contains(e)}transform(e){return new cr(this.a.transform(e),this.b.transform(e),this.c.transform(e))}rotate(e,t){return lt(e,0)?this:new cr(this.a.rotate(e,t),this.b.rotate(e,t),this.c.rotate(e,t))}reflect(e){return new cr(this.a.reflect(e),this.b.reflect(e),this.c.reflect(e))}scale(e,t=e){return new cr(this.a.scale(e,t),this.b.scale(e,t),this.c.scale(e,t))}shift(e,t=e){return new cr(this.a.shift(e,t),this.b.shift(e,t),this.c.shift(e,t))}translate(e){return new cr(this.a.translate(e),this.b.translate(e),this.c.translate(e))}equals(e,t){return cr.equals(e,this,t)}toString(){return`angle(${this.a},${this.b},${this.c})`}},QA=class oc{constructor(e,t=1,i=t){this.p=e,this.w=t,this.h=i,this.type=\"rectangle\"}static aroundPoints(e){let t=1/0,i=-1/0,r=1/0,s=-1/0;for(const o of e)t=t<o.x?t:o.x,i=i>o.x?i:o.x,r=r<o.y?r:o.y,s=s>o.y?s:o.y;return new oc(new Se(t,r),i-t,s-r)}get center(){return new Se(this.p.x+this.w/2,this.p.y+this.h/2)}get centroid(){return this.center}get circumference(){return 2*Math.abs(this.w)+2*Math.abs(this.h)}get area(){return Math.abs(this.signedArea)}get signedArea(){return this.w*this.h}get edges(){return this.polygon.edges}get points(){return this.polygon.points}get polygon(){const e=new Se(this.p.x+this.w,this.p.y),t=new Se(this.p.x+this.w,this.p.y+this.h),i=new Se(this.p.x,this.p.y+this.h);return new xs(this.p,e,t,i)}get bounds(){return new F8(this.p.x,this.p.x+this.w,this.p.y,this.p.y+this.h)}collision(e){return this.p.x<e.p.x+e.w&&this.p.x+this.w>e.p.x&&this.p.y<e.p.y+e.h&&this.p.y+this.h>e.p.y||this.equals(e.polygon)}padding(e,t,i,r){return new oc(this.p.shift(-r,-e),this.w+r+t,this.h+e+i)}get unsigned(){if(this.w>0&&this.h>0)return this;const e=this.p.shift(this.w<0?this.w:0,this.h<0?this.h:0);return new oc(e,Math.abs(this.w),Math.abs(this.h))}contains(e,t){return Ir(e.x,this.p.x,this.p.x+this.w,t)&&Ir(e.y,this.p.y,this.p.y+this.h,t)}project(e){let t;for(const i of this.edges){const r=i.project(e);(!t||Se.distance(e,r)<Se.distance(e,t))&&(t=r)}return t}at(e){return this.polygon.at(e)}offset(e){return this.polygon.offset(e)}get oriented(){return this.polygon.oriented}transform(e){return this.polygon.transform(e)}rotate(e,t=Fi){return lt(e,0)?this:this.polygon.rotate(e,t)}reflect(e){return this.polygon.reflect(e)}scale(e,t=e){return new oc(this.p.scale(e,t),this.w*e,this.h*t)}shift(e,t=e){return new oc(this.p.shift(e,t),this.w,this.h)}translate(e){return this.shift(e.x,e.y)}equals(e){return this.polygon.equals(e)}toString(){return`rectangle(${this.p},${this.w},${this.h})`}},F8=class ep{constructor(e,t,i,r,s){this.xMin=e,this.xMax=t,this.yMin=i,this.yMax=r,\"swap\"===s?(this.dx<0&&([this.xMin,this.xMax]=[t,e]),this.dy<0&&([this.yMin,this.yMax]=[r,i])):\"center\"===s&&(this.dx<0&&(this.xMin=this.xMax=(e+t)/2),this.dy<0&&(this.yMin=this.yMax=(i+r)/2))}contains(e){return this.containsX(e)&&this.containsY(e)}containsX(e){return Ir(e.x,this.xMin,this.xMax)}containsY(e){return Ir(e.y,this.yMin,this.yMax)}resize(e,t){return new ep(this.xMin,this.xMax+e,this.yMin,this.yMax+t)}get dx(){return this.xMax-this.xMin}get dy(){return this.yMax-this.yMin}get xRange(){return[this.xMin,this.xMax]}get yRange(){return[this.yMin,this.yMax]}extend(e,t=e,i=e,r=t){return new ep(this.xMin-r,this.xMax+t,this.yMin-e,this.yMax+i)}get rect(){return new QA(new Se(this.xMin,this.yMin),this.dx,this.dy)}get center(){return new Se(this.xMin+this.dx/2,this.yMin+this.dy/2)}get flip(){return new ep(this.yMin,this.yMax,this.xMin,this.xMax)}};function nM(n){const e=n.points.reduce((t,i)=>({xSum:t.xSum+i.x,ySum:t.ySum+i.y}),{xSum:0,ySum:0});return new Se(e.xSum/n.points.length,e.ySum/n.points.length)}Math.sqrt(2);const gf=2*Math.PI;function iM(n,e){const t=e.x-n.x,i=e.y-n.y,r=Math.sqrt(t*t+i*i);return new Se(-i/r,t/r)}function G8(n,e){const t=iM(n,e);return new Se(-t.x,-t.y)}function ev(n){const e=[];let t=n[0].x,i=n[0].y,r=t,s=i;for(let a=0;a<n.length;a++){const c=n[a],l=n[(a+1)%n.length],u=G8(c,l),h=iM(c,l);e.push({vertex1:c,vertex2:l,index:a,outwardNormal:u,inwardNormal:h});const p=n[a].x,f=n[a].y;t=Math.min(p,t),i=Math.min(f,i),r=Math.max(p,r),s=Math.max(f,s)}return{vertices:n,edges:e,minX:t,minY:i,maxX:r,maxY:s}}function rM(n,e){const t=(e.vertex2.y-e.vertex1.y)*(n.vertex2.x-n.vertex1.x)-(e.vertex2.x-e.vertex1.x)*(n.vertex2.y-n.vertex1.y);if(0==t)return null;const i=((e.vertex2.x-e.vertex1.x)*(n.vertex1.y-e.vertex1.y)-(e.vertex2.y-e.vertex1.y)*(n.vertex1.x-e.vertex1.x))/t,r=((n.vertex2.x-n.vertex1.x)*(n.vertex1.y-e.vertex1.y)-(n.vertex2.y-n.vertex1.y)*(n.vertex1.x-e.vertex1.x))/t;return{x:n.vertex1.x+i*(n.vertex2.x-n.vertex1.x),y:n.vertex1.y+i*(n.vertex2.y-n.vertex1.y),isIntersectionOutside:i<0||r<0||i>1||r>1}}function sM(n,e,t,i,r,s,o){let a=Math.atan2(r.y-t.y,r.x-t.x),c=Math.atan2(s.y-t.y,s.x-t.x);a<0&&(a+=gf),c<0&&(c+=gf);const l=a>c?a-c:a+gf-c,u=(o?-l:gf-l)/n;e.push(r);for(let h=1;h<n;++h){const d=a+u*h,p=new Se(t.x+Math.cos(d)*i,t.y+Math.sin(d)*i);e.push(p)}e.push(s)}function oM(n,e,t){return{vertex1:new Se(n.vertex1.x+e,n.vertex1.y+t),vertex2:new Se(n.vertex2.x+e,n.vertex2.y+t)}}function _f(n,e,t=0){const i=ev(n);return e>0?function $8(n,e,t){const i=[];for(let o=0;o<n.edges.length;o++){const a=n.edges[o];i.push(oM(a,a.outwardNormal.x*e,a.outwardNormal.y*e))}const r=[];for(let o=0;o<i.length;o++){const a=i[o],c=i[(o+i.length-1)%i.length],l=rM(c,a);l&&(!l.isIntersectionOutside||t<1)?r.push(new Se(l.x,l.y)):sM(t,r,n.edges[o].vertex1,e,c.vertex2,a.vertex1,!1)}const s=ev(r);return s.offsetEdges=i,s}(i,e,t).vertices:function W8(n,e,t){const i=[];for(let o=0;o<n.edges.length;o++){const a=n.edges[o];i.push(oM(a,a.inwardNormal.x*e,a.inwardNormal.y*e))}const r=[];for(let o=0;o<i.length;o++){const a=i[o],c=i[(o+i.length-1)%i.length],l=rM(c,a);l&&(!l.isIntersectionOutside||t<1)?r.push(new Se(l.x,l.y)):sM(t,r,n.edges[o].vertex1,e,c.vertex2,a.vertex1,!0)}const s=ev(r);return s.offsetEdges=i,s}(i,-e,t).vertices}function cM(n,e,t){const i=_f(n,e),r=_f(n,-e),s=new xs(...i),o=new xs(...r);let a,c;return s.area<o.area?(a=s,c=o):(a=o,c=s),t?c.points:a.points}var un=function(n){return n.AREA=\"area\",n.FRAME=\"frame\",n.WING=\"wing\",n.FILLING=\"filling\",n.POLYGON=\"polygon\",n}(un||{});class we extends Se{constructor(e,t,i=0){super(e,t),this.s=i}equals(e,t=.05){return t?new po(this,t).contains(e):super.equals(e)}}class q8 extends QA{}class K8 extends po{}var Ar=function(n){return n.codeError=\"codeError\",n.dataError=\"dataError\",n.unknownError=\"unknownError\",n}(Ar||{}),Mr=function(n){return n.points=\"points\",n.segments=\"segments\",n.data=\"data\",n.unknown=\"unknown\",n}(Mr||{});class Jr{constructor(e,t){this.code=e.code,this.type=e.type,this.msg=e.msg,t&&(this.meta=t)}}let Ce=(()=>{class n{static{this.axisTolerance=0}static equalNumbers(t,i,r=.01){return Math.abs(t-i)<=r}static getPointWithOffset(t,i,r){const a=new We(t,i).length-r,c=r/a;return 0===a?i:new we((t.x+c*i.x)/(1+c),(t.y+c*i.y)/(1+c))}static getMiddlePoint(t,i){const r=t.perpendicular(t.midpoint);return n.getPointWithOffset(r.p1,r.p2,i)}static flatten(t){let i=[];for(let r=0;r<t.length;r++)Array.isArray(t[r])?i=i.concat(n.flatten(t[r])):i.push(t[r]);return i}static sortPointsByLine(t){if(t.length<2)return t;let i=[];return i=n.equalNumbers(t[0].x,t[1].x)?t.sort((r,s)=>r.y-s.y):t.sort((r,s)=>r.x-s.x),i}static sortPointsByCircle(t,i){const r=\"circle\"===i.type?t[0]:i.start;if(null==r)return t;const s=[];return t.forEach(a=>{if(a.equals(r))return void s.push({point:a,angle:0});const d=en(new We(r,a).perpendicular(i.c),i).map(p=>new hi(r,p,a)).find(p=>p.start.equals(r));null!=d&&s.push({point:a,angle:d.angle})}),s.sort((a,c)=>a.angle-c.angle).map(a=>a.point)}static createSegments(t){const i=[];for(let r=0;r<t.length-1;r++)r%2==0&&i.push(new We(t[r],t[r+1]));return i}static createArcs(t,i){const r=[];for(let s=0;s<i.length-1;s++)s%2==0&&r.push(t.getChildArc(i[s],i[s+1]));return r}static getPointsOfEdge(t){switch(t.type){case\"segment\":return[t.p1,t.p2];case\"arc\":return[t.start,t.customEnd];default:return[]}}static getEdgeSegment(t){return\"arc\"===t.type?t.chord:t}static getExtremePoints(t){const i=[];return t.forEach(r=>{const s=n.getPointsOfEdge(r);i.push(...s)}),i}static breakDownEdgesByPoint(t,i){const r=[];return t.forEach(s=>{const o=n.getPointsOfEdge(s),a=i.filter(u=>s.contains(u));if(0===a.length)return void r.push(s);const c=[...o,...a],l=\"segment\"===s.type?this.sortPointsByLine(c):this.sortPointsByCircle(c,s);for(let u=0;u<l.length-1;u++)switch(s.type){case\"segment\":r.push(new We(l[u],l[u+1]));break;case\"arc\":{const h=s.getChildArc(l[u],l[u+1]);if(null==h)return;r.push(h);break}}}),r}static getPointKey(t){return`${t.x};${t.y}`}static createAdjacencyMatrix(t){const i={};function r(s,o){const a=i[n.getPointKey(s)];a?a.push(o):i[n.getPointKey(s)]=[o]}return t.forEach(s=>{switch(s.type){case\"segment\":{const o=s;r(o.p2,o.p1),r(o.p1,o.p2);break}case\"arc\":r(s.customEnd,s.start),r(s.start,s.customEnd)}}),i}static getEdgesByPoints(t,i){const r=new Gt(...i).centroid,s=i.map((a,c,l)=>{const u=new We(a,l[(c+1)%i.length]);return t.filter(h=>{switch(h.type){case\"arc\":return h.chord.equals(u);case\"segment\":return h.equals(u);default:return!1}})});return 2===i.length?s[0]:s.map(a=>{if(1===a.length)return a[0];let c,l;return a.forEach(u=>{let h;switch(u.type){case\"segment\":h=u.midpoint;break;case\"arc\":h=u.center}if(null==h)return;const d=Ln(r,h);(null==l||d<l)&&(l=d,c=u)}),c})}static getPolygonPointsByEdges(t){const i=[];if(2===t.length){let r;return t.forEach(s=>{const[o,a]=n.getPointsOfEdge(s),c=i.some(u=>u.equals(o))?a:o,l=\"arc\"===s.type?s.getS(r):0;r=c.equals(o)?a:o,i.push(new we(c.x,c.y,l))}),i}return t.forEach((r,s,o)=>{const a=o[(s+1)%o.length],[c,l]=n.getPointsOfEdge(r),h=n.getPointsOfEdge(a).some(d=>d.equals(c))?l:c;i.push(new we(h.x,h.y,\"s\"in r?r.getS(h):void 0))}),i}static findLoops(t){const i=this.createAdjacencyMatrix(t),r=[];return function s(o){let a;if(Object.values(o).forEach(f=>{null==a&&f.length&&(a=f[0])}),!a)return;let c=[];if(function l(f,m){if(!(c.length&&f.length>=c.length)){if(null!=f[0]&&f[0].equals(m)){if(f.length<2)return;if(2===f.length){const v=t.filter(C=>{const[I,L]=n.getPointsOfEdge(C);return!(!I||!L)&&new We(I,L).equals(new We(f[0],f[1]))});if(1===v.length||!v.some(C=>\"segment\"!==C.type))return;return void(c=f)}return void(c=f)}f.some(v=>v.equals(m))||o[n.getPointKey(m)].forEach(v=>l([...f,m],v))}}([],a),0===c.length)return;const u=n.getEdgesByPoints(t,c),h=n.getPolygonPointsByEdges(u);r.push(new Gt(...h));const d=[];c.forEach(f=>{2===o[n.getPointKey(f)].length&&d.push(f)});const p={...o};d.forEach(f=>{o[n.getPointKey(f)].forEach(v=>{p[n.getPointKey(v)]=p[n.getPointKey(v)].filter(C=>!C.equals(f))}),p[n.getPointKey(f)]=[]}),s(p)}(i),r}static findSegmentVariants(t,i){const r=[];return t.forEach(s=>{i.forEach(o=>{r.push(new We(s,o))})}),r}static findApproximateSegment(t,i,r){const{p1:s,p2:o}=t;let a,c,l,u;const h=this.findSegmentVariants(i,r);h.forEach(p=>{const{p1:f,p2:m}=p,v=Ln(s,f),C=Ln(o,m);(null==c||v<c)&&(a=f,c=v),(null==u||C<u)&&(l=m,u=C)});const d=h.find(p=>p.p1.equals(a)&&p.p2.equals(l)||p.p1.equals(l)&&p.p2.equals(a));if(null==d)throw new Jr({code:Ar.codeError,type:Mr.segments,msg:\"Helper.findApproximateSegment. \\u041d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u0430 \\u043f\\u0440\\u0438\\u0431\\u043b\\u0438\\u0436\\u0435\\u043d\\u043d\\u0430\\u044f \\u043f\\u0440\\u044f\\u043c\\u0430\\u044f\"},{data:h});return d}static getApproximateEdges(t,i,r=!1){const s=cM(t.points,i,r),o=new Gt(...s).edges;return t.edgeArcs.map((a,c)=>{const l=new $n(o[c].p1,o[c].p2);switch(a.type){case\"segment\":return{element:l};case\"arc\":{const u=n.getPointWithOffset(a.center,a.c,-i),h=n.getPointWithOffset(a.center,a.c,i),d=new po(a.c,Ln(a.c,u)),p=new po(a.c,Ln(a.c,h)),[f,m]=this.getPointsOfEdge(a),v=t.points.find((C,I,L)=>{const H=L[(I+1)%L.length];return f.equals(C)&&m.equals(H)||f.equals(H)&&m.equals(C)});if(null!=v&&v.s)return{middlePoint:v.s<0!==r?u:h,element:v.s<0!==r?d:p};throw new Jr({code:Ar.codeError,type:Mr.data,msg:\"Helpers.getApproximateEdges. \\u041f\\u0440\\u0438\\u0431\\u043b\\u0438\\u0436\\u0435\\u043d\\u0438\\u044f \\u043d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u044b\"},{circle1:d,circle2:p,line:l})}default:return}})}static getPointsByClockwise(t){let i=0;return t.forEach((s,o,a)=>{const c=a[(o+1)%a.length];i+=s.x*c.y-c.x*s.y}),i/2>0?t:[...t].reverse().map((s,o,a)=>{const c=a[(o+1)%a.length];return new we(s.x,s.y,c.s?-c.s:void 0)})}static intersect(t,i){const r=t.points.filter(v=>i.containArcs(v)),s=i.points.filter(v=>t.containArcs(v)),o=t.points.filter(v=>i.points.some(C=>v.equals(C))),a=t.points.filter(v=>i.edgeArcs.some(C=>C.contains(v))),c=i.points.filter(v=>t.edgeArcs.some(C=>C.contains(v))),l=[],u=t.edgeArcs,h=i.edgeArcs;u.forEach(v=>{h.forEach(C=>{l.push(...en(v,C))})});let d=[];[...a,...c,...r,...s,...o,...l].forEach(v=>{d.some(C=>C.equals(v))||d.push(v)});const p=d.length,f=[];return function m(v){f[v]=[];let C=d[0];d=d.filter(L=>!L.equals(C));const I=n.flatten(f).length;for(;I!==p;){const L=[];if([...u,...h].forEach(ce=>{d.some(pe=>{if(ce.contains(C)&&ce.contains(pe)||\"arc\"===ce.type&&(ce.contains(C)&&ce.customEnd.equals(pe)||ce.contains(pe)&&ce.customEnd.equals(C))){let De,Me;switch(ce.type){case\"segment\":{const pt=new We(C,pe);De=pt,Me=pt.midpoint;break}case\"arc\":{const pt=ce.getChildArc(C,pe);De=pt,Me=pt.center;break}}const Ve=d.filter(pt=>!pt.equals(pe)),Ke=f[v],ze=Ke[Ke.length-1];let ht=!1;if(ze&&De){const[pt,ue]=n.getPointsOfEdge(De),[Ee,Ae]=n.getPointsOfEdge(ze);Ee.equals(pt)||Ee.equals(ue)?ht=De.contains(Ae):Ae.equals(pt)||Ae.equals(ue)?ht=De.contains(Ee):pt.equals(Ee)||pt.equals(Ae)?ht=ze.contains(ue):(ue.equals(Ee)||ue.equals(Ae))&&(ht=ze.contains(pt))}if(null!=De&&!Ve.some(pt=>De.contains(pt))&&null!=Me&&t.containArcs(Me)&&i.containArcs(Me)&&!ht)return L.push(De),!0}return!1})}),0===L.length){d.length>0&&m(v+1);break}0===f[v].length&&L.length>=2&&f[v].push(L[1]);const H=L[0];f[v].push(H);const[ne,se]=n.getPointsOfEdge(H);C=C.equals(ne)?se:ne,d=d.filter(ce=>!ce.equals(C))}}(0),f.map(v=>new Gt(...n.getPointsByClockwise(n.getPolygonPointsByEdges(v))))}static getBasePoint(t,i){const[r,s]=n.getPointsOfEdge(i);return t.points.find((o,a,c)=>{const l=c[(a+1)%c.length];return r.equals(o)&&s.equals(l)||r.equals(l)&&s.equals(o)})}static matchPolygons(t,i){t.length!=i.length&&console.warn(\"\\u0427\\u0442\\u043e-\\u0442\\u043e \\u0441 \\u0441\\u043e\\u043f\\u043e\\u0441\\u0442\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435\\u043c \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e \\u0438 \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0433\\u043e \\u043f\\u043e\\u043b\\u0438\\u0433\\u043e\\u043d\\u0430. \\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u043d\\u0435 \\u0440\\u0430\\u0432\\u043d\\u043e\",i,t);const r=[];return t.forEach(s=>{const o=i.find(a=>a.points.every(c=>s.containArcs(c)));if(!o)throw new Jr({code:Ar.dataError,type:Mr.data,msg:\"Helpers.matchPolygons. \\u041e\\u0448\\u0438\\u0431\\u043a\\u0430 \\u0441\\u043e\\u043f\\u043e\\u0441\\u0442\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u044f \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e \\u0438 \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0433\\u043e \\u043f\\u043e\\u043b\\u0438\\u0433\\u043e\\u043d\\u0430\"},{externalPolygon:s,internal:i});r.push({skeleton:s,internal:o})}),r}static matchMullions(t,i){t.length!=i.length&&console.warn(\"\\u0427\\u0442\\u043e-\\u0442\\u043e \\u0441 \\u0441\\u043e\\u043f\\u043e\\u0441\\u0442\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435\\u043c \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e \\u0438 \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0433\\u043e \\u0438\\u043c\\u043f\\u043e\\u0441\\u0442\\u0430. \\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u043d\\u0435 \\u0440\\u0430\\u0432\\u043d\\u043e\",i,t);const r=[];return t.forEach(s=>{const o=i.find(a=>{if(a.edge.type!==s.type)return!1;switch(a.edge.type){case\"segment\":return\"segment\"===this.intersectSegment(a.edge,s)?.type;case\"arc\":return\"arc\"===this.intersectArc(a.edge,s)?.type;default:return!1}});if(!o)throw new Jr({code:Ar.dataError,type:Mr.data,msg:\"Helpers.matchMullions. \\u041e\\u0448\\u0438\\u0431\\u043a\\u0430 \\u0441\\u043e\\u043f\\u043e\\u0441\\u0442\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u044f \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e \\u0438 \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0433\\u043e \\u0438\\u043c\\u043f\\u043e\\u0441\\u0442\\u0430\"},{externalEdge:s,internal:i});r.push({edge:s,polygon:o.polygon})}),r}static intersectSegment(t,i){const r=n.getPointsOfEdge(t),s=n.getPointsOfEdge(i),o=[...r,...s.filter(u=>!r.some(h=>h===u))];let c,l;return n.sortPointsByLine(o).forEach(u=>{[t,i].every(h=>h.contains(u)||h.p1.equals(u)||h.p2.equals(u))&&(null==c?c=u:l=u)}),null!=c&&null!=l?new We(c,l):null!=c?c:void 0}static intersectArc(t,i){if(t.start.equals(i.customEnd)&&i.start.equals(t.customEnd))return;const r=n.getPointsOfEdge(t),s=n.getPointsOfEdge(i),o=[...r,...s.filter(u=>!r.some(h=>h===u))];let c,l;if(n.sortPointsByCircle(o,i.circle).forEach(u=>{[t,i].every(h=>h.contains(u)||h.start.equals(u)||h.customEnd.equals(u))&&(null==c?c=u:l=u)}),null!=c&&null!=l&&!c.equals(l)){const u=n.getAngle(t.c,c,l),h=new tv(t.c,c,u);return new hi(c,h.center,l)}return null!=c?c:void 0}static getAngle(t,i,r){const s=Ln(t,i),o=Ln(i,r),a=Ln(t,r);return Math.acos((s*s+a*a-o*o)/(2*s*a))}static getChildArcs(t,i,r){return en(new We(i,r).perpendicular(t.c),t).map(c=>new hi(i,c,r))}static getEdgeCenter(t){return\"segment\"===t.type?t.midpoint:t.center}static adaptBeamPoints(t){if(4!==t.length)return t;if(0===t[0].s)return t.map(i=>new we(i.x,i.y));{const i=new we(t[0].x,t[0].y,t[0].s),r=new we(t[1].x,t[1].y),s=new we(t[2].x,t[2].y,t[3].s),o=new we(t[3].x,t[3].y);return i.s>0?s.s=-s.s:i.s<0&&(s.s=Math.abs(s.s)),[i,new we(r.x,r.y),s,new we(o.x,o.y)]}}static findDeleteElement(t,i){let r;const s=[],o=[];return function a(l){if(null!=r)return;const u=l.dividers.find(h=>h.id===t);if(u)return r=l,void s.push(u);l.areas.forEach(h=>{a(h)})}(i),0===s.length||null==r?{deleteImposts:[],deleteAreas:[]}:(r.areas.forEach(function c(l){o.push(l),s.push(...l.dividers),l.areas.forEach(c)}),{deleteImposts:s,deleteAreas:o})}static calculateOrthogonalityPoint(t,i,r){const a=r||t;return Math.abs(i.x-t.x)>Math.abs(i.y-t.y)?new we(i.x,a.y):new we(a.x,i.y)}static calculateLineOrthogonalityPoint(t,i,r){const s=Math.abs(i.x-t.midpoint.x),o=Math.abs(i.y-t.midpoint.y),a=r||t.midpoint;return this.equalNumbers(t.p1.x,t.p2.x,this.axisTolerance)&&s<o?new we(i.x,a.y):this.equalNumbers(t.p1.y,t.p2.y,this.axisTolerance)&&s>o?new we(a.x,i.y):s>o?new we(i.x,a.y):new we(a.x,i.y)}static getAdjacentElements(t,i){const r=t.length;return[t[(i-1+r)%r],t[i],t[(i+1)%r]]}static getEdgeFromOriginal(t,i){return\"arc\"===t.type?i.getArc(t.getS()):i}static createEdge(t,i,r=0){const s=new We(t,i);return r?s.getArc(r):s}static updateEdge(t,i){const[r,s]=this.getPointsOfEdge(t);return new We(r,s).midpoint.equals(i,30)?new We(r,s):new hi(r,i,s)}static checkCommonSideExists(t){if(!t.length)return;const i=t.some(s=>2===s.points.length),r=t.every(s=>2===s.points.length||!s.points.length);if(!i||!r)throw new Jr({code:Ar.dataError,type:Mr.segments,msg:\"\\u0420\\u0430\\u043c\\u043a\\u0438 \\u0434\\u043e\\u043b\\u0436\\u043d\\u044b \\u043e\\u0431\\u043b\\u0430\\u0434\\u0430\\u0442\\u044c \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c 1\\u0439 \\u043e\\u0431\\u0449\\u0435\\u0439 \\u0441\\u0442\\u043e\\u0440\\u043e\\u043d\\u043e\\u0439.\"},t)}static projectPointOnVectorLine(t,i){const r=t.unitVector,s=new we(i.x-t.p1.x,i.y-t.p1.y),o=s.x*r.x+s.y*r.y;return new we(t.p1.x+o*r.x,t.p1.y+o*r.y)}static isPointOnEdgeVector(t,i){const[r,s]=this.getPointsOfEdge(t),{x:o,y:a}=r,{x:c,y:l}=s,{x:u,y:h}=i;return(c-o)*(h-l)==(l-a)*(u-c)}static getCenterEdgeArcPoint(t){return t.reduce((i,r)=>\"arc\"===r.type?[...i,r.start,r.customEnd,r.center]:[...i,r.p1,r.p2],[])}static getSecondEdgePoint(t,i){const[r,s]=this.getPointsOfEdge(t);return!i||r.equals(i)?s:r}static getEdgePointName(t,i){return\"segment\"===t.type?this.getSegmentPointName(t,i):this.getArcPointName(t,i)}static getSegmentPointName(t,i){return t.p1.equals(i)?\"p1\":t.p2.equals(i)?\"p2\":t.midpoint.equals(i)?\"midpoint\":null}static getArcPointName(t,i){return t.start.equals(i)?\"start\":t.customEnd.equals(i)?\"customEnd\":t.center.equals(i)?\"center\":null}static getCorrectPointDistance(t,i){const r=n.getCorrectedSegment(t),s=r.midpoint,o=r.p1.x,a=r.p1.y;return(i.x-o)*(r.p2.y-a)-(i.y-a)*(r.p2.x-o)>0?Math.abs(we.distance(i,s)):-Math.abs(we.distance(i,s))}static bendEdgeWithPerpendicularOffsetPoint(t,i){const[r,s]=n.getPointsOfEdge(t),a=new We(r,s).getPerpendicularProject(i).midpoint;return n.updateEdge(t,a)}static getCorrectedSegment(t){const[i,r]=n.getPointsOfEdge(t),s=new we(0,0);return Ln(s,i)<Ln(s,r)?new We(i,r):new We(r,i)}}return n})();var Y8=it(38),lM=it.n(Y8);class Gt extends xs{constructor(...e){super(...e),this.fillColor=\"transparent\"}get edgeArcs(){const e=this.points,t=e.length,i=[];for(let r=0;r<t;++r){const s=new We(e[r],e[(r+1)%t]);if(e[r].s){const o=s.getArc(e[r].s||0);i.push(o)}else i.push(s)}return 1===i.length&&\"arc\"===i[0].type&&i.push(new We(i[0].start,i[0].customEnd)),i}getCutLine(e,t=0){const i=this.edgeArcs;function r(l){const u=[],[h,d]=Ce.getPointsOfEdge(l);return i.forEach(p=>{u.push(...en(p,l)),[h,d].forEach(f=>{p.contains(f)&&!u.some(m=>m.equals(f))&&u.push(f)})}),u}if(!t){const l=r(e);if(l.length<2)return;const u=Ce.sortPointsByLine(l),h=[];for(let d=0;d<u.length-1;d++){const p=u[d],f=u[d+1],m=new We(p,f);this.containArcs(m.midpoint)&&h.push(...[p,f].filter(v=>!h.some(C=>C.equals(v))))}return h.length<2?void 0:new We(h[0],h[h.length-1])}const s=e.getArc(t),o=r(s);if(o.length<2)return;const a=Ce.sortPointsByCircle(o,s),c=[];for(let l=0;l<a.length-1;l++){const u=a[l],h=a[l+1],d=s.getChildArc(u,h);this.containArcs(d.center)&&c.push(...[u,h].filter(p=>!c.some(f=>f.equals(p))))}return c.length<2?void 0:s.getChildArc(c[0],c[c.length-1])}getCutSegment_nearestIntersection(e){const t=new We(e.p1,e.p2),i=e.line,r=[];this.edgeArcs.forEach(c=>{r.push(...en(c,i))}),this.points.forEach(c=>{Ce.isPointOnEdgeVector(t,c)&&!r.some(l=>l.equals(c))&&r.push(c)});const s=Ce.sortPointsByLine(r),o=[],a=[];for(let c=0;c<s.length-1;c++){const l=new We(s[c],s[c+1]),u=Ce.intersectSegment(t,l);null!=u&&\"point\"!==u.type&&(u.equals(t)||u.equals(l)?a.push(l):o.push(l))}return a.length>0?new We(a[0].p1,a[a.length-1].p2):o.length>0?new We(o[0].p1,o[o.length-1].p2):void 0}getCutArc_nearestIntersection(e){const t=e.circle,i=[];this.edgeArcs.forEach(c=>i.push(...en(c,t)));const r=Ce.sortPointsByCircle(i,t),s=[],o=[];r.push(r[0]);for(let c=0;c<r.length-1;c++){const u=Ce.getChildArcs(t,r[c],r[c+1]).find(p=>p.start.equals(r[c]));if(null==u){console.warn(\"\\u041d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u0430 \\u0434\\u0443\\u0433\\u0430\");continue}const h=Ce.getEdgeCenter(u);if(!this.containArcs(h))continue;const d=Ce.intersectArc(e,u);null!=d&&\"point\"!==d.type&&(d.customEquals(e)||d.customEquals(u)?o.push(u):s.push(u))}if(o.length>0){const c=function a(c){const l=[];return c.forEach(u=>{l.push(...Ce.getPointsOfEdge(u))}),Ce.sortPointsByCircle(l,c[0])}(o);return new hi(c[0],o[0].center,c[c.length-1])}if(s.length>0)return new hi(s[0].start,s[0].center,s[s.length-1].customEnd)}intersection(e){const t=[];this.edgeArcs.forEach(s=>{t.push(...en(s,e))});const i=Ce.getExtremePoints([e]);if(i.forEach(s=>{this.edgeArcs.some(o=>o.contains(s))&&!t.some(o=>o.equals(s))&&t.push(s)}),t.length||this.points.some(s=>!!e.contains(s)&&t.push(...i)),1===t.length&&t.push(...i.filter(s=>!t.some(o=>o.equals(s)))),t.length%2!=0&&console.warn(\"\\u043d\\u0435\\u0447\\u0435\\u0442\\u043d\\u043e\\u0435 \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u0442\\u043e\\u0447\\u0435\\u043a \\u043f\\u0435\\u0440\\u0435\\u0441\\u0435\\u0447\\u0435\\u043d\\u0438\\u044f\",t),\"segment\"===e.type){const s=Ce.sortPointsByLine(t);return Ce.createSegments(s)}const r=Ce.sortPointsByCircle(t,e);return Ce.createArcs(e,r)}cutArcs(e){const t=[];Array.isArray(e)?e.forEach(o=>{t.push(...this.intersection(o))}):t.push(...this.intersection(e));const i=Ce.getExtremePoints(t),s=[...Ce.breakDownEdgesByPoint(this.edgeArcs,i),...t];return Ce.findLoops(s)}getInnerPolygon(e,t=!1){const i=cM(this.points,e,t),r=new Gt(...i).edges,s=Ce.getApproximateEdges(this,e,t),o=[],a=[];s.forEach((l,u,h)=>{if(null==l)return;if(\"line\"===l?.element.type)return void o.push(l.element);if(null==l.middlePoint)return;const d=0===u?h[h.length-1]:h[u-1],p=h[(u+1)%h.length];if(null==d||null==p)return;const f=en(d.element,l.element);if(0==f.length)return void a.push([d.element,l.element]);const m=en(p.element,l.element);if(0==m.length)return void a.push([p.element,l.element]);const v=[];f.forEach(H=>{m.forEach(ne=>{try{v.push(new hi(H,l.middlePoint,ne))}catch{}})});const C=f.filter(H=>v.some(ne=>ne.customEnd.equals(H)||ne.start.equals(H))),I=m.filter(H=>v.some(ne=>ne.customEnd.equals(H)||ne.start.equals(H))),L=Ce.findApproximateSegment(r[u],C,I);o.push(new hi(L.p1,l.middlePoint,L.p2))});const c=[];if(o.forEach((l,u,h)=>{if(\"arc\"===l.type)return void c.push(l);const d=0===u?h[h.length-1]:h[u-1],p=h[(u+1)%h.length];if(null==d||null==p)return;let f=en(d,l);if(\"arc\"===d.type){const C=Ce.getPointsOfEdge(d).filter(I=>l.contains(I));C.length>0&&(f=C)}if(0==f.length)return void a.push([\"arc\"===d.type?d.circle:d,l]);let m=en(p,l);if(\"arc\"===p.type){const C=Ce.getPointsOfEdge(p).filter(I=>l.contains(I));C.length>0&&(m=C)}if(0==m.length)return void a.push([\"arc\"===p.type?p.circle:p,l]);const v=Ce.findApproximateSegment(r[u],f,m);c.push(v)}),0!=a.length)throw new Jr({code:Ar.dataError,type:Mr.data,msg:\"Polygon.getInnerPolygon. \\u041d\\u0435 \\u0443\\u0434\\u0430\\u043b\\u043e\\u0441\\u044c \\u043f\\u043e\\u0441\\u0442\\u0440\\u043e\\u0438\\u0442\\u044c \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0438\\u0439 \\u043f\\u043e\\u043b\\u0438\\u0433\\u043e\\u043d\"},a);return new Gt(...Ce.getPolygonPointsByEdges(c))}getSkeletons(e){const t=[];return Array.isArray(e)?e.forEach(i=>{t.push(...this.intersection(i))}):t.push(...this.intersection(e)),{frames:this.cutArcs(t),edges:t}}getInnerZones(e,t=0){const i=[],r=[],s=Array.isArray(e)?e:[e],o=[];if(s.forEach(c=>{const l=Object.assign(this);switch(c.type){case\"segment\":{const{line1:u,line2:h}=c.getOffsetLines(t);[u,h].forEach(d=>{const f=new We(d.p1,d.p2).cut(this),m=null==f||Array.isArray(f)||\"point\"===f.type?d:f,v=this.getCutSegment_nearestIntersection(m);v&&o.push(v)});break}case\"arc\":{const{arc1:u,arc2:h}=c.getOffsetArcs(t);[u,h].forEach(d=>{const p=d.trimEdges(l),f=this.getCutArc_nearestIntersection(p);f&&o.push(f)})}}}),0===t||0===o.length||o.length%2!=0){const c=this.getSkeletons(e);return{frames:c.frames,mullions:c.edges.map(l=>({edge:l,polygon:new Gt}))}}return o.reduce((c,l)=>{const u=[];return c.forEach(h=>{u.push(...h.cutArcs(l))}),u},[this]).forEach(c=>{const l=s.find(u=>c.intersection(u).length);if(l){const u=c.intersection(l);0!=u.length&&i.push({edge:u[0],polygon:c})}else r.push(c)}),{mullions:i,frames:r}}containArcs(e){const t=this.edgeArcs;if(t.some(a=>a.contains(e)))return!0;if(2===this.points.length){const a=t.filter(u=>\"arc\"===u.type).length;if(0===a)return!1;if(1===a){const u=t.find(h=>\"arc\"===h.type);return null!=u&&u.containsToChord(e)}let l,c=1;if(t.forEach(u=>{c*=Math.sign(u.getS(l)),l=u.customEnd}),c>0)return t.some(u=>u.containsToChord(e));if(c<0){let h,p,u=1/0,d=-1/0;return t.forEach(f=>{const m=Math.abs(f.getS());m<u&&(u=m,h=f),m>d&&(d=m,p=f)}),null!=p&&null!=h&&p.containsToChord(e)&&!h.containsToChord(e)}return!1}const i=this.contains(e);if(t.every(a=>\"segment\"===a.type))return i;const r=new Gt(...Ce.getPointsByClockwise([...this.points]));if(i){let a=!1,c=!1;return r.edgeArcs.forEach(l=>{if(\"segment\"===l.type)return;const u=l;Ce.getBasePoint(r,u).s>0||(a=!0,c=c||u.containsToChord(e))}),!a||!c}let s=!1,o=!1;return r.edgeArcs.forEach(a=>{if(\"segment\"===a.type||o)return;const c=a;Ce.getBasePoint(r,c).s<0||(s=!0,o=c.containsToChord(e))}),s&&o}containPoint(e,t){const i=this.points.map(r=>[Math.round(r.x),Math.round(r.y)]);return 1!==lM()(i,[e,t])}}const uM=1e9;class X8{static getAngleBetweenPoints(e,t,i){const r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));return Math.acos((i*i+i*i-r*r)/(2*i*i))}static getArcParams(e,t,i){const r=t.x-e.x,s=t.y-e.y,o=i.x-e.x,a=i.y-e.y,c=r*(e.x+t.x)+s*(e.y+t.y),l=o*(e.x+i.x)+a*(e.y+i.y),u=2*(r*(i.y-t.y)-s*(i.x-t.x));if(0==u)throw new Jr({code:Ar.dataError,type:Mr.points,msg:\"Arc.getArcParams. \\u0422\\u043e\\u0447\\u043a\\u0438 \\u043b\\u0435\\u0436\\u0430\\u0442 \\u043d\\u0430 \\u043e\\u0434\\u043d\\u043e\\u0439 \\u043f\\u0440\\u044f\\u043c\\u043e\\u0439 \\u0438\\u043b\\u0438 \\u0441\\u043e\\u0432\\u043f\\u0430\\u0434\\u0430\\u044e\\u0442\"},{points:[e,t,i]});const h=(a*c-s*l)/u,d=(r*l-o*c)/u,p=new we(h,d),f=Math.sqrt(Math.pow(e.x-h,2)+Math.pow(e.y-d,2)),m=this.getAngleBetweenPoints(e,t,f),v=this.getAngleBetweenPoints(t,i,f),C=new go(p,e,m+v);if(t.equals(C.project(t),1)&&i.equals(C.end,1))return{center:p,radius:f,angle:m+v,start:e,end:i};const I=new go(p,i,m+v);if(t.equals(I.project(t),1)&&e.equals(I.end,1))return{center:p,radius:f,angle:m+v,start:i,end:e};throw new Jr({code:Ar.unknownError,type:Mr.unknown,msg:\"Arc.getArcParams. \\u041a\\u0435\\u0439\\u0441 \\u043f\\u0440\\u0438 \\u043a\\u043e\\u0442\\u043e\\u0440\\u043e\\u043c \\u0432\\u043e\\u0437\\u043c\\u043e\\u0436\\u043d\\u0430 \\u0434\\u0430\\u043d\\u043d\\u0430\\u044f \\u0441\\u0438\\u0442\\u0443\\u0432\\u0446\\u0438\\u044f \\u043d\\u0435 \\u043e\\u043f\\u0440\\u0435\\u0434\\u0435\\u043b\\u0435\\u043d\\u0430\"},{start:e,middleOfArc:t,end:i})}}class tv extends go{get length(){return this.radius*this.angle}}class hi extends tv{constructor(e,t,i){const r=X8.getArcParams(e,t,i);super(r.center,r.start,r.angle);const s=new We(r.start,r.end),o=new tv(r.center,r.start,r.angle);this.s=Math.round(Ln(s.midpoint,o.center)*uM)/uM,this.customEnd=r.end,this.chord=s}get intermediatePoint(){return this.getChildArc(this.start,this.center).center}get angleDeg(){return this.chord.angle*(180/Math.PI)}shift(e,t){return new this.constructor(this.start.shift(e,t),this.center.shift(e,t),this.customEnd.shift(e,t))}getChildArc(e,t){if(this.start.equals(e)&&this.customEnd.equals(t)||this.start.equals(t)&&this.customEnd.equals(e))return this;const i=Ce.getChildArcs(this.circle,e,t),r=[];[this.start,this.customEnd,e,t].forEach(o=>{r.find(a=>a.equals(o))||r.push(o)});const s=i.filter(o=>2===r.filter(a=>o.contains(a)||o.start.equals(a)||o.customEnd.equals(a)).length);return 1!==s.length&&console.error(\"\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u0438\\u0442\\u044c \\u043d\\u0430\\u0445\\u043e\\u0436\\u0434\\u0435\\u043d\\u0438\\u0435 filteredArcs \\u0434\\u043b\\u044f getChildArc\",e,t,this,s),s[0]}containsToChord(e){if(this.contains(e)||this.chord.contains(e))return!0;const t=new XA(this.c,this.start,this.angle),i=new Gt(this.start,this.c,this.customEnd);return!(!t.contains(e)&&!i.contains(e))&&en(this,new $n(this.start,e)).length>0}customEquals(e){return this.start.equals(e.start)&&this.c.equals(e.c)&&this.angle===e.angle}getOffsetArcs(e){function t(r,s){const c=(r.center.x-r.c.x)*s/r.radius+r.c.x,l=(r.center.y-r.c.y)*s/r.radius+r.c.y,u=(r.customEnd.x-r.c.x)*s/r.radius+r.c.x,h=(r.customEnd.y-r.c.y)*s/r.radius+r.c.y,d=new we((r.start.x-r.c.x)*s/r.radius+r.c.x,(r.start.y-r.c.y)*s/r.radius+r.c.y),p=new we(c,l),f=new we(u,h);return new hi(d,p,f)}const i=e/2;return{arc1:t(this,this.radius-i),arc2:t(this,this.radius+i)}}trimEdges(e){const t=Ce.getPointsOfEdge(this),i=[];e.edgeArcs.forEach(o=>{i.push(...en(o,this))});const r=[...i];t.forEach(o=>{e.containArcs(o)&&!r.some(a=>a.equals(o))&&r.push(o)});const s=Ce.sortPointsByCircle(r,this);return s.length>1?new hi(s[0],this.center,s[s.length-1]):this}getS(e=\"start\"){let t;if(t=\"start\"===e?this.start:\"end\"===e?this.customEnd:e,t.equals(this.start))return this.s;if(t.equals(this.customEnd))return-this.s;throw new Jr({code:Ar.dataError,type:Mr.points,msg:\"Arc.getS. \\u0422\\u043e\\u0447\\u043a\\u0430 \\u0441\\u043e\\u043f\\u043e\\u0441\\u0442\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u044f \\u043d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u0430\"},{points:[this.start,this.customEnd]})}}class We extends Wl{get intermediatePoint(){return new we((this.p1.x+this.midpoint.x)/2,(this.p1.y+this.midpoint.y)/2)}getArc(e){if(e){const t=Ce.getMiddlePoint(this,e),i=new we(this.p1.x,this.p1.y,e);return new hi(i,t,this.p2)}return this}get angleDeg(){return this.angle*(180/Math.PI)}getOffsetLines(e){const t=this.angle,i=e*Math.sin(t)/2,r=e*Math.cos(t)/2;return{line1:new $n(new we(this.p1.x-i,this.p1.y+r),new we(this.p2.x-i,this.p2.y+r)),line2:new $n(new we(this.p1.x+i,this.p1.y-r),new we(this.p2.x+i,this.p2.y-r))}}cut(e){const t=Ce.getPointsOfEdge(this),i=[];e.edgeArcs.forEach(c=>{i.push(...en(c,this))});const r=[...i];t.forEach(c=>{e.containArcs(c)&&!r.some(l=>l.equals(c))&&r.push(c)});const s=Ce.sortPointsByLine(r),o=[];for(let c=0;c<s.length-1;c++){const l=new We(s[c],s[c+1]);e.containArcs(l.midpoint)&&o.push(l)}const a=[];if(s.forEach(c=>{o.some(l=>l.p1.equals(c)||l.p2.equals(c))||a.push(c)}),0!==a.length||0!==o.length){if(1===a.length&&0===o.length)return a[0];if(a.length>0)return[...a,...o];if(o.length>1)return o;if(1===o.length)return o[0]}}getPerpendicularVectorOffset(e){return((e.x-this.p2.x)*this.perpendicularVector.x+(e.y-this.p2.y)*this.perpendicularVector.y)/(this.perpendicularVector.x*this.perpendicularVector.x+this.perpendicularVector.y*this.perpendicularVector.y)}getPerpendicularProject(e){const t=this.getPerpendicularVectorOffset(e),i=new we(this.p1.x+t*this.perpendicularVector.x,this.p1.y+t*this.perpendicularVector.y),r=new we(this.p2.x+t*this.perpendicularVector.x,this.p2.y+t*this.perpendicularVector.y);return new this.constructor(i,r)}getVectorPointWithOffset(e){const t=this.p2.x-this.p1.x,i=this.p2.y-this.p1.y,r=Math.sqrt(t*t+i*i);return new we(this.midpoint.x+t/r*e,this.midpoint.y+i/r*e)}}const hM={randomUUID:typeof crypto<\"u\"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let nv;const Z8=new Uint8Array(16);function Q8(){if(!nv){if(typeof crypto>\"u\"||!crypto.getRandomValues)throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");nv=crypto.getRandomValues.bind(crypto)}return nv(Z8)}const Fn=[];for(let n=0;n<256;++n)Fn.push((n+256).toString(16).slice(1));const Si=function J8(n,e,t){if(hM.randomUUID&&!e&&!n)return hM.randomUUID();const i=(n=n||{}).random||(n.rng||Q8)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){t=t||0;for(let r=0;r<16;++r)e[t+r]=i[r];return e}return function dM(n,e=0){return(Fn[n[e+0]]+Fn[n[e+1]]+Fn[n[e+2]]+Fn[n[e+3]]+\"-\"+Fn[n[e+4]]+Fn[n[e+5]]+\"-\"+Fn[n[e+6]]+Fn[n[e+7]]+\"-\"+Fn[n[e+8]]+Fn[n[e+9]]+\"-\"+Fn[n[e+10]]+Fn[n[e+11]]+Fn[n[e+12]]+Fn[n[e+13]]+Fn[n[e+14]]+Fn[n[e+15]]).toLowerCase()}(i)};class fM extends Gt{constructor(e,t,i){super(...t),this.id=e,this.vertices=t,this.edge=i}get edgeArcs(){const e=this.vertices,t=e.length,i=[];for(let r=0;r<t;++r){const s=new We(e[r],e[(r+1)%t]);if(e[r].s){const o=s.getArc(e[r].s||0);i.push(o)}else i.push(s)}return 1===i.length&&\"arc\"===i[0].type&&i.push(new We(i[0].start,i[0].customEnd)),i}}class es extends Gt{constructor(e){super(...Ce.getPointsByClockwise(e.points)),this.areas=[],this.dividers=[],this.beams=[],this.id=Si(),this.type=e.type||un.AREA,this.skeleton=e.skeleton,e.points&&e.innerPoints&&!e.noBeams&&(this.beams=this.createBeams(e.points,e.innerPoints)),this.innerPolygon=new Gt(...Ce.getPointsByClockwise(e.innerPoints||e.points))}get edges(){const e=this.points.length,t=[];for(let i=0;i<e;++i)t.push(new We(this.points[i],this.points[(i+1)%e]));return t}setAreas(e){this.areas=Object.assign([],e)}setDividers(e){this.dividers=Object.assign([],e)}updateAreaContent(e){this.areas=e.areas,this.dividers=e.dividers}getCutEdge(e,t=0,i=this){let r=i.skeleton.getCutLine(e,t);return null==r&&i.areas.forEach(s=>{const o=this.getCutEdge(e,t,s);null!=o&&(r=o)}),r}getCutEdge_nearestIntersection(e,t=0,i=!1){const s=(i?this.getParentAreas():this.getAreas()).map(a=>t?a.skeleton.getCutArc_nearestIntersection(e.getArc(t)):a.skeleton.getCutSegment_nearestIntersection(e)).filter(Boolean);if(0===s.length)return;const o=[];if(s.forEach(a=>{const c=Ce.getPointsOfEdge(a).filter(l=>!o.some(u=>u.equals(l)));o.push(...c)}),t){const a=Ce.sortPointsByCircle(o,e.getArc(t));let c=!1,l=!1;if(console.log(a,c,l),s.forEach(u=>{c=c||u.start.equals(a[0]),l=l||u.customEnd.equals(a[0])}),c&&l){const d=[a[a.length-1],...a.slice(0,-1)];return new hi(d[0],s[0].center,d[d.length-1])}return new hi(a[0],s[0].center,a[a.length-1])}{const a=Ce.sortPointsByLine(o);return new We(a[0],a[a.length-1])}}divide(e,t=0,i,r=!1,s=!1,o){const a=s?this.getParentAreas():this.getAreas(),{beadOffset:c,dividerOffset:l}=i,u=!t&&r?this.getCutEdge_nearestIntersection(e,t,s):this.getCutEdge(e,t);if(null==u)return[];const h=[],d=[];return a.forEach(p=>{const f=[],m=[];if(0===p.intersection(u).length)return;const v=p.skeleton.getSkeletons(u),C=p.innerPolygon.getInnerZones(u,l);try{const I=Ce.matchPolygons(v.frames,C.frames),L=Ce.matchMullions(v.edges,C.mullions);if(0===L.length)return;const H=L.map(ne=>{const ce=Ce.intersect(ne.polygon,p.innerPolygon);return ce[0].fillColor=\"blue\",{id:o||Si(),edge:ne.edge,mullions:ce,beam:new fM(Si(),ce[0].points,ne.edge),offset:l}});f.push(...H),I.forEach(ne=>{const se=Ce.intersect(ne.internal,p.innerPolygon);se.length>1&&console.warn(\"\\u041f\\u043e\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u043e \\u043d\\u0435\\u0441\\u043a\\u043e\\u043b\\u044c\\u043a\\u043e \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0438\\u0445 \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u0435\\u0439 \\u0434\\u043b\\u044f \\u043e\\u0434\\u043d\\u043e\\u0439 \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0439\");const ce=new es({points:ne.skeleton.points,skeleton:new Gt(...ne.skeleton.points),innerPoints:se[0].points,noBeams:!0});s&&ce.convertIntoFilling(c),m.push(ce)})}catch(I){return void console.error(I)}h.push(...m.map(I=>({parentId:p.id,area:I}))),d.push(...f.map(I=>({areaId:p.id,divider:I})))}),a.forEach(p=>{const f=h.filter(v=>v.parentId===p.id).map(v=>v.area),m=d.filter(v=>v.areaId===p.id).map(v=>v.divider);f.length&&m.length&&(p.setAreas(f),p.setDividers(m))}),d.map(p=>p.divider)}convertIntoFilling(e){const t=this.innerPolygon.points,r=this.innerPolygon.getInnerPolygon(e).points,s=new es({type:un.FILLING,points:t,skeleton:this.skeleton,innerPoints:r});return s.fillColor=\"yellow\",this.areas.push(s),s}convertIntoWing(e){const t=this.innerPolygon.getInnerPolygon(e.wingOverlap,!0),i=t.getInnerPolygon(e.wingOffset).points,r=new es({type:un.WING,points:t.points,innerPoints:i,skeleton:this.skeleton});return r.fillColor=\"gray\",this.areas=[],this.areas.push(r),r}getAreas(){const e=[];return this.areas.length>0?this.areas.forEach(t=>{e.push(...t.getAreas())}):e.push(this),e}getParentAreas(){const e=[];return 1!==this.areas.length||this.areas[0].areas.length?this.areas.forEach(t=>{e.push(...t.getParentAreas())}):e.push(this),e}deleteDividers(e,t){let i;if(function r(a){i||(a.dividers.some(c=>c.id===e)?i=a:a.areas.find(c=>r(c)))}(this),null==i)return;const s=[];let o;return i.dividers.forEach(a=>{a.id===e?o=a:s.push(a)}),i.dividers=[],i.areas=[],i.convertIntoFilling(t.beadOffset),0===s.length||(s.forEach(a=>{const c=\"segment\"===a.edge.type?a.edge:a.edge.chord,l=\"segment\"===a.edge.type?0:a.edge.getS();i.divide(c,l,t)}),i.areas=i.getAreas(),i.dividers=s),o}findDividerByCoords(e,t=this){const i=t.dividers.find(s=>s.mullions.some(o=>o.containArcs(e)));if(i)return i;let r;return t.areas.find(s=>{const o=this.findDividerByCoords(e,s);return o&&(r=o),o}),r}isStrokeIncludePoint(e){return this.containArcs(e)&&!this.innerPolygon.containArcs(e)}findDividerById(e,t=this){const i=t.dividers.find(s=>s.id===e);if(i)return i;let r;return t.areas.find(s=>{const o=this.findDividerById(e,s);return o&&(r=o),o}),r}findBeamByCoords(e,t=this){const i=t.beams.find(s=>s.containArcs(e));if(i)return i;let r;return t.areas.find(s=>{const o=this.findBeamByCoords(e,s);return o&&(r=o),o}),r}findAreaByCoords(e,t=this){if(this.isStrokeIncludePoint(e))return this;const i=t.areas?.find(s=>s.type!==un.AREA&&s.containArcs(e)&&!s.innerPolygon.containArcs(e));if(i)return i;let r;return t.areas.find(s=>{const o=this.findAreaByCoords(e,s);return o&&(r=o),o}),r}findAreaByPoints(e,t=this){const i=t.areas?.find(s=>s.points.every(o=>e.some(a=>a.equals(o))));if(i)return i;let r;return t.areas.find(s=>{const o=this.findAreaByPoints(e,s);return o&&(r=o),o}),r}findAreaById(e,t=this){const i=t.areas?.find(s=>s.id===e);if(i)return i;let r;return t.areas.find(s=>{const o=this.findAreaById(e,s);return o&&(r=o),o}),r}findAreaByDividerId(e,t=this){if(t.dividers.find(s=>s.id===e))return t;let r;return t.areas.find(s=>{const o=this.findAreaByDividerId(e,s);return o&&(r=o),o}),r}findChildDividersByDividerId(e){const t=this.findAreaByDividerId(e);if(!t)return[];const i=[];return function r(s){s.areas.forEach(o=>{i.push(...o.dividers),r(o)})}(t),i}changeDivider(e,t){const i=this.findDividerById(e),r=this.findAreaByDividerId(e);if(null==i||null==r)return;const c=function s(L){let H=L.edge;return null==t.segment?\"arc\"===L.edge.type&&(H=L.edge.chord):H=\"function\"!=typeof t.segment?t.segment:\"arc\"===L.edge.type?L.edge.chord:L.edge,Ce.getCorrectedSegment(H)}(i),l=function o(L,H){if(null!=t.s){if(\"number\"==typeof t.s)return t.s;if(\"arc\"===L.edge.type){const[ne,se]=Ce.getPointsOfEdge(L.edge),ce=Ln(H,ne),pe=Ln(H,se);return t.s(L.edge.getS(ce>pe?se:ne))}return t.s(0)}return\"arc\"===L.edge.type?L.edge.getS():0}(i,c.p1),u=function a(L){return null!=t.offset?\"number\"==typeof t.offset?t.offset:t.offset(L.offset):L.offset}(i),h=this.getCutEdge(c,l);if(null==h)return;const d=r.dividers.filter(L=>L.id!=e).map(L=>L.edge),p=r.getSkeletons([...d,h]),f=r.innerPolygon.getInnerZones([...d,h],u),m=Ce.matchPolygons(p.frames,f.frames),C=Ce.matchMullions(p.edges,f.mullions).find(L=>!r.dividers.find(H=>H.mullions[0].equals(L.polygon)));C&&(i.edge=C.edge,i.mullions=[C.polygon],i.offset=u);const I=[];return m.forEach(L=>{const H=r.areas.find(ne=>ne.equals(L.skeleton));if(H){const ne=new es({points:L.skeleton.points,skeleton:new Gt(...L.skeleton.points),innerPoints:L.internal.points});ne.id=H.id,I.push(ne)}}),r.setAreas(I),i}changeDividerBend(e,t,i){const r=this.findDividerById(e),s=this.findAreaByDividerId(e);if(!r||!s)return;const a=Ce.getCorrectedSegment(Ce.getEdgeSegment(r.edge)),c=function o(u,h){if(\"arc\"===u.type){const[d,p]=Ce.getPointsOfEdge(u),f=Ln(h,d),m=Ln(h,p);return i(u.getS(f>m?p:d))}return i(0)}(r.edge,a.p1),l=this.getCutEdge(a,c);return l&&(r.edge=l),s.redivide(t)}createWing(e,t){const r=this.getParentAreas().find(s=>s.containPoint(e.x,e.y));r&&(r.areas=[],r.convertIntoWing(t).convertIntoFilling(t.beadOffset||8))}findAreaContainedPoint(e){return this.getParentAreas().find(i=>i.containPoint(e.x,e.y))}findLowestArea(e){const t=this.areas.find(i=>i.areas.length?i.findLowestArea(e):i.containPoint(e.x,e.y));if(t)return t?.areas.length?t.findLowestArea(e):t}redivide(e){const{beadOffset:t,wingOffset:i,wingOverlap:r}=e,s=[],o=[];(function a(u,h=0,d=0){s[h]?s[h].push(...u.dividers):s[h]=u.dividers,1===u.areas.length&&u.areas[0].areas.length?o[h]?o[h].push(nM(u.areas[0])):o.push([nM(u.areas[0])]):o[h]||o.push([]),u.areas.forEach((p,f)=>{a(p,h+1,f)})})(this),this.dividers=[],this.areas=[],this.convertIntoFilling(t);const c=[];function l(u,h){let d,p=0;switch(u.edge.type){case\"segment\":{const f=h.skeleton.getCutSegment_nearestIntersection(u.edge);f&&(d=f);break}case\"arc\":{const f=h.skeleton.getCutSegment_nearestIntersection(u.edge.chord);if(f){d=f;const[m,v]=Ce.getPointsOfEdge(f),C=Ln(u.edge.start,m),I=Ln(u.edge.start,v);p=u.edge.getS(C<I?\"start\":\"end\")??0}break}}if(d)return{id:u.id,segment:d,s:p,offset:u.offset}}return s.forEach((u,h)=>{const d=[],p=this.getParentAreas();u.forEach(f=>{let v,m=f.edge;\"arc\"===f.edge.type&&(m=f.edge.chord),p.some(C=>{const I=[];return C.innerPolygon.edgeArcs.forEach(L=>I.push(...en(L,m))),I.length||C.innerPolygon.points.some(L=>!!m.contains(L)&&I.push(...Ce.getPointsOfEdge(m))),2===I.length&&(v=l(f,C)),null==v&&1===I.length&&(v=l(f,C)),I.length>2&&console.warn(\"changePoint - \\u0447\\u0442\\u043e-\\u0442\\u043e \\u043d\\u0435 \\u0442\\u043e \\u0441 \\u043f\\u0435\\u0440\\u0435\\u0441\\u0435\\u0447\\u0435\\u043d\\u0438\\u0435\\u043c \\u0437\\u043e\\u043d\\u044b \\u0438 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u0435\\u043b\\u044f\",I),2===I.length}),v&&d.push(v)}),o[h]?.forEach(f=>{this.createWing(f,{wingOffset:i,wingOverlap:r,beadOffset:t})}),d.forEach(f=>{const m=this.divide(f.segment,f.s,e,!!f.s,!0,f.id);c.push(...m)})}),c}createBeams(e,t){return e.map((i,r,s)=>{const o=r===s.length-1?0:r+1,a=Ce.adaptBeamPoints([i,s[o],t[o],t[r]]),c=new We(i,s[o]),l=i.s?c.getArc(i.s):c;return new fM(Si(),a,l)})}}class pM extends es{constructor(e){const t=e.config?.frameOffset||0,i=new Gt(...Ce.getPointsByClockwise(e.points)),r=i.getInnerPolygon(t);super({type:un.FRAME,points:i.points,skeleton:new Gt(...e.points),innerPoints:r?.points}),this.config={constructionId:this.id,beadOffset:20,dividerOffset:40,frameOffset:45,couplings:70,extensions:70,wingOffset:58,wingOverlap:8},this.id=e.id||Si(),this.points=i.points,this.beams=this.createBeams(i.points,r.points),this.config=e.config??this.config,e.withFilling&&this.areas.push(this.createFilling(this.config)),this.fillColor=\"red\"}changePoint(e,t,i){return this.points=this.points.map(r=>r.equals(e)?t:r),this.innerPolygon=this.getInnerPolygon(this.config.frameOffset)??this,this.skeleton=new Gt(...this.points),this.beams=this.createBeams(this.points,this.innerPolygon.points),this.redivide(i)}changeImpostPoint(e,t,i,r){const s=this.findDividerById(e);if(null==s)return[];const o=this.findAreaByDividerId(e);if(null==o)return[];const a=Ce.getPointsOfEdge(s.edge).find(l=>!l.equals(t));if(null==a)return[];const c=new We(a,i);switch(s.edge.type){case\"segment\":s.edge=c;break;case\"arc\":{const l=s.edge.getS(a),u=c.getArc(l),h=o.getCutArc_nearestIntersection(u);h&&(s.edge=h);break}}return o.redivide(r)}changeImpostPosition(e,t,i){const r=this.findDividerById(e);if(null==r)return[];const s=this.findAreaByDividerId(e);if(null==s)return[];const o=Ce.getEdgeCenter(r.edge),a=r.edge.shift(t.x-o.x,t.y-o.y);switch(a.type){case\"segment\":{const c=s.getCutSegment_nearestIntersection(a);c&&(r.edge=c);break}case\"arc\":{const c=s.getCutArc_nearestIntersection(a);c&&(r.edge=c);break}}return s.redivide(i)}changePoints(e,t){return this.points=this.points.map(i=>{const r=e.find(({old:s})=>s.equals(i));return null==r?i:r.new}),this.innerPolygon=this.getInnerPolygon(this.config.frameOffset)??this,this.skeleton=new Gt(...this.points),this.beams=this.createBeams(this.points,this.innerPolygon.points),this.redivide(t)}changeArc(e,t,i){return Ce.getBasePoint(this,e).s=t,this.innerPolygon=this.getInnerPolygon(i.frameOffset)??this,this.beams=this.createBeams(this.points,this.innerPolygon.points),this.redivide(i)}createFilling(e=this.config){const t=this.innerPolygon.points,r=new Gt(...t).getInnerPolygon(e.beadOffset),s=new es({type:un.FILLING,points:t,skeleton:this.skeleton,innerPoints:r.points});return s.fillColor=\"yellow\",s}}class e4{constructor(e,t,i){this.id=e,this.name=t,this.areas=i}addFrame(e){this.areas.push(e)}addArea(e,t){const i=this.findAreaContainedPoint(t);i&&(i.areas=[e])}findInAreas(e){for(const t of this.areas){const i=e(t);if(i)return i}}checkAreaExistsUnderCoords({x:e,y:t}){return this.areas.some(i=>i.containPoint(e,t))}findAreaByCoords(e){return this.findInAreas(t=>t.findAreaByCoords(e))}findAreaByPoints(e){return this.findInAreas(t=>t.findAreaByPoints(e))}findFrameById(e){return this.areas.find(t=>t.id===e)}findAreaById(e){return this.findInAreas(t=>t.findAreaById(e))}findDividerById(e){return this.findInAreas(t=>t.findDividerById(e))}findAreaByDividerId(e){return this.findInAreas(t=>t.findAreaByDividerId(e))}findDividerByCoords(e){return this.findInAreas(t=>t.findDividerByCoords(e))}findAreaContainedPoint(e){return this.findInAreas(t=>t.findAreaContainedPoint(e))}findLowestArea(e){return this.findInAreas(t=>t.findLowestArea(e))}createWing(e,t){this.areas.forEach(i=>{i.createWing(e,t)})}changeImpostPosition(e,t,i){const r=[];return this.areas.forEach(s=>{r.push(...s.changeImpostPosition(e,t,i))}),r}changeImpostPoint(e,t,i,r){const s=[];return this.areas.forEach(o=>{s.push(...o.changeImpostPoint(e,t,i,r))}),s}createDivider(e,t,i,r=!1,s=!1){const o=[];return this.areas.forEach(a=>{o.push(...a.divide(e,i,t,r,s))}),o}deleteArea(e,t){e.type!==un.FRAME?e.type===un.WING&&t&&this.removeWingArea(e,t):this.removeFrameAreaById(e.id)}getAllAngularPoints(){const e=[],i=r=>{(r=>{e.push(...r.filter(s=>!e.some(o=>s.equals(o))))})([...Ce.getCenterEdgeArcPoint(r.edgeArcs),...Ce.getCenterEdgeArcPoint(r.innerPolygon.edgeArcs),...r.points,...r.innerPolygon.points]),r.areas.forEach(a=>{i(a)})};return this.areas.map(r=>{i(r)}),e}getEdgeAngularPoints(){const e=[];return this.areas.forEach(t=>{t.points.forEach(i=>{e.some(r=>i.equals(r))||e.push(i)}),t.edgeArcs.forEach(i=>{\"arc\"===i.type&&e.push(i.center)}),t.areas.length&&this.getAreaDividersAngularPoints(t,e)}),e}getAreaDividersAngularPoints(e,t=[]){if(e.dividers.length){const i=e.dividers.reduce((r,s)=>\"arc\"===s.edge.type?[...r,s.edge.start,s.edge.customEnd,s.edge.center]:[...r,s.edge.p1,s.edge.p2],[]);t.push(...i.filter(r=>!t.some(s=>r.equals(s))))}if(e.areas.length)return e.areas.forEach(i=>this.getAreaDividersAngularPoints(i,t))}removeFrameAreaById(e){this.areas=this.areas.filter(t=>t.id!==e)}removeWingArea(e,t){const i=r=>{1===r.areas.length&&r.areas[0].id===e.id?(r.areas=[],r.convertIntoFilling(t.beadOffset)):r.areas.forEach(s=>{i(s)})};this.areas.forEach(r=>{i(r)})}}let rv=(()=>{class n{constructor(){}getAngleBetweenSegments(t,i){const r=t.p1,s=t.p2,o=i.p1,a=i.p2,c=new we(s.x-r.x,s.y-r.y),l=new we(a.x-o.x,a.y-o.y),u=c.x*l.x+c.y*l.y,h=Math.sqrt(c.x*c.x+c.y*c.y),d=Math.sqrt(l.x*l.x+l.y*l.y),f=Math.acos(u/(h*d)),m=f*(180/Math.PI);return{rad:Math.PI-f,deg:Math.round(180-m)}}transformToCutAngle(t){const i=t.deg<90;return t.deg=Math.abs(90-t.deg),t.rad=t.deg*Math.PI/180,i&&(t.deg=-t.deg,t.rad=-t.rad),t}isDividerIntersectsPolygonSide(t,i){const r=new We(i.p1,t.p1),s=new We(t.p1,i.p2),o=new We(i.p1,t.p2),a=new We(t.p2,i.p2),c=this.getAngleBetweenSegments(r,s),l=this.getAngleBetweenSegments(o,a);return 180===c.deg||isNaN(c.deg)&&!isNaN(l.deg)?{intersects:!0,point:t.p1}:180===l.deg||isNaN(l.deg)&&!isNaN(c.deg)?{intersects:!0,point:t.p2}:{intersects:!1}}isPolygonInside(t,i){const r=function H8(n,e,t){return new Se((n.x+e.x+t.x)/3,(n.y+e.y+t.y)/3)}(t[0],t[1],t[2]),s=[r.x,r.y];return 1!==lM()(i.map(o=>[Math.round(o.x),Math.round(o.y)]),s)}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})(),sv=(()=>{class n{constructor(){this.materials={profiles:[],beams:[]},this.sizes={points:[],arcs:[]}}getProfileById(t){return this.materials.profiles.find(i=>i.profileId===t)}getProfileByComponentBeam(t,i){let r;return this.materials.beams.forEach(s=>{if(this.getBeamPointByBeamMaterial(s,t)){const a=this.getProfileById(s.profile.profileId)?.types.find(c=>c.class===i);a&&(r=a)}}),r||void 0}getBeamPointByBeamMaterial(t,i){return t.beams.find(r=>r[0]===i[0]&&r[1]===i[1])}getBeamFromDividerGeometry(t){return t.map(i=>i.flat()[0])}convertPoint3DToPoint(t){const i=Array.isArray(t),[r,s,o]=i?this.sizes.points[t[0]]:this.sizes.points[t],a=i?this.sizes.arcs?.at(t[1]):0;return new we(r,o,a)}getAreaFromComponent(t){return\"area\"in t?t.area:t}getPolygonFromComponent(t){const i=this.getAreaFromComponent(t).geometry;return new Gt(...i.map(r=>this.convertPoint3DToPoint(r)))}getPropertiesFromPolygon(t,i){const{width:r,height:s}=this.getConstructionSize(i);return[mA(t,[jy({value:r,type:\"string\",name:\"width\"}),jy({value:s,type:\"string\",name:\"height\"})])]}getDividerProperties(t){return[mA(\"divider\",[jy({value:Math.max(...Object.values(this.getConstructionSize(t.beam.points))),type:\"string\",name:\"length\"})])]}getConstructionSize(t){if(0===t.length)return{width:0,height:0};let i=t[0].x,r=t[0].x,s=t[0].y,o=t[0].y;return t.forEach(l=>{l.x<i&&(i=l.x),l.x>r&&(r=l.x),l.y<s&&(s=l.y),l.y>o&&(o=l.y)}),{width:Math.round(100*(r-i))/100,height:Math.round(100*(o-s))/100}}getBeamFromComponentGeometry(t,i){return t.map((r,s,o)=>{const c=o[s===o.length-1?0:s+1],l=Array.isArray(r)?r[0]:r,u=Array.isArray(c)?c[0]:c;return{type:{type:i},beam:[l,u]}})}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})(),mf=(()=>{class n{constructor(t,i){this.geometryService=t,this.helpersService=i,this.config={constructionId:\"\",beadOffset:20,dividerOffset:40,frameOffset:45,couplings:70,extensions:70,wingOffset:58,wingOverlap:8}}convertOWSP(t){const{id:i,name:r,definition:{template:s,sizes:o,materials:a}}=t;this.helpersService.materials=a,this.helpersService.sizes=o,this.config.constructionId=i;const l=new e4(i,r,[]);return s.elements.forEach(u=>{if(\"type\"in u&&\"frame\"===u.type){const h=this.convertFrameToCoreArea(u);l.addFrame(h)}}),{konvaConstruction:l,config:{...this.config}}}convertFrameToCoreArea(t){const i=[],{geometry:r}=t.area;r.forEach(a=>{i.push(this.helpersService.convertPoint3DToPoint(a))});const s=this.helpersService.getProfileByComponentBeam(t.beamTypes[0].beam,\"frame\");this.config.frameOffset=s?.sizes.c||0;const o=new pM({points:i,config:this.config});return o.fillColor=\"red\",this.handleArea(o,t),o}handleArea(t,i){const r=this.helpersService.getAreaFromComponent(i);if(r.dividers?.length){const s=r.dividers[0].geometry,o=s.map(u=>this.helpersService.convertPoint3DToPoint(u[0])),a=new We(o[0],o[1]),c=this.helpersService.getBeamFromDividerGeometry(s),l=this.helpersService.getProfileByComponentBeam(c,\"mullion\");this.config.dividerOffset=2*(l?.sizes.c||0),t.divide(a,o[0].s||0,this.config),t.dividers.length&&t.dividers.forEach(u=>{u.mullions[0].fillColor=\"blue\"})}if(t.areas.forEach(s=>{const o=r.components?.find(a=>{const l=this.helpersService.getAreaFromComponent(a).geometry.map(u=>this.helpersService.convertPoint3DToPoint(u));return this.geometryService.isPolygonInside(s.points,l)});if(\"area\"in o&&o.type===un.WING){const a=this.helpersService.getProfileByComponentBeam(o.beamTypes[0].beam,un.WING);if(a?.sizes){const{b:l,c:u}=a.sizes;this.config.wingOverlap=u-l,this.config.wingOffset=u}s=s.convertIntoWing({wingOffset:this.config.wingOffset,wingOverlap:this.config.wingOverlap})}if(\"area\"in o&&o.type===un.FILLING){const a=this.helpersService.getProfileByComponentBeam(o.glazingBeadTypes[0].beam,\"glazing bead\");this.config.beadOffset=a?.sizes.h||0,s=s.convertIntoFilling(this.config.beadOffset)}this.handleArea(s,o)}),!t.areas.length&&r.components?.length){const s=r.components[0];let o;if(s.type===un.WING){const a=this.helpersService.getProfileByComponentBeam(s.beamTypes[0].beam,un.WING);if(a?.sizes){const{b:l,c:u}=a.sizes;this.config.wingOverlap=u-l,this.config.wingOffset=u}const c={wingOffset:this.config.wingOffset,wingOverlap:this.config.wingOverlap};this.config.wingOffset=a?.sizes.c||0,o=t.convertIntoWing(c)}if(s.type===un.FILLING){const a=this.helpersService.getProfileByComponentBeam(s.glazingBeadTypes[0].beam,\"glazing bead\");this.config.beadOffset=a?.sizes.h||0,t.convertIntoFilling(this.config.beadOffset)}o&&this.handleArea(o,s)}}convertCoreAreaToTreeComponent(t){const i=new u$({id:t.id,propertiesGroups:[],title:t.name}),r=new f$(t.id,i),s=t.areas.map(o=>{const a=this.helpersService.getPropertiesFromPolygon(\"frame\",o.points),c=new h$({propertiesGroups:a,id:o.id,title:rr.FRAME}),l=this.getDividerFromArea(o);l?.length&&c.addChildren(l);const u=this.getTreeBeamsFromArea(o.beams);return c.addChildren(u),o.areas.length&&c&&this.fillComponentWithContent(c,o),c});return i.addChildren(s),r}fillComponentWithContent(t,i){const r=this.getDividerFromArea(i);if(i.type===un.FRAME&&i.areas.length)i.areas.forEach(s=>{this.fillComponentWithContent(t,s)});else{if(i.type===un.FILLING){const s=this.helpersService.getPropertiesFromPolygon(\"filling\",i.points),o=new c$({id:i.id,title:rr.FILLING,propertiesGroups:s});r&&t.addChildren(r);const a=this.getTreeBeamsFromArea(i.beams);return o.addChildren(a),void t.addChild(o)}if(i.type===un.WING){const s=this.helpersService.getPropertiesFromPolygon(\"wing\",i.points),o=new l$({id:i.id,title:rr.WING,propertiesGroups:s});r&&o.addChildren(r);const a=this.getTreeBeamsFromArea(i.beams);return o.addChildren(a),t.addChild(o),void this.divideParentComponent(o,r,i)}i.type===un.AREA&&i.areas.forEach(s=>{this.fillComponentWithContent(t,s)})}}getDividerFromArea(t){const i=[];return t.dividers?.length?(i.push(this.getDividerComponent(t.dividers[0])),[...i,...this.searchOthersDivider(t)]):null}searchOthersDivider(t){let i=[];return t.areas.length&&t.areas.forEach(s=>{s.dividers.length&&s.type===un.AREA&&(2===t.areas.length&&i.push(this.getDividerComponent(s.dividers[0])),i=[...i,...this.searchOthersDivider(s)])}),i.filter(s=>!!s)}getDividerComponent(t){const i=this.helpersService.getDividerProperties(t),r=new _A({propertiesGroups:i,id:t?.beam.id,title:rr.BEAM}),s=new d$({id:t.id,title:rr.DIVIDER,propertiesGroups:i});return s.addChild(r),s}divideParentComponent(t,i,r){i?.length||!r.areas[0]?i?.length&&r.areas.forEach(s=>{this.fillComponentWithContent(t,s)}):this.fillComponentWithContent(t,r.areas[0])}getTreeBeamsFromArea(t){return t.map(i=>{const r=this.helpersService.getPropertiesFromPolygon(rr.BEAM,i.points);return new _A({id:i.id,title:rr.BEAM,propertiesGroups:r})})}static{this.\\u0275fac=function(i){return new(i||n)(Le(rv),Le(sv))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})(),r4=(()=>{class n{createConstructionMetrics(t){if(!t.areas.length)return{constructionId:t.id,customSizes:[]};const i=this.getAngularPoints(t),{top:r,right:s,bottom:o,left:a}=this.getExtremePoints(i),c=new We(new we(a.x,o.y),new we(s.x,o.y)),l=new We(new we(a.x,r.y),new we(a.x,o.y));return{constructionId:t.id,sizes:{vertical:[],horizontal:[]},width:c,height:l,customSizes:[]}}getExtremePoints(t){return{top:t.reduce((a,c)=>c.y<a.y?c:a,new we(0,1/0)),right:t.reduce((a,c)=>c.x>a.x?c:a,new we(-1/0,0)),bottom:t.reduce((a,c)=>c.y>a.y?c:a,new we(0,-1/0)),left:t.reduce((a,c)=>c.x<a.x?c:a,new we(1/0,0))}}getAngularPoints(t){return t.areas.reduce((i,r)=>[...i,...r.points,...this.getEdgeArcsCenterPoints(r.edgeArcs)],[])}getEdgeArcsCenterPoints(t){return t.reduce((i,r)=>\"arc\"===r.type?[...i,r.center]:i,[])}getMathesPointsAndSizes(t,i){return t.reduce((r,s)=>{const o=s.baseLinePoints.every(c=>i.some(l=>l.equals(c))),a=s.pointsIndexes.every(c=>i[c]);if(o){const c=s.baseLinePoints.map(l=>i.findIndex(u=>u.equals(l)));return s.updateIndexes(c),[...r,s]}return a?(s.updateSize(i[s.pointsIndexes[0]],i[s.pointsIndexes[1]]),[...r,s]):r},[])}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})(),ov=(()=>{class n{constructor(){this.constructions=[],this.onNewConstruction=new Ot,this.onEndMullionDraw=new Ot}findConstruction(t){return this.constructions.find(i=>i.name===t)}getNoNameNextIndex(){let t=0;return this.constructions.forEach(i=>{const r=i.name;if(r.includes(\"noname-\")){const s=r.slice(7),o=parseInt(s);o>t&&(t=o)}}),t+1}parseConstruction(t){try{const r=JSON.parse(t),s=r&&r.name?r.name:\"noname-\"+this.getNoNameNextIndex(),o={id:Si(),name:s,...r};return new sn(a=>{a.next(o),a.complete()})}catch{return function s4(n,e){const t=Pt(n)?n:()=>n,i=r=>r.error(t());return new sn(e?r=>e.schedule(i,0,r):i)}(()=>new Error(\"Invalid model data.\"))}}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();it(222);var nt=function(n){return n[n.SimpleLine=0]=\"SimpleLine\",n[n.PolygonLine=1]=\"PolygonLine\",n[n.FrameBeamLine=2]=\"FrameBeamLine\",n[n.GripsLine=3]=\"GripsLine\",n[n.GridMajorLine=4]=\"GridMajorLine\",n[n.GridMinorLine=5]=\"GridMinorLine\",n[n.UCSAxisLine=6]=\"UCSAxisLine\",n[n.DummyLine=7]=\"DummyLine\",n[n.RandomLine=8]=\"RandomLine\",n[n.CustomLine=9]=\"CustomLine\",n[n.DimensionLine=10]=\"DimensionLine\",n[n.DashedLine=11]=\"DashedLine\",n}(nt||{}),tn=function(n){return n[n.CirclePoint=0]=\"CirclePoint\",n[n.RectPoint=1]=\"RectPoint\",n}(tn||{});class v4{constructor(e,t){this.guiConfig=t,this.viewPort=e,this.setUnitScale()}setUnitScale(){this.unitScale=(this.viewPort.rb.x-this.viewPort.tl.x)/this.guiConfig.getUnitsConfig().width}setViewPort(e,t){this.viewPort={...e},this.setUnitScale(),t||this.drawGridInt(),this.drawUCSInt()}redraw(){this.drawGridInt(),this.drawUCSInt()}drawGridInt(){const e=(s,o)=>(s-s%o)/o,t=this.guiConfig.getGridConfig(),i=t.majorStep*t.minorStep,r={tl:new we(e(this.viewPort.tl.x,i)*i-2*i,e(this.viewPort.tl.y,i)*i-2*i),rb:new we(e(this.viewPort.rb.x,i)*i+3*i,e(this.viewPort.rb.y,i)*i+3*i)};this.drawGrid(r,t)}drawUCSInt(){const e=this.guiConfig.getUCSConfig(),t=e.origin.x>this.viewPort.tl.x&&e.origin.x<this.viewPort.rb.x&&e.origin.y>this.viewPort.tl.y&&e.origin.y<this.viewPort.rb.y?new we(e.origin.x,e.origin.y):new we(this.viewPort.tl.x+10,this.viewPort.tl.y+10);this.drawUCS(t,e)}}class w4 extends Xt{constructor(e,t){super()}schedule(e,t=0){return this}}const yf={setInterval(n,e,...t){const{delegate:i}=yf;return i?.setInterval?i.setInterval(n,e,...t):setInterval(n,e,...t)},clearInterval(n){const{delegate:e}=yf;return(e?.clearInterval||clearInterval)(n)},delegate:void 0};class wM extends w4{constructor(e,t){super(e,t),this.scheduler=e,this.work=t,this.pending=!1}schedule(e,t=0){var i;if(this.closed)return this;this.state=e;const r=this.id,s=this.scheduler;return null!=r&&(this.id=this.recycleAsyncId(s,r,t)),this.pending=!0,this.delay=t,this.id=null!==(i=this.id)&&void 0!==i?i:this.requestAsyncId(s,this.id,t),this}requestAsyncId(e,t,i=0){return yf.setInterval(e.flush.bind(e,this),i)}recycleAsyncId(e,t,i=0){if(null!=i&&this.delay===i&&!1===this.pending)return t;null!=t&&yf.clearInterval(t)}execute(e,t){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;const i=this._execute(e,t);if(i)return i;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(e,t){let r,i=!1;try{this.work(e)}catch(s){i=!0,r=s||new Error(\"Scheduled action threw falsy error\")}if(i)return this.unsubscribe(),r}unsubscribe(){if(!this.closed){const{id:e,scheduler:t}=this,{actions:i}=t;this.work=this.state=this.scheduler=null,this.pending=!1,lr(i,this),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null,super.unsubscribe()}}}class Kl{constructor(e,t=Kl.now){this.schedulerActionCtor=e,this.now=t}schedule(e,t=0,i){return new this.schedulerActionCtor(this,e).schedule(i,t)}}Kl.now=My.now;class EM extends Kl{constructor(e,t=Kl.now){super(e,t),this.actions=[],this._active=!1}flush(e){const{actions:t}=this;if(this._active)return void t.push(e);let i;this._active=!0;do{if(i=e.execute(e.state,e.delay))break}while(e=t.shift());if(this._active=!1,i){for(;e=t.shift();)e.unsubscribe();throw i}}}const E4=new EM(wM);function bM(n,e=E4){return Pn((t,i)=>{let r=null,s=null,o=null;const a=()=>{if(r){r.unsubscribe(),r=null;const l=s;s=null,i.next(l)}};function c(){const l=o+n,u=e.now();if(u<l)return r=this.schedule(void 0,l-u),void i.add(r);a()}t.subscribe(hn(i,l=>{s=l,o=e.now(),r||(r=e.schedule(c,n),i.add(r))},()=>{a(),i.complete()},void 0,()=>{s=r=null}))})}function cv(n){return Pn((e,t)=>{Tr(n).subscribe(hn(t,()=>t.complete(),xo)),!t.closed&&e.subscribe(t)})}var S4=Math.PI/180;const Ka=typeof global<\"u\"?global:typeof window<\"u\"?window:typeof WorkerGlobalScope<\"u\"?self:{},Re={_global:Ka,version:\"8.4.3\",isBrowser:function C4(){return typeof window<\"u\"&&(\"[object Window]\"==={}.toString.call(window)||\"[object global]\"==={}.toString.call(window))}(),isUnminified:/param/.test(function(n){}.toString()),dblClickWindow:400,getAngle:n=>Re.angleDeg?n*S4:n,enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<\"u\"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging:()=>Re.DD.isDragging,isDragReady:()=>!!Re.DD.node,releaseCanvasOnDestroy:!0,document:Ka.document,_injectGlobal(n){Ka.Konva=n}},Jt=n=>{Re[n.prototype.getClassName()]=n};Re._injectGlobal(Re);class Ci{constructor(e=[1,0,0,1,0,0]){this.dirty=!1,this.m=e&&e.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new Ci(this.m)}copyInto(e){e.m[0]=this.m[0],e.m[1]=this.m[1],e.m[2]=this.m[2],e.m[3]=this.m[3],e.m[4]=this.m[4],e.m[5]=this.m[5]}point(e){var t=this.m;return{x:t[0]*e.x+t[2]*e.y+t[4],y:t[1]*e.x+t[3]*e.y+t[5]}}translate(e,t){return this.m[4]+=this.m[0]*e+this.m[2]*t,this.m[5]+=this.m[1]*e+this.m[3]*t,this}scale(e,t){return this.m[0]*=e,this.m[1]*=e,this.m[2]*=t,this.m[3]*=t,this}rotate(e){var t=Math.cos(e),i=Math.sin(e),s=this.m[1]*t+this.m[3]*i,o=this.m[0]*-i+this.m[2]*t,a=this.m[1]*-i+this.m[3]*t;return this.m[0]=this.m[0]*t+this.m[2]*i,this.m[1]=s,this.m[2]=o,this.m[3]=a,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(e,t){var r=this.m[1]+this.m[3]*t,s=this.m[2]+this.m[0]*e,o=this.m[3]+this.m[1]*e;return this.m[0]=this.m[0]+this.m[2]*t,this.m[1]=r,this.m[2]=s,this.m[3]=o,this}multiply(e){var i=this.m[1]*e.m[0]+this.m[3]*e.m[1],r=this.m[0]*e.m[2]+this.m[2]*e.m[3],s=this.m[1]*e.m[2]+this.m[3]*e.m[3],o=this.m[0]*e.m[4]+this.m[2]*e.m[5]+this.m[4],a=this.m[1]*e.m[4]+this.m[3]*e.m[5]+this.m[5];return this.m[0]=this.m[0]*e.m[0]+this.m[2]*e.m[1],this.m[1]=i,this.m[2]=r,this.m[3]=s,this.m[4]=o,this.m[5]=a,this}invert(){var e=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),i=-this.m[1]*e,r=-this.m[2]*e,s=this.m[0]*e,o=e*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),a=e*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=this.m[3]*e,this.m[1]=i,this.m[2]=r,this.m[3]=s,this.m[4]=o,this.m[5]=a,this}getMatrix(){return this.m}decompose(){var e=this.m[0],t=this.m[1],i=this.m[2],r=this.m[3],a=e*r-t*i;let c={x:this.m[4],y:this.m[5],rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(0!=e||0!=t){var l=Math.sqrt(e*e+t*t);c.rotation=t>0?Math.acos(e/l):-Math.acos(e/l),c.scaleX=l,c.scaleY=a/l,c.skewX=(e*i+t*r)/a,c.skewY=0}else if(0!=i||0!=r){var u=Math.sqrt(i*i+r*r);c.rotation=Math.PI/2-(r>0?Math.acos(-i/u):-Math.acos(i/u)),c.scaleX=a/u,c.scaleY=u,c.skewX=0,c.skewY=(e*i+t*r)/a}return c.rotation=G._getRotation(c.rotation),c}}var M4=Math.PI/180,x4=180/Math.PI,SM=\"Konva error: \",uv={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},k4=/rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/,vf=[];const L4=typeof requestAnimationFrame<\"u\"&&requestAnimationFrame||function(n){setTimeout(n,60)},G={_isElement:n=>!(!n||1!=n.nodeType),_isFunction:n=>!!(n&&n.constructor&&n.call&&n.apply),_isPlainObject:n=>!!n&&n.constructor===Object,_isArray:n=>\"[object Array]\"===Object.prototype.toString.call(n),_isNumber:n=>\"[object Number]\"===Object.prototype.toString.call(n)&&!isNaN(n)&&isFinite(n),_isString:n=>\"[object String]\"===Object.prototype.toString.call(n),_isBoolean:n=>\"[object Boolean]\"===Object.prototype.toString.call(n),isObject:n=>n instanceof Object,isValidSelector(n){if(\"string\"!=typeof n)return!1;var e=n[0];return\"#\"===e||\".\"===e||e===e.toUpperCase()},_sign:n=>0===n||n>0?1:-1,requestAnimFrame(n){vf.push(n),1===vf.length&&L4(function(){const e=vf;vf=[],e.forEach(function(t){t()})})},createCanvasElement(){var n=document.createElement(\"canvas\");try{n.style=n.style||{}}catch{}return n},createImageElement:()=>document.createElement(\"img\"),_isInDocument(n){for(;n=n.parentNode;)if(n==document)return!0;return!1},_urlToImage(n,e){var t=G.createImageElement();t.onload=function(){e(t)},t.src=n},_rgbToHex:(n,e,t)=>((1<<24)+(n<<16)+(e<<8)+t).toString(16).slice(1),_hexToRgb(n){n=n.replace(\"#\",\"\");var e=parseInt(n,16);return{r:e>>16&255,g:e>>8&255,b:255&e}},getRandomColor(){for(var n=(16777215*Math.random()|0).toString(16);n.length<6;)n=\"0\"+n;return\"#\"+n},getRGB(n){var e;return n in uv?{r:(e=uv[n])[0],g:e[1],b:e[2]}:\"#\"===n[0]?this._hexToRgb(n.substring(1)):\"rgb(\"===n.substr(0,4)?(e=k4.exec(n.replace(/ /g,\"\")),{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10)}):{r:0,g:0,b:0}},colorToRGBA:n=>G._namedColorToRBA(n=n||\"black\")||G._hex3ColorToRGBA(n)||G._hex4ColorToRGBA(n)||G._hex6ColorToRGBA(n)||G._hex8ColorToRGBA(n)||G._rgbColorToRGBA(n)||G._rgbaColorToRGBA(n)||G._hslColorToRGBA(n),_namedColorToRBA(n){var e=uv[n.toLowerCase()];return e?{r:e[0],g:e[1],b:e[2],a:1}:null},_rgbColorToRGBA(n){if(0===n.indexOf(\"rgb(\")){var e=(n=n.match(/rgb\\(([^)]+)\\)/)[1]).split(/ *, */).map(Number);return{r:e[0],g:e[1],b:e[2],a:1}}},_rgbaColorToRGBA(n){if(0===n.indexOf(\"rgba(\")){var e=(n=n.match(/rgba\\(([^)]+)\\)/)[1]).split(/ *, */).map((t,i)=>\"%\"===t.slice(-1)?3===i?parseInt(t)/100:parseInt(t)/100*255:Number(t));return{r:e[0],g:e[1],b:e[2],a:e[3]}}},_hex8ColorToRGBA(n){if(\"#\"===n[0]&&9===n.length)return{r:parseInt(n.slice(1,3),16),g:parseInt(n.slice(3,5),16),b:parseInt(n.slice(5,7),16),a:parseInt(n.slice(7,9),16)/255}},_hex6ColorToRGBA(n){if(\"#\"===n[0]&&7===n.length)return{r:parseInt(n.slice(1,3),16),g:parseInt(n.slice(3,5),16),b:parseInt(n.slice(5,7),16),a:1}},_hex4ColorToRGBA(n){if(\"#\"===n[0]&&5===n.length)return{r:parseInt(n[1]+n[1],16),g:parseInt(n[2]+n[2],16),b:parseInt(n[3]+n[3],16),a:parseInt(n[4]+n[4],16)/255}},_hex3ColorToRGBA(n){if(\"#\"===n[0]&&4===n.length)return{r:parseInt(n[1]+n[1],16),g:parseInt(n[2]+n[2],16),b:parseInt(n[3]+n[3],16),a:1}},_hslColorToRGBA(n){if(/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.test(n)){const[e,...t]=/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(n),i=Number(t[0])/360,r=Number(t[1])/100,s=Number(t[2])/100;let o,a,c;if(0===r)return c=255*s,{r:Math.round(c),g:Math.round(c),b:Math.round(c),a:1};o=s<.5?s*(1+r):s+r-s*r;const l=2*s-o,u=[0,0,0];for(let h=0;h<3;h++)a=i+1/3*-(h-1),a<0&&a++,a>1&&a--,c=6*a<1?l+6*(o-l)*a:2*a<1?o:3*a<2?l+(o-l)*(2/3-a)*6:l,u[h]=255*c;return{r:Math.round(u[0]),g:Math.round(u[1]),b:Math.round(u[2]),a:1}}},haveIntersection:(n,e)=>!(e.x>n.x+n.width||e.x+e.width<n.x||e.y>n.y+n.height||e.y+e.height<n.y),cloneObject(n){var e={};for(var t in n)e[t]=this._isPlainObject(n[t])?this.cloneObject(n[t]):this._isArray(n[t])?this.cloneArray(n[t]):n[t];return e},cloneArray:n=>n.slice(0),degToRad:n=>n*M4,radToDeg:n=>n*x4,_degToRad:n=>(G.warn(\"Util._degToRad is removed. Please use public Util.degToRad instead.\"),G.degToRad(n)),_radToDeg:n=>(G.warn(\"Util._radToDeg is removed. Please use public Util.radToDeg instead.\"),G.radToDeg(n)),_getRotation:n=>Re.angleDeg?G.radToDeg(n):n,_capitalize:n=>n.charAt(0).toUpperCase()+n.slice(1),throw(n){throw new Error(SM+n)},error(n){console.error(SM+n)},warn(n){Re.showWarnings&&console.warn(\"Konva warning: \"+n)},each(n,e){for(var t in n)e(t,n[t])},_inRange:(n,e,t)=>e<=n&&n<t,_getProjectionToSegment(n,e,t,i,r,s){var o,a,c,l=(n-t)*(n-t)+(e-i)*(e-i);if(0==l)o=n,a=e,c=(r-t)*(r-t)+(s-i)*(s-i);else{var u=((r-n)*(t-n)+(s-e)*(i-e))/l;u<0?(o=n,a=e,c=(n-r)*(n-r)+(e-s)*(e-s)):u>1?(o=t,a=i,c=(t-r)*(t-r)+(i-s)*(i-s)):c=((o=n+u*(t-n))-r)*(o-r)+((a=e+u*(i-e))-s)*(a-s)}return[o,a,c]},_getProjectionToLine(n,e,t){var i=G.cloneObject(n),r=Number.MAX_VALUE;return e.forEach(function(s,o){if(t||o!==e.length-1){var a=e[(o+1)%e.length],c=G._getProjectionToSegment(s.x,s.y,a.x,a.y,n.x,n.y),u=c[1],h=c[2];h<r&&(i.x=c[0],i.y=u,r=h)}}),i},_prepareArrayForTween(n,e,t){var i,r=[],s=[];if(n.length>e.length){var o=e;e=n,n=o}for(i=0;i<n.length;i+=2)r.push({x:n[i],y:n[i+1]});for(i=0;i<e.length;i+=2)s.push({x:e[i],y:e[i+1]});var a=[];return s.forEach(function(c){var l=G._getProjectionToLine(c,r,t);a.push(l.x),a.push(l.y)}),a},_prepareToStringify(n){var e;for(var t in n.visitedByCircularReferenceRemoval=!0,n)if(n.hasOwnProperty(t)&&n[t]&&\"object\"==typeof n[t])if(e=Object.getOwnPropertyDescriptor(n,t),n[t].visitedByCircularReferenceRemoval||G._isElement(n[t])){if(!e.configurable)return null;delete n[t]}else if(null===G._prepareToStringify(n[t])){if(!e.configurable)return null;delete n[t]}return delete n.visitedByCircularReferenceRemoval,n},_assign(n,e){for(var t in e)n[t]=e[t];return n},_getFirstPointerId:n=>n.touches?n.changedTouches[0].identifier:n.pointerId||999,releaseCanvas(...n){Re.releaseCanvasOnDestroy&&n.forEach(e=>{e.width=0,e.height=0})},drawRoundedRectPath(n,e,t,i){let r=0,s=0,o=0,a=0;\"number\"==typeof i?r=s=o=a=Math.min(i,e/2,t/2):(r=Math.min(i[0]||0,e/2,t/2),s=Math.min(i[1]||0,e/2,t/2),a=Math.min(i[2]||0,e/2,t/2),o=Math.min(i[3]||0,e/2,t/2)),n.moveTo(r,0),n.lineTo(e-s,0),n.arc(e-s,s,s,3*Math.PI/2,0,!1),n.lineTo(e,t-a),n.arc(e-a,t-a,a,0,Math.PI/2,!1),n.lineTo(o,t),n.arc(o,t-o,o,Math.PI/2,Math.PI,!1),n.lineTo(0,r),n.arc(r,r,r,Math.PI,3*Math.PI/2,!1)}};function ns(n){return G._isString(n)?'\"'+n+'\"':\"[object Number]\"===Object.prototype.toString.call(n)||G._isBoolean(n)?n:Object.prototype.toString.call(n)}function CM(n){return n>255?255:n<0?0:Math.round(n)}function _e(){if(Re.isUnminified)return function(n,e){return G._isNumber(n)||G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a number.'),n}}function hv(n){if(Re.isUnminified)return function(e,t){let i=G._isNumber(e),r=G._isArray(e)&&e.length==n;return!i&&!r&&G.warn(ns(e)+' is a not valid value for \"'+t+'\" attribute. The value should be a number or Array<number>('+n+\")\"),e}}function dv(){if(Re.isUnminified)return function(n,e){return G._isNumber(n)||\"auto\"===n||G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a number or \"auto\".'),n}}function Ya(){if(Re.isUnminified)return function(n,e){return G._isString(n)||G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a string.'),n}}function DM(){if(Re.isUnminified)return function(n,e){const t=G._isString(n),i=\"[object CanvasGradient]\"===Object.prototype.toString.call(n)||n&&n.addColorStop;return t||i||G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a string or a native gradient.'),n}}function or(){if(Re.isUnminified)return function(n,e){return!0===n||!1===n||G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a boolean.'),n}}var Yl=\"get\",Xl=\"set\";const R={addGetterSetter(n,e,t,i,r){R.addGetter(n,e,t),R.addSetter(n,e,i,r),R.addOverloadedGetterSetter(n,e)},addGetter(n,e,t){var i=Yl+G._capitalize(e);n.prototype[i]=n.prototype[i]||function(){var r=this.attrs[e];return void 0===r?t:r}},addSetter(n,e,t,i){var r=Xl+G._capitalize(e);n.prototype[r]||R.overWriteSetter(n,e,t,i)},overWriteSetter(n,e,t,i){var r=Xl+G._capitalize(e);n.prototype[r]=function(s){return t&&null!=s&&(s=t.call(this,s,e)),this._setAttr(e,s),i&&i.call(this),this}},addComponentsGetterSetter(n,e,t,i,r){var l,u,s=t.length,o=G._capitalize,a=Yl+o(e),c=Xl+o(e);n.prototype[a]=function(){var d={};for(l=0;l<s;l++)d[u=t[l]]=this.getAttr(e+o(u));return d};var h=function B4(n){if(Re.isUnminified)return function(e,t){return null==e||G.isObject(e)||G.warn(ns(e)+' is a not valid value for \"'+t+'\" attribute. The value should be an object with properties '+n),e}}(t);n.prototype[c]=function(d){var f,p=this.attrs[e];for(f in i&&(d=i.call(this,d)),h&&h.call(this,d,e),d)d.hasOwnProperty(f)&&this._setAttr(e+o(f),d[f]);return d||t.forEach(m=>{this._setAttr(e+o(m),void 0)}),this._fireChangeEvent(e,p,d),r&&r.call(this),this},R.addOverloadedGetterSetter(n,e)},addOverloadedGetterSetter(n,e){var t=G._capitalize(e),i=Xl+t,r=Yl+t;n.prototype[e]=function(){return arguments.length?(this[i](arguments[0]),this):this[r]()}},addDeprecatedGetterSetter(n,e,t,i){G.error(\"Adding deprecated \"+e);var r=Yl+G._capitalize(e),s=e+\" property is deprecated and will be removed soon. Look at Konva change log for more information.\";n.prototype[r]=function(){G.error(s);var o=this.attrs[e];return void 0===o?t:o},R.addSetter(n,e,i,function(){G.error(s)}),R.addOverloadedGetterSetter(n,e)},backCompat(n,e){G.each(e,function(t,i){var r=n.prototype[i],s=Yl+G._capitalize(t),o=Xl+G._capitalize(t);function a(){r.apply(this,arguments),G.error('\"'+t+'\" method is deprecated and will be removed soon. Use \"\"'+i+'\" instead.')}n.prototype[t]=a,n.prototype[s]=a,n.prototype[o]=a})},afterSetFilter(){this._filterUpToDate=!1}};var Ef,IM=[\"arc\",\"arcTo\",\"beginPath\",\"bezierCurveTo\",\"clearRect\",\"clip\",\"closePath\",\"createLinearGradient\",\"createPattern\",\"createRadialGradient\",\"drawImage\",\"ellipse\",\"fill\",\"fillText\",\"getImageData\",\"createImageData\",\"lineTo\",\"moveTo\",\"putImageData\",\"quadraticCurveTo\",\"rect\",\"restore\",\"rotate\",\"save\",\"scale\",\"setLineDash\",\"setTransform\",\"stroke\",\"strokeText\",\"transform\",\"translate\"];class wf{constructor(e){this.canvas=e,Re.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(e){e.fillEnabled()&&this._fill(e)}_fill(e){}strokeShape(e){e.hasStroke()&&this._stroke(e)}_stroke(e){}fillStrokeShape(e){e.attrs.fillAfterStrokeEnabled?(this.strokeShape(e),this.fillShape(e)):(this.fillShape(e),this.strokeShape(e))}getTrace(e,t){var o,a,c,l,i=this.traceArr,r=i.length,s=\"\";for(o=0;o<r;o++)(c=(a=i[o]).method)?(l=a.args,s+=c,e?s+=\"()\":G._isArray(l[0])?s+=\"([\"+l.join(\",\")+\"])\":(t&&(l=l.map(u=>\"number\"==typeof u?Math.floor(u):u)),s+=\"(\"+l.join(\",\")+\")\")):(s+=a.property,e||(s+=\"=\"+a.val)),s+=\";\";return s}clearTrace(){this.traceArr=[]}_trace(e){var t=this.traceArr;t.push(e),t.length>=100&&t.shift()}reset(){var e=this.getCanvas().getPixelRatio();this.setTransform(1*e,0,0,1*e,0,0)}getCanvas(){return this.canvas}clear(e){var t=this.getCanvas();e?this.clearRect(e.x||0,e.y||0,e.width||0,e.height||0):this.clearRect(0,0,t.getWidth()/t.pixelRatio,t.getHeight()/t.pixelRatio)}_applyLineCap(e){const t=e.attrs.lineCap;t&&this.setAttr(\"lineCap\",t)}_applyOpacity(e){var t=e.getAbsoluteOpacity();1!==t&&this.setAttr(\"globalAlpha\",t)}_applyLineJoin(e){const t=e.attrs.lineJoin;t&&this.setAttr(\"lineJoin\",t)}setAttr(e,t){this._context[e]=t}arc(e,t,i,r,s,o){this._context.arc(e,t,i,r,s,o)}arcTo(e,t,i,r,s){this._context.arcTo(e,t,i,r,s)}beginPath(){this._context.beginPath()}bezierCurveTo(e,t,i,r,s,o){this._context.bezierCurveTo(e,t,i,r,s,o)}clearRect(e,t,i,r){this._context.clearRect(e,t,i,r)}clip(){this._context.clip()}closePath(){this._context.closePath()}createImageData(e,t){var i=arguments;return 2===i.length?this._context.createImageData(e,t):1===i.length?this._context.createImageData(e):void 0}createLinearGradient(e,t,i,r){return this._context.createLinearGradient(e,t,i,r)}createPattern(e,t){return this._context.createPattern(e,t)}createRadialGradient(e,t,i,r,s,o){return this._context.createRadialGradient(e,t,i,r,s,o)}drawImage(e,t,i,r,s,o,a,c,l){var u=arguments,h=this._context;3===u.length?h.drawImage(e,t,i):5===u.length?h.drawImage(e,t,i,r,s):9===u.length&&h.drawImage(e,t,i,r,s,o,a,c,l)}ellipse(e,t,i,r,s,o,a,c){this._context.ellipse(e,t,i,r,s,o,a,c)}isPointInPath(e,t,i,r){return i?this._context.isPointInPath(i,e,t,r):this._context.isPointInPath(e,t,r)}fill(e){e?this._context.fill(e):this._context.fill()}fillRect(e,t,i,r){this._context.fillRect(e,t,i,r)}strokeRect(e,t,i,r){this._context.strokeRect(e,t,i,r)}fillText(e,t,i,r){r?this._context.fillText(e,t,i,r):this._context.fillText(e,t,i)}measureText(e){return this._context.measureText(e)}getImageData(e,t,i,r){return this._context.getImageData(e,t,i,r)}lineTo(e,t){this._context.lineTo(e,t)}moveTo(e,t){this._context.moveTo(e,t)}rect(e,t,i,r){this._context.rect(e,t,i,r)}putImageData(e,t,i){this._context.putImageData(e,t,i)}quadraticCurveTo(e,t,i,r){this._context.quadraticCurveTo(e,t,i,r)}restore(){this._context.restore()}rotate(e){this._context.rotate(e)}save(){this._context.save()}scale(e,t){this._context.scale(e,t)}setLineDash(e){this._context.setLineDash?this._context.setLineDash(e):\"mozDash\"in this._context?this._context.mozDash=e:\"webkitLineDash\"in this._context&&(this._context.webkitLineDash=e)}getLineDash(){return this._context.getLineDash()}setTransform(e,t,i,r,s,o){this._context.setTransform(e,t,i,r,s,o)}stroke(e){e?this._context.stroke(e):this._context.stroke()}strokeText(e,t,i,r){this._context.strokeText(e,t,i,r)}transform(e,t,i,r,s,o){this._context.transform(e,t,i,r,s,o)}translate(e,t){this._context.translate(e,t)}_enableTrace(){var r,s,e=this,t=IM.length,i=this.setAttr,o=function(a){var l,c=e[a];e[a]=function(){return s=function j4(n){var r,s,e=[],t=n.length,i=G;for(r=0;r<t;r++)i._isNumber(s=n[r])?s=Math.round(1e3*s)/1e3:i._isString(s)||(s+=\"\"),e.push(s);return e}(Array.prototype.slice.call(arguments,0)),l=c.apply(e,arguments),e._trace({method:a,args:s}),l}};for(r=0;r<t;r++)o(IM[r]);e.setAttr=function(){i.apply(e,arguments);var a=arguments[0],c=arguments[1];(\"shadowOffsetX\"===a||\"shadowOffsetY\"===a||\"shadowBlur\"===a)&&(c/=this.canvas.getPixelRatio()),e._trace({property:a,val:c})}}_applyGlobalCompositeOperation(e){const t=e.attrs.globalCompositeOperation;!t||\"source-over\"===t||this.setAttr(\"globalCompositeOperation\",t)}}[\"fillStyle\",\"strokeStyle\",\"shadowColor\",\"shadowBlur\",\"shadowOffsetX\",\"shadowOffsetY\",\"lineCap\",\"lineDashOffset\",\"lineJoin\",\"lineWidth\",\"miterLimit\",\"font\",\"textAlign\",\"textBaseline\",\"globalAlpha\",\"globalCompositeOperation\",\"imageSmoothingEnabled\"].forEach(function(n){Object.defineProperty(wf.prototype,n,{get(){return this._context[n]},set(e){this._context[n]=e}})});class Y4 extends wf{constructor(e){super(e),this._context=e._canvas.getContext(\"2d\")}_fillColor(e){var t=e.fill();this.setAttr(\"fillStyle\",t),e._fillFunc(this)}_fillPattern(e){this.setAttr(\"fillStyle\",e._getFillPattern()),e._fillFunc(this)}_fillLinearGradient(e){var t=e._getLinearGradient();t&&(this.setAttr(\"fillStyle\",t),e._fillFunc(this))}_fillRadialGradient(e){const t=e._getRadialGradient();t&&(this.setAttr(\"fillStyle\",t),e._fillFunc(this))}_fill(e){const t=e.fill(),i=e.getFillPriority();if(t&&\"color\"===i)return void this._fillColor(e);const r=e.getFillPatternImage();if(r&&\"pattern\"===i)return void this._fillPattern(e);const s=e.getFillLinearGradientColorStops();if(s&&\"linear-gradient\"===i)return void this._fillLinearGradient(e);const o=e.getFillRadialGradientColorStops();o&&\"radial-gradient\"===i?this._fillRadialGradient(e):t?this._fillColor(e):r?this._fillPattern(e):s?this._fillLinearGradient(e):o&&this._fillRadialGradient(e)}_strokeLinearGradient(e){const t=e.getStrokeLinearGradientStartPoint(),i=e.getStrokeLinearGradientEndPoint(),r=e.getStrokeLinearGradientColorStops(),s=this.createLinearGradient(t.x,t.y,i.x,i.y);if(r){for(var o=0;o<r.length;o+=2)s.addColorStop(r[o],r[o+1]);this.setAttr(\"strokeStyle\",s)}}_stroke(e){var t=e.dash(),i=e.getStrokeScaleEnabled();if(e.hasStroke()){if(!i){this.save();var r=this.getCanvas().getPixelRatio();this.setTransform(r,0,0,r,0,0)}this._applyLineCap(e),t&&e.dashEnabled()&&(this.setLineDash(t),this.setAttr(\"lineDashOffset\",e.dashOffset())),this.setAttr(\"lineWidth\",e.strokeWidth()),e.getShadowForStrokeEnabled()||this.setAttr(\"shadowColor\",\"rgba(0,0,0,0)\"),e.getStrokeLinearGradientColorStops()?this._strokeLinearGradient(e):this.setAttr(\"strokeStyle\",e.stroke()),e._strokeFunc(this),i||this.restore()}}_applyShadow(e){var t,i,r,s=null!==(t=e.getShadowRGBA())&&void 0!==t?t:\"black\",o=null!==(i=e.getShadowBlur())&&void 0!==i?i:5,a=null!==(r=e.getShadowOffset())&&void 0!==r?r:{x:0,y:0},c=e.getAbsoluteScale(),l=this.canvas.getPixelRatio(),u=c.x*l,h=c.y*l;this.setAttr(\"shadowColor\",s),this.setAttr(\"shadowBlur\",o*Math.min(Math.abs(u),Math.abs(h))),this.setAttr(\"shadowOffsetX\",a.x*u),this.setAttr(\"shadowOffsetY\",a.y*h)}}class X4 extends wf{constructor(e){super(e),this._context=e._canvas.getContext(\"2d\",{willReadFrequently:!0})}_fill(e){this.save(),this.setAttr(\"fillStyle\",e.colorKey),e._fillFuncHit(this),this.restore()}strokeShape(e){e.hasHitStroke()&&this._stroke(e)}_stroke(e){if(e.hasHitStroke()){const s=e.getStrokeScaleEnabled();if(!s){this.save();var t=this.getCanvas().getPixelRatio();this.setTransform(t,0,0,t,0,0)}this._applyLineCap(e);var i=e.hitStrokeWidth(),r=\"auto\"===i?e.strokeWidth():i;this.setAttr(\"lineWidth\",r),this.setAttr(\"strokeStyle\",e.colorKey),e._strokeFuncHit(this),s||this.restore()}}}class bf{constructor(e){this.pixelRatio=1,this.width=0,this.height=0,this.isCache=!1;var i=(e||{}).pixelRatio||Re.pixelRatio||function Z4(){if(Ef)return Ef;var n=G.createCanvasElement(),e=n.getContext(\"2d\");return Ef=(Re._global.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),G.releaseCanvas(n),Ef}();this.pixelRatio=i,this._canvas=G.createCanvasElement(),this._canvas.style.padding=\"0\",this._canvas.style.margin=\"0\",this._canvas.style.border=\"0\",this._canvas.style.background=\"transparent\",this._canvas.style.position=\"absolute\",this._canvas.style.top=\"0\",this._canvas.style.left=\"0\"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(e){var t=this.pixelRatio;this.pixelRatio=e,this.setSize(this.getWidth()/t,this.getHeight()/t)}setWidth(e){this.width=this._canvas.width=e*this.pixelRatio,this._canvas.style.width=e+\"px\";var t=this.pixelRatio;this.getContext()._context.scale(t,t)}setHeight(e){this.height=this._canvas.height=e*this.pixelRatio,this._canvas.style.height=e+\"px\";var t=this.pixelRatio;this.getContext()._context.scale(t,t)}getWidth(){return this.width}getHeight(){return this.height}setSize(e,t){this.setWidth(e||0),this.setHeight(t||0)}toDataURL(e,t){try{return this._canvas.toDataURL(e,t)}catch{try{return this._canvas.toDataURL()}catch(r){return G.error(\"Unable to get data URL. \"+r.message+\" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html.\"),\"\"}}}}R.addGetterSetter(bf,\"pixelRatio\",void 0,_e());class Xa extends bf{constructor(e={width:0,height:0}){super(e),this.context=new Y4(this),this.setSize(e.width,e.height)}}class fv extends bf{constructor(e={width:0,height:0}){super(e),this.hitCanvas=!0,this.context=new X4(this),this.setSize(e.width,e.height)}}const _t={get isDragging(){var n=!1;return _t._dragElements.forEach(e=>{\"dragging\"===e.dragStatus&&(n=!0)}),n},justDragged:!1,get node(){var n;return _t._dragElements.forEach(e=>{n=e.node}),n},_dragElements:new Map,_drag(n){const e=[];_t._dragElements.forEach((t,i)=>{const{node:r}=t,s=r.getStage();s.setPointersPositions(n),void 0===t.pointerId&&(t.pointerId=G._getFirstPointerId(n));const o=s._changedPointerPositions.find(l=>l.id===t.pointerId);if(o){if(\"dragging\"!==t.dragStatus){var a=r.dragDistance();if(Math.max(Math.abs(o.x-t.startPointerPos.x),Math.abs(o.y-t.startPointerPos.y))<a||(r.startDrag({evt:n}),!r.isDragging()))return}r._setDragPosition(n,t),e.push(r)}}),e.forEach(t=>{t.fire(\"dragmove\",{type:\"dragmove\",target:t,evt:n},!0)})},_endDragBefore(n){const e=[];_t._dragElements.forEach(t=>{const{node:i}=t,r=i.getStage();if(n&&r.setPointersPositions(n),!r._changedPointerPositions.find(a=>a.id===t.pointerId))return;(\"dragging\"===t.dragStatus||\"stopped\"===t.dragStatus)&&(_t.justDragged=!0,Re._mouseListenClick=!1,Re._touchListenClick=!1,Re._pointerListenClick=!1,t.dragStatus=\"stopped\");const o=t.node.getLayer()||t.node instanceof Re.Stage&&t.node;o&&-1===e.indexOf(o)&&e.push(o)}),e.forEach(t=>{t.draw()})},_endDragAfter(n){_t._dragElements.forEach((e,t)=>{\"stopped\"===e.dragStatus&&e.node.fire(\"dragend\",{type:\"dragend\",target:e.node,evt:n},!0),\"dragging\"!==e.dragStatus&&_t._dragElements.delete(t)})}};Re.isBrowser&&(window.addEventListener(\"mouseup\",_t._endDragBefore,!0),window.addEventListener(\"touchend\",_t._endDragBefore,!0),window.addEventListener(\"mousemove\",_t._drag),window.addEventListener(\"touchmove\",_t._drag),window.addEventListener(\"mouseup\",_t._endDragAfter,!1),window.addEventListener(\"touchend\",_t._endDragAfter,!1));var Sf=\"absoluteOpacity\",Cf=\"allEventListeners\",is=\"absoluteTransform\",AM=\"absoluteScale\",_o=\"canvas\",pv=\"listening\",MM=\"mouseenter\",xM=\"mouseleave\",Ps=\"transform\",gv=\"visible\",nW=[\"xChange.konva\",\"yChange.konva\",\"scaleXChange.konva\",\"scaleYChange.konva\",\"skewXChange.konva\",\"skewYChange.konva\",\"rotationChange.konva\",\"offsetXChange.konva\",\"offsetYChange.konva\",\"transformsEnabledChange.konva\"].join(\" \");let iW=1;class me{constructor(e){this._id=iW++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(e),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(e){e!==Ps&&e!==is||!this._cache.get(e)?e?this._cache.delete(e):this._cache.clear():this._cache.get(e).dirty=!0}_getCache(e,t){var i=this._cache.get(e);return(void 0===i||(e===Ps||e===is)&&!0===i.dirty)&&(i=t.call(this),this._cache.set(e,i)),i}_calculate(e,t,i){if(!this._attachedDepsListeners.get(e)){const r=t.map(s=>s+\"Change.konva\").join(\" \");this.on(r,()=>{this._clearCache(e)}),this._attachedDepsListeners.set(e,!0)}return this._getCache(e,i)}_getCanvasCache(){return this._cache.get(_o)}_clearSelfAndDescendantCache(e){this._clearCache(e),e===is&&this.fire(\"absoluteTransformChange\")}clearCache(){if(this._cache.has(_o)){const{scene:e,filter:t,hit:i}=this._cache.get(_o);G.releaseCanvas(e,t,i),this._cache.delete(_o)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(e){var t=e||{},i={};(void 0===t.x||void 0===t.y||void 0===t.width||void 0===t.height)&&(i=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()}));var r=Math.ceil(t.width||i.width),s=Math.ceil(t.height||i.height),o=t.pixelRatio,a=void 0===t.x?Math.floor(i.x):t.x,c=void 0===t.y?Math.floor(i.y):t.y,l=t.offset||0,u=t.drawBorder||!1,h=t.hitCanvasPixelRatio||1;if(r&&s){a-=l,c-=l;var d=new Xa({pixelRatio:o,width:r+=2*l+1,height:s+=2*l+1}),p=new Xa({pixelRatio:o,width:0,height:0}),f=new fv({pixelRatio:h,width:r,height:s}),m=d.getContext(),v=f.getContext();return f.isCache=!0,d.isCache=!0,this._cache.delete(_o),this._filterUpToDate=!1,!1===t.imageSmoothingEnabled&&(d.getContext()._context.imageSmoothingEnabled=!1,p.getContext()._context.imageSmoothingEnabled=!1),m.save(),v.save(),m.translate(-a,-c),v.translate(-a,-c),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Sf),this._clearSelfAndDescendantCache(AM),this.drawScene(d,this),this.drawHit(f,this),this._isUnderCache=!1,m.restore(),v.restore(),u&&(m.save(),m.beginPath(),m.rect(0,0,r,s),m.closePath(),m.setAttr(\"strokeStyle\",\"red\"),m.setAttr(\"lineWidth\",5),m.stroke(),m.restore()),this._cache.set(_o,{scene:d,filter:p,hit:f,x:a,y:c}),this._requestDraw(),this}G.error(\"Can not cache the node. Width or height of the node equals 0. Caching is skipped.\")}isCached(){return this._cache.has(_o)}getClientRect(e){throw new Error('abstract \"getClientRect\" method call')}_transformedRect(e,t){var r,s,o,a,i=[{x:e.x,y:e.y},{x:e.x+e.width,y:e.y},{x:e.x+e.width,y:e.y+e.height},{x:e.x,y:e.y+e.height}],c=this.getAbsoluteTransform(t);return i.forEach(function(l){var u=c.point(l);void 0===r&&(r=o=u.x,s=a=u.y),r=Math.min(r,u.x),s=Math.min(s,u.y),o=Math.max(o,u.x),a=Math.max(a,u.y)}),{x:r,y:s,width:o-r,height:a-s}}_drawCachedSceneCanvas(e){e.save(),e._applyOpacity(this),e._applyGlobalCompositeOperation(this);const t=this._getCanvasCache();e.translate(t.x,t.y);var i=this._getCachedSceneCanvas(),r=i.pixelRatio;e.drawImage(i._canvas,0,0,i.width/r,i.height/r),e.restore()}_drawCachedHitCanvas(e){var t=this._getCanvasCache(),i=t.hit;e.save(),e.translate(t.x,t.y),e.drawImage(i._canvas,0,0,i.width/i.pixelRatio,i.height/i.pixelRatio),e.restore()}_getCachedSceneCanvas(){var o,a,c,l,e=this.filters(),t=this._getCanvasCache(),i=t.scene,r=t.filter,s=r.getContext();if(e){if(!this._filterUpToDate){var u=i.pixelRatio;r.setSize(i.width/i.pixelRatio,i.height/i.pixelRatio);try{for(o=e.length,s.clear(),s.drawImage(i._canvas,0,0,i.getWidth()/u,i.getHeight()/u),a=s.getImageData(0,0,r.getWidth(),r.getHeight()),c=0;c<o;c++)\"function\"==typeof(l=e[c])?(l.call(this,a),s.putImageData(a,0,0)):G.error(\"Filter should be type of function, but got \"+typeof l+\" instead. Please check correct filters\")}catch(h){G.error(\"Unable to apply filter. \"+h.message+\" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.\")}this._filterUpToDate=!0}return r}return i}on(e,t){if(this._cache&&this._cache.delete(Cf),3===arguments.length)return this._delegate.apply(this,arguments);var s,a,c,l,i=e.split(\" \"),r=i.length;for(s=0;s<r;s++)l=(a=i[s].split(\".\"))[1]||\"\",this.eventListeners[c=a[0]]||(this.eventListeners[c]=[]),this.eventListeners[c].push({name:l,handler:t});return this}off(e,t){var s,o,c,l,u,i=(e||\"\").split(\" \"),r=i.length;if(this._cache&&this._cache.delete(Cf),!e)for(o in this.eventListeners)this._off(o);for(s=0;s<r;s++)if(u=(c=i[s].split(\".\"))[1],l=c[0])this.eventListeners[l]&&this._off(l,u,t);else for(o in this.eventListeners)this._off(o,u,t);return this}dispatchEvent(e){return this.fire(e.type,{target:this,type:e.type,evt:e}),this}addEventListener(e,t){return this.on(e,function(i){t.call(this,i.evt)}),this}removeEventListener(e){return this.off(e),this}_delegate(e,t,i){var r=this;this.on(e,function(s){for(var o=s.target.findAncestors(t,!0,r),a=0;a<o.length;a++)(s=G.cloneObject(s)).currentTarget=o[a],i.call(o[a],s)})}remove(){return this.isDragging()&&this.stopDrag(),_t._dragElements.delete(this._id),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(is),this._clearSelfAndDescendantCache(Sf),this._clearSelfAndDescendantCache(AM),this._clearSelfAndDescendantCache(\"stage\"),this._clearSelfAndDescendantCache(gv),this._clearSelfAndDescendantCache(pv)}_remove(){this._clearCaches();var e=this.getParent();e&&e.children&&(e.children.splice(this.index,1),e._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(e){var t=\"get\"+G._capitalize(e);return G._isFunction(this[t])?this[t]():this.attrs[e]}getAncestors(){for(var e=this.getParent(),t=[];e;)t.push(e),e=e.getParent();return t}getAttrs(){return this.attrs||{}}setAttrs(e){return this._batchTransformChanges(()=>{var t,i;if(!e)return this;for(t in e)\"children\"!==t&&(i=\"set\"+G._capitalize(t),G._isFunction(this[i])?this[i](e[t]):this._setAttr(t,e[t]))}),this}isListening(){return this._getCache(pv,this._isListening)}_isListening(e){if(!this.listening())return!1;const i=this.getParent();return!i||i===e||this===e||i._isListening(e)}isVisible(){return this._getCache(gv,this._isVisible)}_isVisible(e){if(!this.visible())return!1;const i=this.getParent();return!i||i===e||this===e||i._isVisible(e)}shouldDrawHit(e,t=!1){if(e)return this._isVisible(e)&&this._isListening(e);var i=this.getLayer(),r=!1;_t._dragElements.forEach(o=>{\"dragging\"===o.dragStatus&&(\"Stage\"===o.node.nodeType||o.node.getLayer()===i)&&(r=!0)});var s=!t&&!Re.hitOnDragEnabled&&r;return this.isListening()&&this.isVisible()&&!s}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var r,s,o,a,e=this.getDepth(),t=this,i=0;return\"Stage\"!==t.nodeType&&function c(l){for(r=[],s=l.length,o=0;o<s;o++)i++,\"Shape\"!==(a=l[o]).nodeType&&(r=r.concat(a.getChildren().slice())),a._id===t._id&&(o=s);r.length>0&&r[0].getDepth()<=e&&c(r)}(t.getStage().getChildren()),i}getDepth(){for(var e=0,t=this.parent;t;)e++,t=t.parent;return e}_batchTransformChanges(e){this._batchingTransformChange=!0,e(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(Ps),this._clearSelfAndDescendantCache(is)),this._needClearTransformCache=!1}setPosition(e){return this._batchTransformChanges(()=>{this.x(e.x),this.y(e.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){if(!this.getStage())return null;var e=this.getStage().getPointerPosition();if(!e)return null;var t=this.getAbsoluteTransform().copy();return t.invert(),t.point(e)}getAbsolutePosition(e){let t=!1,i=this.parent;for(;i;){if(i.isCached()){t=!0;break}i=i.parent}t&&!e&&(e=!0);var r=this.getAbsoluteTransform(e).getMatrix(),s=new Ci,o=this.offset();return s.m=r.slice(),s.translate(o.x,o.y),s.getTranslation()}setAbsolutePosition(e){var t=this._clearTransform();this.attrs.x=t.x,this.attrs.y=t.y,delete t.x,delete t.y,this._clearCache(Ps);var i=this._getAbsoluteTransform().copy();return i.invert(),i.translate(e.x,e.y),e={x:this.attrs.x+i.getTranslation().x,y:this.attrs.y+i.getTranslation().y},this._setTransform(t),this.setPosition({x:e.x,y:e.y}),this._clearCache(Ps),this._clearSelfAndDescendantCache(is),this}_setTransform(e){var t;for(t in e)this.attrs[t]=e[t]}_clearTransform(){var e={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,e}move(e){var t=e.x,i=e.y,r=this.x(),s=this.y();return void 0!==t&&(r+=t),void 0!==i&&(s+=i),this.setPosition({x:r,y:s}),this}_eachAncestorReverse(e,t){var s,o,i=[],r=this.getParent();if(!t||t._id!==this._id){for(i.unshift(this);r&&(!t||r._id!==t._id);)i.unshift(r),r=r.parent;for(s=i.length,o=0;o<s;o++)e(i[o])}}rotate(e){return this.rotation(this.rotation()+e),this}moveToTop(){if(!this.parent)return G.warn(\"Node has no parent. moveToTop function is ignored.\"),!1;var e=this.index;return e<this.parent.getChildren().length-1&&(this.parent.children.splice(e,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0)}moveUp(){if(!this.parent)return G.warn(\"Node has no parent. moveUp function is ignored.\"),!1;var e=this.index;return e<this.parent.getChildren().length-1&&(this.parent.children.splice(e,1),this.parent.children.splice(e+1,0,this),this.parent._setChildrenIndices(),!0)}moveDown(){if(!this.parent)return G.warn(\"Node has no parent. moveDown function is ignored.\"),!1;var e=this.index;return e>0&&(this.parent.children.splice(e,1),this.parent.children.splice(e-1,0,this),this.parent._setChildrenIndices(),!0)}moveToBottom(){if(!this.parent)return G.warn(\"Node has no parent. moveToBottom function is ignored.\"),!1;var e=this.index;return e>0&&(this.parent.children.splice(e,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0)}setZIndex(e){return this.parent?((e<0||e>=this.parent.children.length)&&G.warn(\"Unexpected value \"+e+\" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to \"+(this.parent.children.length-1)+\".\"),this.parent.children.splice(this.index,1),this.parent.children.splice(e,0,this),this.parent._setChildrenIndices(),this):(G.warn(\"Node has no parent. zIndex parameter is ignored.\"),this)}getAbsoluteOpacity(){return this._getCache(Sf,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var e=this.opacity(),t=this.getParent();return t&&!t._isUnderCache&&(e*=t.getAbsoluteOpacity()),e}moveTo(e){return this.getParent()!==e&&(this._remove(),e.add(this)),this}toObject(){var i,r,s,o,e={},t=this.getAttrs();for(i in e.attrs={},t)(!G.isObject(r=t[i])||G._isPlainObject(r)||G._isArray(r))&&(s=\"function\"==typeof this[i]&&this[i],delete t[i],o=s?s.call(this):null,t[i]=r,o!==r&&(e.attrs[i]=r));return e.className=this.getClassName(),G._prepareToStringify(e)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(e,t,i){var r=[];t&&this._isMatch(e)&&r.push(this);for(var s=this.parent;s;){if(s===i)return r;s._isMatch(e)&&r.push(s),s=s.parent}return r}isAncestorOf(e){return!1}findAncestor(e,t,i){return this.findAncestors(e,t,i)[0]}_isMatch(e){if(!e)return!1;if(\"function\"==typeof e)return e(this);var r,s,t=e.replace(/ /g,\"\").split(\",\"),i=t.length;for(r=0;r<i;r++)if(G.isValidSelector(s=t[r])||(G.warn('Selector \"'+s+'\" is invalid. Allowed selectors examples are \"#foo\", \".bar\" or \"Group\".'),G.warn('If you have a custom shape with such className, please change it to start with upper letter like \"Triangle\".'),G.warn(\"Konva is awesome, right?\")),\"#\"===s.charAt(0)){if(this.id()===s.slice(1))return!0}else if(\".\"===s.charAt(0)){if(this.hasName(s.slice(1)))return!0}else if(this.className===s||this.nodeType===s)return!0;return!1}getLayer(){var e=this.getParent();return e?e.getLayer():null}getStage(){return this._getCache(\"stage\",this._getStage)}_getStage(){var e=this.getParent();if(e)return e.getStage()}fire(e,t={},i){return t.target=t.target||this,i?this._fireAndBubble(e,t):this._fire(e,t),this}getAbsoluteTransform(e){return e?this._getAbsoluteTransform(e):this._getCache(is,this._getAbsoluteTransform)}_getAbsoluteTransform(e){var t;if(e)return t=new Ci,this._eachAncestorReverse(function(r){var s=r.transformsEnabled();\"all\"===s?t.multiply(r.getTransform()):\"position\"===s&&t.translate(r.x()-r.offsetX(),r.y()-r.offsetY())},e),t;t=this._cache.get(is)||new Ci,this.parent?this.parent.getAbsoluteTransform().copyInto(t):t.reset();var i=this.transformsEnabled();return\"all\"===i?t.multiply(this.getTransform()):\"position\"===i&&t.translate((this.attrs.x||0)-(this.attrs.offsetX||0),(this.attrs.y||0)-(this.attrs.offsetY||0)),t.dirty=!1,t}getAbsoluteScale(e){for(var t=this;t;)t._isUnderCache&&(e=t),t=t.getParent();const r=this.getAbsoluteTransform(e).decompose();return{x:r.scaleX,y:r.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(Ps,this._getTransform)}_getTransform(){var e,t,i=this._cache.get(Ps)||new Ci;i.reset();var r=this.x(),s=this.y(),o=Re.getAngle(this.rotation()),a=null!==(e=this.attrs.scaleX)&&void 0!==e?e:1,c=null!==(t=this.attrs.scaleY)&&void 0!==t?t:1,l=this.attrs.skewX||0,u=this.attrs.skewY||0,h=this.attrs.offsetX||0,d=this.attrs.offsetY||0;return(0!==r||0!==s)&&i.translate(r,s),0!==o&&i.rotate(o),(0!==l||0!==u)&&i.skew(l,u),(1!==a||1!==c)&&i.scale(a,c),(0!==h||0!==d)&&i.translate(-1*h,-1*d),i.dirty=!1,i}clone(e){var i,r,s,o,a,t=G.cloneObject(this.attrs);for(i in e)t[i]=e[i];var c=new this.constructor(t);for(i in this.eventListeners)for(s=(r=this.eventListeners[i]).length,o=0;o<s;o++)(a=r[o]).name.indexOf(\"konva\")<0&&(c.eventListeners[i]||(c.eventListeners[i]=[]),c.eventListeners[i].push(a));return c}_toKonvaCanvas(e){e=e||{};var t=this.getClientRect(),i=this.getStage(),r=void 0!==e.x?e.x:Math.floor(t.x),s=void 0!==e.y?e.y:Math.floor(t.y),o=e.pixelRatio||1,a=new Xa({width:e.width||Math.ceil(t.width)||(i?i.width():0),height:e.height||Math.ceil(t.height)||(i?i.height():0),pixelRatio:o}),c=a.getContext();return!1===e.imageSmoothingEnabled&&(c._context.imageSmoothingEnabled=!1),c.save(),(r||s)&&c.translate(-1*r,-1*s),this.drawScene(a),c.restore(),a}toCanvas(e){return this._toKonvaCanvas(e)._canvas}toDataURL(e){var t=(e=e||{}).mimeType||null,i=e.quality||null,r=this._toKonvaCanvas(e).toDataURL(t,i);return e.callback&&e.callback(r),r}toImage(e){return new Promise((t,i)=>{try{const r=e?.callback;r&&delete e.callback,G._urlToImage(this.toDataURL(e),function(s){t(s),r?.(s)})}catch(r){i(r)}})}toBlob(e){return new Promise((t,i)=>{try{const r=e?.callback;r&&delete e.callback,this.toCanvas(e).toBlob(s=>{t(s),r?.(s)})}catch(r){i(r)}})}setSize(e){return this.width(e.width),this.height(e.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return void 0!==this.attrs.dragDistance?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Re.dragDistance}_off(e,t,i){var s,o,r=this.eventListeners[e];for(s=0;s<r.length;s++)if(!(\"konva\"===(o=r[s].name)&&\"konva\"!==t||t&&o!==t||i&&i!==r[s].handler)){if(r.splice(s,1),0===r.length){delete this.eventListeners[e];break}s--}}_fireChangeEvent(e,t,i){this._fire(e+\"Change\",{oldVal:t,newVal:i})}addName(e){if(!this.hasName(e)){var t=this.name();this.name(t?t+\" \"+e:e)}return this}hasName(e){if(!e)return!1;const t=this.name();return!!t&&-1!==(t||\"\").split(/\\s/g).indexOf(e)}removeName(e){var t=(this.name()||\"\").split(/\\s/g),i=t.indexOf(e);return-1!==i&&(t.splice(i,1),this.name(t.join(\" \"))),this}setAttr(e,t){var i=this[\"set\"+G._capitalize(e)];return G._isFunction(i)?i.call(this,t):this._setAttr(e,t),this}_requestDraw(){if(Re.autoDrawEnabled){const e=this.getLayer()||this.getStage();e?.batchDraw()}}_setAttr(e,t){var i=this.attrs[e];i===t&&!G.isObject(t)||(null==t?delete this.attrs[e]:this.attrs[e]=t,this._shouldFireChangeEvents&&this._fireChangeEvent(e,i,t),this._requestDraw())}_setComponentAttr(e,t,i){var r;void 0!==i&&((r=this.attrs[e])||(this.attrs[e]=this.getAttr(e)),this.attrs[e][t]=i,this._fireChangeEvent(e,r,i))}_fireAndBubble(e,t,i){if(t&&\"Shape\"===this.nodeType&&(t.target=this),e!==MM&&e!==xM||!(i&&(this===i||this.isAncestorOf&&this.isAncestorOf(i))||\"Stage\"===this.nodeType&&!i)){this._fire(e,t);var s=(e===MM||e===xM)&&i&&i.isAncestorOf&&i.isAncestorOf(this)&&!i.isAncestorOf(this.parent);(t&&!t.cancelBubble||!t)&&this.parent&&this.parent.isListening()&&!s&&(i&&i.parent?this._fireAndBubble.call(this.parent,e,t,i):this._fireAndBubble.call(this.parent,e,t))}}_getProtoListeners(e){let t=this._cache.get(Cf);if(!t){t={};let r=Object.getPrototypeOf(this);for(;r;)if(r.eventListeners){for(var i in r.eventListeners)t[i]=r.eventListeners[i].concat(t[i]||[]);r=Object.getPrototypeOf(r)}else r=Object.getPrototypeOf(r);this._cache.set(Cf,t)}return t[e]}_fire(e,t){(t=t||{}).currentTarget=this,t.type=e;const i=this._getProtoListeners(e);if(i)for(var r=0;r<i.length;r++)i[r].handler.call(this,t);const s=this.eventListeners[e];if(s)for(r=0;r<s.length;r++)s[r].handler.call(this,t)}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(e){var t=e?e.pointerId:void 0,i=this.getStage(),r=this.getAbsolutePosition(),s=i._getPointerById(t)||i._changedPointerPositions[0]||r;_t._dragElements.set(this._id,{node:this,startPointerPos:s,offset:{x:s.x-r.x,y:s.y-r.y},dragStatus:\"ready\",pointerId:t})}startDrag(e,t=!0){_t._dragElements.has(this._id)||this._createDragElement(e),_t._dragElements.get(this._id).dragStatus=\"dragging\",this.fire(\"dragstart\",{type:\"dragstart\",target:this,evt:e&&e.evt},t)}_setDragPosition(e,t){const i=this.getStage()._getPointerById(t.pointerId);if(i){var r={x:i.x-t.offset.x,y:i.y-t.offset.y},s=this.dragBoundFunc();if(void 0!==s){const o=s.call(this,r,e);o?r=o:G.warn(\"dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.\")}(!this._lastPos||this._lastPos.x!==r.x||this._lastPos.y!==r.y)&&(this.setAbsolutePosition(r),this._requestDraw()),this._lastPos=r}}stopDrag(e){const t=_t._dragElements.get(this._id);t&&(t.dragStatus=\"stopped\"),_t._endDragBefore(e),_t._endDragAfter(e)}setDraggable(e){this._setAttr(\"draggable\",e),this._dragChange()}isDragging(){const e=_t._dragElements.get(this._id);return!!e&&\"dragging\"===e.dragStatus}_listenDrag(){this._dragCleanup(),this.on(\"mousedown.konva touchstart.konva\",function(e){if((void 0===e.evt.button||Re.dragButtons.indexOf(e.evt.button)>=0)&&!this.isDragging()){var r=!1;_t._dragElements.forEach(s=>{this.isAncestorOf(s.node)&&(r=!0)}),r||this._createDragElement(e)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{if(this._dragCleanup(),!this.getStage())return;const t=_t._dragElements.get(this._id),r=t&&\"ready\"===t.dragStatus;t&&\"dragging\"===t.dragStatus?this.stopDrag():r&&_t._dragElements.delete(this._id)}}_dragCleanup(){this.off(\"mousedown.konva\"),this.off(\"touchstart.konva\")}isClientRectOnScreen(e={x:0,y:0}){const t=this.getStage();if(!t)return!1;const i={x:-e.x,y:-e.y,width:t.width()+2*e.x,height:t.height()+2*e.y};return G.haveIntersection(i,this.getClientRect())}static create(e,t){return G._isString(e)&&(e=JSON.parse(e)),this._createNode(e,t)}static _createNode(e,t){var s,o,a,i=me.prototype.getClassName.call(e),r=e.children;if(t&&(e.attrs.container=t),Re[i]||(G.warn('Can not find a node with class name \"'+i+'\". Fallback to \"Shape\".'),i=\"Shape\"),s=new(0,Re[i])(e.attrs),r)for(o=r.length,a=0;a<o;a++)s.add(me._createNode(r[a]));return s}}me.prototype.nodeType=\"Node\",me.prototype._attrsAffectingSize=[],me.prototype.eventListeners={},me.prototype.on.call(me.prototype,nW,function(){this._batchingTransformChange?this._needClearTransformCache=!0:(this._clearCache(Ps),this._clearSelfAndDescendantCache(is))}),me.prototype.on.call(me.prototype,\"visibleChange.konva\",function(){this._clearSelfAndDescendantCache(gv)}),me.prototype.on.call(me.prototype,\"listeningChange.konva\",function(){this._clearSelfAndDescendantCache(pv)}),me.prototype.on.call(me.prototype,\"opacityChange.konva\",function(){this._clearSelfAndDescendantCache(Sf)});const Bt=R.addGetterSetter;Bt(me,\"zIndex\"),Bt(me,\"absolutePosition\"),Bt(me,\"position\"),Bt(me,\"x\",0,_e()),Bt(me,\"y\",0,_e()),Bt(me,\"globalCompositeOperation\",\"source-over\",Ya()),Bt(me,\"opacity\",1,_e()),Bt(me,\"name\",\"\",Ya()),Bt(me,\"id\",\"\",Ya()),Bt(me,\"rotation\",0,_e()),R.addComponentsGetterSetter(me,\"scale\",[\"x\",\"y\"]),Bt(me,\"scaleX\",1,_e()),Bt(me,\"scaleY\",1,_e()),R.addComponentsGetterSetter(me,\"skew\",[\"x\",\"y\"]),Bt(me,\"skewX\",0,_e()),Bt(me,\"skewY\",0,_e()),R.addComponentsGetterSetter(me,\"offset\",[\"x\",\"y\"]),Bt(me,\"offsetX\",0,_e()),Bt(me,\"offsetY\",0,_e()),Bt(me,\"dragDistance\",null,_e()),Bt(me,\"width\",0,_e()),Bt(me,\"height\",0,_e()),Bt(me,\"listening\",!0,or()),Bt(me,\"preventDefault\",!0,or()),Bt(me,\"filters\",null,function(n){return this._filterUpToDate=!1,n}),Bt(me,\"visible\",!0,or()),Bt(me,\"transformsEnabled\",\"all\",Ya()),Bt(me,\"size\"),Bt(me,\"dragBoundFunc\"),Bt(me,\"draggable\",!1,or()),R.backCompat(me,{rotateDeg:\"rotate\",setRotationDeg:\"setRotation\",getRotationDeg:\"getRotation\"});class Di extends me{constructor(){super(...arguments),this.children=[]}getChildren(e){if(!e)return this.children||[];var i=[];return(this.children||[]).forEach(function(r){e(r)&&i.push(r)}),i}hasChildren(){return this.getChildren().length>0}removeChildren(){return this.getChildren().forEach(e=>{e.parent=null,e.index=0,e.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(e=>{e.parent=null,e.index=0,e.destroy()}),this.children=[],this._requestDraw(),this}add(...e){if(0===e.length)return this;if(e.length>1){for(var t=0;t<e.length;t++)this.add(e[t]);return this}const i=e[0];return i.getParent()?(i.moveTo(this),this):(this._validateAdd(i),i.index=this.getChildren().length,i.parent=this,i._clearCaches(),this.getChildren().push(i),this._fire(\"add\",{child:i}),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(e){return this._generalFind(e,!1)}findOne(e){var t=this._generalFind(e,!0);return t.length>0?t[0]:void 0}_generalFind(e,t){var i=[];return this._descendants(r=>{const s=r._isMatch(e);return s&&i.push(r),!(!s||!t)}),i}_descendants(e){let t=!1;const i=this.getChildren();for(const r of i){if(t=e(r),t)return!0;if(r.hasChildren()&&(t=r._descendants(e),t))return!0}return!1}toObject(){var e=me.prototype.toObject.call(this);return e.children=[],this.getChildren().forEach(t=>{e.children.push(t.toObject())}),e}isAncestorOf(e){for(var t=e.getParent();t;){if(t._id===this._id)return!0;t=t.getParent()}return!1}clone(e){var t=me.prototype.clone.call(this,e);return this.getChildren().forEach(function(i){t.add(i.clone())}),t}getAllIntersections(e){var t=[];return this.find(\"Shape\").forEach(function(i){i.isVisible()&&i.intersects(e)&&t.push(i)}),t}_clearSelfAndDescendantCache(e){var t;super._clearSelfAndDescendantCache(e),!this.isCached()&&(null===(t=this.children)||void 0===t||t.forEach(function(i){i._clearSelfAndDescendantCache(e)}))}_setChildrenIndices(){var e;null===(e=this.children)||void 0===e||e.forEach(function(t,i){t.index=i}),this._requestDraw()}drawScene(e,t){var i=this.getLayer(),r=e||i&&i.getCanvas(),s=r&&r.getContext(),o=this._getCanvasCache(),a=o&&o.scene,c=r&&r.isCache;if(!this.isVisible()&&!c)return this;if(a){s.save();var l=this.getAbsoluteTransform(t).getMatrix();s.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedSceneCanvas(s),s.restore()}else this._drawChildren(\"drawScene\",r,t);return this}drawHit(e,t){if(!this.shouldDrawHit(t))return this;var i=this.getLayer(),r=e||i&&i.hitCanvas,s=r&&r.getContext(),o=this._getCanvasCache();if(o&&o.hit){s.save();var c=this.getAbsoluteTransform(t).getMatrix();s.transform(c[0],c[1],c[2],c[3],c[4],c[5]),this._drawCachedHitCanvas(s),s.restore()}else this._drawChildren(\"drawHit\",r,t);return this}_drawChildren(e,t,i){var r,s=t&&t.getContext(),o=this.clipWidth(),a=this.clipHeight(),c=this.clipFunc(),l=o&&a||c;const u=i===this;if(l){s.save();var h=this.getAbsoluteTransform(i),d=h.getMatrix();if(s.transform(d[0],d[1],d[2],d[3],d[4],d[5]),s.beginPath(),c)c.call(this,s,this);else{var p=this.clipX(),f=this.clipY();s.rect(p,f,o,a)}s.clip(),d=h.copy().invert().getMatrix(),s.transform(d[0],d[1],d[2],d[3],d[4],d[5])}var m=!u&&\"source-over\"!==this.globalCompositeOperation()&&\"drawScene\"===e;m&&(s.save(),s._applyGlobalCompositeOperation(this)),null===(r=this.children)||void 0===r||r.forEach(function(v){v[e](t,i)}),m&&s.restore(),l&&s.restore()}getClientRect(e){var t,s,o,a,c,l,i=(e=e||{}).skipTransform,r=e.relativeTo,u=this;null===(t=this.children)||void 0===t||t.forEach(function(m){if(m.visible()){var v=m.getClientRect({relativeTo:u,skipShadow:e.skipShadow,skipStroke:e.skipStroke});0===v.width&&0===v.height||(void 0===s?(s=v.x,o=v.y,a=v.x+v.width,c=v.y+v.height):(s=Math.min(s,v.x),o=Math.min(o,v.y),a=Math.max(a,v.x+v.width),c=Math.max(c,v.y+v.height)))}});for(var h=this.find(\"Shape\"),d=!1,p=0;p<h.length;p++)if(h[p]._isVisible(this)){d=!0;break}return l=d&&void 0!==s?{x:s,y:o,width:a-s,height:c-o}:{x:0,y:0,width:0,height:0},i?l:this._transformedRect(l,r)}}R.addComponentsGetterSetter(Di,\"clip\",[\"x\",\"y\",\"width\",\"height\"]),R.addGetterSetter(Di,\"clipX\",void 0,_e()),R.addGetterSetter(Di,\"clipY\",void 0,_e()),R.addGetterSetter(Di,\"clipWidth\",void 0,_e()),R.addGetterSetter(Di,\"clipHeight\",void 0,_e()),R.addGetterSetter(Di,\"clipFunc\");const Zl=new Map,NM=void 0!==Re._global.PointerEvent;function _v(n){return Zl.get(n)}function mv(n){return{evt:n,pointerId:n.pointerId}}function kM(n,e){return Zl.get(n)===e}function LM(n,e){Ql(n),e.getStage()&&(Zl.set(n,e),NM&&e._fire(\"gotpointercapture\",mv(new PointerEvent(\"gotpointercapture\"))))}function Ql(n,e){const t=Zl.get(n);t&&(t.getStage(),Zl.delete(n),NM&&t._fire(\"lostpointercapture\",mv(new PointerEvent(\"lostpointercapture\"))))}var BM=\"mouseleave\",jM=\"mouseover\",VM=\"mouseenter\",zM=\"mousemove\",UM=\"mousedown\",HM=\"mouseup\",Jl=\"pointermove\",eu=\"pointerdown\",Za=\"pointerup\",tu=\"pointercancel\",Tf=\"pointerout\",If=\"pointerleave\",Af=\"pointerover\",Mf=\"pointerenter\",yv=\"contextmenu\",GM=\"touchstart\",$M=\"touchend\",WM=\"touchmove\",qM=\"touchcancel\",vv=\"wheel\",lW=[[VM,\"_pointerenter\"],[UM,\"_pointerdown\"],[zM,\"_pointermove\"],[HM,\"_pointerup\"],[BM,\"_pointerleave\"],[GM,\"_pointerdown\"],[WM,\"_pointermove\"],[$M,\"_pointerup\"],[qM,\"_pointercancel\"],[jM,\"_pointerover\"],[vv,\"_wheel\"],[yv,\"_contextmenu\"],[eu,\"_pointerdown\"],[Jl,\"_pointermove\"],[Za,\"_pointerup\"],[tu,\"_pointercancel\"],[\"lostpointercapture\",\"_lostpointercapture\"]];const wv={mouse:{[Tf]:\"mouseout\",[If]:BM,[Af]:jM,[Mf]:VM,[Jl]:zM,[eu]:UM,[Za]:HM,[tu]:\"mousecancel\",pointerclick:\"click\",pointerdblclick:\"dblclick\"},touch:{[Tf]:\"touchout\",[If]:\"touchleave\",[Af]:\"touchover\",[Mf]:\"touchenter\",[Jl]:WM,[eu]:GM,[Za]:$M,[tu]:qM,pointerclick:\"tap\",pointerdblclick:\"dbltap\"},pointer:{[Tf]:Tf,[If]:If,[Af]:Af,[Mf]:Mf,[Jl]:Jl,[eu]:eu,[Za]:Za,[tu]:tu,pointerclick:\"pointerclick\",pointerdblclick:\"pointerdblclick\"}},nu=n=>n.indexOf(\"pointer\")>=0?\"pointer\":n.indexOf(\"touch\")>=0?\"touch\":\"mouse\",Qa=n=>{const e=nu(n);return\"pointer\"===e?Re.pointerEventsEnabled&&wv.pointer:\"touch\"===e?wv.touch:\"mouse\"===e?wv.mouse:void 0};function KM(n={}){return(n.clipFunc||n.clipWidth||n.clipHeight)&&G.warn(\"Stage does not support clipping. Please use clip for Layers or Groups.\"),n}const xf=[];class iu extends Di{constructor(e){super(KM(e)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),xf.push(this),this.on(\"widthChange.konva heightChange.konva\",this._resizeDOM),this.on(\"visibleChange.konva\",this._checkVisibility),this.on(\"clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva\",()=>{KM(this.attrs)}),this._checkVisibility()}_validateAdd(e){const t=\"Layer\"===e.getType(),i=\"FastLayer\"===e.getType();t||i||G.throw(\"You may only add layers to the stage.\")}_checkVisibility(){if(!this.content)return;const e=this.visible()?\"\":\"none\";this.content.style.display=e}setContainer(e){if(\"string\"==typeof e){if(\".\"===e.charAt(0)){var t=e.slice(1);e=document.getElementsByClassName(t)[0]}else{var i;i=\"#\"!==e.charAt(0)?e:e.slice(1),e=document.getElementById(i)}if(!e)throw\"Can not find container in document with id \"+i}return this._setAttr(\"container\",e),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),e.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var i,e=this.children,t=e.length;for(i=0;i<t;i++)e[i].clear();return this}clone(e){return e||(e={}),e.container=typeof document<\"u\"&&document.createElement(\"div\"),Di.prototype.clone.call(this,e)}destroy(){super.destroy();var e=this.content;e&&G._isInDocument(e)&&this.container().removeChild(e);var t=xf.indexOf(this);return t>-1&&xf.splice(t,1),G.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const e=this._pointerPositions[0]||this._changedPointerPositions[0];return e?{x:e.x,y:e.y}:(G.warn(\"Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);\"),null)}_getPointerById(e){return this._pointerPositions.find(t=>t.id===e)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(e){(e=e||{}).x=e.x||0,e.y=e.y||0,e.width=e.width||this.width(),e.height=e.height||this.height();var t=new Xa({width:e.width,height:e.height,pixelRatio:e.pixelRatio||1}),i=t.getContext()._context,r=this.children;return(e.x||e.y)&&i.translate(-1*e.x,-1*e.y),r.forEach(function(s){if(s.isVisible()){var o=s._toKonvaCanvas(e);i.drawImage(o._canvas,e.x,e.y,o.getWidth()/o.getPixelRatio(),o.getHeight()/o.getPixelRatio())}}),t}getIntersection(e){if(!e)return null;var s,t=this.children;for(s=t.length-1;s>=0;s--){const o=t[s].getIntersection(e);if(o)return o}return null}_resizeDOM(){var e=this.width(),t=this.height();this.content&&(this.content.style.width=e+\"px\",this.content.style.height=t+\"px\"),this.bufferCanvas.setSize(e,t),this.bufferHitCanvas.setSize(e,t),this.children.forEach(i=>{i.setSize({width:e,height:t}),i.draw()})}add(e,...t){if(arguments.length>1){for(var i=0;i<arguments.length;i++)this.add(arguments[i]);return this}super.add(e);var r=this.children.length;return r>5&&G.warn(\"The stage has \"+r+\" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.\"),e.setSize({width:this.width(),height:this.height()}),e.draw(),Re.isBrowser&&this.content.appendChild(e.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(e){return kM(e,this)}setPointerCapture(e){LM(e,this)}releaseCapture(e){Ql(e)}getLayers(){return this.children}_bindContentEvents(){Re.isBrowser&&lW.forEach(([e,t])=>{this.content.addEventListener(e,i=>{this[t](i)},{passive:!1})})}_pointerenter(e){this.setPointersPositions(e);const t=Qa(e.type);this._fire(t.pointerenter,{evt:e,target:this,currentTarget:this})}_pointerover(e){this.setPointersPositions(e);const t=Qa(e.type);this._fire(t.pointerover,{evt:e,target:this,currentTarget:this})}_getTargetShape(e){let t=this[e+\"targetShape\"];return t&&!t.getStage()&&(t=null),t}_pointerleave(e){const t=Qa(e.type),i=nu(e.type);if(t){this.setPointersPositions(e);var r=this._getTargetShape(i),s=!_t.isDragging||Re.hitOnDragEnabled;r&&s?(r._fireAndBubble(t.pointerout,{evt:e}),r._fireAndBubble(t.pointerleave,{evt:e}),this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this[i+\"targetShape\"]=null):s&&(this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this._fire(t.pointerout,{evt:e,target:this,currentTarget:this})),this.pointerPos=void 0,this._pointerPositions=[]}}_pointerdown(e){const t=Qa(e.type),i=nu(e.type);if(t){this.setPointersPositions(e);var r=!1;this._changedPointerPositions.forEach(s=>{var o=this.getIntersection(s);if(_t.justDragged=!1,Re[\"_\"+i+\"ListenClick\"]=!0,!o||!o.isListening())return;Re.capturePointerEventsEnabled&&o.setPointerCapture(s.id),this[i+\"ClickStartShape\"]=o,o._fireAndBubble(t.pointerdown,{evt:e,pointerId:s.id}),r=!0;const c=e.type.indexOf(\"touch\")>=0;o.preventDefault()&&e.cancelable&&c&&e.preventDefault()}),r||this._fire(t.pointerdown,{evt:e,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(e){const t=Qa(e.type),i=nu(e.type);if(!t)return;if(_t.isDragging&&_t.node.preventDefault()&&e.cancelable&&e.preventDefault(),this.setPointersPositions(e),_t.isDragging&&!Re.hitOnDragEnabled)return;var s={};let o=!1;var a=this._getTargetShape(i);this._changedPointerPositions.forEach(c=>{const l=_v(c.id)||this.getIntersection(c),u=c.id,h={evt:e,pointerId:u};var d=a!==l;if(d&&a&&(a._fireAndBubble(t.pointerout,Object.assign({},h),l),a._fireAndBubble(t.pointerleave,Object.assign({},h),l)),l){if(s[l._id])return;s[l._id]=!0}l&&l.isListening()?(o=!0,d&&(l._fireAndBubble(t.pointerover,Object.assign({},h),a),l._fireAndBubble(t.pointerenter,Object.assign({},h),a),this[i+\"targetShape\"]=l),l._fireAndBubble(t.pointermove,Object.assign({},h))):a&&(this._fire(t.pointerover,{evt:e,target:this,currentTarget:this,pointerId:u}),this[i+\"targetShape\"]=null)}),o||this._fire(t.pointermove,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(e){const t=Qa(e.type),i=nu(e.type);if(!t)return;this.setPointersPositions(e);const r=this[i+\"ClickStartShape\"],s=this[i+\"ClickEndShape\"];var o={};let a=!1;this._changedPointerPositions.forEach(c=>{const l=_v(c.id)||this.getIntersection(c);if(l){if(l.releaseCapture(c.id),o[l._id])return;o[l._id]=!0}const u=c.id,h={evt:e,pointerId:u};let d=!1;Re[\"_\"+i+\"InDblClickWindow\"]?(d=!0,clearTimeout(this[i+\"DblTimeout\"])):_t.justDragged||(Re[\"_\"+i+\"InDblClickWindow\"]=!0,clearTimeout(this[i+\"DblTimeout\"])),this[i+\"DblTimeout\"]=setTimeout(function(){Re[\"_\"+i+\"InDblClickWindow\"]=!1},Re.dblClickWindow),l&&l.isListening()?(a=!0,this[i+\"ClickEndShape\"]=l,l._fireAndBubble(t.pointerup,Object.assign({},h)),Re[\"_\"+i+\"ListenClick\"]&&r&&r===l&&(l._fireAndBubble(t.pointerclick,Object.assign({},h)),d&&s&&s===l&&l._fireAndBubble(t.pointerdblclick,Object.assign({},h)))):(this[i+\"ClickEndShape\"]=null,Re[\"_\"+i+\"ListenClick\"]&&this._fire(t.pointerclick,{evt:e,target:this,currentTarget:this,pointerId:u}),d&&this._fire(t.pointerdblclick,{evt:e,target:this,currentTarget:this,pointerId:u}))}),a||this._fire(t.pointerup,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),Re[\"_\"+i+\"ListenClick\"]=!1,e.cancelable&&\"touch\"!==i&&e.preventDefault()}_contextmenu(e){this.setPointersPositions(e);var t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(yv,{evt:e}):this._fire(yv,{evt:e,target:this,currentTarget:this})}_wheel(e){this.setPointersPositions(e);var t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(vv,{evt:e}):this._fire(vv,{evt:e,target:this,currentTarget:this})}_pointercancel(e){this.setPointersPositions(e);const t=_v(e.pointerId)||this.getIntersection(this.getPointerPosition());t&&t._fireAndBubble(Za,mv(e)),Ql(e.pointerId)}_lostpointercapture(e){Ql(e.pointerId)}setPointersPositions(e){var t=this._getContentPosition(),i=null,r=null;void 0!==(e=e||window.event).touches?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(e.touches,s=>{this._pointerPositions.push({id:s.identifier,x:(s.clientX-t.left)/t.scaleX,y:(s.clientY-t.top)/t.scaleY})}),Array.prototype.forEach.call(e.changedTouches||e.touches,s=>{this._changedPointerPositions.push({id:s.identifier,x:(s.clientX-t.left)/t.scaleX,y:(s.clientY-t.top)/t.scaleY})})):(this.pointerPos={x:i=(e.clientX-t.left)/t.scaleX,y:r=(e.clientY-t.top)/t.scaleY},this._pointerPositions=[{x:i,y:r,id:G._getFirstPointerId(e)}],this._changedPointerPositions=[{x:i,y:r,id:G._getFirstPointerId(e)}])}_setPointerPosition(e){G.warn('Method _setPointerPosition is deprecated. Use \"stage.setPointersPositions(event)\" instead.'),this.setPointersPositions(e)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var e=this.content.getBoundingClientRect();return{top:e.top,left:e.left,scaleX:e.width/this.content.clientWidth||1,scaleY:e.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new Xa({width:this.width(),height:this.height()}),this.bufferHitCanvas=new fv({pixelRatio:1,width:this.width(),height:this.height()}),Re.isBrowser){var e=this.container();if(!e)throw\"Stage has no container. A container is required.\";e.innerHTML=\"\",this.content=document.createElement(\"div\"),this.content.style.position=\"relative\",this.content.style.userSelect=\"none\",this.content.className=\"konvajs-content\",this.content.setAttribute(\"role\",\"presentation\"),e.appendChild(this.content),this._resizeDOM()}}cache(){return G.warn(\"Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.\"),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(e){e.batchDraw()}),this}}iu.prototype.nodeType=\"Stage\",Jt(iu),R.addGetterSetter(iu,\"container\");var YM=\"hasShadow\",XM=\"shadowRGBA\",ZM=\"patternImage\",QM=\"linearGradient\",JM=\"radialGradient\";let Pf;function Ev(){return Pf||(Pf=G.createCanvasElement().getContext(\"2d\"),Pf)}const ru={};class de extends me{constructor(e){let t;for(super(e);t=G.getRandomColor(),!t||t in ru;);this.colorKey=t,ru[t]=this}getContext(){return G.warn(\"shape.getContext() method is deprecated. Please do not use it.\"),this.getLayer().getContext()}getCanvas(){return G.warn(\"shape.getCanvas() method is deprecated. Please do not use it.\"),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(YM,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&0!==this.shadowOpacity()&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(ZM,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){const t=Ev().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||\"repeat\");if(t&&t.setTransform){const i=new Ci;i.translate(this.fillPatternX(),this.fillPatternY()),i.rotate(Re.getAngle(this.fillPatternRotation())),i.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),i.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const r=i.getMatrix(),s=typeof DOMMatrix>\"u\"?{a:r[0],b:r[1],c:r[2],d:r[3],e:r[4],f:r[5]}:new DOMMatrix(r);t.setTransform(s)}return t}}_getLinearGradient(){return this._getCache(QM,this.__getLinearGradient)}__getLinearGradient(){var e=this.fillLinearGradientColorStops();if(e){for(var t=Ev(),i=this.fillLinearGradientStartPoint(),r=this.fillLinearGradientEndPoint(),s=t.createLinearGradient(i.x,i.y,r.x,r.y),o=0;o<e.length;o+=2)s.addColorStop(e[o],e[o+1]);return s}}_getRadialGradient(){return this._getCache(JM,this.__getRadialGradient)}__getRadialGradient(){var e=this.fillRadialGradientColorStops();if(e){for(var t=Ev(),i=this.fillRadialGradientStartPoint(),r=this.fillRadialGradientEndPoint(),s=t.createRadialGradient(i.x,i.y,this.fillRadialGradientStartRadius(),r.x,r.y,this.fillRadialGradientEndRadius()),o=0;o<e.length;o+=2)s.addColorStop(e[o],e[o+1]);return s}}getShadowRGBA(){return this._getCache(XM,this._getShadowRGBA)}_getShadowRGBA(){if(this.hasShadow()){var e=G.colorToRGBA(this.shadowColor());if(e)return\"rgba(\"+e.r+\",\"+e.g+\",\"+e.b+\",\"+e.a*(this.shadowOpacity()||1)+\")\"}}hasFill(){return this._calculate(\"hasFill\",[\"fillEnabled\",\"fill\",\"fillPatternImage\",\"fillLinearGradientColorStops\",\"fillRadialGradientColorStops\"],()=>this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate(\"hasStroke\",[\"strokeEnabled\",\"strokeWidth\",\"stroke\",\"strokeLinearGradientColorStops\"],()=>this.strokeEnabled()&&this.strokeWidth()&&!(!this.stroke()&&!this.strokeLinearGradientColorStops()))}hasHitStroke(){const e=this.hitStrokeWidth();return\"auto\"===e?this.hasStroke():this.strokeEnabled()&&!!e}intersects(e){var i=this.getStage().bufferHitCanvas;return i.getContext().clear(),this.drawHit(i,null,!0),i.context.getImageData(Math.round(e.x),Math.round(e.y),1,1).data[3]>0}destroy(){return me.prototype.destroy.call(this),delete ru[this.colorKey],delete this.colorKey,this}_useBufferCanvas(e){var t;if(!this.getStage()||null!==(t=this.attrs.perfectDrawEnabled)&&void 0!==t&&!t)return!1;const r=e||this.hasFill(),s=this.hasStroke(),o=1!==this.getAbsoluteOpacity();if(r&&s&&o)return!0;const a=this.hasShadow(),c=this.shadowForStrokeEnabled();return!!(r&&s&&a&&c)}setStrokeHitEnabled(e){G.warn(\"strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead.\"),this.hitStrokeWidth(e?\"auto\":0)}getStrokeHitEnabled(){return 0!==this.hitStrokeWidth()}getSelfRect(){var e=this.size();return{x:this._centroid?-e.width/2:0,y:this._centroid?-e.height/2:0,width:e.width,height:e.height}}getClientRect(e={}){const t=e.skipTransform,i=e.relativeTo,r=this.getSelfRect(),o=!e.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,a=r.width+o,c=r.height+o,l=!e.skipShadow&&this.hasShadow(),u=l?this.shadowOffsetX():0,h=l?this.shadowOffsetY():0,d=a+Math.abs(u),p=c+Math.abs(h),f=l&&this.shadowBlur()||0,C={width:d+2*f,height:p+2*f,x:-(o/2+f)+Math.min(u,0)+r.x,y:-(o/2+f)+Math.min(h,0)+r.y};return t?C:this._transformedRect(C,i)}drawScene(e,t){var u,h,i=this.getLayer(),r=e||i.getCanvas(),s=r.getContext(),o=this._getCanvasCache(),a=this.getSceneFunc(),c=this.hasShadow(),d=r.isCache,p=t===this;if(!this.isVisible()&&!p)return this;if(o){s.save();var f=this.getAbsoluteTransform(t).getMatrix();return s.transform(f[0],f[1],f[2],f[3],f[4],f[5]),this._drawCachedSceneCanvas(s),s.restore(),this}if(!a)return this;if(s.save(),this._useBufferCanvas()&&!d){(h=(u=this.getStage().bufferCanvas).getContext()).clear(),h.save(),h._applyLineJoin(this);var m=this.getAbsoluteTransform(t).getMatrix();h.transform(m[0],m[1],m[2],m[3],m[4],m[5]),a.call(this,h,this),h.restore();var v=u.pixelRatio;c&&s._applyShadow(this),s._applyOpacity(this),s._applyGlobalCompositeOperation(this),s.drawImage(u._canvas,0,0,u.width/v,u.height/v)}else s._applyLineJoin(this),p||(m=this.getAbsoluteTransform(t).getMatrix(),s.transform(m[0],m[1],m[2],m[3],m[4],m[5]),s._applyOpacity(this),s._applyGlobalCompositeOperation(this)),c&&s._applyShadow(this),a.call(this,s,this);return s.restore(),this}drawHit(e,t,i=!1){if(!this.shouldDrawHit(t,i))return this;var r=this.getLayer(),s=e||r.hitCanvas,o=s&&s.getContext(),a=this.hitFunc()||this.sceneFunc(),c=this._getCanvasCache(),l=c&&c.hit;if(this.colorKey||G.warn(\"Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()\"),l){o.save();var u=this.getAbsoluteTransform(t).getMatrix();return o.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._drawCachedHitCanvas(o),o.restore(),this}if(!a)return this;if(o.save(),o._applyLineJoin(this),this!==t){var d=this.getAbsoluteTransform(t).getMatrix();o.transform(d[0],d[1],d[2],d[3],d[4],d[5])}return a.call(this,o,this),o.restore(),this}drawHitFromCache(e=0){var c,l,u,h,d,t=this._getCanvasCache(),i=this._getCachedSceneCanvas(),r=t.hit,s=r.getContext(),o=r.getWidth(),a=r.getHeight();s.clear(),s.drawImage(i._canvas,0,0,o,a);try{for(u=(l=(c=s.getImageData(0,0,o,a)).data).length,h=G._hexToRgb(this.colorKey),d=0;d<u;d+=4)l[d+3]>e?(l[d]=h.r,l[d+1]=h.g,l[d+2]=h.b,l[d+3]=255):l[d+3]=0;s.putImageData(c,0,0)}catch(f){G.error(\"Unable to draw hit graph from cached scene canvas. \"+f.message)}return this}hasPointerCapture(e){return kM(e,this)}setPointerCapture(e){LM(e,this)}releaseCapture(e){Ql(e)}}de.prototype._fillFunc=function hW(n){n.fill()},de.prototype._strokeFunc=function dW(n){n.stroke()},de.prototype._fillFuncHit=function fW(n){n.fill()},de.prototype._strokeFuncHit=function pW(n){n.stroke()},de.prototype._centroid=!1,de.prototype.nodeType=\"Shape\",Jt(de),de.prototype.eventListeners={},de.prototype.on.call(de.prototype,\"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",function gW(){this._clearCache(YM)}),de.prototype.on.call(de.prototype,\"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva\",function _W(){this._clearCache(XM)}),de.prototype.on.call(de.prototype,\"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva\",function mW(){this._clearCache(ZM)}),de.prototype.on.call(de.prototype,\"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva\",function yW(){this._clearCache(QM)}),de.prototype.on.call(de.prototype,\"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva\",function vW(){this._clearCache(JM)}),R.addGetterSetter(de,\"stroke\",void 0,DM()),R.addGetterSetter(de,\"strokeWidth\",2,_e()),R.addGetterSetter(de,\"fillAfterStrokeEnabled\",!1),R.addGetterSetter(de,\"hitStrokeWidth\",\"auto\",dv()),R.addGetterSetter(de,\"strokeHitEnabled\",!0,or()),R.addGetterSetter(de,\"perfectDrawEnabled\",!0,or()),R.addGetterSetter(de,\"shadowForStrokeEnabled\",!0,or()),R.addGetterSetter(de,\"lineJoin\"),R.addGetterSetter(de,\"lineCap\"),R.addGetterSetter(de,\"sceneFunc\"),R.addGetterSetter(de,\"hitFunc\"),R.addGetterSetter(de,\"dash\"),R.addGetterSetter(de,\"dashOffset\",0,_e()),R.addGetterSetter(de,\"shadowColor\",void 0,Ya()),R.addGetterSetter(de,\"shadowBlur\",0,_e()),R.addGetterSetter(de,\"shadowOpacity\",1,_e()),R.addComponentsGetterSetter(de,\"shadowOffset\",[\"x\",\"y\"]),R.addGetterSetter(de,\"shadowOffsetX\",0,_e()),R.addGetterSetter(de,\"shadowOffsetY\",0,_e()),R.addGetterSetter(de,\"fillPatternImage\"),R.addGetterSetter(de,\"fill\",void 0,DM()),R.addGetterSetter(de,\"fillPatternX\",0,_e()),R.addGetterSetter(de,\"fillPatternY\",0,_e()),R.addGetterSetter(de,\"fillLinearGradientColorStops\"),R.addGetterSetter(de,\"strokeLinearGradientColorStops\"),R.addGetterSetter(de,\"fillRadialGradientStartRadius\",0),R.addGetterSetter(de,\"fillRadialGradientEndRadius\",0),R.addGetterSetter(de,\"fillRadialGradientColorStops\"),R.addGetterSetter(de,\"fillPatternRepeat\",\"repeat\"),R.addGetterSetter(de,\"fillEnabled\",!0),R.addGetterSetter(de,\"strokeEnabled\",!0),R.addGetterSetter(de,\"shadowEnabled\",!0),R.addGetterSetter(de,\"dashEnabled\",!0),R.addGetterSetter(de,\"strokeScaleEnabled\",!0),R.addGetterSetter(de,\"fillPriority\",\"color\"),R.addComponentsGetterSetter(de,\"fillPatternOffset\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillPatternOffsetX\",0,_e()),R.addGetterSetter(de,\"fillPatternOffsetY\",0,_e()),R.addComponentsGetterSetter(de,\"fillPatternScale\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillPatternScaleX\",1,_e()),R.addGetterSetter(de,\"fillPatternScaleY\",1,_e()),R.addComponentsGetterSetter(de,\"fillLinearGradientStartPoint\",[\"x\",\"y\"]),R.addComponentsGetterSetter(de,\"strokeLinearGradientStartPoint\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillLinearGradientStartPointX\",0),R.addGetterSetter(de,\"strokeLinearGradientStartPointX\",0),R.addGetterSetter(de,\"fillLinearGradientStartPointY\",0),R.addGetterSetter(de,\"strokeLinearGradientStartPointY\",0),R.addComponentsGetterSetter(de,\"fillLinearGradientEndPoint\",[\"x\",\"y\"]),R.addComponentsGetterSetter(de,\"strokeLinearGradientEndPoint\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillLinearGradientEndPointX\",0),R.addGetterSetter(de,\"strokeLinearGradientEndPointX\",0),R.addGetterSetter(de,\"fillLinearGradientEndPointY\",0),R.addGetterSetter(de,\"strokeLinearGradientEndPointY\",0),R.addComponentsGetterSetter(de,\"fillRadialGradientStartPoint\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillRadialGradientStartPointX\",0),R.addGetterSetter(de,\"fillRadialGradientStartPointY\",0),R.addComponentsGetterSetter(de,\"fillRadialGradientEndPoint\",[\"x\",\"y\"]),R.addGetterSetter(de,\"fillRadialGradientEndPointX\",0),R.addGetterSetter(de,\"fillRadialGradientEndPointY\",0),R.addGetterSetter(de,\"fillPatternRotation\",0),R.backCompat(de,{dashArray:\"dash\",getDashArray:\"getDash\",setDashArray:\"getDash\",drawFunc:\"sceneFunc\",getDrawFunc:\"getSceneFunc\",setDrawFunc:\"setSceneFunc\",drawHitFunc:\"hitFunc\",getDrawHitFunc:\"getHitFunc\",setDrawHitFunc:\"setHitFunc\"});var ex=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],SW=ex.length;class Os extends Di{constructor(e){super(e),this.canvas=new Xa,this.hitCanvas=new fv({pixelRatio:1}),this._waitingForDraw=!1,this.on(\"visibleChange.konva\",this._checkVisibility),this._checkVisibility(),this.on(\"imageSmoothingEnabledChange.konva\",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(e){return this.getContext().clear(e),this.getHitCanvas().getContext().clear(e),this}setZIndex(e){super.setZIndex(e);var t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),e<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[e+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){me.prototype.moveToTop.call(this);var e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!me.prototype.moveUp.call(this))return!1;var t=this.getStage();return!(!t||!t.content||(t.content.removeChild(this.getNativeCanvasElement()),this.index<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[this.index+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement()),0))}moveDown(){if(me.prototype.moveDown.call(this)){var e=this.getStage();if(e){var t=e.children;e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.insertBefore(this.getNativeCanvasElement(),t[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(me.prototype.moveToBottom.call(this)){var e=this.getStage();if(e){var t=e.children;e.content&&(e.content.removeChild(this.getNativeCanvasElement()),e.content.insertBefore(this.getNativeCanvasElement(),t[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){var e=this.getNativeCanvasElement();return me.prototype.remove.call(this),e&&e.parentNode&&G._isInDocument(e)&&e.parentNode.removeChild(e),this}getStage(){return this.parent}setSize({width:e,height:t}){return this.canvas.setSize(e,t),this.hitCanvas.setSize(e,t),this._setSmoothEnabled(),this}_validateAdd(e){var t=e.getType();\"Group\"!==t&&\"Shape\"!==t&&G.throw(\"You may only add groups and shapes to a layer.\")}_toKonvaCanvas(e){return(e=e||{}).width=e.width||this.getWidth(),e.height=e.height||this.getHeight(),e.x=void 0!==e.x?e.x:this.x(),e.y=void 0!==e.y?e.y:this.y(),me.prototype._toKonvaCanvas.call(this,e)}_checkVisibility(){this.canvas._canvas.style.display=this.visible()?\"block\":\"none\"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){G.warn('Can not change width of layer. Use \"stage.width(value)\" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){G.warn('Can not change height of layer. Use \"stage.height(value)\" function instead.')}batchDraw(){return this._waitingForDraw||(this._waitingForDraw=!0,G.requestAnimFrame(()=>{this.draw(),this._waitingForDraw=!1})),this}getIntersection(e){if(!this.isListening()||!this.isVisible())return null;for(var t=1,i=!1;;){for(let r=0;r<SW;r++){const s=ex[r],o=this._getIntersection({x:e.x+s.x*t,y:e.y+s.y*t}),a=o.shape;if(a)return a;if(i=!!o.antialiased,!o.antialiased)break}if(!i)return null;t+=1}}_getIntersection(e){const t=this.hitCanvas.pixelRatio,i=this.hitCanvas.context.getImageData(Math.round(e.x*t),Math.round(e.y*t),1,1).data,r=i[3];if(255===r){const s=G._rgbToHex(i[0],i[1],i[2]),o=ru[\"#\"+s];return o?{shape:o}:{antialiased:!0}}return r>0?{antialiased:!0}:{}}drawScene(e,t){var i=this.getLayer(),r=e||i&&i.getCanvas();return this._fire(\"beforeDraw\",{node:this}),this.clearBeforeDraw()&&r.getContext().clear(),Di.prototype.drawScene.call(this,r,t),this._fire(\"draw\",{node:this}),this}drawHit(e,t){var i=this.getLayer(),r=e||i&&i.hitCanvas;return i&&i.clearBeforeDraw()&&i.getHitCanvas().getContext().clear(),Di.prototype.drawHit.call(this,r,t),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(e){G.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening(e)}getHitGraphEnabled(e){return G.warn(\"hitGraphEnabled method is deprecated. Please use layer.listening() instead.\"),this.listening()}toggleHitCanvas(){if(this.parent&&this.parent.content){var e=this.parent;this.hitCanvas._canvas.parentNode?e.content.removeChild(this.hitCanvas._canvas):e.content.appendChild(this.hitCanvas._canvas)}}destroy(){return G.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}Os.prototype.nodeType=\"Layer\",Jt(Os),R.addGetterSetter(Os,\"imageSmoothingEnabled\",!0),R.addGetterSetter(Os,\"clearBeforeDraw\",!0),R.addGetterSetter(Os,\"hitGraphEnabled\",!0,or());class rs extends Di{_validateAdd(e){var t=e.getType();\"Group\"!==t&&\"Shape\"!==t&&G.throw(\"You may only add groups and shapes to groups.\")}}function bv(n,e,t,i,r,s,o){var a=Math.sqrt(Math.pow(t-n,2)+Math.pow(i-e,2)),c=Math.sqrt(Math.pow(r-t,2)+Math.pow(s-i,2)),l=o*a/(a+c),u=o*c/(a+c);return[t-l*(r-n),i-l*(s-e),t+u*(r-n),i+u*(s-e)]}function tx(n,e){var r,s,t=n.length,i=[];for(r=2;r<t-2;r+=2)s=bv(n[r-2],n[r-1],n[r],n[r+1],n[r+2],n[r+3],e),!isNaN(s[0])&&(i.push(s[0]),i.push(s[1]),i.push(n[r]),i.push(n[r+1]),i.push(s[2]),i.push(s[3]));return i}rs.prototype.nodeType=\"Group\",Jt(rs);class An extends de{constructor(e){super(e),this.on(\"pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva\",function(){this._clearCache(\"tensionPoints\")})}_sceneFunc(e){var a,c,l,t=this.points(),i=t.length,r=this.tension(),s=this.closed(),o=this.bezier();if(i){if(e.beginPath(),e.moveTo(t[0],t[1]),0!==r&&i>4){for(c=(a=this.getTensionPoints()).length,l=s?0:4,s||e.quadraticCurveTo(a[0],a[1],a[2],a[3]);l<c-2;)e.bezierCurveTo(a[l++],a[l++],a[l++],a[l++],a[l++],a[l++]);s||e.quadraticCurveTo(a[c-2],a[c-1],t[i-2],t[i-1])}else if(o)for(l=2;l<i;)e.bezierCurveTo(t[l++],t[l++],t[l++],t[l++],t[l++],t[l++]);else for(l=2;l<i;l+=2)e.lineTo(t[l],t[l+1]);s?(e.closePath(),e.fillStrokeShape(this)):e.strokeShape(this)}}getTensionPoints(){return this._getCache(\"tensionPoints\",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():tx(this.points(),this.tension())}_getTensionPointsClosed(){var e=this.points(),t=e.length,i=this.tension(),r=bv(e[t-2],e[t-1],e[0],e[1],e[2],e[3],i),s=bv(e[t-4],e[t-3],e[t-2],e[t-1],e[0],e[1],i),o=tx(e,i);return[r[2],r[3]].concat(o).concat([s[0],s[1],e[t-2],e[t-1],s[2],s[3],r[0],r[1],e[0],e[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){var e=this.points();if(e.length<4)return{x:e[0]||0,y:e[1]||0,width:0,height:0};for(var o,a,t=(e=0!==this.tension()?[e[0],e[1],...this._getTensionPoints(),e[e.length-2],e[e.length-1]]:this.points())[0],i=e[0],r=e[1],s=e[1],c=0;c<e.length/2;c++)o=e[2*c],a=e[2*c+1],t=Math.min(t,o),i=Math.max(i,o),r=Math.min(r,a),s=Math.max(s,a);return{x:t,y:r,width:i-t,height:s-r}}}An.prototype.className=\"Line\",An.prototype._attrsAffectingSize=[\"points\",\"bezier\",\"tension\"],Jt(An),R.addGetterSetter(An,\"closed\",!1),R.addGetterSetter(An,\"bezier\",!1),R.addGetterSetter(An,\"tension\",0,_e()),R.addGetterSetter(An,\"points\",[],function F4(){if(Re.isUnminified)return function(n,e){const t=Int8Array?Object.getPrototypeOf(Int8Array):null;return t&&n instanceof t||(G._isArray(n)?n.forEach(function(i){G._isNumber(i)||G.warn('\"'+e+'\" attribute has non numeric element '+i+\". Make sure that all elements are numbers.\")}):G.warn(ns(n)+' is a not valid value for \"'+e+'\" attribute. The value should be a array of numbers.')),n}}());class Rt extends de{constructor(e){super(e),this.dataArray=[],this.pathLength=0,this.dataArray=Rt.parsePathData(this.data()),this.pathLength=0;for(var t=0;t<this.dataArray.length;++t)this.pathLength+=this.dataArray[t].pathLength;this.on(\"dataChange.konva\",function(){this.dataArray=Rt.parsePathData(this.data()),this.pathLength=0;for(var i=0;i<this.dataArray.length;++i)this.pathLength+=this.dataArray[i].pathLength})}_sceneFunc(e){var t=this.dataArray;e.beginPath();for(var i=!1,r=0;r<t.length;r++){var o=t[r].points;switch(t[r].command){case\"L\":e.lineTo(o[0],o[1]);break;case\"M\":e.moveTo(o[0],o[1]);break;case\"C\":e.bezierCurveTo(o[0],o[1],o[2],o[3],o[4],o[5]);break;case\"Q\":e.quadraticCurveTo(o[0],o[1],o[2],o[3]);break;case\"A\":var a=o[0],c=o[1],l=o[2],u=o[3],h=o[4],d=o[5],p=o[6],f=o[7],m=l>u?l:u,v=l>u?1:l/u,C=l>u?u/l:1;e.translate(a,c),e.rotate(p),e.scale(v,C),e.arc(0,0,m,h,h+d,1-f),e.scale(1/v,1/C),e.rotate(-p),e.translate(-a,-c);break;case\"z\":i=!0,e.closePath()}}i||this.hasFill()?e.fillStrokeShape(this):e.strokeShape(this)}getSelfRect(){var e=[];this.dataArray.forEach(function(l){if(\"A\"===l.command){var u=l.points[4],h=l.points[5],d=l.points[4]+h,p=Math.PI/180;if(Math.abs(u-d)<p&&(p=Math.abs(u-d)),h<0)for(let f=u-p;f>d;f-=p){const m=Rt.getPointOnEllipticalArc(l.points[0],l.points[1],l.points[2],l.points[3],f,0);e.push(m.x,m.y)}else for(let f=u+p;f<d;f+=p){const m=Rt.getPointOnEllipticalArc(l.points[0],l.points[1],l.points[2],l.points[3],f,0);e.push(m.x,m.y)}}else if(\"C\"===l.command)for(let f=0;f<=1;f+=.01){const m=Rt.getPointOnCubicBezier(f,l.start.x,l.start.y,l.points[0],l.points[1],l.points[2],l.points[3],l.points[4],l.points[5]);e.push(m.x,m.y)}else e=e.concat(l.points)});for(var o,a,t=e[0],i=e[0],r=e[1],s=e[1],c=0;c<e.length/2;c++)o=e[2*c],a=e[2*c+1],isNaN(o)||(t=Math.min(t,o),i=Math.max(i,o)),isNaN(a)||(r=Math.min(r,a),s=Math.max(s,a));return{x:t,y:r,width:i-t,height:s-r}}getLength(){return this.pathLength}getPointAtLength(e){var t,i=0,r=this.dataArray.length;if(!r)return null;for(;i<r&&e>this.dataArray[i].pathLength;)e-=this.dataArray[i].pathLength,++i;if(i===r)return{x:(t=this.dataArray[i-1].points.slice(-2))[0],y:t[1]};if(e<.01)return{x:(t=this.dataArray[i].points.slice(0,2))[0],y:t[1]};var s=this.dataArray[i],o=s.points;switch(s.command){case\"L\":return Rt.getPointOnLine(e,s.start.x,s.start.y,o[0],o[1]);case\"C\":return Rt.getPointOnCubicBezier(e/s.pathLength,s.start.x,s.start.y,o[0],o[1],o[2],o[3],o[4],o[5]);case\"Q\":return Rt.getPointOnQuadraticBezier(e/s.pathLength,s.start.x,s.start.y,o[0],o[1],o[2],o[3]);case\"A\":var h=o[4];return Rt.getPointOnEllipticalArc(o[0],o[1],o[2],o[3],h+=o[5]*e/s.pathLength,o[6])}return null}static getLineLength(e,t,i,r){return Math.sqrt((i-e)*(i-e)+(r-t)*(r-t))}static getPointOnLine(e,t,i,r,s,o,a){void 0===o&&(o=t),void 0===a&&(a=i);var c=(s-i)/(r-t+1e-8),l=Math.sqrt(e*e/(1+c*c));r<t&&(l*=-1);var h,u=c*l;if(r===t)h={x:o,y:a+u};else if((a-i)/(o-t+1e-8)===c)h={x:o+l,y:a+u};else{var d,p,f=this.getLineLength(t,i,r,s),m=(o-t)*(r-t)+(a-i)*(s-i),v=this.getLineLength(o,a,d=t+(m/=f*f)*(r-t),p=i+m*(s-i)),C=Math.sqrt(e*e-v*v);l=Math.sqrt(C*C/(1+c*c)),r<t&&(l*=-1),h={x:d+l,y:p+(u=c*l)}}return h}static getPointOnCubicBezier(e,t,i,r,s,o,a,c,l){function u(v){return v*v*v}function h(v){return 3*v*v*(1-v)}function d(v){return 3*v*(1-v)*(1-v)}function p(v){return(1-v)*(1-v)*(1-v)}return{x:c*u(e)+o*h(e)+r*d(e)+t*p(e),y:l*u(e)+a*h(e)+s*d(e)+i*p(e)}}static getPointOnQuadraticBezier(e,t,i,r,s,o,a){function c(p){return p*p}function l(p){return 2*p*(1-p)}function u(p){return(1-p)*(1-p)}return{x:o*c(e)+r*l(e)+t*u(e),y:a*c(e)+s*l(e)+i*u(e)}}static getPointOnEllipticalArc(e,t,i,r,s,o){var a=Math.cos(o),c=Math.sin(o),l_x=i*Math.cos(s),l_y=r*Math.sin(s);return{x:e+(l_x*a-l_y*c),y:t+(l_x*c+l_y*a)}}static parsePathData(e){if(!e)return[];var t=e,i=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"];t=t.replace(new RegExp(\" \",\"g\"),\",\");for(var r=0;r<i.length;r++)t=t.replace(new RegExp(i[r],\"g\"),\"|\"+i[r]);var h,s=t.split(\"|\"),o=[],a=[],c=0,l=0,u=/([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;for(r=1;r<s.length;r++){var d=s[r],p=d.charAt(0);for(d=d.slice(1),a.length=0;h=u.exec(d);)a.push(h[0]);for(var f=[],m=0,v=a.length;m<v;m++)if(\"00\"!==a[m]){var C=parseFloat(a[m]);isNaN(C)?f.push(0):f.push(C)}else f.push(0,0);for(;f.length>0&&!isNaN(f[0]);){var se,ce,pe,De,Me,Ve,Ke,ze,ht,pt,I=null,L=[],H=c,ne=l;switch(p){case\"l\":c+=f.shift(),l+=f.shift(),I=\"L\",L.push(c,l);break;case\"L\":c=f.shift(),l=f.shift(),L.push(c,l);break;case\"m\":var ue=f.shift(),Ee=f.shift();if(c+=ue,l+=Ee,I=\"M\",o.length>2&&\"z\"===o[o.length-1].command)for(var Ae=o.length-2;Ae>=0;Ae--)if(\"M\"===o[Ae].command){c=o[Ae].points[0]+ue,l=o[Ae].points[1]+Ee;break}L.push(c,l),p=\"l\";break;case\"M\":c=f.shift(),l=f.shift(),I=\"M\",L.push(c,l),p=\"L\";break;case\"h\":c+=f.shift(),I=\"L\",L.push(c,l);break;case\"H\":c=f.shift(),I=\"L\",L.push(c,l);break;case\"v\":l+=f.shift(),I=\"L\",L.push(c,l);break;case\"V\":l=f.shift(),I=\"L\",L.push(c,l);break;case\"C\":L.push(f.shift(),f.shift(),f.shift(),f.shift()),c=f.shift(),l=f.shift(),L.push(c,l);break;case\"c\":L.push(c+f.shift(),l+f.shift(),c+f.shift(),l+f.shift()),c+=f.shift(),l+=f.shift(),I=\"C\",L.push(c,l);break;case\"S\":ce=c,pe=l,\"C\"===(se=o[o.length-1]).command&&(ce=c+(c-se.points[2]),pe=l+(l-se.points[3])),L.push(ce,pe,f.shift(),f.shift()),c=f.shift(),l=f.shift(),I=\"C\",L.push(c,l);break;case\"s\":ce=c,pe=l,\"C\"===(se=o[o.length-1]).command&&(ce=c+(c-se.points[2]),pe=l+(l-se.points[3])),L.push(ce,pe,c+f.shift(),l+f.shift()),c+=f.shift(),l+=f.shift(),I=\"C\",L.push(c,l);break;case\"Q\":L.push(f.shift(),f.shift()),c=f.shift(),l=f.shift(),L.push(c,l);break;case\"q\":L.push(c+f.shift(),l+f.shift()),c+=f.shift(),l+=f.shift(),I=\"Q\",L.push(c,l);break;case\"T\":ce=c,pe=l,\"Q\"===(se=o[o.length-1]).command&&(ce=c+(c-se.points[0]),pe=l+(l-se.points[1])),c=f.shift(),l=f.shift(),I=\"Q\",L.push(ce,pe,c,l);break;case\"t\":ce=c,pe=l,\"Q\"===(se=o[o.length-1]).command&&(ce=c+(c-se.points[0]),pe=l+(l-se.points[1])),c+=f.shift(),l+=f.shift(),I=\"Q\",L.push(ce,pe,c,l);break;case\"A\":De=f.shift(),Me=f.shift(),Ve=f.shift(),Ke=f.shift(),ze=f.shift(),ht=c,pt=l,c=f.shift(),l=f.shift(),I=\"A\",L=this.convertEndpointToCenterParameterization(ht,pt,c,l,Ke,ze,De,Me,Ve);break;case\"a\":De=f.shift(),Me=f.shift(),Ve=f.shift(),Ke=f.shift(),ze=f.shift(),ht=c,pt=l,c+=f.shift(),l+=f.shift(),I=\"A\",L=this.convertEndpointToCenterParameterization(ht,pt,c,l,Ke,ze,De,Me,Ve)}o.push({command:I||p,points:L,start:{x:H,y:ne},pathLength:this.calcLength(H,ne,I||p,L)})}(\"z\"===p||\"Z\"===p)&&o.push({command:\"z\",points:[],start:void 0,pathLength:0})}return o}static calcLength(e,t,i,r){var s,o,a,c,l=Rt;switch(i){case\"L\":return l.getLineLength(e,t,r[0],r[1]);case\"C\":for(s=0,o=l.getPointOnCubicBezier(0,e,t,r[0],r[1],r[2],r[3],r[4],r[5]),c=.01;c<=1;c+=.01)a=l.getPointOnCubicBezier(c,e,t,r[0],r[1],r[2],r[3],r[4],r[5]),s+=l.getLineLength(o.x,o.y,a.x,a.y),o=a;return s;case\"Q\":for(s=0,o=l.getPointOnQuadraticBezier(0,e,t,r[0],r[1],r[2],r[3]),c=.01;c<=1;c+=.01)a=l.getPointOnQuadraticBezier(c,e,t,r[0],r[1],r[2],r[3]),s+=l.getLineLength(o.x,o.y,a.x,a.y),o=a;return s;case\"A\":s=0;var u=r[4],h=r[5],d=r[4]+h,p=Math.PI/180;if(Math.abs(u-d)<p&&(p=Math.abs(u-d)),o=l.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],u,0),h<0)for(c=u-p;c>d;c-=p)a=l.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],c,0),s+=l.getLineLength(o.x,o.y,a.x,a.y),o=a;else for(c=u+p;c<d;c+=p)a=l.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],c,0),s+=l.getLineLength(o.x,o.y,a.x,a.y),o=a;return a=l.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],d,0),s+l.getLineLength(o.x,o.y,a.x,a.y)}return 0}static convertEndpointToCenterParameterization(e,t,i,r,s,o,a,c,l){var u=l*(Math.PI/180),h=Math.cos(u)*(e-i)/2+Math.sin(u)*(t-r)/2,d=-1*Math.sin(u)*(e-i)/2+Math.cos(u)*(t-r)/2,p=h*h/(a*a)+d*d/(c*c);p>1&&(a*=Math.sqrt(p),c*=Math.sqrt(p));var f=Math.sqrt((a*a*(c*c)-a*a*(d*d)-c*c*(h*h))/(a*a*(d*d)+c*c*(h*h)));s===o&&(f*=-1),isNaN(f)&&(f=0);var m=f*a*d/c,v=f*-c*h/a,C=(e+i)/2+Math.cos(u)*m-Math.sin(u)*v,I=(t+r)/2+Math.sin(u)*m+Math.cos(u)*v,L=function(Me){return Math.sqrt(Me[0]*Me[0]+Me[1]*Me[1])},H=function(Me,Ve){return(Me[0]*Ve[0]+Me[1]*Ve[1])/(L(Me)*L(Ve))},ne=function(Me,Ve){return(Me[0]*Ve[1]<Me[1]*Ve[0]?-1:1)*Math.acos(H(Me,Ve))},se=ne([1,0],[(h-m)/a,(d-v)/c]),ce=[(h-m)/a,(d-v)/c],pe=[(-1*h-m)/a,(-1*d-v)/c],De=ne(ce,pe);return H(ce,pe)<=-1&&(De=Math.PI),H(ce,pe)>=1&&(De=0),0===o&&De>0&&(De-=2*Math.PI),1===o&&De<0&&(De+=2*Math.PI),[C,I,a,c,se,De,u,o]}}Rt.prototype.className=\"Path\",Rt.prototype._attrsAffectingSize=[\"data\"],Jt(Rt),R.addGetterSetter(Rt,\"data\");class Bi extends An{_sceneFunc(e){super._sceneFunc(e);var t=2*Math.PI,i=this.points(),r=i,s=0!==this.tension()&&i.length>4;s&&(r=this.getTensionPoints());var c,l,o=this.pointerLength(),a=i.length;if(s){const d=[r[r.length-4],r[r.length-3],r[r.length-2],r[r.length-1],i[a-2],i[a-1]],p=Rt.calcLength(r[r.length-4],r[r.length-3],\"C\",d),f=Rt.getPointOnQuadraticBezier(Math.min(1,1-o/p),d[0],d[1],d[2],d[3],d[4],d[5]);c=i[a-2]-f.x,l=i[a-1]-f.y}else c=i[a-2]-i[a-4],l=i[a-1]-i[a-3];var u=(Math.atan2(l,c)+t)%t,h=this.pointerWidth();this.pointerAtEnding()&&(e.save(),e.beginPath(),e.translate(i[a-2],i[a-1]),e.rotate(u),e.moveTo(0,0),e.lineTo(-o,h/2),e.lineTo(-o,-h/2),e.closePath(),e.restore(),this.__fillStroke(e)),this.pointerAtBeginning()&&(e.save(),e.beginPath(),e.translate(i[0],i[1]),s?(c=(r[0]+r[2])/2-i[0],l=(r[1]+r[3])/2-i[1]):(c=i[2]-i[0],l=i[3]-i[1]),e.rotate((Math.atan2(-l,-c)+t)%t),e.moveTo(0,0),e.lineTo(-o,h/2),e.lineTo(-o,-h/2),e.closePath(),e.restore(),this.__fillStroke(e))}__fillStroke(e){var t=this.dashEnabled();t&&(this.attrs.dashEnabled=!1,e.setLineDash([])),e.fillStrokeShape(this),t&&(this.attrs.dashEnabled=!0)}getSelfRect(){const e=super.getSelfRect(),t=this.pointerWidth()/2;return{x:e.x-t,y:e.y-t,width:e.width+2*t,height:e.height+2*t}}}Bi.prototype.className=\"Arrow\",Jt(Bi),R.addGetterSetter(Bi,\"pointerLength\",10,_e()),R.addGetterSetter(Bi,\"pointerWidth\",10,_e()),R.addGetterSetter(Bi,\"pointerAtBeginning\",!1),R.addGetterSetter(Bi,\"pointerAtEnding\",!0);class xr extends de{_sceneFunc(e){var t=Re.getAngle(this.angle()),i=this.clockwise();e.beginPath(),e.arc(0,0,this.outerRadius(),0,t,i),e.arc(0,0,this.innerRadius(),t,0,!i),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}getSelfRect(){const e=this.innerRadius(),t=this.outerRadius(),i=this.clockwise(),r=Re.getAngle(i?360-this.angle():this.angle()),s=Math.cos(Math.min(r,Math.PI)),a=Math.sin(Math.min(Math.max(Math.PI,r),3*Math.PI/2)),c=Math.sin(Math.min(r,Math.PI/2)),l=s*(s>0?e:t),h=a*(a>0?e:t),d=c*(c>0?t:e);return{x:l,y:i?-1*d:h,width:1*t-l,height:d-h}}}xr.prototype._centroid=!0,xr.prototype.className=\"Arc\",xr.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"],Jt(xr),R.addGetterSetter(xr,\"innerRadius\",0,_e()),R.addGetterSetter(xr,\"outerRadius\",0,_e()),R.addGetterSetter(xr,\"angle\",0,_e()),R.addGetterSetter(xr,\"clockwise\",!1,or());class mo extends de{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.attrs.radius||0,0,2*Math.PI,!1),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius()!==e/2&&this.radius(e/2)}setHeight(e){this.radius()!==e/2&&this.radius(e/2)}}mo.prototype._centroid=!0,mo.prototype.className=\"Circle\",mo.prototype._attrsAffectingSize=[\"radius\"],Jt(mo),R.addGetterSetter(mo,\"radius\",0,_e());class Ja extends de{_sceneFunc(e){var t=this.cornerRadius(),i=this.width(),r=this.height();e.beginPath(),t?G.drawRoundedRectPath(e,i,r,t):e.rect(0,0,i,r),e.closePath(),e.fillStrokeShape(this)}}Ja.prototype.className=\"Rect\",Jt(Ja),R.addGetterSetter(Ja,\"cornerRadius\",0,hv(4));var nx=[\"fontFamily\",\"fontSize\",\"fontStyle\",\"padding\",\"lineHeight\",\"text\",\"width\",\"height\",\"pointerDirection\",\"pointerWidth\",\"pointerHeight\"],Cv=\"right\",Dv=\"down\",Tv=\"left\",TW=nx.length;class ec extends rs{constructor(e){super(e),this.on(\"add.konva\",function(t){this._addListeners(t.child),this._sync()})}getText(){return this.find(\"Text\")[0]}getTag(){return this.find(\"Tag\")[0]}_addListeners(e){var i,t=this,r=function(){t._sync()};for(i=0;i<TW;i++)e.on(nx[i]+\"Change.konva\",r)}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){var i,r,s,o,a,c,l,e=this.getText(),t=this.getTag();if(e&&t){switch(i=e.width(),r=e.height(),s=t.pointerDirection(),o=t.pointerWidth(),l=t.pointerHeight(),a=0,c=0,s){case\"up\":a=i/2,c=-1*l;break;case Cv:a=i+o,c=r/2;break;case Dv:a=i/2,c=r+l;break;case Tv:a=-1*o,c=r/2}t.setAttrs({x:-1*a,y:-1*c,width:i,height:r}),e.setAttrs({x:-1*a,y:-1*c})}}}ec.prototype.className=\"Label\",Jt(ec);class yo extends de{_sceneFunc(e){var t=this.width(),i=this.height(),r=this.pointerDirection(),s=this.pointerWidth(),o=this.pointerHeight(),a=this.cornerRadius();let c=0,l=0,u=0,h=0;\"number\"==typeof a?c=l=u=h=Math.min(a,t/2,i/2):(c=Math.min(a[0]||0,t/2,i/2),l=Math.min(a[1]||0,t/2,i/2),h=Math.min(a[2]||0,t/2,i/2),u=Math.min(a[3]||0,t/2,i/2)),e.beginPath(),e.moveTo(c,0),\"up\"===r&&(e.lineTo((t-s)/2,0),e.lineTo(t/2,-1*o),e.lineTo((t+s)/2,0)),e.lineTo(t-l,0),e.arc(t-l,l,l,3*Math.PI/2,0,!1),r===Cv&&(e.lineTo(t,(i-o)/2),e.lineTo(t+s,i/2),e.lineTo(t,(i+o)/2)),e.lineTo(t,i-h),e.arc(t-h,i-h,h,0,Math.PI/2,!1),r===Dv&&(e.lineTo((t+s)/2,i),e.lineTo(t/2,i+o),e.lineTo((t-s)/2,i)),e.lineTo(u,i),e.arc(u,i-u,u,Math.PI/2,Math.PI,!1),r===Tv&&(e.lineTo(0,(i+o)/2),e.lineTo(-1*s,i/2),e.lineTo(0,(i-o)/2)),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.closePath(),e.fillStrokeShape(this)}getSelfRect(){var e=0,t=0,i=this.pointerWidth(),r=this.pointerHeight(),s=this.pointerDirection(),o=this.width(),a=this.height();return\"up\"===s?(t-=r,a+=r):s===Dv?a+=r:s===Tv?(e-=1.5*i,o+=i):s===Cv&&(o+=1.5*i),{x:e,y:t,width:o,height:a}}}function ix(n){return Array.from(n)}yo.prototype.className=\"Tag\",Jt(yo),R.addGetterSetter(yo,\"pointerDirection\",\"none\"),R.addGetterSetter(yo,\"pointerWidth\",0,_e()),R.addGetterSetter(yo,\"pointerHeight\",0,_e()),R.addGetterSetter(yo,\"cornerRadius\",0,hv(4));var Rf,tc=\"auto\",su=\"justify\",lx=[\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontVariant\",\"padding\",\"align\",\"verticalAlign\",\"lineHeight\",\"text\",\"width\",\"height\",\"wrap\",\"ellipsis\",\"letterSpacing\"],BW=lx.length;function Av(){return Rf||(Rf=G.createCanvasElement().getContext(\"2d\"))}class Mt extends de{constructor(e){super(function UW(n){return!(n=n||{}).fillLinearGradientColorStops&&!n.fillRadialGradientColorStops&&!n.fillPatternImage&&(n.fill=n.fill||\"black\"),n}(e)),this._partialTextX=0,this._partialTextY=0;for(var t=0;t<BW;t++)this.on(lx[t]+\"Change.konva\",this._setTextData);this._setTextData()}_sceneFunc(e){var t=this.textArr,i=t.length;if(this.text()){var v,r=this.padding(),s=this.fontSize(),o=this.lineHeight()*s,a=this.verticalAlign(),c=0,l=this.align(),u=this.getWidth(),h=this.letterSpacing(),d=this.fill(),p=this.textDecoration(),f=-1!==p.indexOf(\"underline\"),m=-1!==p.indexOf(\"line-through\"),C=0,I=(C=o/2,0),L=0;for(e.setAttr(\"font\",this._getContextFont()),e.setAttr(\"textBaseline\",\"middle\"),e.setAttr(\"textAlign\",\"left\"),\"middle\"===a?c=(this.getHeight()-i*o-2*r)/2:\"bottom\"===a&&(c=this.getHeight()-i*o-2*r),e.translate(r,c+r),v=0;v<i;v++){I=0,L=0;var pe,De,Me,H=t[v],ne=H.text,se=H.width,ce=H.lastInParagraph;if(e.save(),\"right\"===l?I+=u-se-2*r:\"center\"===l&&(I+=(u-se-2*r)/2),f){e.save(),e.beginPath(),e.moveTo(I,C+L+Math.round(s/2)),De=0==(pe=ne.split(\" \").length-1),Me=l!==su||ce?se:u-2*r,e.lineTo(I+Math.round(Me),C+L+Math.round(s/2)),e.lineWidth=s/15;const ue=this._getLinearGradient();e.strokeStyle=ue||d,e.stroke(),e.restore()}if(m){e.save(),e.beginPath(),e.moveTo(I,C+L),De=0==(pe=ne.split(\" \").length-1),Me=l===su&&ce&&!De?u-2*r:se,e.lineTo(I+Math.round(Me),C+L),e.lineWidth=s/15;const ue=this._getLinearGradient();e.strokeStyle=ue||d,e.stroke(),e.restore()}if(0!==h||l===su){pe=ne.split(\" \").length-1;for(var Ve=ix(ne),Ke=0;Ke<Ve.length;Ke++){var ze=Ve[Ke];\" \"===ze&&!ce&&l===su&&(I+=(u-2*r-se)/pe),this._partialTextX=I,this._partialTextY=C+L,this._partialText=ze,e.fillStrokeShape(this),I+=this.measureSize(ze).width+h}}else this._partialTextX=I,this._partialTextY=C+L,this._partialText=ne,e.fillStrokeShape(this);e.restore(),i>1&&(C+=o)}}}_hitFunc(e){var t=this.getWidth(),i=this.getHeight();e.beginPath(),e.rect(0,0,t,i),e.closePath(),e.fillStrokeShape(this)}setText(e){var t=G._isString(e)?e:null==e?\"\":e+\"\";return this._setAttr(\"text\",t),this}getWidth(){return this.attrs.width===tc||void 0===this.attrs.width?this.getTextWidth()+2*this.padding():this.attrs.width}getHeight(){return this.attrs.height===tc||void 0===this.attrs.height?this.fontSize()*this.textArr.length*this.lineHeight()+2*this.padding():this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return G.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}measureSize(e){var r,t=Av(),i=this.fontSize();return t.save(),t.font=this._getContextFont(),r=t.measureText(e),t.restore(),{width:r.width,height:i}}_getContextFont(){return this.fontStyle()+\" \"+this.fontVariant()+\" \"+this.fontSize()+\"px \"+function jW(n){return n.split(\",\").map(e=>{const t=(e=e.trim()).indexOf(\" \")>=0,i=e.indexOf('\"')>=0||e.indexOf(\"'\")>=0;return t&&!i&&(e=`\"${e}\"`),e}).join(\", \")}(this.fontFamily())}_addTextLine(e){this.align()===su&&(e=e.trim());var i=this._getTextWidth(e);return this.textArr.push({text:e,width:i,lastInParagraph:!1})}_getTextWidth(e){var t=this.letterSpacing(),i=e.length;return Av().measureText(e).width+(i?t*(i-1):0)}_setTextData(){var e=this.text().split(\"\\n\"),t=+this.fontSize(),i=0,r=this.lineHeight()*t,s=this.attrs.width,o=this.attrs.height,a=s!==tc&&void 0!==s,c=o!==tc&&void 0!==o,l=this.padding(),u=s-2*l,h=o-2*l,d=0,p=this.wrap(),m=\"char\"!==p&&\"none\"!==p,v=this.ellipsis();this.textArr=[],Av().font=this._getContextFont();for(var C=v?this._getTextWidth(\"\\u2026\"):0,I=0,L=e.length;I<L;++I){var H=e[I],ne=this._getTextWidth(H);if(a&&ne>u)for(;H.length>0;){for(var se=0,ce=H.length,pe=\"\",De=0;se<ce;){var Me=se+ce>>>1,Ve=H.slice(0,Me+1),Ke=this._getTextWidth(Ve)+C;Ke<=u?(se=Me+1,pe=Ve,De=Ke):ce=Me}if(!pe)break;if(m){var ze,ht=H[pe.length];(ze=(\" \"===ht||\"-\"===ht)&&De<=u?pe.length:Math.max(pe.lastIndexOf(\" \"),pe.lastIndexOf(\"-\"))+1)>0&&(pe=pe.slice(0,se=ze),De=this._getTextWidth(pe))}if(pe=pe.trimRight(),this._addTextLine(pe),i=Math.max(i,De),this._shouldHandleEllipsis(d+=r)){this._tryToAddEllipsisToLastLine();break}if((H=(H=H.slice(se)).trimLeft()).length>0&&(ne=this._getTextWidth(H))<=u){this._addTextLine(H),d+=r,i=Math.max(i,ne);break}}else this._addTextLine(H),d+=r,i=Math.max(i,ne),this._shouldHandleEllipsis(d)&&I<L-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),c&&d+r>h)break}this.textHeight=t,this.textWidth=i}_shouldHandleEllipsis(e){var t=+this.fontSize(),i=this.lineHeight()*t,r=this.attrs.height,s=r!==tc&&void 0!==r,a=r-2*this.padding();return!(\"none\"!==this.wrap())||s&&e+i>a}_tryToAddEllipsisToLastLine(){var e=this.attrs.width,t=e!==tc&&void 0!==e,r=e-2*this.padding(),s=this.ellipsis(),o=this.textArr[this.textArr.length-1];o&&s&&(t&&(this._getTextWidth(o.text+\"\\u2026\")<r||(o.text=o.text.slice(0,o.text.length-3))),this.textArr.splice(this.textArr.length-1,1),this._addTextLine(o.text+\"\\u2026\"))}getStrokeScaleEnabled(){return!0}}Mt.prototype._fillFunc=function VW(n){n.fillText(this._partialText,this._partialTextX,this._partialTextY)},Mt.prototype._strokeFunc=function zW(n){n.strokeText(this._partialText,this._partialTextX,this._partialTextY)},Mt.prototype.className=\"Text\",Mt.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"padding\",\"wrap\",\"lineHeight\",\"letterSpacing\"],Jt(Mt),R.overWriteSetter(Mt,\"width\",dv()),R.overWriteSetter(Mt,\"height\",dv()),R.addGetterSetter(Mt,\"fontFamily\",\"Arial\"),R.addGetterSetter(Mt,\"fontSize\",12,_e()),R.addGetterSetter(Mt,\"fontStyle\",\"normal\"),R.addGetterSetter(Mt,\"fontVariant\",\"normal\"),R.addGetterSetter(Mt,\"padding\",0,_e()),R.addGetterSetter(Mt,\"align\",\"left\"),R.addGetterSetter(Mt,\"verticalAlign\",\"top\"),R.addGetterSetter(Mt,\"lineHeight\",1,_e()),R.addGetterSetter(Mt,\"wrap\",\"word\"),R.addGetterSetter(Mt,\"ellipsis\",!1,or()),R.addGetterSetter(Mt,\"letterSpacing\",0,_e()),R.addGetterSetter(Mt,\"text\",\"\",Ya()),R.addGetterSetter(Mt,\"textDecoration\",\"\"),it(716);class HW{constructor(e,t,i){this.layer=t,this.config=i,this.group=new rs({id:Si()}),this.xLine=new An({...i.xLine,points:[e.x,e.y,e.x+i.xLength,e.y]}),this.group.add(this.xLine),this.yLine=new An({...i.xLine,points:[e.x,e.y,e.x,e.y+i.yLength]}),this.group.add(this.yLine),this.xText=new Mt({x:e.x+i.xLength-10,y:e.y+5,text:\"X\",fontSize:12,fill:\"black\"}),this.group.add(this.xText),this.yText=new Mt({x:e.x+5,y:e.y+i.yLength-10,text:\"Y\",fontSize:12,fill:\"black\"}),this.group.add(this.yText),this.layer.add(this.group)}scale(){const e=this.layer.getStage();this.group.setAttrs({scaleX:1/e.scaleX(),scaleY:1/e.scaleY()})}}class GW{constructor(e,t,i,r,s){this.viewPort=e,this.unitScale=t,this.stageScale=i,this.layer=r,this.config=s,this.group=new rs({id:Si()});let o=e.tl.x;for(;o<=e.rb.x;){const c=(o-e.tl.x)/s.minorStep%s.majorStep==0?s.majorLine:s.minorLine,l=new An({points:this.scalePoints([o,e.tl.y,o,e.rb.y]),...c,strokeScaleEnabled:!1});this.group.add(l),o+=s.minorStep}let a=e.tl.y;for(;a<=e.rb.y;){const c=(a-e.tl.y)/s.minorStep%s.majorStep==0?s.majorLine:s.minorLine,l=new An({points:this.scalePoints([e.tl.x,a,e.rb.x,a]),...c,strokeScaleEnabled:!1});this.group.add(l),a+=s.minorStep}this.layer.add(this.group)}scalePoints(e){return e.map(t=>t*this.unitScale/this.stageScale)}}class Mv extends Os{constructor(e){super(e),this.listening(!1),G.warn('Konva.Fast layer is deprecated. Please use \"new Konva.Layer({ listening: false })\" instead.')}}Mv.prototype.nodeType=\"FastLayer\",Jt(Mv);var xv=Ka.performance&&Ka.performance.now?function(){return Ka.performance.now()}:function(){return(new Date).getTime()};let Pv=(()=>{class n{constructor(t,i){this.id=n.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:xv(),frameRate:0},this.func=t,this.setLayers(i)}setLayers(t){return this.layers=t?t.length>0?t:[t]:[],this}getLayers(){return this.layers}addLayer(t){var s,i=this.layers,r=i.length;for(s=0;s<r;s++)if(i[s]._id===t._id)return!1;return this.layers.push(t),!0}isRunning(){var s,i=n.animations,r=i.length;for(s=0;s<r;s++)if(i[s].id===this.id)return!0;return!1}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=xv(),n._addAnimation(this),this}stop(){return n._removeAnimation(this),this}_updateFrameObject(t){this.frame.timeDiff=t-this.frame.lastTime,this.frame.lastTime=t,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(t){this.animations.push(t),this._handleAnimation()}static _removeAnimation(t){var o,i=t.id,r=this.animations,s=r.length;for(o=0;o<s;o++)if(r[o].id===i){this.animations.splice(o,1);break}}static _runFrames(){var r,s,o,a,c,l,u,h,t={},i=this.animations;for(a=0;a<i.length;a++)if(s=(r=i[a]).layers,o=r.func,r._updateFrameObject(xv()),l=s.length,!o||!1!==o.call(r,r.frame))for(c=0;c<l;c++)void 0!==(u=s[c])._id&&(t[u._id]=u);for(h in t)t.hasOwnProperty(h)&&t[h].batchDraw()}static _animationLoop(){var t=n;t.animations.length?(t._runFrames(),G.requestAnimFrame(t._animationLoop)):t.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,G.requestAnimFrame(this._animationLoop))}}return n.animations=[],n.animIdCounter=0,n.animRunning=!1,n})();var $W={node:1,duration:1,easing:1,onFinish:1,yoyo:1},qW=0,dx=[\"fill\",\"stroke\",\"shadowColor\"];class KW{constructor(e,t,i,r,s,o,a){this.prop=e,this.propFunc=t,this.begin=r,this._pos=r,this.duration=o,this._change=0,this.prevPos=0,this.yoyo=a,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=i,this._change=s-this.begin,this.pause()}fire(e){var t=this[e];t&&t()}setTime(e){e>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():e<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=e,this.update())}getTime(){return this._time}setPosition(e){this.prevPos=this._pos,this.propFunc(e),this._pos=e}getPosition(e){return void 0===e&&(e=this._time),this.func(e,this.begin,this._change,this.duration)}play(){this.state=2,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onPlay\")}reverse(){this.state=3,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(\"onReverse\")}seek(e){this.pause(),this._time=e,this.update(),this.fire(\"onSeek\")}reset(){this.pause(),this._time=0,this.update(),this.fire(\"onReset\")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire(\"onFinish\")}update(){this.setPosition(this.getPosition(this._time)),this.fire(\"onUpdate\")}onEnterFrame(){var e=this.getTimer()-this._startTime;2===this.state?this.setTime(e):3===this.state&&this.setTime(this.duration-e)}pause(){this.state=1,this.fire(\"onPause\")}getTimer(){return(new Date).getTime()}}let fx=(()=>{class n{constructor(t){var o,l,i=this,r=t.node,s=r._id,a=t.easing||ou.Linear,c=!!t.yoyo;o=typeof t.duration>\"u\"?.3:0===t.duration?.001:t.duration,this.node=r,this._id=qW++;var u=r.getLayer()||(r instanceof Re.Stage?r.getLayers():null);for(l in u||G.error(\"Tween constructor have `node` that is not in a layer. Please add node into layer first.\"),this.anim=new Pv(function(){i.tween.onEnterFrame()},u),this.tween=new KW(l,function(h){i._tweenFunc(h)},a,0,1,1e3*o,c),this._addListeners(),n.attrs[s]||(n.attrs[s]={}),n.attrs[s][this._id]||(n.attrs[s][this._id]={}),n.tweens[s]||(n.tweens[s]={}),t)void 0===$W[l]&&this._addAttr(l,t[l]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,i){var o,a,c,l,u,h,d,p,r=this.node,s=r._id;if((c=n.tweens[s][t])&&delete n.attrs[s][c][t],o=r.getAttr(t),G._isArray(i))if(a=[],u=Math.max(i.length,o.length),\"points\"===t&&i.length!==o.length&&(i.length>o.length?(d=o,o=G._prepareArrayForTween(o,i,r.closed())):(h=i,i=G._prepareArrayForTween(i,o,r.closed()))),0===t.indexOf(\"fill\"))for(l=0;l<u;l++)if(l%2==0)a.push(i[l]-o[l]);else{var f=G.colorToRGBA(o[l]);p=G.colorToRGBA(i[l]),o[l]=f,a.push({r:p.r-f.r,g:p.g-f.g,b:p.b-f.b,a:p.a-f.a})}else for(l=0;l<u;l++)a.push(i[l]-o[l]);else-1!==dx.indexOf(t)?(o=G.colorToRGBA(o),a={r:(p=G.colorToRGBA(i)).r-o.r,g:p.g-o.g,b:p.b-o.b,a:p.a-o.a}):a=i-o;n.attrs[s][this._id][t]={start:o,diff:a,end:i,trueEnd:h,trueStart:d},n.tweens[s][t]=this._id}_tweenFunc(t){var s,o,a,c,l,u,h,d,i=this.node,r=n.attrs[i._id][this._id];for(s in r){if(c=(o=r[s]).diff,d=o.end,G._isArray(a=o.start))if(l=[],h=Math.max(a.length,d.length),0===s.indexOf(\"fill\"))for(u=0;u<h;u++)l.push(u%2==0?(a[u]||0)+c[u]*t:\"rgba(\"+Math.round(a[u].r+c[u].r*t)+\",\"+Math.round(a[u].g+c[u].g*t)+\",\"+Math.round(a[u].b+c[u].b*t)+\",\"+(a[u].a+c[u].a*t)+\")\");else for(u=0;u<h;u++)l.push((a[u]||0)+c[u]*t);else l=-1!==dx.indexOf(s)?\"rgba(\"+Math.round(a.r+c.r*t)+\",\"+Math.round(a.g+c.g*t)+\",\"+Math.round(a.b+c.b*t)+\",\"+(a.a+c.a*t)+\")\":a+c*t;i.setAttr(s,l)}}_addListeners(){this.tween.onPlay=()=>{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var t=this.node,i=n.attrs[t._id][this._id];i.points&&i.points.trueEnd&&t.setAttr(\"points\",i.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var t=this.node,i=n.attrs[t._id][this._id];i.points&&i.points.trueStart&&t.points(i.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(t){return this.tween.seek(1e3*t),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var s,t=this.node._id,i=this._id,r=n.tweens[t];for(s in this.pause(),r)delete n.tweens[t][s];delete n.attrs[t][i]}}return n.attrs={},n.tweens={},n})();me.prototype.to=function(n){var e=n.onFinish;n.node=this,n.onFinish=function(){this.destroy(),e&&e()},new fx(n).play()};const ou={BackEaseIn(n,e,t,i){var r=1.70158;return t*(n/=i)*n*((r+1)*n-r)+e},BackEaseOut(n,e,t,i){var r=1.70158;return t*((n=n/i-1)*n*((r+1)*n+r)+1)+e},BackEaseInOut(n,e,t,i){var r=1.70158;return(n/=i/2)<1?t/2*(n*n*((1+(r*=1.525))*n-r))+e:t/2*((n-=2)*n*((1+(r*=1.525))*n+r)+2)+e},ElasticEaseIn(n,e,t,i,r,s){var o=0;return 0===n?e:1==(n/=i)?e+t:(s||(s=.3*i),!r||r<Math.abs(t)?(r=t,o=s/4):o=s/(2*Math.PI)*Math.asin(t/r),-r*Math.pow(2,10*(n-=1))*Math.sin((n*i-o)*(2*Math.PI)/s)+e)},ElasticEaseOut(n,e,t,i,r,s){var o=0;return 0===n?e:1==(n/=i)?e+t:(s||(s=.3*i),!r||r<Math.abs(t)?(r=t,o=s/4):o=s/(2*Math.PI)*Math.asin(t/r),r*Math.pow(2,-10*n)*Math.sin((n*i-o)*(2*Math.PI)/s)+t+e)},ElasticEaseInOut(n,e,t,i,r,s){var o=0;return 0===n?e:2==(n/=i/2)?e+t:(s||(s=i*(.3*1.5)),!r||r<Math.abs(t)?(r=t,o=s/4):o=s/(2*Math.PI)*Math.asin(t/r),n<1?r*Math.pow(2,10*(n-=1))*Math.sin((n*i-o)*(2*Math.PI)/s)*-.5+e:r*Math.pow(2,-10*(n-=1))*Math.sin((n*i-o)*(2*Math.PI)/s)*.5+t+e)},BounceEaseOut:(n,e,t,i)=>(n/=i)<1/2.75?t*(7.5625*n*n)+e:n<2/2.75?t*(7.5625*(n-=1.5/2.75)*n+.75)+e:n<2.5/2.75?t*(7.5625*(n-=2.25/2.75)*n+.9375)+e:t*(7.5625*(n-=2.625/2.75)*n+.984375)+e,BounceEaseIn:(n,e,t,i)=>t-ou.BounceEaseOut(i-n,0,t,i)+e,BounceEaseInOut:(n,e,t,i)=>n<i/2?.5*ou.BounceEaseIn(2*n,0,t,i)+e:.5*ou.BounceEaseOut(2*n-i,0,t,i)+.5*t+e,EaseIn:(n,e,t,i)=>t*(n/=i)*n+e,EaseOut:(n,e,t,i)=>-t*(n/=i)*(n-2)+e,EaseInOut:(n,e,t,i)=>(n/=i/2)<1?t/2*n*n+e:-t/2*(--n*(n-2)-1)+e,StrongEaseIn:(n,e,t,i)=>t*(n/=i)*n*n*n*n+e,StrongEaseOut:(n,e,t,i)=>t*((n=n/i-1)*n*n*n*n+1)+e,StrongEaseInOut:(n,e,t,i)=>(n/=i/2)<1?t/2*n*n*n*n*n+e:t/2*((n-=2)*n*n*n*n+2)+e,Linear:(n,e,t,i)=>t*n/i+e},px=G._assign(Re,{Util:G,Transform:Ci,Node:me,Container:Di,Stage:iu,stages:xf,Layer:Os,FastLayer:Mv,Group:rs,DD:_t,Shape:de,shapes:ru,Animation:Pv,Tween:fx,Easings:ou,Context:wf,Canvas:bf});class Rs extends de{_sceneFunc(e){var t=this.radiusX(),i=this.radiusY();e.beginPath(),e.save(),t!==i&&e.scale(1,i/t),e.arc(0,0,t,0,2*Math.PI,!1),e.restore(),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radiusX()}getHeight(){return 2*this.radiusY()}setWidth(e){this.radiusX(e/2)}setHeight(e){this.radiusY(e/2)}}Rs.prototype.className=\"Ellipse\",Rs.prototype._centroid=!0,Rs.prototype._attrsAffectingSize=[\"radiusX\",\"radiusY\"],Jt(Rs),R.addComponentsGetterSetter(Rs,\"radius\",[\"x\",\"y\"]),R.addGetterSetter(Rs,\"radiusX\",0,_e()),R.addGetterSetter(Rs,\"radiusY\",0,_e());class ji extends de{constructor(e){super(e),this.on(\"imageChange.konva\",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const e=this.image();e&&e.complete||e&&4===e.readyState||e&&e.addEventListener&&e.addEventListener(\"load\",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(e){const t=this.getWidth(),i=this.getHeight(),r=this.cornerRadius(),s=this.attrs.image;let o;if(s){const a=this.attrs.cropWidth,c=this.attrs.cropHeight;o=a&&c?[s,this.cropX(),this.cropY(),a,c,0,0,t,i]:[s,0,0,t,i]}(this.hasFill()||this.hasStroke()||r)&&(e.beginPath(),r?G.drawRoundedRectPath(e,t,i,r):e.rect(0,0,t,i),e.closePath(),e.fillStrokeShape(this)),s&&(r&&e.clip(),e.drawImage.apply(e,o))}_hitFunc(e){var t=this.width(),i=this.height(),r=this.cornerRadius();e.beginPath(),r?G.drawRoundedRectPath(e,t,i,r):e.rect(0,0,t,i),e.closePath(),e.fillStrokeShape(this)}getWidth(){var e,t;return null!==(e=this.attrs.width)&&void 0!==e?e:null===(t=this.image())||void 0===t?void 0:t.width}getHeight(){var e,t;return null!==(e=this.attrs.height)&&void 0!==e?e:null===(t=this.image())||void 0===t?void 0:t.height}static fromURL(e,t,i=null){var r=G.createImageElement();r.onload=function(){var s=new ji({image:r});t(s)},r.onerror=i,r.crossOrigin=\"Anonymous\",r.src=e}}ji.prototype.className=\"Image\",Jt(ji),R.addGetterSetter(ji,\"cornerRadius\",0,hv(4)),R.addGetterSetter(ji,\"image\"),R.addComponentsGetterSetter(ji,\"crop\",[\"x\",\"y\",\"width\",\"height\"]),R.addGetterSetter(ji,\"cropX\",0,_e()),R.addGetterSetter(ji,\"cropY\",0,_e()),R.addGetterSetter(ji,\"cropWidth\",0,_e()),R.addGetterSetter(ji,\"cropHeight\",0,_e());class vo extends de{_sceneFunc(e){const t=this._getPoints();e.beginPath(),e.moveTo(t[0].x,t[0].y);for(var i=1;i<t.length;i++)e.lineTo(t[i].x,t[i].y);e.closePath(),e.fillStrokeShape(this)}_getPoints(){const e=this.attrs.sides,t=this.attrs.radius||0,i=[];for(var r=0;r<e;r++)i.push({x:t*Math.sin(2*r*Math.PI/e),y:-1*t*Math.cos(2*r*Math.PI/e)});return i}getSelfRect(){const e=this._getPoints();var t=e[0].x,i=e[0].y,r=e[0].x,s=e[0].y;return e.forEach(o=>{t=Math.min(t,o.x),i=Math.max(i,o.x),r=Math.min(r,o.y),s=Math.max(s,o.y)}),{x:t,y:r,width:i-t,height:s-r}}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}}vo.prototype.className=\"RegularPolygon\",vo.prototype._centroid=!0,vo.prototype._attrsAffectingSize=[\"radius\"],Jt(vo),R.addGetterSetter(vo,\"radius\",0,_e()),R.addGetterSetter(vo,\"sides\",0,_e());var gx=2*Math.PI;class wo extends de{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.innerRadius(),0,gx,!1),e.moveTo(this.outerRadius(),0),e.arc(0,0,this.outerRadius(),gx,0,!0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}}wo.prototype.className=\"Ring\",wo.prototype._centroid=!0,wo.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"],Jt(wo),R.addGetterSetter(wo,\"innerRadius\",0,_e()),R.addGetterSetter(wo,\"outerRadius\",0,_e());class Pr extends de{constructor(e){super(e),this._updated=!0,this.anim=new Pv(()=>{var t=this._updated;return this._updated=!1,t}),this.on(\"animationChange.konva\",function(){this.frameIndex(0)}),this.on(\"frameIndexChange.konva\",function(){this._updated=!0}),this.on(\"frameRateChange.konva\",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(e){var t=this.animation(),i=this.frameIndex(),r=4*i,s=this.animations()[t],o=this.frameOffsets(),a=s[r+0],c=s[r+1],l=s[r+2],u=s[r+3],h=this.image();if((this.hasFill()||this.hasStroke())&&(e.beginPath(),e.rect(0,0,l,u),e.closePath(),e.fillStrokeShape(this)),h)if(o){var d=o[t],p=2*i;e.drawImage(h,a,c,l,u,d[p+0],d[p+1],l,u)}else e.drawImage(h,a,c,l,u,0,0,l,u)}_hitFunc(e){var t=this.animation(),i=this.frameIndex(),r=4*i,s=this.animations()[t],o=this.frameOffsets(),a=s[r+2],c=s[r+3];if(e.beginPath(),o){var l=o[t],u=2*i;e.rect(l[u+0],l[u+1],a,c)}else e.rect(0,0,a,c);e.closePath(),e.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var e=this;this.interval=setInterval(function(){e._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var e=this.getLayer();this.anim.setLayers(e),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var e=this.frameIndex(),t=this.animation(),i=this.animations();this.frameIndex(e<i[t].length/4-1?e+1:0)}}Pr.prototype.className=\"Sprite\",Jt(Pr),R.addGetterSetter(Pr,\"animation\"),R.addGetterSetter(Pr,\"animations\"),R.addGetterSetter(Pr,\"frameOffsets\"),R.addGetterSetter(Pr,\"image\"),R.addGetterSetter(Pr,\"frameIndex\",0,_e()),R.addGetterSetter(Pr,\"frameRate\",17,_e()),R.backCompat(Pr,{index:\"frameIndex\",getIndex:\"getFrameIndex\",setIndex:\"setFrameIndex\"});class Ns extends de{_sceneFunc(e){var t=this.innerRadius(),i=this.outerRadius(),r=this.numPoints();e.beginPath(),e.moveTo(0,0-i);for(var s=1;s<2*r;s++){var o=s%2==0?i:t,a=o*Math.sin(s*Math.PI/r),c=-1*o*Math.cos(s*Math.PI/r);e.lineTo(a,c)}e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}}function mx(n){n.fillText(this.partialText,0,0)}function yx(n){n.strokeText(this.partialText,0,0)}Ns.prototype.className=\"Star\",Ns.prototype._centroid=!0,Ns.prototype._attrsAffectingSize=[\"innerRadius\",\"outerRadius\"],Jt(Ns),R.addGetterSetter(Ns,\"numPoints\",5,_e()),R.addGetterSetter(Ns,\"innerRadius\",0,_e()),R.addGetterSetter(Ns,\"outerRadius\",0,_e());class Tn extends de{constructor(e){super(e),this.dummyCanvas=G.createCanvasElement(),this.dataArray=[],this.dataArray=Rt.parsePathData(this.attrs.data),this.on(\"dataChange.konva\",function(){this.dataArray=Rt.parsePathData(this.attrs.data),this._setTextData()}),this.on(\"textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva\",this._setTextData),this._setTextData()}_sceneFunc(e){e.setAttr(\"font\",this._getContextFont()),e.setAttr(\"textBaseline\",this.textBaseline()),e.setAttr(\"textAlign\",\"left\"),e.save();var t=this.textDecoration(),i=this.fill(),r=this.fontSize(),s=this.glyphInfo;\"underline\"===t&&e.beginPath();for(var o=0;o<s.length;o++){e.save();var a=s[o].p0;e.translate(a.x,a.y),e.rotate(s[o].rotation),this.partialText=s[o].text,e.fillStrokeShape(this),\"underline\"===t&&(0===o&&e.moveTo(0,r/2+1),e.lineTo(r,r/2+1)),e.restore()}\"underline\"===t&&(e.strokeStyle=i,e.lineWidth=r/20,e.stroke()),e.restore()}_hitFunc(e){e.beginPath();var t=this.glyphInfo;if(t.length>=1){var i=t[0].p0;e.moveTo(i.x,i.y)}for(var r=0;r<t.length;r++){var s=t[r].p1;e.lineTo(s.x,s.y)}e.setAttr(\"lineWidth\",this.fontSize()),e.setAttr(\"strokeStyle\",this.colorKey),e.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return G.warn(\"text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.\"),this.textHeight}setText(e){return Mt.prototype.setText.call(this,e)}_getContextFont(){return Mt.prototype._getContextFont.call(this)}_getTextSize(e){var i=this.dummyCanvas.getContext(\"2d\");i.save(),i.font=this._getContextFont();var r=i.measureText(e);return i.restore(),{width:r.width,height:parseInt(this.attrs.fontSize,10)}}_setTextData(){var e=this,t=this._getTextSize(this.attrs.text),i=this.letterSpacing(),r=this.align(),s=this.kerningFunc();this.textWidth=t.width,this.textHeight=t.height;var o=Math.max(this.textWidth+((this.attrs.text||\"\").length-1)*i,0);this.glyphInfo=[];for(var a=0,c=0;c<e.dataArray.length;c++)e.dataArray[c].pathLength>0&&(a+=e.dataArray[c].pathLength);var l=0;\"center\"===r&&(l=Math.max(0,a/2-o/2)),\"right\"===r&&(l=Math.max(0,a-o));for(var d,p,f,u=ix(this.text()),h=this.text().split(\" \").length-1,m=-1,v=0,C=function(){v=0;for(var Ke=e.dataArray,ze=m+1;ze<Ke.length;ze++){if(Ke[ze].pathLength>0)return m=ze,Ke[ze];\"M\"===Ke[ze].command&&(d={x:Ke[ze].points[0],y:Ke[ze].points[1]})}return{}},I=function(Ke){var ze=e._getTextSize(Ke).width+i;\" \"===Ke&&\"justify\"===r&&(ze+=(a-o)/h);var ht=0,pt=0;for(p=void 0;Math.abs(ze-ht)/ze>.01&&pt<20;){pt++;for(var ue=ht;void 0===f;)(f=C())&&ue+f.pathLength<ze&&(ue+=f.pathLength,f=void 0);if(0===Object.keys(f).length||void 0===d)return;var Ee=!1;switch(f.command){case\"L\":Rt.getLineLength(d.x,d.y,f.points[0],f.points[1])>ze?p=Rt.getPointOnLine(ze,d.x,d.y,f.points[0],f.points[1],d.x,d.y):f=void 0;break;case\"A\":var tt=f.points[5],Ge=f.points[4]+tt;0===v?v=f.points[4]+1e-8:ze>ht?v+=Math.PI/180*tt/Math.abs(tt):v-=Math.PI/360*tt/Math.abs(tt),(tt<0&&v<Ge||tt>=0&&v>Ge)&&(v=Ge,Ee=!0),p=Rt.getPointOnEllipticalArc(f.points[0],f.points[1],f.points[2],f.points[3],v,f.points[6]);break;case\"C\":0===v?v=ze>f.pathLength?1e-8:ze/f.pathLength:ze>ht?v+=(ze-ht)/f.pathLength/2:v=Math.max(v-(ht-ze)/f.pathLength/2,0),v>1&&(v=1,Ee=!0),p=Rt.getPointOnCubicBezier(v,f.start.x,f.start.y,f.points[0],f.points[1],f.points[2],f.points[3],f.points[4],f.points[5]);break;case\"Q\":0===v?v=ze/f.pathLength:ze>ht?v+=(ze-ht)/f.pathLength:v-=(ht-ze)/f.pathLength,v>1&&(v=1,Ee=!0),p=Rt.getPointOnQuadraticBezier(v,f.start.x,f.start.y,f.points[0],f.points[1],f.points[2],f.points[3])}void 0!==p&&(ht=Rt.getLineLength(d.x,d.y,p.x,p.y)),Ee&&(Ee=!1,f=void 0)}},ne=l/(e._getTextSize(\"C\").width+i)-1,se=0;se<ne&&(I(\"C\"),void 0!==d&&void 0!==p);se++)d=p;for(var ce=0;ce<u.length&&(I(u[ce]),void 0!==d&&void 0!==p);ce++){var pe=Rt.getLineLength(d.x,d.y,p.x,p.y),De=0;if(s)try{De=s(u[ce-1],u[ce])*this.fontSize()}catch{De=0}d.x+=De,p.x+=De,this.textWidth+=De;var Me=Rt.getPointOnLine(De+pe/2,d.x,d.y,p.x,p.y),Ve=Math.atan2(p.y-d.y,p.x-d.x);this.glyphInfo.push({transposeX:Me.x,transposeY:Me.y,text:u[ce],rotation:Ve,p0:d,p1:p}),d=p}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};var e=[];this.glyphInfo.forEach(function(u){e.push(u.p0.x),e.push(u.p0.y),e.push(u.p1.x),e.push(u.p1.y)});for(var o,a,t=e[0]||0,i=e[0]||0,r=e[1]||0,s=e[1]||0,c=0;c<e.length/2;c++)o=e[2*c],a=e[2*c+1],t=Math.min(t,o),i=Math.max(i,o),r=Math.min(r,a),s=Math.max(s,a);var l=this.fontSize();return{x:t-l/2,y:r-l/2,width:i-t+l,height:s-r+l}}destroy(){return G.releaseCanvas(this.dummyCanvas),super.destroy()}}Tn.prototype._fillFunc=mx,Tn.prototype._strokeFunc=yx,Tn.prototype._fillFuncHit=mx,Tn.prototype._strokeFuncHit=yx,Tn.prototype.className=\"TextPath\",Tn.prototype._attrsAffectingSize=[\"text\",\"fontSize\",\"data\"],Jt(Tn),R.addGetterSetter(Tn,\"data\"),R.addGetterSetter(Tn,\"fontFamily\",\"Arial\"),R.addGetterSetter(Tn,\"fontSize\",12,_e()),R.addGetterSetter(Tn,\"fontStyle\",\"normal\"),R.addGetterSetter(Tn,\"align\",\"left\"),R.addGetterSetter(Tn,\"letterSpacing\",0,_e()),R.addGetterSetter(Tn,\"textBaseline\",\"middle\"),R.addGetterSetter(Tn,\"fontVariant\",\"normal\"),R.addGetterSetter(Tn,\"text\",\"\"),R.addGetterSetter(Tn,\"textDecoration\",null),R.addGetterSetter(Tn,\"kerningFunc\",null);var vx=\"tr-konva\",XW=[\"resizeEnabledChange\",\"rotateAnchorOffsetChange\",\"rotateEnabledChange\",\"enabledAnchorsChange\",\"anchorSizeChange\",\"borderEnabledChange\",\"borderStrokeChange\",\"borderStrokeWidthChange\",\"borderDashChange\",\"anchorStrokeChange\",\"anchorStrokeWidthChange\",\"anchorFillChange\",\"anchorCornerRadiusChange\",\"ignoreStrokeChange\"].map(n=>n+`.${vx}`).join(\" \"),wx=\"nodesRect\",ZW=[\"widthChange\",\"heightChange\",\"scaleXChange\",\"scaleYChange\",\"skewXChange\",\"skewYChange\",\"rotationChange\",\"offsetXChange\",\"offsetYChange\",\"transformsEnabledChange\",\"strokeWidthChange\"],QW={\"top-left\":-45,\"top-center\":0,\"top-right\":45,\"middle-right\":-90,\"middle-left\":90,\"bottom-left\":-135,\"bottom-center\":180,\"bottom-right\":135};const JW=\"ontouchstart\"in Re._global;var Nf=[\"top-left\",\"top-center\",\"top-right\",\"middle-right\",\"middle-left\",\"bottom-left\",\"bottom-center\",\"bottom-right\"],Ex=1e8;function bx(n,e,t){const i=t.x+(n.x-t.x)*Math.cos(e)-(n.y-t.y)*Math.sin(e),r=t.y+(n.x-t.x)*Math.sin(e)+(n.y-t.y)*Math.cos(e);return Object.assign(Object.assign({},n),{rotation:n.rotation+e,x:i,y:r})}class Dt extends rs{constructor(e){super(e),this._transforming=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this.on(XW,this.update),this.getNode()&&this.update()}attachTo(e){return this.setNode(e),this}setNode(e){return G.warn(\"tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead.\"),this.setNodes([e])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return vx+this._id}setNodes(e=[]){this._nodes&&this._nodes.length&&this.detach();const t=e.filter(r=>!r.isAncestorOf(this)||(G.error(\"Konva.Transformer cannot be an a child of the node you are trying to attach\"),!1));return this._nodes=e=t,1===e.length&&this.useSingleNodeRotation()?this.rotation(e[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(r=>{const s=()=>{1===this.nodes().length&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},o=r._attrsAffectingSize.map(a=>a+\"Change.\"+this._getEventNamespace()).join(\" \");r.on(o,s),r.on(ZW.map(a=>a+`.${this._getEventNamespace()}`).join(\" \"),s),r.on(`absoluteTransformChange.${this._getEventNamespace()}`,s),this._proxyDrag(r)}),this._resetTransformCache(),!!this.findOne(\".top-left\")&&this.update(),this}_proxyDrag(e){let t;e.on(`dragstart.${this._getEventNamespace()}`,i=>{t=e.getAbsolutePosition(),!this.isDragging()&&e!==this.findOne(\".back\")&&this.startDrag(i,!1)}),e.on(`dragmove.${this._getEventNamespace()}`,i=>{if(!t)return;const r=e.getAbsolutePosition(),s=r.x-t.x,o=r.y-t.y;this.nodes().forEach(a=>{if(a===e||a.isDragging())return;const c=a.getAbsolutePosition();a.setAbsolutePosition({x:c.x+s,y:c.y+o}),a.startDrag(i)}),t=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(e=>{e.off(\".\"+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(wx),this._clearCache(\"transform\"),this._clearSelfAndDescendantCache(\"absoluteTransform\")}_getNodeRect(){return this._getCache(wx,this.__getNodeRect)}__getNodeShape(e,t=this.rotation(),i){var r=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),s=e.getAbsoluteScale(i),o=e.getAbsolutePosition(i),a=r.x*s.x-e.offsetX()*s.x,c=r.y*s.y-e.offsetY()*s.y;const l=(Re.getAngle(e.getAbsoluteRotation())+2*Math.PI)%(2*Math.PI);return bx({x:o.x+a*Math.cos(l)+c*Math.sin(-l),y:o.y+c*Math.cos(l)+a*Math.sin(l),width:r.width*s.x,height:r.height*s.y,rotation:l},-Re.getAngle(t),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-Ex,y:-Ex,width:0,height:0,rotation:0};const t=[];this.nodes().map(l=>{const u=l.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var h=[{x:u.x,y:u.y},{x:u.x+u.width,y:u.y},{x:u.x+u.width,y:u.y+u.height},{x:u.x,y:u.y+u.height}],d=l.getAbsoluteTransform();h.forEach(function(p){var f=d.point(p);t.push(f)})});const i=new Ci;var r,s,o,a;i.rotate(-Re.getAngle(this.rotation())),t.forEach(function(l){var u=i.point(l);void 0===r&&(r=o=u.x,s=a=u.y),r=Math.min(r,u.x),s=Math.min(s,u.y),o=Math.max(o,u.x),a=Math.max(a,u.y)}),i.invert();const c=i.point({x:r,y:s});return{x:c.x,y:c.y,width:o-r,height:a-s,rotation:Re.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),Nf.forEach(function(e){this._createAnchor(e)}.bind(this)),this._createAnchor(\"rotater\")}_createAnchor(e){var t=new Ja({stroke:\"rgb(0, 161, 255)\",fill:\"white\",strokeWidth:1,name:e+\" _anchor\",dragDistance:0,draggable:!0,hitStrokeWidth:JW?10:\"auto\"}),i=this;t.on(\"mousedown touchstart\",function(r){i._handleMouseDown(r)}),t.on(\"dragstart\",r=>{t.stopDrag(),r.cancelBubble=!0}),t.on(\"dragend\",r=>{r.cancelBubble=!0}),t.on(\"mouseenter\",()=>{var r=Re.getAngle(this.rotation()),s=function e6(n,e){if(\"rotater\"===n)return\"crosshair\";e+=G.degToRad(QW[n]||0);var t=(G.radToDeg(e)%360+360)%360;return G._inRange(t,337.5,360)||G._inRange(t,0,22.5)?\"ns-resize\":G._inRange(t,22.5,67.5)?\"nesw-resize\":G._inRange(t,67.5,112.5)?\"ew-resize\":G._inRange(t,112.5,157.5)?\"nwse-resize\":G._inRange(t,157.5,202.5)?\"ns-resize\":G._inRange(t,202.5,247.5)?\"nesw-resize\":G._inRange(t,247.5,292.5)?\"ew-resize\":G._inRange(t,292.5,337.5)?\"nwse-resize\":(G.error(\"Transformer has unknown angle for cursor detection: \"+t),\"pointer\")}(e,r);t.getStage().content&&(t.getStage().content.style.cursor=s),this._cursorChange=!0}),t.on(\"mouseout\",()=>{t.getStage().content&&(t.getStage().content.style.cursor=\"\"),this._cursorChange=!1}),this.add(t)}_createBack(){var e=new de({name:\"back\",width:0,height:0,draggable:!0,sceneFunc(t){var i=this.getParent(),r=i.padding();t.beginPath(),t.rect(-r,-r,this.width()+2*r,this.height()+2*r),t.moveTo(this.width()/2,-r),i.rotateEnabled()&&t.lineTo(this.width()/2,-i.rotateAnchorOffset()*G._sign(this.height())-r),t.fillStrokeShape(this)},hitFunc:(t,i)=>{if(this.shouldOverdrawWholeArea()){var r=this.padding();t.beginPath(),t.rect(-r,-r,i.width()+2*r,i.height()+2*r),t.fillStrokeShape(i)}}});this.add(e),this._proxyDrag(e),e.on(\"dragstart\",t=>{t.cancelBubble=!0}),e.on(\"dragmove\",t=>{t.cancelBubble=!0}),e.on(\"dragend\",t=>{t.cancelBubble=!0}),this.on(\"dragmove\",t=>{this.update()})}_handleMouseDown(e){this._movingAnchorName=e.target.name().split(\" \")[0];var t=this._getNodeRect(),i=t.width,r=t.height,s=Math.sqrt(Math.pow(i,2)+Math.pow(r,2));this.sin=Math.abs(r/s),this.cos=Math.abs(i/s),typeof window<\"u\"&&(window.addEventListener(\"mousemove\",this._handleMouseMove),window.addEventListener(\"touchmove\",this._handleMouseMove),window.addEventListener(\"mouseup\",this._handleMouseUp,!0),window.addEventListener(\"touchend\",this._handleMouseUp,!0)),this._transforming=!0;var o=e.target.getAbsolutePosition(),a=e.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-o.x,y:a.y-o.y},this._fire(\"transformstart\",{evt:e.evt,target:this.getNode()}),this._nodes.forEach(c=>{c._fire(\"transformstart\",{evt:e.evt,target:c})})}_handleMouseMove(e){var t,i,r,s=this.findOne(\".\"+this._movingAnchorName),o=s.getStage();o.setPointersPositions(e);const a=o.getPointerPosition();let c={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const l=s.getAbsolutePosition();this.anchorDragBoundFunc()&&(c=this.anchorDragBoundFunc()(l,c,e)),s.setAbsolutePosition(c);const u=s.getAbsolutePosition();if(l.x!==u.x||l.y!==u.y){if(\"rotater\"===this._movingAnchorName){var h=this._getNodeRect();t=s.x()-h.width/2,i=-s.y()+h.height/2;let Ke=Math.atan2(-i,t)+Math.PI/2;h.height<0&&(Ke-=Math.PI);const ze=Re.getAngle(this.rotation())+Ke,ht=Re.getAngle(this.rotationSnapTolerance()),ue=function i6(n,e,t){let i=e;for(let r=0;r<n.length;r++){const s=Re.getAngle(n[r]),o=Math.abs(s-e)%(2*Math.PI);Math.min(o,2*Math.PI-o)<t&&(i=s)}return i}(this.rotationSnaps(),ze,ht)-h.rotation,Ee=function n6(n,e){const t=function t6(n){return{x:n.x+n.width/2*Math.cos(n.rotation)+n.height/2*Math.sin(-n.rotation),y:n.y+n.height/2*Math.cos(n.rotation)+n.width/2*Math.sin(n.rotation)}}(n);return bx(n,e,t)}(h,ue);return void this._fitNodesInto(Ee,e)}var p=this.keepRatio()||e.shiftKey,I=this.centeredScaling()||e.altKey;if(\"top-left\"===this._movingAnchorName){if(p){var f=I?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-right\").x(),y:this.findOne(\".bottom-right\").y()};r=Math.sqrt(Math.pow(f.x-s.x(),2)+Math.pow(f.y-s.y(),2));var m=this.findOne(\".top-left\").x()>f.x?-1:1,v=this.findOne(\".top-left\").y()>f.y?-1:1;t=r*this.cos*m,i=r*this.sin*v,this.findOne(\".top-left\").x(f.x-t),this.findOne(\".top-left\").y(f.y-i)}}else if(\"top-center\"===this._movingAnchorName)this.findOne(\".top-left\").y(s.y());else if(\"top-right\"===this._movingAnchorName){p&&(f=I?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".bottom-left\").x(),y:this.findOne(\".bottom-left\").y()},r=Math.sqrt(Math.pow(s.x()-f.x,2)+Math.pow(f.y-s.y(),2)),m=this.findOne(\".top-right\").x()<f.x?-1:1,v=this.findOne(\".top-right\").y()>f.y?-1:1,t=r*this.cos*m,i=r*this.sin*v,this.findOne(\".top-right\").x(f.x+t),this.findOne(\".top-right\").y(f.y-i));var C=s.position();this.findOne(\".top-left\").y(C.y),this.findOne(\".bottom-right\").x(C.x)}else\"middle-left\"===this._movingAnchorName?this.findOne(\".top-left\").x(s.x()):\"middle-right\"===this._movingAnchorName?this.findOne(\".bottom-right\").x(s.x()):\"bottom-left\"===this._movingAnchorName?(p&&(f=I?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-right\").x(),y:this.findOne(\".top-right\").y()},r=Math.sqrt(Math.pow(f.x-s.x(),2)+Math.pow(s.y()-f.y,2)),m=f.x<s.x()?-1:1,v=s.y()<f.y?-1:1,i=r*this.sin*v,s.x(f.x-(t=r*this.cos*m)),s.y(f.y+i)),C=s.position(),this.findOne(\".top-left\").x(C.x),this.findOne(\".bottom-right\").y(C.y)):\"bottom-center\"===this._movingAnchorName?this.findOne(\".bottom-right\").y(s.y()):\"bottom-right\"===this._movingAnchorName?p&&(f=I?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(\".top-left\").x(),y:this.findOne(\".top-left\").y()},r=Math.sqrt(Math.pow(s.x()-f.x,2)+Math.pow(s.y()-f.y,2)),m=this.findOne(\".bottom-right\").x()<f.x?-1:1,v=this.findOne(\".bottom-right\").y()<f.y?-1:1,t=r*this.cos*m,i=r*this.sin*v,this.findOne(\".bottom-right\").x(f.x+t),this.findOne(\".bottom-right\").y(f.y+i)):console.error(new Error(\"Wrong position argument of selection resizer: \"+this._movingAnchorName));if(I=this.centeredScaling()||e.altKey){var L=this.findOne(\".top-left\"),H=this.findOne(\".bottom-right\"),ne=L.x(),se=L.y(),ce=this.getWidth()-H.x(),pe=this.getHeight()-H.y();H.move({x:-ne,y:-se}),L.move({x:ce,y:pe})}var De=this.findOne(\".top-left\").getAbsolutePosition();t=De.x,i=De.y;var Me=this.findOne(\".bottom-right\").x()-this.findOne(\".top-left\").x(),Ve=this.findOne(\".bottom-right\").y()-this.findOne(\".top-left\").y();this._fitNodesInto({x:t,y:i,width:Me,height:Ve,rotation:Re.getAngle(this.rotation())},e)}}_handleMouseUp(e){this._removeEvents(e)}getAbsoluteTransform(){return this.getTransform()}_removeEvents(e){if(this._transforming){this._transforming=!1,typeof window<\"u\"&&(window.removeEventListener(\"mousemove\",this._handleMouseMove),window.removeEventListener(\"touchmove\",this._handleMouseMove),window.removeEventListener(\"mouseup\",this._handleMouseUp,!0),window.removeEventListener(\"touchend\",this._handleMouseUp,!0));var t=this.getNode();this._fire(\"transformend\",{evt:e,target:t}),t&&this._nodes.forEach(i=>{i._fire(\"transformend\",{evt:e,target:i})}),this._movingAnchorName=null}}_fitNodesInto(e,t){var i=this._getNodeRect();if(G._inRange(e.width,2*-this.padding()-1,1))return void this.update();if(G._inRange(e.height,2*-this.padding()-1,1))return void this.update();const s=this.flipEnabled();var o=new Ci;if(o.rotate(Re.getAngle(this.rotation())),this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(\"left\")>=0){const h=o.point({x:2*-this.padding(),y:0});if(e.x+=h.x,e.y+=h.y,e.width+=2*this.padding(),this._movingAnchorName=this._movingAnchorName.replace(\"left\",\"right\"),this._anchorDragOffset.x-=h.x,this._anchorDragOffset.y-=h.y,!s)return void this.update()}else if(this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(\"right\")>=0){const h=o.point({x:2*this.padding(),y:0});if(this._movingAnchorName=this._movingAnchorName.replace(\"right\",\"left\"),this._anchorDragOffset.x-=h.x,this._anchorDragOffset.y-=h.y,e.width+=2*this.padding(),!s)return void this.update()}if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(\"top\")>=0){const h=o.point({x:0,y:2*-this.padding()});if(e.x+=h.x,e.y+=h.y,this._movingAnchorName=this._movingAnchorName.replace(\"top\",\"bottom\"),this._anchorDragOffset.x-=h.x,this._anchorDragOffset.y-=h.y,e.height+=2*this.padding(),!s)return void this.update()}else if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(\"bottom\")>=0){const h=o.point({x:0,y:2*this.padding()});if(this._movingAnchorName=this._movingAnchorName.replace(\"bottom\",\"top\"),this._anchorDragOffset.x-=h.x,this._anchorDragOffset.y-=h.y,e.height+=2*this.padding(),!s)return void this.update()}if(this.boundBoxFunc()){const h=this.boundBoxFunc()(i,e);h?e=h:G.warn(\"boundBoxFunc returned falsy. You should return new bound rect from it!\")}const a=1e7,c=new Ci;c.translate(i.x,i.y),c.rotate(i.rotation),c.scale(i.width/a,i.height/a);const l=new Ci;l.translate(e.x,e.y),l.rotate(e.rotation),l.scale(e.width/a,e.height/a);const u=l.multiply(c.invert());this._nodes.forEach(h=>{var d;const p=h.getParent().getAbsoluteTransform(),f=h.getTransform().copy();f.translate(h.offsetX(),h.offsetY());const m=new Ci;m.multiply(p.copy().invert()).multiply(u).multiply(p).multiply(f);const v=m.decompose();h.setAttrs(v),this._fire(\"transform\",{evt:t,target:h}),h._fire(\"transform\",{evt:t,target:h}),null===(d=h.getLayer())||void 0===d||d.batchDraw()}),this.rotation(G._getRotation(e.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(e,t){this.findOne(e).setAttrs(t)}update(){var e,t=this._getNodeRect();this.rotation(G._getRotation(t.rotation));var i=t.width,r=t.height,s=this.enabledAnchors(),o=this.resizeEnabled(),a=this.padding(),c=this.anchorSize();this.find(\"._anchor\").forEach(l=>{l.setAttrs({width:c,height:c,offsetX:c/2,offsetY:c/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(\".top-left\",{x:0,y:0,offsetX:c/2+a,offsetY:c/2+a,visible:o&&s.indexOf(\"top-left\")>=0}),this._batchChangeChild(\".top-center\",{x:i/2,y:0,offsetY:c/2+a,visible:o&&s.indexOf(\"top-center\")>=0}),this._batchChangeChild(\".top-right\",{x:i,y:0,offsetX:c/2-a,offsetY:c/2+a,visible:o&&s.indexOf(\"top-right\")>=0}),this._batchChangeChild(\".middle-left\",{x:0,y:r/2,offsetX:c/2+a,visible:o&&s.indexOf(\"middle-left\")>=0}),this._batchChangeChild(\".middle-right\",{x:i,y:r/2,offsetX:c/2-a,visible:o&&s.indexOf(\"middle-right\")>=0}),this._batchChangeChild(\".bottom-left\",{x:0,y:r,offsetX:c/2+a,offsetY:c/2-a,visible:o&&s.indexOf(\"bottom-left\")>=0}),this._batchChangeChild(\".bottom-center\",{x:i/2,y:r,offsetY:c/2-a,visible:o&&s.indexOf(\"bottom-center\")>=0}),this._batchChangeChild(\".bottom-right\",{x:i,y:r,offsetX:c/2-a,offsetY:c/2-a,visible:o&&s.indexOf(\"bottom-right\")>=0}),this._batchChangeChild(\".rotater\",{x:i/2,y:-this.rotateAnchorOffset()*G._sign(r)-a,visible:this.rotateEnabled()}),this._batchChangeChild(\".back\",{width:i,height:r,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0}),null===(e=this.getLayer())||void 0===e||e.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var e=this.findOne(\".\"+this._movingAnchorName);e&&e.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=\"\"),rs.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return me.prototype.toObject.call(this)}clone(e){return me.prototype.clone.call(this,e)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}Dt.prototype.className=\"Transformer\",Jt(Dt),R.addGetterSetter(Dt,\"enabledAnchors\",Nf,function r6(n){return n instanceof Array||G.warn(\"enabledAnchors value should be an array\"),n instanceof Array&&n.forEach(function(e){-1===Nf.indexOf(e)&&G.warn(\"Unknown anchor name: \"+e+\". Available names are: \"+Nf.join(\", \"))}),n||[]}),R.addGetterSetter(Dt,\"flipEnabled\",!0,or()),R.addGetterSetter(Dt,\"resizeEnabled\",!0),R.addGetterSetter(Dt,\"anchorSize\",10,_e()),R.addGetterSetter(Dt,\"rotateEnabled\",!0),R.addGetterSetter(Dt,\"rotationSnaps\",[]),R.addGetterSetter(Dt,\"rotateAnchorOffset\",50,_e()),R.addGetterSetter(Dt,\"rotationSnapTolerance\",5,_e()),R.addGetterSetter(Dt,\"borderEnabled\",!0),R.addGetterSetter(Dt,\"anchorStroke\",\"rgb(0, 161, 255)\"),R.addGetterSetter(Dt,\"anchorStrokeWidth\",1,_e()),R.addGetterSetter(Dt,\"anchorFill\",\"white\"),R.addGetterSetter(Dt,\"anchorCornerRadius\",0,_e()),R.addGetterSetter(Dt,\"borderStroke\",\"rgb(0, 161, 255)\"),R.addGetterSetter(Dt,\"borderStrokeWidth\",1,_e()),R.addGetterSetter(Dt,\"borderDash\"),R.addGetterSetter(Dt,\"keepRatio\",!0),R.addGetterSetter(Dt,\"centeredScaling\",!1),R.addGetterSetter(Dt,\"ignoreStroke\",!1),R.addGetterSetter(Dt,\"padding\",0,_e()),R.addGetterSetter(Dt,\"node\"),R.addGetterSetter(Dt,\"nodes\"),R.addGetterSetter(Dt,\"boundBoxFunc\"),R.addGetterSetter(Dt,\"anchorDragBoundFunc\"),R.addGetterSetter(Dt,\"shouldOverdrawWholeArea\",!1),R.addGetterSetter(Dt,\"useSingleNodeRotation\",!0),R.backCompat(Dt,{lineEnabled:\"borderEnabled\",rotateHandlerOffset:\"rotateAnchorOffset\",enabledHandlers:\"enabledAnchors\"});class ss extends de{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.radius(),0,Re.getAngle(this.angle()),this.clockwise()),e.lineTo(0,0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}}function Sx(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}ss.prototype.className=\"Wedge\",ss.prototype._centroid=!0,ss.prototype._attrsAffectingSize=[\"radius\"],Jt(ss),R.addGetterSetter(ss,\"radius\",0,_e()),R.addGetterSetter(ss,\"angle\",0,_e()),R.addGetterSetter(ss,\"clockwise\",!1),R.backCompat(ss,{angleDeg:\"angle\",getAngleDeg:\"getAngle\",setAngleDeg:\"setAngle\"});var s6=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],o6=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Ov(n,e,t,i,r){var s=t-e,o=r-i;return 0===s?i+o/2:0===o?i:o*((n-e)/s)+i}function kf(n,e,t){var i=4*(t*n.width+e),r=[];return r.push(n.data[i++],n.data[i++],n.data[i++],n.data[i++]),r}function au(n,e){return Math.sqrt(Math.pow(n[0]-e[0],2)+Math.pow(n[1]-e[1],2)+Math.pow(n[2]-e[2],2))}R.addGetterSetter(me,\"blurRadius\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"brightness\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"contrast\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"embossStrength\",.5,_e(),R.afterSetFilter),R.addGetterSetter(me,\"embossWhiteLevel\",.5,_e(),R.afterSetFilter),R.addGetterSetter(me,\"embossDirection\",\"top-left\",null,R.afterSetFilter),R.addGetterSetter(me,\"embossBlend\",!1,null,R.afterSetFilter),R.addGetterSetter(me,\"enhance\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"hue\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"saturation\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"luminance\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"hue\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"saturation\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"value\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"kaleidoscopePower\",2,_e(),R.afterSetFilter),R.addGetterSetter(me,\"kaleidoscopeAngle\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"threshold\",0,_e(),R.afterSetFilter),R.addGetterSetter(me,\"noise\",.2,_e(),R.afterSetFilter),R.addGetterSetter(me,\"pixelSize\",8,_e(),R.afterSetFilter),R.addGetterSetter(me,\"levels\",.5,_e(),R.afterSetFilter),R.addGetterSetter(me,\"red\",0,function(n){return this._filterUpToDate=!1,n>255?255:n<0?0:Math.round(n)}),R.addGetterSetter(me,\"green\",0,function(n){return this._filterUpToDate=!1,n>255?255:n<0?0:Math.round(n)}),R.addGetterSetter(me,\"blue\",0,CM,R.afterSetFilter),R.addGetterSetter(me,\"red\",0,function(n){return this._filterUpToDate=!1,n>255?255:n<0?0:Math.round(n)}),R.addGetterSetter(me,\"green\",0,function(n){return this._filterUpToDate=!1,n>255?255:n<0?0:Math.round(n)}),R.addGetterSetter(me,\"blue\",0,CM,R.afterSetFilter),R.addGetterSetter(me,\"alpha\",1,function(n){return this._filterUpToDate=!1,n>1?1:n<0?0:n}),R.addGetterSetter(me,\"threshold\",.5,_e(),R.afterSetFilter);const Eo=px.Util._assign(px,{Arc:xr,Arrow:Bi,Circle:mo,Ellipse:Rs,Image:ji,Label:ec,Tag:yo,Line:An,Path:Rt,Rect:Ja,RegularPolygon:vo,Ring:wo,Sprite:Pr,Star:Ns,Text:Mt,TextPath:Tn,Transformer:Dt,Wedge:ss,Filters:{Blur:function(e){var t=Math.round(this.blurRadius());t>0&&function a6(n,e){var s,o,a,c,l,u,h,d,p,f,m,v,C,I,L,H,ne,se,ce,pe,De,Me,Ve,Ke,t=n.data,i=n.width,r=n.height,ze=e+e+1,ht=i-1,pt=r-1,ue=e+1,Ee=ue*(ue+1)/2,Ae=new Sx,tt=null,Ge=Ae,gt=null,Nt=null,Bn=s6[e],yt=o6[e];for(a=1;a<ze;a++)Ge=Ge.next=new Sx,a===ue&&(tt=Ge);for(Ge.next=Ae,h=u=0,o=0;o<r;o++){for(H=ne=se=ce=d=p=f=m=0,v=ue*(pe=t[u]),C=ue*(De=t[u+1]),I=ue*(Me=t[u+2]),L=ue*(Ve=t[u+3]),d+=Ee*pe,p+=Ee*De,f+=Ee*Me,m+=Ee*Ve,Ge=Ae,a=0;a<ue;a++)Ge.r=pe,Ge.g=De,Ge.b=Me,Ge.a=Ve,Ge=Ge.next;for(a=1;a<ue;a++)d+=(Ge.r=pe=t[c=u+((ht<a?ht:a)<<2)])*(Ke=ue-a),p+=(Ge.g=De=t[c+1])*Ke,f+=(Ge.b=Me=t[c+2])*Ke,m+=(Ge.a=Ve=t[c+3])*Ke,H+=pe,ne+=De,se+=Me,ce+=Ve,Ge=Ge.next;for(gt=Ae,Nt=tt,s=0;s<i;s++)t[u+3]=Ve=m*Bn>>yt,0!==Ve?(t[u]=(d*Bn>>yt)*(Ve=255/Ve),t[u+1]=(p*Bn>>yt)*Ve,t[u+2]=(f*Bn>>yt)*Ve):t[u]=t[u+1]=t[u+2]=0,d-=v,p-=C,f-=I,m-=L,v-=gt.r,C-=gt.g,I-=gt.b,L-=gt.a,c=h+((c=s+e+1)<ht?c:ht)<<2,d+=H+=gt.r=t[c],p+=ne+=gt.g=t[c+1],f+=se+=gt.b=t[c+2],m+=ce+=gt.a=t[c+3],gt=gt.next,v+=pe=Nt.r,C+=De=Nt.g,I+=Me=Nt.b,L+=Ve=Nt.a,H-=pe,ne-=De,se-=Me,ce-=Ve,Nt=Nt.next,u+=4;h+=i}for(s=0;s<i;s++){for(ne=se=ce=H=p=f=m=d=0,v=ue*(pe=t[u=s<<2]),C=ue*(De=t[u+1]),I=ue*(Me=t[u+2]),L=ue*(Ve=t[u+3]),d+=Ee*pe,p+=Ee*De,f+=Ee*Me,m+=Ee*Ve,Ge=Ae,a=0;a<ue;a++)Ge.r=pe,Ge.g=De,Ge.b=Me,Ge.a=Ve,Ge=Ge.next;for(l=i,a=1;a<=e;a++)d+=(Ge.r=pe=t[u=l+s<<2])*(Ke=ue-a),p+=(Ge.g=De=t[u+1])*Ke,f+=(Ge.b=Me=t[u+2])*Ke,m+=(Ge.a=Ve=t[u+3])*Ke,H+=pe,ne+=De,se+=Me,ce+=Ve,Ge=Ge.next,a<pt&&(l+=i);for(u=s,gt=Ae,Nt=tt,o=0;o<r;o++)t[3+(c=u<<2)]=Ve=m*Bn>>yt,Ve>0?(t[c]=(d*Bn>>yt)*(Ve=255/Ve),t[c+1]=(p*Bn>>yt)*Ve,t[c+2]=(f*Bn>>yt)*Ve):t[c]=t[c+1]=t[c+2]=0,d-=v,p-=C,f-=I,m-=L,v-=gt.r,C-=gt.g,I-=gt.b,L-=gt.a,c=s+((c=o+ue)<pt?c:pt)*i<<2,d+=H+=gt.r=t[c],p+=ne+=gt.g=t[c+1],f+=se+=gt.b=t[c+2],m+=ce+=gt.a=t[c+3],gt=gt.next,v+=pe=Nt.r,C+=De=Nt.g,I+=Me=Nt.b,L+=Ve=Nt.a,H-=pe,ne-=De,se-=Me,ce-=Ve,Nt=Nt.next,u+=i}}(e,t)},Brighten:function(n){var r,e=255*this.brightness(),t=n.data,i=t.length;for(r=0;r<i;r+=4)t[r]+=e,t[r+1]+=e,t[r+2]+=e},Contrast:function(n){var a,e=Math.pow((this.contrast()+100)/100,2),t=n.data,i=t.length,r=150,s=150,o=150;for(a=0;a<i;a+=4)r=t[a],s=t[a+1],o=t[a+2],r/=255,r-=.5,r*=e,r+=.5,s/=255,s-=.5,s*=e,s+=.5,o/=255,o-=.5,o*=e,o+=.5,s=(s*=255)<0?0:s>255?255:s,o=(o*=255)<0?0:o>255?255:o,t[a]=r=(r*=255)<0?0:r>255?255:r,t[a+1]=s,t[a+2]=o},Emboss:function(n){var e=10*this.embossStrength(),t=255*this.embossWhiteLevel(),i=this.embossDirection(),r=this.embossBlend(),s=0,o=0,a=n.data,c=n.width,l=n.height,u=4*c,h=l;switch(i){case\"top-left\":s=-1,o=-1;break;case\"top\":s=-1,o=0;break;case\"top-right\":s=-1,o=1;break;case\"right\":s=0,o=1;break;case\"bottom-right\":s=1,o=1;break;case\"bottom\":s=1,o=0;break;case\"bottom-left\":s=1,o=-1;break;case\"left\":s=0,o=-1;break;default:G.error(\"Unknown emboss direction: \"+i)}do{var d=(h-1)*u,p=s;h+p<1&&(p=0),h+p>l&&(p=0);var f=(h-1+p)*c*4,m=c;do{var v=d+4*(m-1),C=o;m+C<1&&(C=0),m+C>c&&(C=0);var I=f+4*(m-1+C),H=a[v+1]-a[I+1],ne=a[v+2]-a[I+2],se=a[v]-a[I],ce=se>0?se:-se;if((H>0?H:-H)>ce&&(se=H),(ne>0?ne:-ne)>ce&&(se=ne),se*=e,r){var Me=a[v]+se,Ve=a[v+1]+se,Ke=a[v+2]+se;a[v]=Me>255?255:Me<0?0:Me,a[v+1]=Ve>255?255:Ve<0?0:Ve,a[v+2]=Ke>255?255:Ke<0?0:Ke}else{var ze=t-se;ze<0?ze=0:ze>255&&(ze=255),a[v]=a[v+1]=a[v+2]=ze}}while(--m)}while(--h)},Enhance:function(n){var s,c,h,d,e=n.data,t=e.length,i=e[0],r=i,o=e[1],a=o,l=e[2],u=l,p=this.enhance();if(0!==p){for(d=0;d<t;d+=4)(s=e[d+0])<i?i=s:s>r&&(r=s),(c=e[d+1])<o?o=c:c>a&&(a=c),(h=e[d+2])<l?l=h:h>u&&(u=h);var f,m,v,C,I,L,H,ne,se;for(r===i&&(r=255,i=0),a===o&&(a=255,o=0),u===l&&(u=255,l=0),p>0?(m=r+p*(255-r),v=i-p*(i-0),I=a+p*(255-a),L=o-p*(o-0),ne=u+p*(255-u),se=l-p*(l-0)):(m=r+p*(r-(f=.5*(r+i))),v=i+p*(i-f),I=a+p*(a-(C=.5*(a+o))),L=o+p*(o-C),ne=u+p*(u-(H=.5*(u+l))),se=l+p*(l-H)),d=0;d<t;d+=4)e[d+0]=Ov(e[d+0],i,r,v,m),e[d+1]=Ov(e[d+1],o,a,L,I),e[d+2]=Ov(e[d+2],l,u,se,ne)}},Grayscale:function(n){var i,r,e=n.data,t=e.length;for(i=0;i<t;i+=4)e[i]=r=.34*e[i]+.5*e[i+1]+.16*e[i+2],e[i+1]=r,e[i+2]=r},HSL:function(n){var a,L,H,ne,se,e=n.data,t=e.length,r=Math.pow(2,this.saturation()),s=Math.abs(this.hue()+360)%360,o=127*this.luminance(),c=1*r*Math.cos(s*Math.PI/180),l=1*r*Math.sin(s*Math.PI/180),u=.299+.701*c+.167*l,h=.587-.587*c+.33*l,d=.114-.114*c-.497*l,p=.299-.299*c-.328*l,f=.587+.413*c+.035*l,m=.114-.114*c+.293*l,v=.299-.3*c+1.25*l,C=.587-.586*c-1.05*l,I=.114+.886*c-.2*l;for(a=0;a<t;a+=4)se=e[a+3],e[a+0]=u*(L=e[a+0])+h*(H=e[a+1])+d*(ne=e[a+2])+o,e[a+1]=p*L+f*H+m*ne+o,e[a+2]=v*L+C*H+I*ne+o,e[a+3]=se},HSV:function(n){var o,I,L,H,ne,e=n.data,t=e.length,i=Math.pow(2,this.value()),r=Math.pow(2,this.saturation()),s=Math.abs(this.hue()+360)%360,a=i*r*Math.cos(s*Math.PI/180),c=i*r*Math.sin(s*Math.PI/180),l=.299*i+.701*a+.167*c,u=.587*i-.587*a+.33*c,h=.114*i-.114*a-.497*c,d=.299*i-.299*a-.328*c,p=.587*i+.413*a+.035*c,f=.114*i-.114*a+.293*c,m=.299*i-.3*a+1.25*c,v=.587*i-.586*a-1.05*c,C=.114*i+.886*a-.2*c;for(o=0;o<t;o+=4)ne=e[o+3],e[o+0]=l*(I=e[o+0])+u*(L=e[o+1])+h*(H=e[o+2]),e[o+1]=d*I+p*L+f*H,e[o+2]=m*I+v*L+C*H,e[o+3]=ne},Invert:function(n){var i,e=n.data,t=e.length;for(i=0;i<t;i+=4)e[i]=255-e[i],e[i+1]=255-e[i+1],e[i+2]=255-e[i+2]},Kaleidoscope:function(n){var i,r,s,o,c,l,u,h,d,e=n.width,t=n.height,p=Math.round(this.kaleidoscopePower()),f=Math.round(this.kaleidoscopeAngle()),m=Math.floor(e*(f%360)/360);if(!(p<1)){var v=G.createCanvasElement();v.width=e,v.height=t;var C=v.getContext(\"2d\").getImageData(0,0,e,t);G.releaseCanvas(v),function(n,e,t){var l,u,h,v,i=n.data,r=e.data,s=n.width,o=n.height,a=t.polarCenterX||s/2,c=t.polarCenterY||o/2,d=0,p=0,f=0,m=0,C=Math.sqrt(a*a+c*c);u=s-a,h=o-c,C=(v=Math.sqrt(u*u+h*h))>C?v:C;var H,ne,ce,pe,I=o,L=s,se=360/L*Math.PI/180;for(ne=0;ne<L;ne+=1)for(ce=Math.sin(ne*se),pe=Math.cos(ne*se),H=0;H<I;H+=1)u=Math.floor(a+C*H/I*pe),d=i[0+(l=4*((h=Math.floor(c+C*H/I*ce))*s+u))],p=i[l+1],f=i[l+2],m=i[l+3],r[0+(l=4*(ne+H*s))]=d,r[l+1]=p,r[l+2]=f,r[l+3]=m}(n,C,{polarCenterX:e/2,polarCenterY:t/2});for(var I=e/Math.pow(2,p);I<=8;)I*=2,p-=1;var L=I=Math.ceil(I),H=0,ne=L,se=1;for(m+I>e&&(H=L,ne=0,se=-1),r=0;r<t;r+=1)for(i=H;i!==ne;i+=se)s=Math.round(i+m)%e,c=C.data[1+(h=4*(e*r+s))],l=C.data[h+2],u=C.data[h+3],C.data[0+(d=4*(e*r+i))]=C.data[h+0],C.data[d+1]=c,C.data[d+2]=l,C.data[d+3]=u;for(r=0;r<t;r+=1)for(L=Math.floor(I),o=0;o<p;o+=1){for(i=0;i<L+1;i+=1)c=C.data[1+(h=4*(e*r+i))],l=C.data[h+2],u=C.data[h+3],C.data[0+(d=4*(e*r+2*L-i-1))]=C.data[h+0],C.data[d+1]=c,C.data[d+2]=l,C.data[d+3]=u;L*=2}!function(n,e,t){var l,u,h,d,p,I,i=n.data,r=e.data,s=n.width,o=n.height,a=t.polarCenterX||s/2,c=t.polarCenterY||o/2,f=0,m=0,v=0,C=0,L=Math.sqrt(a*a+c*c);u=s-a,h=o-c,L=(I=Math.sqrt(u*u+h*h))>L?I:L;var se,ce,De,H=o,ne=s,pe=t.polarRotation||0;for(u=0;u<s;u+=1)for(h=0;h<o;h+=1)d=u-a,p=h-c,se=Math.sqrt(d*d+p*p)*H/L,ce=(ce=(180*Math.atan2(p,d)/Math.PI+360+pe)%360)*ne/360,De=Math.floor(ce),f=i[0+(l=4*(Math.floor(se)*s+De))],m=i[l+1],v=i[l+2],C=i[l+3],r[0+(l=4*(h*s+u))]=f,r[l+1]=m,r[l+2]=v,r[l+3]=C}(C,n,{polarRotation:0})}},Mask:function(n){var t=function E6(n,e){var t=kf(n,0,0),i=kf(n,n.width-1,0),r=kf(n,0,n.height-1),s=kf(n,n.width-1,n.height-1),o=e||10;if(au(t,i)<o&&au(i,s)<o&&au(s,r)<o&&au(r,t)<o){for(var a=function w6(n){for(var e=[0,0,0],t=0;t<n.length;t++)e[0]+=n[t][0],e[1]+=n[t][1],e[2]+=n[t][2];return e[0]/=n.length,e[1]/=n.length,e[2]/=n.length,e}([i,t,s,r]),c=[],l=0;l<n.width*n.height;l++){var u=au(a,[n.data[4*l],n.data[4*l+1],n.data[4*l+2]]);c[l]=u<o?0:255}return c}}(n,this.threshold());return t&&(t=function S6(n,e,t){for(var i=[1,1,1,1,0,1,1,1,1],r=Math.round(Math.sqrt(i.length)),s=Math.floor(r/2),o=[],a=0;a<t;a++)for(var c=0;c<e;c++){for(var l=a*e+c,u=0,h=0;h<r;h++)for(var d=0;d<r;d++){var p=a+h-s,f=c+d-s;p>=0&&p<t&&f>=0&&f<e&&(u+=n[p*e+f]*i[h*r+d])}o[l]=2040===u?255:0}return o}(t,n.width,n.height),t=function C6(n,e,t){for(var i=[1,1,1,1,1,1,1,1,1],r=Math.round(Math.sqrt(i.length)),s=Math.floor(r/2),o=[],a=0;a<t;a++)for(var c=0;c<e;c++){for(var l=a*e+c,u=0,h=0;h<r;h++)for(var d=0;d<r;d++){var p=a+h-s,f=c+d-s;p>=0&&p<t&&f>=0&&f<e&&(u+=n[p*e+f]*i[h*r+d])}o[l]=u>=1020?255:0}return o}(t,n.width,n.height),t=function D6(n,e,t){for(var i=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],r=Math.round(Math.sqrt(i.length)),s=Math.floor(r/2),o=[],a=0;a<t;a++)for(var c=0;c<e;c++){for(var l=a*e+c,u=0,h=0;h<r;h++)for(var d=0;d<r;d++){var p=a+h-s,f=c+d-s;p>=0&&p<t&&f>=0&&f<e&&(u+=n[p*e+f]*i[h*r+d])}o[l]=u}return o}(t,n.width,n.height),function b6(n,e){for(var t=0;t<n.width*n.height;t++)n.data[4*t+3]=e[t]}(n,t)),n},Noise:function(n){var s,e=255*this.noise(),t=n.data,i=t.length,r=e/2;for(s=0;s<i;s+=4)t[s+0]+=r-2*r*Math.random(),t[s+1]+=r-2*r*Math.random(),t[s+2]+=r-2*r*Math.random()},Pixelate:function(n){var r,s,o,a,c,l,u,p,f,m,v,C,I,L,e=Math.ceil(this.pixelSize()),t=n.width,i=n.height,h=Math.ceil(t/e),d=Math.ceil(i/e),H=n.data;if(e<=0)G.error(\"pixelSize value can not be <= 0\");else for(C=0;C<h;C+=1)for(I=0;I<d;I+=1){for(a=0,c=0,l=0,u=0,f=(p=C*e)+e,v=(m=I*e)+e,L=0,r=p;r<f;r+=1)if(!(r>=t))for(s=m;s<v;s+=1)s>=i||(a+=H[0+(o=4*(t*s+r))],c+=H[o+1],l+=H[o+2],u+=H[o+3],L+=1);for(a/=L,c/=L,l/=L,u/=L,r=p;r<f;r+=1)if(!(r>=t))for(s=m;s<v;s+=1)s>=i||(H[0+(o=4*(t*s+r))]=a,H[o+1]=c,H[o+2]=l,H[o+3]=u)}},Posterize:function(n){var s,e=Math.round(254*this.levels())+1,t=n.data,i=t.length,r=255/e;for(s=0;s<i;s+=1)t[s]=Math.floor(t[s]/r)*r},RGB:function(n){var o,a,e=n.data,t=e.length,i=this.red(),r=this.green(),s=this.blue();for(o=0;o<t;o+=4)e[o]=(a=(.34*e[o]+.5*e[o+1]+.16*e[o+2])/255)*i,e[o+1]=a*r,e[o+2]=a*s,e[o+3]=e[o+3]},RGBA:function(n){var a,c,e=n.data,t=e.length,i=this.red(),r=this.green(),s=this.blue(),o=this.alpha();for(a=0;a<t;a+=4)e[a]=i*o+e[a]*(c=1-o),e[a+1]=r*o+e[a+1]*c,e[a+2]=s*o+e[a+2]*c},Sepia:function(n){var i,r,s,o,e=n.data,t=e.length;for(i=0;i<t;i+=4)r=e[i+0],s=e[i+1],o=e[i+2],e[i+0]=Math.min(255,.393*r+.769*s+.189*o),e[i+1]=Math.min(255,.349*r+.686*s+.168*o),e[i+2]=Math.min(255,.272*r+.534*s+.131*o)},Solarize:function(n){var e=n.data,t=n.width,r=4*t,s=n.height;do{var o=(s-1)*r,a=t;do{var c=o+4*(a-1),l=e[c],u=e[c+1],h=e[c+2];l>127&&(l=255-l),u>127&&(u=255-u),h>127&&(h=255-h),e[c]=l,e[c+1]=u,e[c+2]=h}while(--a)}while(--s)},Threshold:function(n){var r,e=255*this.threshold(),t=n.data,i=t.length;for(r=0;r<i;r+=1)t[r]=t[r]<e?0:255}}});var ae=function(n){return n.construction=\"construction\",n.beam=\"beam\",n.frame=\"frame\",n.framePrimary=\"frame-primary\",n.frameInner=\"frame-inner\",n.frameTest=\"frame-test\",n.frameTestPoint=\"frame-test-point\",n.areas=\"areas\",n.areasSkeleton=\"areas-skeleton\",n.areasInner=\"areas-inner\",n.drawingLine=\"drawingLine\",n.drawingDashedLine=\"drawingDashedLine\",n.drawingDimensionArrowLine=\"drawingDimensionArrowLine\",n.drawingDimension=\"drawingDimension\",n.dimension=\"dimension\",n.activeMullions=\"active-mullions\",n.activeMullionsPoint=\"active-mullions-point\",n.activeCoreStroke=\"active-core-stroke\",n.activeCorePoint=\"active-core-point\",n.activeBeam=\"active-beam\",n.activeBeamPoint=\"active-beam-point\",n.mullionEdge=\"mullion-edge\",n.createImpostPoint=\"createImpostPoint\",n.mullions=\"mullions\",n.activeWing=\"active-wing\",n.activeFilling=\"active-filling\",n.metrics=\"metrics\",n.angularPoints=\"angularPoints\",n.activeCustomSize=\"activeCustomSize\",n.customSizePoints=\"customSizePoints\",n.activeCustomSizePoint=\"activeCustomSizePoint\",n.predictedCustomSize=\"predictedCustomSize\",n}(ae||{});class k6{constructor(e){this._hammer=new Hammer(e),this.configureGestureConflicts()}configureGestureConflicts(){const e=this._hammer.get(\"pan\"),t=this._hammer.get(\"pinch\"),i=this._hammer.get(\"press\");e.set({direction:Hammer.DIRECTION_ALL}),t.set({enable:!0}),i.set({time:400,threshold:5})}add(e,t){this._hammer.on(e,t)}off(e){this._hammer.off(e)}setEnableEvent(e,t){try{this._hammer.get(e).set({enable:t})}catch{console.error(\"\\u0422\\u0430\\u043a\\u043e\\u0433\\u043e \\u0441\\u043e\\u0431\\u044b\\u0442\\u0438\\u044f \\u043d\\u0435\\u0442\")}}}var cu=function(n){return n[n.Mobile=0]=\"Mobile\",n[n.Desktop=1]=\"Desktop\",n}(cu||{});class L6 extends v4{constructor(e,t,i,r,s=!0){super({tl:{x:0,y:0},rb:{x:r.getUnitsConfig().width,y:r.getUnitsConfig().height}},r),this.container=e,this.layers=[],this._lastZoomStep=1,this.onClick=new Ot,this.onDblClick=new Ot,this.onMouseMove=new Ot,this.onScale=new Ot,this.onDrag=new Ot,this.onChangeStageSize=new Ot,this.onPress=new Ot,this.onPressUp=new Ot,this.onTouchStart=new Ot,this.onTouchEnd=new Ot,this.stage=new iu({container:e,name:e,width:t,height:i,draggable:s}),this._hammer=new k6(this.stage.container()),this.defaultLayer=this.createLayer(e),this.gridLayer=this.createLayer(\"grid\",{draggable:!1}),this.gridLayer.zIndex(0),this._deviceType=\"ontouchstart\"in window?cu.Mobile:cu.Desktop,this.ucsLayer=this.createLayer(\"ucs\",{draggable:!1}),this._unitScale=t/r.getUnitsConfig().width,this._stageScale=1,this.redraw(),this.preventDefaultEvents(),this.initEvents()}get stageName(){return this.stage.name()}getStageSize(){return{width:this.stage.width(),height:this.stage.height()}}resetPointer(){this.stage.container().style.cursor=\"default\"}setStageSize(e){(e.width!==this.stage.width()||e.height!==this.stage.height())&&(this.stage.width(e.width),this.stage.height(e.height))}setDraggable(e){this.stage.draggable(e)}scale(e){const t=this.stage.scaleX(),i=this.stage.scaleY();return this.stage.scale({x:t*e,y:i*e}),!0}get stageSize(){return this.getStageSize()}set stageSize(e){this.setStageSize(e)}createLayer(e,t){const i=t?{...t,name:e}:{name:e},r=new Os(i);return this.stage.add(r),this.layers.push(r),r}findLayer(e){return this.layers.find(i=>i.attrs.name==e)}getOrCreateLayer(e){return e?this.stage.name()==e?this.defaultLayer:this.findLayer(e)||this.createLayer(e):this.defaultLayer}stageZoom(e){this.stage.draggable()&&(this._stageScale=this._stageScale*e,this._unitScale=this._unitScale*e,this.scale(e),this.setViewPort({tl:{x:this.viewPort.tl.x/e,y:this.viewPort.tl.y/e},rb:{x:this.viewPort.rb.x/e,y:this.viewPort.rb.y/e}},!0),this.onScale.next(e))}preventDefaultEvents(){this.stage.container().addEventListener(\"touchstart\",e=>{e.preventDefault()})}initEvents(){switch(this._deviceType){case cu.Desktop:this.stage.on(\"click\",e=>{this.onClick.next({x:this.viewPort.tl.x+e.evt.offsetX/this._unitScale,y:this.viewPort.tl.y+e.evt.offsetY/this._unitScale})}),this.stage.on(\"mousemove\",e=>{e.evt&&this.onMouseMove.next({x:this.viewPort.tl.x+e.evt.offsetX/this._unitScale,y:this.viewPort.tl.y+e.evt.offsetY/this._unitScale})}),this.stage.on(\"wheel\",e=>{e.evt&&1==e.evt.shiftKey&&this.stageZoom(e.evt.deltaY<0?1.1:.9090909090909091)});break;case cu.Mobile:this._hammer.add(\"pinchstart\",e=>{this._lastZoomStep=1}),this._hammer.add(\"pinchmove\",e=>{const t=e.scale/this._lastZoomStep;this._lastZoomStep=e.scale,this.stageZoom(t)}),this.stage.on(\"touchmove\",e=>{this.emitTouchEvent(\"touchmove\")}),this._hammer.add(\"tap panstart panend press pressup\",e=>{this.emitTouchEvent(e.type)})}this.stage.dragBoundFunc(e=>(this.onDrag.next(e),{x:e.x,y:e.y})),this.onDrag.pipe(bM(200),function b4(n,e=!1){return Pn((t,i)=>{let r=0;t.subscribe(hn(i,s=>{const o=n(s,r++);(o||e)&&i.next(s),!o&&i.complete()}))})}(()=>this.stage.draggable())).subscribe(e=>{this.setViewPort({tl:{x:-e.x/this._unitScale,y:-e.y/this._unitScale},rb:{x:(-e.x+this.stage.width())/this._unitScale,y:(-e.y+this.stage.height())/this._unitScale}})})}emitTouchEvent(e){const t=this.getCurrentPointerPosition();if(t)switch(e){case\"panstart\":this.onTouchStart.next(t);break;case\"panend\":this.onTouchEnd.next(t);break;case\"tap\":this.onClick.next(t);break;case\"touchmove\":this.onMouseMove.next(t);break;case\"press\":this.onPress.next(t);break;case\"pressup\":this.onPressUp.next(t)}}getCurrentPointerPosition(){const e=this.stage.getPointerPosition();return e?{x:this.viewPort.tl.x+e.x/this._unitScale,y:this.viewPort.tl.y+e.y/this._unitScale}:null}getOnClick(){return this.onClick}getOnMouseMove(){return this.onMouseMove}getOnDblClick(){return this.onDblClick}getObjectById(e){return this.stage.findOne(`#${e}`)}showObject(e){return this.getObjectById(e).show(),!0}hideObject(e){return this.getObjectById(e).hide(),!0}deleteObject(e){const t=this.getObjectById(e);return t&&t.destroy(),!0}deleteObjects(e){return this.stage.find(`#${e}`).forEach(i=>{i.fire(\"destroy\",i),i.destroy()}),!0}createGroup(e){return this.createGroupInt(e),!0}createGroupInt(e,t){const i=this.getOrCreateLayer(t),r=new rs(e?{id:e}:{id:Si()});return i.add(r),r}checkOrCreateGroup(e){return e?this.getObjectById(e)||this.createGroupInt(e):this.createGroupInt()}lineToKonvaPoints(e){return[e.p1.x,e.p1.y,e.p2.x,e.p2.y]}verticesToKonvaPoints(e){const t=[];return e.forEach(i=>{t.push(i.x),t.push(i.y)}),t}scalePoints(e){return e.map(t=>t*this._unitScale/this._stageScale)}scaleAndFlattenPolygonPoints(e){const t=e.points.reduce((i,r)=>(i.push(r.x,r.y),i),[]);return this.scalePoints(t)}createArcInt(e,t,i){const r=[e.radius,e.c.x,e.c.y],[s,o,a]=i?r:this.scalePoints(r);return new xr({x:o,y:a,innerRadius:s,outerRadius:s,rotation:180*e.startAngle/Math.PI,angle:180*e.angle/Math.PI,...t,strokeScaleEnabled:!1})}drawEdge(e,t,i,r){return\"arc\"===t.type?this.drawArc(e,t,i,r):this.drawLine(e,t,i,r)}drawLine(e,t,i,r){const s=this.lineToKonvaPoints(t),o={...this.guiConfig.getLineConfig(i),id:e},a=this.checkOrCreateGroup(r),c=this.createLineInt(s,o,i.notScale);return c.listening(!1),a.add(c),this.defaultLayer.add(a),!0}drawArc(e,t,i,r){const s={...this.guiConfig.getLineConfig(i),id:e},o=this.checkOrCreateGroup(r),a=this.createArcInt(t,s,i.notScale);return o.add(a),a.listening(!1),this.defaultLayer.add(o),!0}drawPolygon(e,t,i,r){const s=this.verticesToKonvaPoints(t),o={...this.guiConfig.getPolygonConfig(i),id:e},a=this.checkOrCreateGroup(r),c=this.createLineInt(s,o,i.notScale);return a.add(c),this.defaultLayer.add(a),!0}createLineInt(e,t,i){const r=i?e:this.scalePoints(e);return new An({points:r,...t,strokeScaleEnabled:!1})}drawPolygonByLines(e,t,i,r){const s={...this.guiConfig.getPolygonConfig(i),id:e,fill:i.color},o=this.checkOrCreateGroup(r),a=t.map(c=>\"p1\"in c?this.createLineInt([c.p1.x,c.p1.y,c.p2.x,c.p2.y],s,i.notScale):this.createArcInt(c,s,i.notScale));return o.add(...a),this.defaultLayer.add(o),!0}drawShapeEdge(e,t,i){if(\"s\"in e){const r=[e.radius,e.c.x,e.c.y],[s,o,a]=this.scalePoints(r);let c,l,u=!1;e.customEnd.x===i.x&&e.customEnd.y===i.y?(c=e.startAngle,l=c+e.angle):(c=e.startAngle+e.angle,l=e.startAngle,u=!0),t.arc(o,a,s,c,l,u)}else{const[r,s]=this.scalePoints([e.p2.x,e.p2.y]);t.lineTo(r,s)}}drawFilledDivider(e,t,i){const r=this.checkOrCreateGroup(i),s=new Eo.Shape({sceneFunc:(o,a)=>{o.beginPath();const[c,l]=this.scalePoints([e.points?.[0]?.x,e.points?.[0]?.y]);o.moveTo(c,l),e.edgeArcs.forEach((u,h)=>{this.drawShapeEdge(u,o,e.points.at(h+1)||e.points[0])}),o.fillStrokeShape(a)},fill:\"blue\"});this.defaultLayer.add(s),r&&s&&r.add(s)}drawFilledPolygon(e,t,i,r){t.dividers.length&&this.drawFilledDivider(t.dividers[0].mullions[0],i,ae.mullions);const s=this.checkOrCreateGroup(r),o=new Eo.Shape({sceneFunc:(a,c)=>{a.beginPath();const[l,u]=this.scalePoints([t.points[0].x,t.points[0].y]);a.moveTo(l,u),t.edgeArcs.forEach((C,I)=>{this.drawShapeEdge(C,a,t.points.at(I+1)||t.points[0])});const h=[...t.innerPolygon.points.map(C=>new we(C.x,C.y,C.s))],d=h[h.length-1].s;for(let C=h.length-1;C>0;C--){const I=h[C-1].s;h[C].s=I?-I:0}h[0].s=d?-d:0;const p=new Gt(...h.reverse()),f=p.points[0],[m,v]=this.scalePoints([f.x,f.y]);a.moveTo(m,v),p.edgeArcs.forEach((C,I)=>{this.drawShapeEdge(C,a,h.at(I+1)||h[0])}),a.fillStrokeShape(c)},fill:i.color});return this.defaultLayer.add(o),s&&s.add(o),!0}drawBeam(e,t,i,r){const s={...this.guiConfig.getPolygonConfig(i),id:e},o=this.checkOrCreateGroup(r),a=new Eo.Shape({sceneFunc:(c,l)=>{c.beginPath();const[u,h]=this.scalePoints([t.vertices[0].x,t.vertices[0].y]);c.moveTo(u,h),t.edgeArcs.forEach((d,p)=>{this.drawShapeEdge(d,c,t.vertices.at(p+1)||t.vertices[0])}),c.fillStrokeShape(l)},...s,strokeScaleEnabled:!1});return this.defaultLayer.add(a),o&&(o.add(a),a.on(\"pointerover\",()=>{this.stage.container().style.cursor=\"pointer\"}),a.on(\"pointerout\",()=>{this.stage.container().style.cursor=\"default\"})),!0}drawPoint(e,t,i,r=!1,s,o){const a=this.scalePoints([t.x,t.y]);if(t=new we(a[0],a[1]),i.type===tn.CirclePoint){const c=this.guiConfig.getPointConfig(i),l=new K8(t,this.scalePoints([c.radius])[0]);this.drawCircle(e,l,c,r,s,o)}if(i.type===tn.RectPoint){const c=this.guiConfig.getPointConfig(i),l=new q8(t,c.width/this._unitScale,c.height/this._unitScale);this.drawRect(e,l,c,r,s,o)}}drawCircle(e,t,i,r=!1,s,o){const a=this.guiConfig.getPointConfig(i),c=this.checkOrCreateGroup(s),{x:l,y:u}=t.c,h=new mo({...a,id:e,x:l,y:u,radius:t.r/this._unitScale,strokeScaleEnabled:!1});this.defaultLayer.add(h);const d=new Ot;this.onScale.pipe(cv(d)).subscribe(p=>{h.radius(h.radius()/p)}),h.on(\"destroy\",()=>{d.next(),d.complete()}),h.on(\"pointerover\",()=>{this.stage.container().style.cursor=\"cross\",r&&h.fill(\"rgba(0,196,255,0.6)\")}),h.on(\"pointerout\",()=>{this.stage.container().style.cursor=\"default\",r&&h.fill(a.fill||\"transparent\")}),o&&h.on(\"click touchstart touchend\",p=>{p.cancelBubble=!0,o()}),c&&h&&c.add(h)}drawRect(e,t,i,r=!1,s,o){const a=this.guiConfig.getPointConfig(i),c=this.checkOrCreateGroup(s),{p:l,w:u,h}=t,d=new Ja({id:e,...a,x:l.x,y:l.y,width:u,height:h,offsetX:u/2,offsetY:h/2,strokeScaleEnabled:!1});this.defaultLayer.add(d);const p=new Ot;this.onScale.pipe(cv(p)).subscribe(f=>{const m=d.width()/f,v=d.height()/f;d.width(m),d.height(v),d.offsetX(m/2),d.offsetY(v/2)}),d.on(\"destroy\",()=>{p.next(),p.complete()}),d.on(\"pointerover\",()=>{this.stage.container().style.cursor=\"crosshair\",r&&d.fill(\"rgba(0,196,255,0.6)\")}),d.on(\"pointerout\",()=>{this.stage.container().style.cursor=\"default\",r&&d.fill(a.fill||\"transparent\")}),o&&d.on(\"click touchstart touchend\",f=>{f.cancelBubble=!0,o()}),c&&d&&c.add(d)}drawGrid(e){this.gridLayer.removeChildren();const t=this.guiConfig.getGridConfig();return null!=new GW(e,this._unitScale,this._stageScale,this.gridLayer,{minorStep:t.minorStep,majorStep:t.majorStep,minorLine:this.guiConfig.getLineConfig(t.minorLine),majorLine:this.guiConfig.getLineConfig(t.majorLine)})}drawUCS(e){const t=this.guiConfig.getUCSConfig(),i=this.guiConfig.getLineConfig(t.xAxis),r=this.guiConfig.getLineConfig(t.yAxis);return this.ucsLayer.removeChildren(),new HW(e,this.ucsLayer,{xLine:i,yLine:r,xLength:75,yLength:75}).scale(),!0}drawingDimensionArrowLine(e,t,i,r=!1,s,o){\"arc\"===t.type||this.drawCustomDimensionLine(e,t,i,s,r,o)}drawingDimension(e,t,i,r,s){this.drawEdge(e,new We(t.startPoint,t.line.p1),i,r),this.drawEdge(e,new We(t.endPoint,t.line.p2),i,r),this.drawingDimensionArrowLine(e,t.line,i,!1,r,s),this.drawLabel(e,t.label,i,r)}drawActiveCustomSize(e,t,i,r,s){this.drawingDimensionArrowLine(e,t.line,i,!1,r,s),this.drawEdge(e,new We(t.startPoint,t.line.p1),i,r),this.drawEdge(e,new We(t.endPoint,t.line.p2),i,r)}drawMetrics(e,t,i,r){return!0}drawVerticalSizeLine(e,t=100,i,r){const a=new Bi({points:this.scalePoints([e.p1.x+t,e.p1.y,e.p2.x+t,e.p2.y]),...i,strokeScaleEnabled:!1,pointerAtEnding:!0,pointerAtBeginning:!0,pointerLength:10,pointerWidth:5,fill:i.fillColor}),c=new An({points:this.scalePoints([e.p1.x+t+50,e.p1.y,e.p1.x+t-50,e.p1.y]),...i,strokeScaleEnabled:!1}),l=new An({points:this.scalePoints([e.p2.x+t+50,e.p2.y,e.p2.x+t-50,e.p2.y]),...i,strokeScaleEnabled:!1});this.defaultLayer.add(a,c,l),r&&a&&r.add(a)}drawHorizontalSizeLine(e,t=100,i,r){const a=new Bi({points:this.scalePoints([e.p1.x,e.p1.y+t,e.p2.x,e.p2.y+t]),...i,strokeScaleEnabled:!1,pointerAtEnding:!0,pointerAtBeginning:!0,pointerLength:10,pointerWidth:5,fill:i.fillColor}),c=new An({points:this.scalePoints([e.p1.x,e.p1.y+t+50,e.p1.x,e.p1.y+t-50]),...i,strokeScaleEnabled:!1}),l=new An({points:this.scalePoints([e.p2.x,e.p2.y+t+50,e.p2.x,e.p2.y+t-50]),...i,strokeScaleEnabled:!1});this.defaultLayer.add(a,c,l),r&&a&&r.add(a)}drawVerticalSizeInfo(e,t=100,i,r){const[s,o]=this.scalePoints([e.midpoint.x+t,e.midpoint.y]),a=new ec(i);a.add(new Eo.Tag({fill:\"white\",strokeScaleEnabled:!1,stroke:\"grey\",strokeWidth:.5}));const c=new Mt({text:String(Math.round(100*e.length)/100),padding:2,fontSize:14,fill:\"black\",strokeScaleEnabled:!1});a.position({x:s-c.textHeight/1.5,y:o+c.textWidth/2}),a.add(c),this.defaultLayer.add(a),r&&a&&r.add(a)}drawHorizontalSizeInfo(e,t=100,i,r){const[s,o]=this.scalePoints([e.midpoint.x,e.midpoint.y+t]),a=new ec(i);a.add(new Eo.Tag({fill:\"white\",strokeScaleEnabled:!1,stroke:\"grey\",strokeWidth:.5}));const c=new Mt({text:String(Math.round(100*e.length)/100),padding:2,fontSize:14,fill:\"black\",strokeScaleEnabled:!1});a.position({x:s-c.textWidth/2,y:o-c.textHeight/1.5}),a.add(c),this.defaultLayer.add(a),r&&a&&r.add(a)}drawCustomDimensionLine(e,t,i,r,s=!1,o){const a={...this.guiConfig.getLineConfig(i),id:e},c=this.checkOrCreateGroup(r),l=this.createLongLengthDimensionArrowLine(t,a);s||(c.on(\"pointerover\",h=>{this.stage.container().style.cursor=\"pointer\"}),c.on(\"pointerout\",h=>{this.stage.container().style.cursor=\"default\"}));const u=new Mt({text:String(Math.round(100*t.length)/100),padding:2,fontSize:14});u.getWidth()+30>l.getWidth()&&u.getWidth()>l.getHeight()&&(this.drawShortLengthDimension(t,a,c),l.pointerAtBeginning(!1),l.pointerAtEnding(!1),l.dashEnabled(!1)),s||l.on(\"click tap\",h=>{o&&(h.cancelBubble=!0,o())}),this.defaultLayer.add(l),c.add(l),s&&c.listening(!1)}drawShortLengthDimension(e,t,i){const r=e.getVectorPointWithOffset(-e.length),s=new Bi({points:this.scalePoints([r.x,r.y,e.p1.x,e.p1.y]),...t,hitStrokeWidth:20,strokeScaleEnabled:!1,pointerAtEnding:!0,pointerAtBeginning:!1,pointerLength:10,pointerWidth:5,fill:t.fillColor,opacity:t.opacity}),o=e.getVectorPointWithOffset(e.length),a=new Bi({points:this.scalePoints([e.p2.x,e.p2.y,o.x,o.y]),...t,hitStrokeWidth:20,strokeScaleEnabled:!1,pointerAtEnding:!1,pointerAtBeginning:!0,pointerLength:10,pointerWidth:5,fill:t.fillColor,opacity:t.opacity});i.add(s,a)}createLongLengthDimensionArrowLine(e,t){return new Bi({points:this.scalePoints([e.p1.x,e.p1.y,e.p2.x,e.p2.y]),...t,lineJoin:\"round\",dash:[30,10],lineCap:\"round\",tension:.5,hitStrokeWidth:20,strokeScaleEnabled:!1,pointerAtEnding:!0,pointerAtBeginning:!0,pointerLength:10,pointerWidth:5,fill:t.fillColor,opacity:t.opacity})}drawLabel(e,t,i,r,s){const o={...this.guiConfig.getLineConfig(i),id:e},a=this.checkOrCreateGroup(r),[c,l]=this.scalePoints([t.position.x,t.position.y]),u=new ec({}),h=new Eo.Tag({fill:\"white\",strokeScaleEnabled:!1,stroke:\"gray\",strokeWidth:.5,opacity:o.opacity});u.add(h);const d=new Mt({text:t.text,padding:2,fontSize:14,fill:\"black\",strokeScaleEnabled:!1,opacity:o.opacity});t.changeSize(d.getWidth(),d.getHeight()),u.position({x:c-t.width/2,y:l-t.height/2}),s&&u.on(\"click touchstart touchend\",p=>{p.cancelBubble=!0,s()}),u.add(d),a.add(u),this.defaultLayer.add(a)}drawWing(e,t,i,r){const s={...this.guiConfig.getLineConfig(i),id:e},o=this.checkOrCreateGroup(r),a=t.edges.map(m=>we.distance(m.midpoint,t.centroid)).sort()[0],c=a>100?100:a,{x:l,y:u}=t.centroid,h=this.verticesToKonvaPoints([new we(l,u+c),new we(l,u-c)]),d=this.verticesToKonvaPoints([new we(l-c,u),new we(l+c,u)]),p=this.createLineInt(h,s,i.notScale),f=this.createLineInt(d,s,i.notScale);o.add(p,f),this.defaultLayer.add(o)}drawSkeleton(e,t,i,r){const s={...this.guiConfig.getLineConfig(i),id:e},o=this.checkOrCreateGroup(r);let a;if(\"arc\"===t.type)a=this.createArcInt(t,s);else{const{p1:c,p2:l}=t;a=this.createLineInt([c.x,c.y,l.x,l.y],s)}o.add(a),o.on(\"pointerover\",()=>{this.stage.container().style.cursor=\"pointer\"}),o.on(\"pointerout\",()=>{this.stage.container().style.cursor=\"default\"}),a.on(\"click tap\",c=>{c.cancelBubble=!0,this.onClick.next(t.intermediatePoint)}),this.defaultLayer.add(o)}}function Cx(){return Eo.Util.getRandomColor()}class F6{getLineConfig(e){switch(e.line){case nt.PolygonLine:return{stroke:\"blue\",strokeWidth:1.5};case nt.SimpleLine:case nt.FrameBeamLine:return{stroke:\"red\",strokeWidth:1.5};case nt.GripsLine:return{stroke:\"blue\",strokeWidth:1};case nt.GridMinorLine:return{stroke:\"#ebf0ec\",strokeWidth:1};case nt.GridMajorLine:return{stroke:\"lightgrey\",strokeWidth:1};case nt.UCSAxisLine:return{stroke:\"black\",strokeWidth:1};case nt.DummyLine:return{stroke:\"gray\",strokeWidth:1.5};case nt.DimensionLine:return{stroke:\"green\",strokeWidth:1.5};case nt.RandomLine:{const t=e.color||Cx();return{fill:t,stroke:t,strokeWidth:0}}case nt.CustomLine:return{fillColor:e.fillColor,stroke:e.color?e.color:\"black\",strokeWidth:e.strokeWidth?e.strokeWidth:1,...e};case nt.DashedLine:return{stroke:e.color?e.color:\"black\",strokeWidth:e.strokeWidth?e.strokeWidth:1,...e}}}getPointConfig(e){switch(e.type){case tn.CirclePoint:{const t=e.radius||20;return{...e,fill:e.fill||\"black\",radius:t}}case tn.RectPoint:{const t=e.width||20,i=e.height||t;return{...e,fill:e.fill||\"black\",width:t,height:i}}}}getPolygonConfig(e){const t=this.getLineConfig(e),i=e.fill?t.stroke:t.fillColor;return{...t,closed:!0,fill:i}}getFrameConfig(){return{beam:{mark:!0,line:nt.FrameBeamLine,fill:!1},grips:{frame:{line:nt.GripsLine},center:{type:\"rectangle\",fill:!0,width:36,height:12},vertex:{type:\"square\",fill:!0,size:24}},offset:75}}getGridConfig(){return{minorStep:100,majorStep:5,minorLine:{line:nt.GridMinorLine},majorLine:{line:nt.GridMajorLine}}}getDefaultStageConfig(){return{width:5e3,height:4e3}}getUCSConfig(){return{origin:{x:0,y:0},xAxisText:\"X\",yAxisText:\"Y\",xAxis:{line:nt.UCSAxisLine},yAxis:{line:nt.UCSAxisLine}}}getUnitsConfig(){return{width:5e3,height:3e3}}}Cx();const je_WIDTH=2,je_MIDDLE_POINT_WIDTH=5,je_MIDDLE_POINT_HEIGHT=1,je_STROKE=\"rgb(0,0,0)\",je_STROKE_WIDTH=2,je_COLOR=\"rgb(0,196,255)\",je_RADIUS=10,je_HIT_SIZE=20,Dx=()=>{};class nc{static getActiveMullionsItem(e,t=0){return`${ae.activeMullions}-${e}.${t}`}static getMullionEdgeItem(e,t=0){return`${ae.mullionEdge}-${e}.${t}`}static getBeamItem(e,t=0){return`${ae.beam}-${e}.${t}`}}class Tx{constructor(e,t){this.type=e,this.gui=t}drawActiveImpostPoints(e){Ce.getPointsOfEdge(e.edge).forEach(t=>{this.gui.drawPoint(ae.activeMullions,t,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeMullions)}),this.gui.drawPoint(ae.activeMullions,Ce.getEdgeCenter(e.edge),{type:tn.RectPoint,fill:je_COLOR,width:je_MIDDLE_POINT_WIDTH,height:je_MIDDLE_POINT_HEIGHT,rotation:e.edge.angleDeg,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeMullions)}drawFrameEdge(e,t=je_RADIUS){this.gui.drawEdge(ae.frame,e,{line:nt.CustomLine,strokeWidth:3},ae.frame)}drawDimension(e,t){e.forEach(i=>{this.gui.drawingDimension(i.id,i,{line:nt.CustomLine,fillColor:\"green\"},ae.dimension,()=>t(i.id))})}drawPredictedCustomSize(e){this.gui.drawingDimension(e.id,e,{line:nt.CustomLine,color:\"rgb(255,127,39)\",strokeWidth:3,opacity:1},ae.predictedCustomSize)}drawActiveDimension(e,t,i,r){this.gui.drawActiveCustomSize(e.id,e,{line:nt.CustomLine,color:\"green\",strokeWidth:3,opacity:.7},ae.activeCustomSize,()=>t(e.id)),e.baseLinePoints.forEach(s=>{this.gui.drawPoint(ae.customSizePoints,s,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,stroke:je_STROKE,strokeWidth:je_STROKE_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.customSizePoints,()=>r(s))}),e.points.forEach(s=>{this.gui.drawPoint(ae.customSizePoints,s,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,stroke:je_STROKE,strokeWidth:je_STROKE_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.customSizePoints,()=>i(s))}),this.gui.drawLabel(e.id,e.label,{line:nt.CustomLine,color:\"green\",strokeWidth:3,opacity:.7},ae.activeCustomSize,()=>r(e.label.position))}drawCustomSizeActivePoint(e){this.gui.drawPoint(ae.activeCustomSizePoint,e,{type:tn.RectPoint,fill:\"green\",width:je_WIDTH,stroke:je_STROKE,strokeWidth:je_STROKE_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCustomSizePoint)}clearActiveCustomSize(){this.gui.deleteObjects(ae.activeCustomSize),this.gui.deleteObjects(ae.customSizePoints)}clearTestPoints(){this.gui.deleteObjects(ae.frameTestPoint)}clearActiveCustomSizePoint(){this.gui.deleteObjects(ae.activeCustomSizePoint)}clearPredictedCustomSizePoint(){this.gui.deleteObjects(ae.predictedCustomSize)}clearAngularPoints(){this.gui.deleteObjects(ae.angularPoints)}clearAllDividers(){this.gui.deleteObjects(ae.mullionEdge),this.gui.deleteObjects(ae.mullions)}clearDrawingLine(){this.gui.deleteObjects(ae.drawingLine)}clearDrawingImpost(){this.gui.deleteObject(ae.createImpostPoint),this.gui.deleteObjects(ae.drawingLine)}clearDrawingDashedLine(){this.gui.deleteObjects(ae.drawingDashedLine)}clearDrawingDimensionArrowLine(){this.gui.deleteObjects(ae.drawingDimensionArrowLine)}clearDrawingDimension(){this.gui.deleteObjects(ae.drawingDimension)}clearDimensions(){this.gui.deleteObjects(ae.dimension)}clearAreas(){this.gui.deleteObjects(ae.areas),this.gui.deleteObjects(ae.beam)}clearFrames(){this.gui.deleteObjects(ae.frame)}clearFramesTest(){this.gui.deleteObjects(ae.frameTest)}clearActiveImposts(){this.gui.deleteObjects(ae.activeMullions),this.gui.deleteObjects(ae.activeMullionsPoint)}clearActiveCoreStroke(){this.gui.deleteObjects(ae.activeCoreStroke),this.gui.deleteObjects(ae.activeCorePoint)}clearActiveWing(){this.gui.deleteObjects(ae.activeWing)}clearActiveFilling(){this.gui.deleteObjects(ae.activeFilling)}clearActiveBeam(){this.gui.deleteObjects(ae.activeBeam),this.gui.deleteObjects(ae.activeBeamPoint)}clearMetrics(){this.gui.deleteObjects(ae.metrics)}updateDrawingLine(e){this.gui.deleteObjects(ae.drawingLine),this.gui.drawEdge(ae.drawingLine,e,{line:nt.GripsLine})}updateDrawingDashedLine(e){this.gui.deleteObjects(ae.drawingDashedLine),this.gui.drawLine(ae.drawingDashedLine,e,{line:nt.DashedLine,dash:[25,10],strokeWidth:2,opacity:.4},ae.drawingDashedLine)}updateDrawingAngleEdgeLine(e){this.gui.deleteObjects(ae.drawingLine),e.forEach(t=>{this.gui.drawEdge(ae.drawingLine,t,{line:nt.CustomLine,color:\"rgb(255,127,39)\",strokeWidth:3,opacity:.6},ae.drawingLine)})}updateDrawingDimensionArrowLine(e,t){this.clearDrawingDimensionArrowLine(),this.gui.drawingDimensionArrowLine(ae.drawingDimensionArrowLine,e,{fillColor:\"gray\",line:nt.CustomLine,opacity:.6},!0,ae.drawingDimensionArrowLine),this.gui.drawLabel(ae.drawingDimensionArrowLine,t,{fillColor:\"gray\",line:nt.CustomLine,opacity:.6},ae.drawingDimensionArrowLine)}updateDrawingCustomDimension(e){this.clearDrawingDimension(),this.gui.drawingDimension(e.id,e,{fillColor:\"gray\",line:nt.CustomLine,opacity:.7},ae.drawingDimension)}updateDrawingPredictedCustomDimension(e){this.clearPredictedCustomSizePoint(),this.drawPredictedCustomSize(e)}updateFrameTestEdge(e,t){this.gui.deleteObjects(ae.frameTest),this.gui.drawEdge(ae.frameTest,e,{line:nt.CustomLine,color:\"gray\",strokeWidth:3},ae.frameTest),t&&this.gui.drawPoint(ae.frameTest,Ce.getSecondEdgePoint(e),{type:tn.CirclePoint,fill:\"rgb(0,196,255)\",radius:je_RADIUS,hitStrokeWidth:je_HIT_SIZE},!1,ae.frameTest)}updateActiveMullionsPoint(e){this.clearActiveImposts(),this.gui.drawPoint(ae.activeMullionsPoint,e,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,stroke:je_STROKE,strokeWidth:je_STROKE_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeMullionsPoint)}updateActiveCorePoint(e){this.gui.deleteObjects(ae.activeCorePoint),this.gui.drawPoint(ae.activeCorePoint,e,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,stroke:je_STROKE,strokeWidth:je_STROKE_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCorePoint)}}class B6 extends Tx{constructor(e,t){super(e,t)}drawActiveImpost(e){e&&(e.mullions.forEach((t,i)=>{this.gui.drawPolygonByLines(nc.getActiveMullionsItem(e.id,i),t.edgeArcs,{line:nt.CustomLine,color:\"green\",fill:!0,strokeWidth:5},ae.activeMullions)}),this.drawActiveImpostPoints(e))}drawActiveBeam(e){this.gui.drawBeam(ae.activeBeam,e,{line:nt.CustomLine,color:\"green\",fill:!0},ae.activeBeam)}drawActiveCoreStroke(e){e.beams.forEach(t=>{this.gui.drawBeam(ae.activeCoreStroke,t,{line:nt.CustomLine,color:\"green\",fill:!0},ae.activeCoreStroke)}),e.points.forEach(t=>{this.gui.drawPoint(ae.activeCorePoint,t,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCorePoint)}),e.edgeArcs.forEach(t=>{const i=Ce.getEdgeCenter(t);this.gui.drawPoint(ae.activeCorePoint,i,{type:tn.RectPoint,fill:je_COLOR,width:je_MIDDLE_POINT_WIDTH,height:je_MIDDLE_POINT_HEIGHT,rotation:t.angleDeg,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCorePoint)})}drawActiveWing(e){e.beams.forEach(t=>{this.gui.drawBeam(ae.activeWing,t,{line:nt.CustomLine,color:\"green\",fill:!0},ae.activeWing)}),e.points.forEach(t=>{this.gui.drawPoint(ae.activeWing,t,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeWing)}),e.edgeArcs.forEach(t=>{const i=Ce.getEdgeCenter(t);this.gui.drawPoint(ae.activeWing,i,{type:tn.RectPoint,fill:je_COLOR,width:je_MIDDLE_POINT_WIDTH,height:je_MIDDLE_POINT_HEIGHT,rotation:t.angleDeg,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeWing)})}drawActiveFilling(e){e.beams.forEach(t=>{this.gui.drawBeam(ae.activeFilling,t,{line:nt.CustomLine,color:\"green\",fill:!0},ae.activeFilling)})}drawConstruction(e){e.areas.forEach(t=>{this.drawAreaDividers(t),this.drawConvertedArea(t)})}drawConvertedArea(e){e.beams.forEach((t,i)=>{this.gui.drawBeam(nc.getBeamItem(t.id,i),t,{line:nt.CustomLine,strokeWidth:.5,fillColor:e.fillColor},ae.beam)}),e.areas.forEach(t=>{this.drawConvertedArea(t)})}drawAreaDivider(e){this.gui.drawBeam(nc.getMullionEdgeItem(e.id),e.beam,{line:nt.CustomLine,strokeWidth:.5,fillColor:e.mullions[0].fillColor},ae.mullionEdge)}drawAreaDividers(e){e.dividers.forEach(t=>{this.drawAreaDivider(t)}),e.areas.forEach(t=>{this.drawAreaDividers(t)})}drawAngularPoint({points:e,hiddenPoints:t,handleClick:i}){e.forEach(r=>{this.gui.drawPoint(ae.angularPoints,r,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH},!1,ae.angularPoints,i&&(()=>i(r)))}),t&&t.forEach(r=>{this.gui.drawPoint(ae.angularPoints,r,{type:tn.RectPoint,fill:\"transparent\",width:je_WIDTH},!0,ae.angularPoints,i&&(()=>i(r)))})}}class j6 extends Tx{constructor(e,t){super(e,t),this.drawActiveWing=Dx,this.drawActiveFilling=Dx}drawActiveImpost(e){e&&(this.gui.drawEdge(nc.getActiveMullionsItem(e.id),e.edge,{line:nt.CustomLine,color:\"green\",strokeWidth:5},ae.activeMullions),this.drawActiveImpostPoints(e))}drawActiveBeam(e){this.gui.drawSkeleton(ae.activeBeam,e.edge,{line:nt.CustomLine,color:\"green\",strokeWidth:5,hitStrokeWidth:25},ae.activeBeam)}drawActiveCoreStroke(e){e.edgeArcs.forEach(t=>{const i=Ce.getEdgeCenter(t);this.gui.drawEdge(ae.activeCoreStroke,t,{line:nt.CustomLine,color:\"green\",strokeWidth:3},ae.activeCoreStroke),this.gui.drawPoint(ae.activeCorePoint,i,{type:tn.RectPoint,fill:je_COLOR,width:je_MIDDLE_POINT_WIDTH,height:je_MIDDLE_POINT_HEIGHT,rotation:t.angleDeg,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCorePoint)}),e.points.forEach(t=>{this.gui.drawPoint(ae.activeCorePoint,t,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH,hitStrokeWidth:je_HIT_SIZE},!1,ae.activeCorePoint)})}drawConstruction(e){e.areas.forEach(t=>{this.drawAreaDividers(t),this.drawConvertedArea(t)})}drawConvertedArea(e){e.type===un.FRAME&&e.beams.forEach((t,i)=>{this.gui.drawSkeleton(nc.getBeamItem(t.id,i),t.edge,{line:nt.CustomLine,fillColor:e.fillColor,hitStrokeWidth:25},ae.beam)}),e.areas.forEach(t=>{this.drawConvertedArea(t)})}drawAreaDivider(e){this.gui.drawSkeleton(nc.getMullionEdgeItem(e.id),e.edge,{line:nt.CustomLine,hitStrokeWidth:25},ae.mullionEdge)}drawAreaDividers(e){e.dividers.forEach(t=>{this.drawAreaDivider(t)}),e.areas.forEach(t=>{this.drawAreaDividers(t)})}drawAngularPoint({points:e,handleClick:i}){e.forEach(r=>{this.gui.drawPoint(ae.angularPoints,r,{type:tn.RectPoint,fill:je_COLOR,width:je_WIDTH},!1,ae.angularPoints,i&&(()=>i(r)))})}}var Or=function(n){return n.SOLID=\"SOLID\",n.WIRE=\"WIRE\",n}(Or||{});const V6={[Or.SOLID]:n=>new B6(Or.SOLID,n),[Or.WIRE]:n=>new j6(Or.WIRE,n)};let Ix=(()=>{class n{constructor(){this.gui=null,this.onCreateGui=new Ot}createGui(t,i={width:1e3,height:1e3}){this.gui=new L6(t,i.width,i.height,new F6),this.onCreateGui.next(this.gui)}changeSize(t){this.gui?.setStageSize({width:t.width,height:t.height})}setDraggable(t){this.gui?.setDraggable(t)}clearGui(){this.gui=null}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac,providedIn:\"root\"})}}return n})();window;const z6={constructions:[],selectedConstructionId:null,selected:{owspModel:null,componentTree:null,coreAreaModel:null,selectedComponentId:null,selectedComponentNode:null,loadingComponentTree:!1,loadingCoreArea:!1},statusbarMode:[],toolbarMode:As.DEFAULT};function lu(n){return Pn((e,t)=>{let s,i=null,r=!1;i=e.subscribe(hn(t,void 0,void 0,o=>{s=Tr(n(o,lu(n)(e))),i?(i.unsubscribe(),i=null,s.subscribe(t)):r=!0})),r&&(i.unsubscribe(),i=null,s.subscribe(t))})}function Z6(n,e){return n===e}function uu(n){n||(xc(),n=be(Ji));const e=new sn(t=>n.onDestroy(t.next.bind(t)));return t=>t.pipe(cv(e))}new class G6 extends EM{}(class H6 extends wM{constructor(e,t){super(e,t),this.scheduler=e,this.work=t}schedule(e,t=0){return t>0?super.schedule(e,t):(this.delay=t,this.state=e,this.scheduler.flush(this),this)}execute(e,t){return t>0||this.closed?super.execute(e,t):this._execute(e,t)}requestAsyncId(e,t,i=0){return null!=i&&i>0||null==i&&this.delay>0?super.requestAsyncId(e,t,i):(e.flush(this),0)}});const hu={};function Mx(n,e){if(hu[n]=(hu[n]||0)+1,\"function\"==typeof e)return Nv(n,(...i)=>({...e(...i),type:n}));switch(e?e._as:\"empty\"){case\"empty\":return Nv(n,()=>({type:n}));case\"props\":return Nv(n,i=>({...i,type:n}));default:throw new Error(\"Unexpected config.\")}}function Nv(n,e){return Object.defineProperty(e,\"type\",{value:n,writable:!1})}function kv(n){return n.charAt(0).toUpperCase()+n.substring(1)}function xx(n){const{source:e,events:t}=n;return Object.keys(t).reduce((i,r)=>({...i,[i9(r)]:Mx(r9(e,r),t[r])}),{})}function i9(n){return n.trim().split(\" \").map((e,t)=>0===t?function t9(n){return n.charAt(0).toLowerCase()+n.substring(1)}(e):kv(e)).join(\"\")}function r9(n,e){return`[${n}] ${e}`}let ic=(()=>{class n extends Hi{constructor(){super({type:\"@ngrx/store/init\"})}next(t){if(\"function\"==typeof t)throw new TypeError(\"\\n        Dispatch expected an object, instead it received a function.\\n        If you're using the createAction function, make sure to invoke the function\\n        before dispatching the action. For example, someAction should be someAction().\");if(typeof t>\"u\")throw new TypeError(\"Actions must be objects\");if(typeof t.type>\"u\")throw new TypeError(\"Actions must have a type property\");super.next(t)}complete(){}ngOnDestroy(){super.complete()}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();new ye(\"@ngrx/store Internal Root Guard\"),new ye(\"@ngrx/store Internal Initial State\");const Lv=new ye(\"@ngrx/store Initial State\"),Nx=new ye(\"@ngrx/store Reducer Factory\"),Lx=(new ye(\"@ngrx/store Internal Reducer Factory Provider\"),new ye(\"@ngrx/store Initial Reducers\"));function Kx(...n){return function(e){if(0===n.length)return e;const t=n[n.length-1];return n.slice(0,-1).reduceRight((r,s)=>s(r),t(e))}}new ye(\"@ngrx/store Internal Initial Reducers\"),new ye(\"@ngrx/store Store Features\"),new ye(\"@ngrx/store Internal Store Reducers\"),new ye(\"@ngrx/store Internal Feature Reducers\"),new ye(\"@ngrx/store Internal Feature Configs\"),new ye(\"@ngrx/store Internal Store Features\"),new ye(\"@ngrx/store Internal Feature Reducers Token\"),new ye(\"@ngrx/store Feature Reducers\"),new ye(\"@ngrx/store User Provided Meta Reducers\"),new ye(\"@ngrx/store Meta Reducers\"),new ye(\"@ngrx/store Internal Resolved Meta Reducers\"),new ye(\"@ngrx/store User Runtime Checks Config\"),new ye(\"@ngrx/store Internal User Runtime Checks Config\"),new ye(\"@ngrx/store Internal Runtime Checks\"),new ye(\"@ngrx/store Check if Action types are unique\"),new ye(\"@ngrx/store Root Store Provider\"),new ye(\"@ngrx/store Feature State Provider\");class Xx extends ic{}let Ff=(()=>{class n extends Hi{get currentReducers(){return this.reducers}constructor(t,i,r,s){super(s(r,i)),this.dispatcher=t,this.initialState=i,this.reducers=r,this.reducerFactory=s}addFeature(t){this.addFeatures([t])}addFeatures(t){const i=t.reduce((r,{reducers:s,reducerFactory:o,metaReducers:a,initialState:c,key:l})=>{const u=\"function\"==typeof s?function a9(n){const e=Array.isArray(n)&&n.length>0?Kx(...n):t=>t;return(t,i)=>(t=e(t),(r,s)=>t(r=void 0===r?i:r,s))}(a)(s,c):function Yx(n,e){return Array.isArray(e)&&e.length>0&&(n=Kx.apply(null,[...e,n])),(t,i)=>{const r=n(t);return(s,o)=>r(s=void 0===s?i:s,o)}}(o,a)(s,c);return r[l]=u,r},{});this.addReducers(i)}removeFeature(t){this.removeFeatures([t])}removeFeatures(t){this.removeReducers(t.map(i=>i.key))}addReducer(t,i){this.addReducers({[t]:i})}addReducers(t){this.reducers={...this.reducers,...t},this.updateReducers(Object.keys(t))}removeReducer(t){this.removeReducers([t])}removeReducers(t){t.forEach(i=>{this.reducers=function o9(n,e){return Object.keys(n).filter(t=>t!==e).reduce((t,i)=>Object.assign(t,{[i]:n[i]}),{})}(this.reducers,i)}),this.updateReducers(t)}updateReducers(t){this.next(this.reducerFactory(this.reducers,this.initialState)),this.dispatcher.next({type:\"@ngrx/store/update-reducers\",features:t})}ngOnDestroy(){this.complete()}static{this.\\u0275fac=function(i){return new(i||n)(Le(Xx),Le(Lv),Le(Lx),Le(Nx))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();class Zx extends sn{}let fu=(()=>{class n extends sn{constructor(t,i,r){super(),this.actionsObserver=i,this.reducerManager=r,this.source=t,this.state=t.state}select(t,...i){return Hv.call(null,t,...i)(this)}selectSignal(t,i){return Ts(()=>t(this.state()),i)}lift(t){const i=new n(this,this.actionsObserver,this.reducerManager);return i.operator=t,i}dispatch(t){this.actionsObserver.next(t)}next(t){this.actionsObserver.next(t)}error(t){this.actionsObserver.error(t)}complete(){this.actionsObserver.complete()}addReducer(t,i){this.reducerManager.addReducer(t,i)}removeReducer(t){this.reducerManager.removeReducer(t)}static{this.\\u0275fac=function(i){return new(i||n)(Le(Zx),Le(ic),Le(Ff))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();function Hv(n,e,...t){return function(r){let s;if(\"string\"==typeof n){const o=[e,...t].filter(Boolean);s=r.pipe(function Y6(...n){const e=n.length;if(0===e)throw new Error(\"list of properties cannot be empty.\");return ii(t=>{let i=t;for(let r=0;r<e;r++){const s=i?.[n[r]];if(!(typeof s<\"u\"))return;i=s}return i})}(n,...o))}else{if(\"function\"!=typeof n)throw new TypeError(`Unexpected type '${typeof n}' in select operator, expected 'string' or 'function'`);s=r.pipe(ii(o=>n(o,e)))}return s.pipe(function X6(n,e=kr){return n=n??Z6,Pn((t,i)=>{let r,s=!0;t.subscribe(hn(i,o=>{const a=e(o);(s||!n(r,a))&&(s=!1,r=a,i.next(o))}))})}())}}function iP(n){if(!function m9(n){return function nP(n){return\"object\"==typeof n&&null!==n}(n)&&!function tP(n){return Array.isArray(n)}(n)}(n))return!1;const e=Object.getPrototypeOf(n);return e===Object.prototype||null===e}function Wv(n,e){return n===e}function qv(n,e=Wv,t=Wv){let s,i=null,r=null;return{memoized:function l(){if(void 0!==s)return s.result;if(!i)return r=n.apply(null,arguments),i=arguments,r;if(!function E9(n,e,t){for(let i=0;i<n.length;i++)if(!t(n[i],e[i]))return!0;return!1}(arguments,i,e))return r;const u=n.apply(null,arguments);return i=arguments,t(r,u)?r:(r=u,u)},reset:function o(){i=null,r=null},setResult:function a(u=void 0){s={result:u}},clearResult:function c(){s=void 0}}}function Vi(...n){return function S9(n,e={stateFn:b9}){return function(...t){let i=t;if(Array.isArray(i[0])){const[u,...h]=i;i=[...u,...h]}else 1===i.length&&function D9(n){return!!n&&\"object\"==typeof n&&Object.values(n).every(e=>\"function\"==typeof e)}(i[0])&&(i=function T9(n){const e=Object.values(n),t=Object.keys(n);return[...e,(...r)=>t.reduce((s,o,a)=>({...s,[o]:r[a]}),{})]}(i[0]));const r=i.slice(0,i.length-1),s=i[i.length-1],o=r.filter(u=>u.release&&\"function\"==typeof u.release),a=n(function(...u){return s.apply(null,u)}),c=qv(function(u,h){return e.stateFn.apply(null,[u,r,h,a])});return Object.assign(c.memoized,{release:function l(){c.reset(),a.reset(),o.forEach(u=>u.release())},projector:a.memoized,setResult:c.setResult,clearResult:c.clearResult})}}(qv)(...n)}function b9(n,e,t,i){if(void 0===t){const s=e.map(o=>o(n));return i.memoized.apply(null,s)}const r=e.map(s=>s(n,t));return i.memoized.apply(null,[...r,t])}function sP(n){const{name:e,reducer:t,extraSelectors:i}=n,r=function C9(n){return Vi(e=>e[n],e=>e)}(e),s=function I9(n,e){const t=function A9(n){return n(void 0,{type:\"@ngrx/feature/init\"})}(e);return(iP(t)?Object.keys(t):[]).reduce((r,s)=>({...r,[`select${kv(s)}`]:Vi(n,o=>o?.[s])}),{})}(r,t),o={[`select${kv(e)}State`]:r,...s},a=i?i(o):{};return{name:e,reducer:t,...o,...a}}function Mn(...n){return{reducer:n.pop(),types:n.map(i=>i.type)}}function lP(n,...e){const t=new Map;for(const i of e)for(const r of i.types){const s=t.get(r);t.set(r,s?(a,c)=>i.reducer(s(a,c),c):i.reducer)}return function(i=n,r){const s=t.get(r.type);return s?s(i,r):i}}function hP(n,e,t=10){return n.pipe(lu(i=>(e&&e.handleError(i),t<=1?n:hP(n,e,t-1))))}new ye(\"@ngrx/effects Internal Root Guard\"),new ye(\"@ngrx/effects User Provided Effects\"),new ye(\"@ngrx/effects Internal Root Effects\"),new ye(\"@ngrx/effects Internal Root Effects Instances\"),new ye(\"@ngrx/effects Internal Feature Effects\"),new ye(\"@ngrx/effects Internal Feature Effects Instance Groups\"),new ye(\"@ngrx/effects Effects Error Handler\",{providedIn:\"root\",factory:()=>hP}),Mx(\"@ngrx/effects/init\");const mt=xx({source:\"Configurator\",events:{loadOwspSuccess:{_as:\"props\",_p:void 0},loadOwspError:{_as:\"props\",_p:void 0},loadOwsp:{_as:\"props\",_p:void 0},convertOwspToCoreArea:{_as:\"props\",_p:void 0},convertOwspToCoreAreaSuccess:{_as:\"props\",_p:void 0},convertOwspToCoreAreaError:{_as:\"props\",_p:void 0},convertCoreAreaToComponentTree:{_as:\"props\",_p:void 0},convertCoreAreaToComponentTreeSuccess:{_as:\"props\",_p:void 0},convertCoreAreaToComponentTreeError:{_as:\"props\",_p:void 0},selectComponentId:{_as:\"props\",_p:void 0},selectComponentTreeNode:{_as:\"props\",_p:void 0},updateTreeElement:{_as:\"props\",_p:void 0},addTreeNodeElement:{_as:\"props\",_p:void 0},addConstructionElement:{_as:\"props\",_p:void 0},removeConstructionElement:{_as:\"props\",_p:void 0},makeWingElement:{_as:\"props\",_p:void 0},addConstruction:{_as:\"props\",_p:void 0},selectConstruction:{_as:\"props\",_p:void 0},removeConstruction:{_as:\"props\",_p:void 0},saveEditedConstruction:{_as:\"props\",_p:void 0},exportConstruction:{_as:\"props\",_p:void 0},selectStatusbarMode:{_as:\"props\",_p:void 0},unselectStatusbarMode:{_as:\"props\",_p:void 0},setToolbarMode:{_as:\"props\",_p:void 0}}});const yP=sP({name:\"configurator\",reducer:lP(z6,Mn(mt.loadOwsp,n=>({...n})),Mn(mt.loadOwspSuccess,(n,{data:e})=>({...n,selected:{...n.selected,owspModel:e}})),Mn(mt.loadOwspError,(n,{})=>({...n})),Mn(mt.convertOwspToCoreArea,n=>({...n,selected:{...n.selected,loadingCoreArea:!0}})),Mn(mt.convertOwspToCoreAreaSuccess,(n,{data:e})=>({...n,constructions:[...n.constructions,e],selected:{...n.selected,loadingCoreArea:!1,coreAreaModel:e}})),Mn(mt.convertOwspToCoreAreaError,(n,{})=>({...n,selected:{...n.selected,loadingCoreArea:!1}})),Mn(mt.convertCoreAreaToComponentTree,(n,{})=>({...n,selected:{...n.selected,loadingComponentTree:!0}})),Mn(mt.convertCoreAreaToComponentTreeSuccess,(n,{data:e})=>({...n,selected:{...n.selected,loadingComponentTree:!1,componentTree:e}})),Mn(mt.convertCoreAreaToComponentTreeError,(n,{})=>({...n,selected:{...n.selected,loadingComponentTree:!1}})),Mn(mt.selectComponentId,(n,{id:e})=>({...n,selected:{...n.selected,selectedComponentId:e}})),Mn(mt.selectConstruction,(n,{id:e})=>({...n,selectedConstructionId:e})),Mn(mt.addConstruction,(n,{})=>({...n})),Mn(mt.selectComponentTreeNode,(n,{componentTreeNode:e})=>({...n,selected:{...n.selected,selectedComponentNode:e}})),Mn(mt.selectStatusbarMode,(n,{mode:e,payload:t})=>({...n,statusbarMode:t?n.statusbarMode.concat(e):n.statusbarMode.filter(i=>!e.includes(i))})),Mn(mt.unselectStatusbarMode,n=>({...n,statusbarMode:[]})),Mn(mt.setToolbarMode,(n,{mode:e})=>({...n,toolbarMode:n.toolbarMode===e?As.DEFAULT:e})))}),{selectConfiguratorState:ew}=yP,{selectSelected:Co}=yP;Vi(Co,n=>n?.owspModel),Vi(Co,n=>n?.coreAreaModel),Vi(Co,n=>n?.selectedComponentNode),Vi(Co,n=>n?.componentTree),Vi(Co,n=>n?.selectedComponentId),Vi(Co,n=>n?.loadingCoreArea),Vi(Co,n=>n?.loadingComponentTree),Vi(ew,n=>n?.selectedConstructionId),Vi(ew,n=>n.statusbarMode),Vi(ew,n=>n.toolbarMode);const bq={propertyPanelGroupSettings:[{name:\"frame\",description:\"\\u0420\\u0430\\u043c\\u0430\",order:1,items:[yA(\"width\",\"\\u0448\\u0438\\u0440\\u0438\\u043d\\u0430\",1),yA(\"height\",\"\\u0432\\u044b\\u0441\\u043e\\u0442\\u0430\",2)]}],componentTreeSettings:[Gl(\"frame\",\"\\u0420\\u0430\\u043c\\u0430\",1,\"box-plot\"),Gl(\"beam\",\"\\u0411\\u0430\\u043b\\u043a\\u0430\",2),Gl(\"divider\",\"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u0435\\u043b\\u044c\",3),Gl(\"wing\",\"\\u0421\\u0442\\u0432\\u043e\\u0440\\u043a\\u0430\",4),Gl(\"filling\",\"\\u0417\\u0430\\u043f\\u043e\\u043b\\u043d\\u0435\\u043d\\u0438\\u0435\",5)]},wP=xx({source:\"ConfigratorSettigns\",events:{updatePropertiesPanelSettings:{_as:\"props\",_p:void 0},updateComponentTreeSettings:{_as:\"props\",_p:void 0}}});sP({name:\"configuratorSettings\",reducer:lP(bq,Mn(wP.updatePropertiesPanelSettings,(n,{settings:e})=>({...n,propertyPanelGroupSettings:e})),Mn(wP.updateComponentTreeSettings,(n,{settings:e})=>({...n,componentTreeSettings:e})))});function Vf(n){const e=Nd(()=>n());return function Dq(n){return n?.constructor===Object}(e)?new Proxy(n,{get:(t,i)=>i in e?(function $_(n){return\"function\"==typeof n&&void 0!==n[Pe]}(t[i])||Object.defineProperty(t,i,{value:Ts(()=>t()[i]),configurable:!0}),Vf(t[i])):t[i]}):n}const tw=new WeakMap,ni=Symbol(\"STATE_SOURCE\");function Wn(n,...e){n[ni].update(t=>e.reduce((i,r)=>({...i,...\"function\"==typeof r?r(i):r}),t)),function Iq(n){const e=function nw(n){return tw.get(n[ni])||[]}(n);for(const t of e)t(Nd(()=>EP(n)))}(n)}function EP(n){return n[ni]()}function iw(...n){const e=[...n],t=\"function\"==typeof e[0]?{}:e.shift(),i=e;return(()=>{class s{constructor(){const a=i.reduce((m,v)=>v(m),function xq(){return{[ni]:so({}),stateSignals:{},computedSignals:{},methods:{},hooks:{}}}()),{stateSignals:c,computedSignals:l,methods:u,hooks:h}=a,d={...c,...l,...u};this[ni]=a[ni];for(const m in d)this[m]=d[m];const{onInit:p,onDestroy:f}=h;p&&p(),f&&be(Ji).onDestroy(f)}static \\u0275fac=function(c){return new(c||s)};static \\u0275prov=He({token:s,factory:s.\\u0275fac,providedIn:t.providedIn||null})}return s})()}function rw(n){return e=>{const t=n({[ni]:e[ni],...e.stateSignals,...e.computedSignals,...e.methods});return Object.keys(t),{...e,methods:{...e.methods,...t}}}}function sw(n){return e=>{const t=\"function\"==typeof n?n():n,i=Object.keys(t);e[ni].update(s=>({...s,...t}));const r=i.reduce((s,o)=>{const a=Ts(()=>e[ni]()[o]);return{...s,[o]:Vf(a)}},{});return{...e,stateSignals:{...e.stateSignals,...r}}}}iw({providedIn:\"root\"},sw({statusbarMode:[],singleTapMode:!0}),rw((n,e=be(fu))=>({toggleStatusbarMode(t){Wn(n,i=>{const r=i.statusbarMode.includes(t)?i.statusbarMode.filter(s=>s!==t):[...i.statusbarMode,t];return{...i,statusbarMode:r}}),e.dispatch(mt.selectStatusbarMode({mode:[t],payload:n.statusbarMode().includes(t)}))},clearStatusbarMode(){Wn(n,t=>({...t,statusbarMode:[]}))},toggleSingleTapMode(){Wn(n,t=>({...t,singleTapMode:!t.singleTapMode}))}}))),iw({providedIn:\"root\"},sw({toolbarGroupArray:[],toolbarActiveMode:As.DEFAULT,prevToolbarActiveMode:As.DEFAULT}),rw(n=>({setToolbarGroup(e){Wn(n,t=>({...t,toolbarGroupArray:e}))},clearToolbarGroup(){Wn(n,e=>({...e,toolbarGroupArray:[]}))},setActiveMode(e){Wn(n,t=>({...t,prevToolbarActiveMode:t.toolbarActiveMode,toolbarActiveMode:t.toolbarActiveMode===e?As.DEFAULT:e}))}})));const bP={metrics:[],activeMetric:null},Rq=(iw({providedIn:\"root\"},sw(bP),function Pq(n){return e=>{const t=n({...e.stateSignals,...e.computedSignals});return Object.keys(t),{...e,computedSignals:{...e.computedSignals,...t}}}}(({activeMetric:n})=>({activeMetricCustomSizes:Ts(()=>n()?.customSizes||[])})),rw(({metrics:n,activeMetric:e,...t},i=be(r4))=>({createMetricFromConstruction(r){const s=i.createConstructionMetrics(r);this.addMetric(s),this.setActiveMetric(s.constructionId)},addMetric(r){n().find(o=>o.constructionId===r.constructionId)?Wn(t,{metrics:n().map(o=>o.constructionId===r.constructionId?{...r,customSizes:o.customSizes}:o)}):Wn(t,{metrics:[...n(),r]})},setActiveMetric(r){n().find(o=>o.constructionId===r)?Wn(t,{activeMetric:n().find(o=>o.constructionId===r)||null}):this.addMetric({constructionId:r,customSizes:[]})},addCustomSize(r){Wn(t,s=>({...s,activeMetric:{...s.activeMetric,customSizes:[...s.activeMetric.customSizes,r]}})),this.updateMetrics()},removeCustomSizes(r){const s=e()?{...e(),customSizes:e().customSizes.filter(o=>o.id!==r)}:e();Wn(t,{activeMetric:s}),this.updateMetrics()},updateMetrics(){e()&&Wn(t,{metrics:n().map(r=>r.constructionId===e()?.constructionId?e():r)})},updateActiveMetricCustomSize(r){Wn(t,s=>({...s,activeMetric:{...s.activeMetric,customSizes:s.activeMetric?.customSizes.map(o=>o.id===r.id?r:o)||[]}})),this.updateMetrics()},updateActiveMetricsCustomSizeList(r){Wn(t,s=>({...s,activeMetric:{...s.activeMetric,customSizes:r}})),this.updateMetrics()},updateConstructionMetric(r){const s=i.createConstructionMetrics(r);this.addMetric({...s,customSizes:e()?.customSizes||[]})},removeActiveMetricCustomSize(r){Wn(t,{activeMetric:{...e(),customSizes:e().customSizes.filter(s=>s.id!==r)}}),this.updateMetrics()},resetState(){Wn(t,{...bP})}}))),[\"editorcontainer\"]);let Nq=(()=>{class n{constructor(t,i){this.guiService=t,this.destroyRef=i,this.name=\"konva-container\",this.editorContainerSize=new Ot,this.sizeObserver=new ResizeObserver(r=>{this.editorContainerSize.next({width:r[0].contentRect.width,height:r[0].contentRect.height})})}ngOnInit(){this.editorContainerSize.pipe(bM(100),uu(this.destroyRef)).subscribe(t=>{this.guiService.changeSize(t)})}ngAfterViewInit(){this.editorContainer?.nativeElement&&(this.sizeObserver.observe(this.editorContainer.nativeElement),this.guiService.createGui(this.editorContainer.nativeElement.id))}ngOnDestroy(){this.guiService.clearGui(),this.editorContainerSize.unsubscribe(),this.sizeObserver.unobserve(this.editorContainer?.nativeElement)}static{this.\\u0275fac=function(i){return new(i||n)(rt(Ix),rt(Ji))}}static{this.\\u0275cmp=zp({type:n,selectors:[[\"lib-winconf-construction-editor\"]],viewQuery:function(i,r){if(1&i&&function dT(n,e,t){nC(n,e,t)}(Rq,5),2&i){let s;(function fT(n){const e=ee(),t=st(),i=ug();lh(i+1);const r=G_(t,i);if(n.dirty&&function GR(n){return!(4&~n[Ue])}(e)===!(2&~r.metadata.flags)){if(null===r.matches)n.reset([]);else{const s=sC(e,i);n.reset(s,RE),n.notifyOnChanges()}return!0}return!1})(s=pT())&&(r.editorContainer=s.first)}},inputs:{name:\"name\"},standalone:!0,features:[Pm],decls:2,vars:1,consts:[[\"editorcontainer\",\"\"],[1,\"konva-container\",3,\"id\"]],template:function(i,r){1&i&&hd(0,\"div\",1,0),2&i&&Cl(\"id\",r.name)},styles:[\".konva-container[_ngcontent-%COMP%]{height:100%;width:100%}\"],changeDetection:0})}}return n})();const kq=(n,e)=>({primary:n,secondary:e});function Lq(n,e){if(1&n){const t=function MD(){return ee()}();Tl(0,\"button\",2),wm(\"click\",function(){return function H0(n){return Ze.lFrame.contextLView=n,n[Vt]}(t),function G0(n){return Ze.lFrame.contextLView=null,n}(bm().toggleDrawingType())}),Tl(1,\"span\",3),function CT(n,e=\"\"){const t=ee(),i=st(),r=n+Fe,s=i.firstCreatePass?eo(i,r,1,e,null):i.data[r],o=DT(i,t,s,e,n);t[r]=o,jc()&&Fh(i,t,o,s),Zi(s,!1)}(2),ud()()}if(2&n){const t=bm();Cl(\"ngClass\",zT(2,kq,t.isDrawingButtonActive(),!t.isDrawingButtonActive())),l_(2),Dm(\"space_dashboard\")}}let Fq=(()=>{class n{constructor(t,i,r,s){this.constructionService=t,this.converterService=i,this.guiService=r,this.destroyRef=s,this.construction=so(null),this.gui=so(null),this.drawingType=so(Or.SOLID),this.drawing=Ts(()=>this.gui()?V6[this.drawingType()](this.gui()):null),this.isDrawingButtonEnabled=Ts(()=>!!this.drawing()&&!!this.construction()),this.isDrawingButtonActive=Ts(()=>this.drawingType()===Or.SOLID),this.onParseModel=new Ot,this.onParseModel.pipe(uu(this.destroyRef),Zd(o=>this.constructionService.parseConstruction(o).pipe(ii(a=>this.converterService.convertOWSP(a).konvaConstruction),lu(a=>function Jv(...n){return Ly(n,dA(n))}(a))))).subscribe(o=>{this.construction.set(o)}),function l1(n,e){Qn(\"NgSignals\"),!e?.injector&&xc();const t=e?.injector??be(kn),i=!0!==e?.manualCleanup?t.get(Ji):null,r=new Nz(t.get(Pz),n,typeof Zone>\"u\"?null:Zone.current,i,t,e?.allowSignalWrites??!1),s=t.get(qm,null,{optional:!0});return s&&8&s._lView[Ue]?(s._lView[th]??=[]).push(r.watcher.notify):r.watcher.notify(),r}(()=>{this.gui()&&this.construction()&&this.drawing()&&(this.drawing()?.clearDrawingLine(),this.drawing()?.clearAllDividers(),this.drawing()?.clearAreas(),this.drawing()?.drawConstruction(this.construction()))})}ngOnInit(){this.guiService.onCreateGui.pipe(uu(this.destroyRef)).subscribe(t=>{this.gui.set(t)})}ngOnChanges(t){t.model&&this.model&&this.onParseModel.next(this.model)}toggleDrawingType(){this.drawing()&&this.construction()&&this.drawingType.update(t=>t===Or.SOLID?Or.WIRE:Or.SOLID)}static{this.\\u0275fac=function(i){return new(i||n)(rt(ov),rt(mf),rt(Ix),rt(Ji))}}static{this.\\u0275cmp=zp({type:n,selectors:[[\"lib-winconf-component\"]],inputs:{model:\"model\"},standalone:!0,features:[kc,Pm],decls:2,vars:1,consts:[[1,\"lib-winconf-construction-editor\"],[\"class\",\"fill-button\",3,\"ngClass\",\"click\",4,\"ngIf\"],[1,\"fill-button\",3,\"click\",\"ngClass\"],[1,\"material-icons\"]],template:function(i,r){1&i&&(hd(0,\"lib-winconf-construction-editor\",0),X_(1,Lq,3,5,\"button\",1)),2&i&&(l_(),Cl(\"ngIf\",r.isDrawingButtonEnabled()))},dependencies:[my,w1,S1,Nq],styles:['@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";html[_ngcontent-%COMP%], body[_ngcontent-%COMP%]{width:100%;height:100%;margin:0}[_nghost-%COMP%]{box-sizing:border-box;display:block;height:100%;width:100%;position:relative;border:solid 3px #d1d5db}[_nghost-%COMP%]   .lib-winconf-construction-editor[_ngcontent-%COMP%]{position:absolute;inset:0}[_nghost-%COMP%]   .fill-button[_ngcontent-%COMP%]{position:absolute;top:2rem;right:2rem;cursor:pointer;font-size:1rem;line-height:1;border-radius:100px;outline:0;box-shadow:0 0 1px #00000073;transition:all .3s cubic-bezier(.645,.045,.355,1),box-shadow .1s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;user-select:none;padding:10px 12px;color:#000;background-color:#fff;border:1px solid #d9d9d9}[_nghost-%COMP%]   .fill-button.primary[_ngcontent-%COMP%]{background-color:#1890ff;border-color:#1890ff;color:#fff}[_nghost-%COMP%]   .fill-button.primary[_ngcontent-%COMP%]:hover{background-color:#40a9ff}[_nghost-%COMP%]   .fill-button.secondary[_ngcontent-%COMP%]:hover{color:#40a9ff;border-color:#40a9ff}[_nghost-%COMP%]   .fill-button[_ngcontent-%COMP%]:active{box-shadow:0 0 4px #00000073}'],changeDetection:0})}}return n})();var Qe=function(n){return n[n.State=0]=\"State\",n[n.Transition=1]=\"Transition\",n[n.Sequence=2]=\"Sequence\",n[n.Group=3]=\"Group\",n[n.Animate=4]=\"Animate\",n[n.Keyframes=5]=\"Keyframes\",n[n.Style=6]=\"Style\",n[n.Trigger=7]=\"Trigger\",n[n.Reference=8]=\"Reference\",n[n.AnimateChild=9]=\"AnimateChild\",n[n.AnimateRef=10]=\"AnimateRef\",n[n.Query=11]=\"Query\",n[n.Stagger=12]=\"Stagger\",n}(Qe||{});const os=\"*\";function SP(n){return{type:Qe.Style,styles:n,offset:null}}class pu{constructor(e=0,t=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=e+t}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){const t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(i=>i()),t.length=0}}class CP{constructor(e){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;let t=0,i=0,r=0;const s=this.players.length;0==s?queueMicrotask(()=>this._onFinish()):this.players.forEach(o=>{o.onDone(()=>{++t==s&&this._onFinish()}),o.onDestroy(()=>{++i==s&&this._onDestroy()}),o.onStart(()=>{++r==s&&this._onStart()})}),this.totalTime=this.players.reduce((o,a)=>Math.max(o,a.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){const t=e*this.totalTime;this.players.forEach(i=>{const r=i.totalTime?Math.min(1,t/i.totalTime):1;i.setPosition(r)})}getPosition(){const e=this.players.reduce((t,i)=>null===t||i.totalTime>t.totalTime?i:t,null);return null!=e?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){const t=\"start\"==e?this._onStartFns:this._onDoneFns;t.forEach(i=>i()),t.length=0}}function DP(n){return new oe(3e3,!1)}function ks(n){switch(n.length){case 0:return new pu;case 1:return n[0];default:return new CP(n)}}function TP(n,e,t=new Map,i=new Map){const r=[],s=[];let o=-1,a=null;if(e.forEach(c=>{const l=c.get(\"offset\"),u=l==o,h=u&&a||new Map;c.forEach((d,p)=>{let f=p,m=d;if(\"offset\"!==p)switch(f=n.normalizePropertyName(f,r),m){case\"!\":m=t.get(p);break;case os:m=i.get(p);break;default:m=n.normalizeStyleValue(p,f,m,r)}h.set(f,m)}),u||s.push(h),a=h,o=l}),r.length)throw function h7(){return new oe(3502,!1)}();return s}function aw(n,e,t,i){switch(e){case\"start\":n.onStart(()=>i(t&&cw(t,\"start\",n)));break;case\"done\":n.onDone(()=>i(t&&cw(t,\"done\",n)));break;case\"destroy\":n.onDestroy(()=>i(t&&cw(t,\"destroy\",n)))}}function cw(n,e,t){const s=lw(n.element,n.triggerName,n.fromState,n.toState,e||n.phaseName,t.totalTime??n.totalTime,!!t.disabled),o=n._data;return null!=o&&(s._data=o),s}function lw(n,e,t,i,r=\"\",s=0,o){return{element:n,triggerName:e,fromState:t,toState:i,phaseName:r,totalTime:s,disabled:!!o}}function Ti(n,e,t){let i=n.get(e);return i||n.set(e,i=t),i}function IP(n){const e=n.indexOf(\":\");return[n.substring(1,e),n.slice(e+1)]}const S7=typeof document>\"u\"?null:document.documentElement;function uw(n){const e=n.parentNode||n.host||null;return e===S7?null:e}let Do=null,AP=!1;function MP(n,e){for(;e;){if(e===n)return!0;e=uw(e)}return!1}function xP(n,e,t){if(t)return Array.from(n.querySelectorAll(e));const i=n.querySelector(e);return i?[i]:[]}let hw=(()=>{class n{validateStyleProperty(t){return function D7(n){Do||(Do=function T7(){return typeof document<\"u\"?document.body:null}()||{},AP=!!Do.style&&\"WebkitAppearance\"in Do.style);let e=!0;return Do.style&&!function C7(n){return\"ebkit\"==n.substring(1,6)}(n)&&(e=n in Do.style,!e&&AP&&(e=\"Webkit\"+n.charAt(0).toUpperCase()+n.slice(1)in Do.style)),e}(t)}containsElement(t,i){return MP(t,i)}getParentElement(t){return uw(t)}query(t,i,r){return xP(t,i,r)}computeStyle(t,i,r){return r||\"\"}animate(t,i,r,s,o,a=[],c){return new pu(r,s)}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})();class dw{static{this.NOOP=new hw}}class fw{}const A7=1e3,pw=\"ng-enter\",zf=\"ng-leave\",Uf=\"ng-trigger\",Hf=\".ng-trigger\",OP=\"ng-animating\",gw=\".ng-animating\";function as(n){if(\"number\"==typeof n)return n;const e=n.match(/^(-?[\\.\\d]+)(m?s)/);return!e||e.length<2?0:_w(parseFloat(e[1]),e[2])}function _w(n,e){return\"s\"===e?n*A7:n}function Gf(n,e,t){return n.hasOwnProperty(\"duration\")?n:function x7(n,e,t){let r,s=0,o=\"\";if(\"string\"==typeof n){const a=n.match(/^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i);if(null===a)return e.push(DP()),{duration:0,delay:0,easing:\"\"};r=_w(parseFloat(a[1]),a[2]);const c=a[3];null!=c&&(s=_w(parseFloat(c),a[4]));const l=a[5];l&&(o=l)}else r=n;if(!t){let a=!1,c=e.length;r<0&&(e.push(function Hq(){return new oe(3100,!1)}()),a=!0),s<0&&(e.push(function Gq(){return new oe(3101,!1)}()),a=!0),a&&e.splice(c,0,DP())}return{duration:r,delay:s,easing:o}}(n,e,t)}function Rr(n,e,t){e.forEach((i,r)=>{const s=yw(r);t&&!t.has(r)&&t.set(r,n.style[s]),n.style[s]=i})}function To(n,e){e.forEach((t,i)=>{const r=yw(i);n.style[r]=\"\"})}function gu(n){return Array.isArray(n)?1==n.length?n[0]:function Bq(n,e=null){return{type:Qe.Sequence,steps:n,options:e}}(n):n}const mw=new RegExp(\"{{\\\\s*(.+?)\\\\s*}}\",\"g\");function NP(n){let e=[];if(\"string\"==typeof n){let t;for(;t=mw.exec(n);)e.push(t[1]);mw.lastIndex=0}return e}function _u(n,e,t){const i=`${n}`,r=i.replace(mw,(s,o)=>{let a=e[o];return null==a&&(t.push(function Wq(){return new oe(3003,!1)}()),a=\"\"),a.toString()});return r==i?n:r}const R7=/-+([a-z0-9])/g;function yw(n){return n.replace(R7,(...e)=>e[1].toUpperCase())}function Ii(n,e,t){switch(e.type){case Qe.Trigger:return n.visitTrigger(e,t);case Qe.State:return n.visitState(e,t);case Qe.Transition:return n.visitTransition(e,t);case Qe.Sequence:return n.visitSequence(e,t);case Qe.Group:return n.visitGroup(e,t);case Qe.Animate:return n.visitAnimate(e,t);case Qe.Keyframes:return n.visitKeyframes(e,t);case Qe.Style:return n.visitStyle(e,t);case Qe.Reference:return n.visitReference(e,t);case Qe.AnimateChild:return n.visitAnimateChild(e,t);case Qe.AnimateRef:return n.visitAnimateRef(e,t);case Qe.Query:return n.visitQuery(e,t);case Qe.Stagger:return n.visitStagger(e,t);default:throw function qq(){return new oe(3004,!1)}()}}function vw(n,e){return window.getComputedStyle(n)[e]}const L7=new Set([\"width\",\"height\",\"minWidth\",\"minHeight\",\"maxWidth\",\"maxHeight\",\"left\",\"top\",\"bottom\",\"right\",\"fontSize\",\"outlineWidth\",\"outlineOffset\",\"paddingTop\",\"paddingLeft\",\"paddingBottom\",\"paddingRight\",\"marginTop\",\"marginLeft\",\"marginBottom\",\"marginRight\",\"borderRadius\",\"borderWidth\",\"borderTopWidth\",\"borderLeftWidth\",\"borderRightWidth\",\"borderBottomWidth\",\"textIndent\",\"perspective\"]);class kP extends fw{normalizePropertyName(e,t){return yw(e)}normalizeStyleValue(e,t,i,r){let s=\"\";const o=i.toString().trim();if(L7.has(t)&&0!==i&&\"0\"!==i)if(\"number\"==typeof i)s=\"px\";else{const a=i.match(/^[+-]?[\\d\\.]+([a-z]*)$/);a&&0==a[1].length&&r.push(function Kq(){return new oe(3005,!1)}())}return o+s}}const $f=\"*\";const Wf=new Set([\"true\",\"1\"]),qf=new Set([\"false\",\"0\"]);function LP(n,e){const t=Wf.has(n)||qf.has(n),i=Wf.has(e)||qf.has(e);return(r,s)=>{let o=n==$f||n==r,a=e==$f||e==s;return!o&&t&&\"boolean\"==typeof r&&(o=r?Wf.has(n):qf.has(n)),!a&&i&&\"boolean\"==typeof s&&(a=s?Wf.has(e):qf.has(e)),o&&a}}const V7=new RegExp(\"s*:selfs*,?\",\"g\");function ww(n,e,t,i){return new z7(n).build(e,t,i)}class z7{constructor(e){this._driver=e}build(e,t,i){const r=new G7(t);return this._resetContextStyleTimingState(r),Ii(this,gu(e),r)}_resetContextStyleTimingState(e){e.currentQuerySelector=\"\",e.collectedStyles=new Map,e.collectedStyles.set(\"\",new Map),e.currentTime=0}visitTrigger(e,t){let i=t.queryCount=0,r=t.depCount=0;const s=[],o=[];return\"@\"==e.name.charAt(0)&&t.errors.push(function Yq(){return new oe(3006,!1)}()),e.definitions.forEach(a=>{if(this._resetContextStyleTimingState(t),a.type==Qe.State){const c=a,l=c.name;l.toString().split(/\\s*,\\s*/).forEach(u=>{c.name=u,s.push(this.visitState(c,t))}),c.name=l}else if(a.type==Qe.Transition){const c=this.visitTransition(a,t);i+=c.queryCount,r+=c.depCount,o.push(c)}else t.errors.push(function Xq(){return new oe(3007,!1)}())}),{type:Qe.Trigger,name:e.name,states:s,transitions:o,queryCount:i,depCount:r,options:null}}visitState(e,t){const i=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(i.containsDynamicStyles){const s=new Set,o=r||{};i.styles.forEach(a=>{a instanceof Map&&a.forEach(c=>{NP(c).forEach(l=>{o.hasOwnProperty(l)||s.add(l)})})}),s.size&&t.errors.push(function Zq(){return new oe(3008,!1)}(0,s.values()))}return{type:Qe.State,name:e.name,style:i,options:r?{params:r}:null}}visitTransition(e,t){t.queryCount=0,t.depCount=0;const i=Ii(this,gu(e.animation),t),r=function F7(n,e){const t=[];return\"string\"==typeof n?n.split(/\\s*,\\s*/).forEach(i=>function B7(n,e,t){if(\":\"==n[0]){const c=function j7(n,e){switch(n){case\":enter\":return\"void => *\";case\":leave\":return\"* => void\";case\":increment\":return(t,i)=>parseFloat(i)>parseFloat(t);case\":decrement\":return(t,i)=>parseFloat(i)<parseFloat(t);default:return e.push(function a7(){return new oe(3016,!1)}()),\"* => *\"}}(n,t);if(\"function\"==typeof c)return void e.push(c);n=c}const i=n.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);if(null==i||i.length<4)return t.push(function o7(){return new oe(3015,!1)}()),e;const r=i[1],s=i[2],o=i[3];e.push(LP(r,o)),\"<\"==s[0]&&(r!=$f||o!=$f)&&e.push(LP(o,r))}(i,t,e)):t.push(n),t}(e.expr,t.errors);return{type:Qe.Transition,matchers:r,animation:i,queryCount:t.queryCount,depCount:t.depCount,options:Io(e.options)}}visitSequence(e,t){return{type:Qe.Sequence,steps:e.steps.map(i=>Ii(this,i,t)),options:Io(e.options)}}visitGroup(e,t){const i=t.currentTime;let r=0;const s=e.steps.map(o=>{t.currentTime=i;const a=Ii(this,o,t);return r=Math.max(r,t.currentTime),a});return t.currentTime=r,{type:Qe.Group,steps:s,options:Io(e.options)}}visitAnimate(e,t){const i=function W7(n,e){if(n.hasOwnProperty(\"duration\"))return n;if(\"number\"==typeof n)return Ew(Gf(n,e).duration,0,\"\");const t=n;if(t.split(/\\s+/).some(s=>\"{\"==s.charAt(0)&&\"{\"==s.charAt(1))){const s=Ew(0,0,\"\");return s.dynamic=!0,s.strValue=t,s}const r=Gf(t,e);return Ew(r.duration,r.delay,r.easing)}(e.timings,t.errors);t.currentAnimateTimings=i;let r,s=e.styles?e.styles:SP({});if(s.type==Qe.Keyframes)r=this.visitKeyframes(s,t);else{let o=e.styles,a=!1;if(!o){a=!0;const l={};i.easing&&(l.easing=i.easing),o=SP(l)}t.currentTime+=i.duration+i.delay;const c=this.visitStyle(o,t);c.isEmptyStep=a,r=c}return t.currentAnimateTimings=null,{type:Qe.Animate,timings:i,style:r,options:null}}visitStyle(e,t){const i=this._makeStyleAst(e,t);return this._validateStyleAst(i,t),i}_makeStyleAst(e,t){const i=[],r=Array.isArray(e.styles)?e.styles:[e.styles];for(let a of r)\"string\"==typeof a?a===os?i.push(a):t.errors.push(new oe(3002,!1)):i.push(new Map(Object.entries(a)));let s=!1,o=null;return i.forEach(a=>{if(a instanceof Map&&(a.has(\"easing\")&&(o=a.get(\"easing\"),a.delete(\"easing\")),!s))for(let c of a.values())if(c.toString().indexOf(\"{{\")>=0){s=!0;break}}),{type:Qe.Style,styles:i,easing:o,offset:e.offset,containsDynamicStyles:s,options:null}}_validateStyleAst(e,t){const i=t.currentAnimateTimings;let r=t.currentTime,s=t.currentTime;i&&s>0&&(s-=i.duration+i.delay),e.styles.forEach(o=>{\"string\"!=typeof o&&o.forEach((a,c)=>{const l=t.collectedStyles.get(t.currentQuerySelector),u=l.get(c);let h=!0;u&&(s!=r&&s>=u.startTime&&r<=u.endTime&&(t.errors.push(function Jq(){return new oe(3010,!1)}()),h=!1),s=u.startTime),h&&l.set(c,{startTime:s,endTime:r}),t.options&&function O7(n,e,t){const i=e.params||{},r=NP(n);r.length&&r.forEach(s=>{i.hasOwnProperty(s)||t.push(function $q(){return new oe(3001,!1)}())})}(a,t.options,t.errors)})})}visitKeyframes(e,t){const i={type:Qe.Keyframes,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(function e7(){return new oe(3011,!1)}()),i;let s=0;const o=[];let a=!1,c=!1,l=0;const u=e.steps.map(C=>{const I=this._makeStyleAst(C,t);let L=null!=I.offset?I.offset:function $7(n){if(\"string\"==typeof n)return null;let e=null;if(Array.isArray(n))n.forEach(t=>{if(t instanceof Map&&t.has(\"offset\")){const i=t;e=parseFloat(i.get(\"offset\")),i.delete(\"offset\")}});else if(n instanceof Map&&n.has(\"offset\")){const t=n;e=parseFloat(t.get(\"offset\")),t.delete(\"offset\")}return e}(I.styles),H=0;return null!=L&&(s++,H=I.offset=L),c=c||H<0||H>1,a=a||H<l,l=H,o.push(H),I});c&&t.errors.push(function t7(){return new oe(3012,!1)}()),a&&t.errors.push(function n7(){return new oe(3200,!1)}());const h=e.steps.length;let d=0;s>0&&s<h?t.errors.push(function i7(){return new oe(3202,!1)}()):0==s&&(d=1/(h-1));const p=h-1,f=t.currentTime,m=t.currentAnimateTimings,v=m.duration;return u.forEach((C,I)=>{const L=d>0?I==p?1:d*I:o[I],H=L*v;t.currentTime=f+m.delay+H,m.duration=H,this._validateStyleAst(C,t),C.offset=L,i.styles.push(C)}),i}visitReference(e,t){return{type:Qe.Reference,animation:Ii(this,gu(e.animation),t),options:Io(e.options)}}visitAnimateChild(e,t){return t.depCount++,{type:Qe.AnimateChild,options:Io(e.options)}}visitAnimateRef(e,t){return{type:Qe.AnimateRef,animation:this.visitReference(e.animation,t),options:Io(e.options)}}visitQuery(e,t){const i=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;const[s,o]=function U7(n){const e=!!n.split(/\\s*,\\s*/).find(t=>\":self\"==t);return e&&(n=n.replace(V7,\"\")),n=n.replace(/@\\*/g,Hf).replace(/@\\w+/g,t=>Hf+\"-\"+t.slice(1)).replace(/:animating/g,gw),[n,e]}(e.selector);t.currentQuerySelector=i.length?i+\" \"+s:s,Ti(t.collectedStyles,t.currentQuerySelector,new Map);const a=Ii(this,gu(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=i,{type:Qe.Query,selector:s,limit:r.limit||0,optional:!!r.optional,includeSelf:o,animation:a,originalSelector:e.selector,options:Io(e.options)}}visitStagger(e,t){t.currentQuery||t.errors.push(function r7(){return new oe(3013,!1)}());const i=\"full\"===e.timings?{duration:0,delay:0,easing:\"full\"}:Gf(e.timings,t.errors,!0);return{type:Qe.Stagger,animation:Ii(this,gu(e.animation),t),timings:i,options:null}}}class G7{constructor(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function Io(n){return n?(n={...n}).params&&(n.params=function H7(n){return n?{...n}:null}(n.params)):n={},n}function Ew(n,e,t){return{duration:n,delay:e,easing:t}}function bw(n,e,t,i,r,s,o=null,a=!1){return{type:1,element:n,keyframes:e,preStyleProps:t,postStyleProps:i,duration:r,delay:s,totalTime:r+s,easing:o,subTimeline:a}}class Kf{constructor(){this._map=new Map}get(e){return this._map.get(e)||[]}append(e,t){let i=this._map.get(e);i||this._map.set(e,i=[]),i.push(...t)}has(e){return this._map.has(e)}clear(){this._map.clear()}}const Y7=new RegExp(\":enter\",\"g\"),Z7=new RegExp(\":leave\",\"g\");function Sw(n,e,t,i,r,s=new Map,o=new Map,a,c,l=[]){return(new Q7).buildKeyframes(n,e,t,i,r,s,o,a,c,l)}class Q7{buildKeyframes(e,t,i,r,s,o,a,c,l,u=[]){l=l||new Kf;const h=new Cw(e,t,l,r,s,u,[]);h.options=c;const d=c.delay?as(c.delay):0;h.currentTimeline.delayNextStep(d),h.currentTimeline.setStyles([o],null,h.errors,c),Ii(this,i,h);const p=h.timelines.filter(f=>f.containsAnimation());if(p.length&&a.size){let f;for(let m=p.length-1;m>=0;m--){const v=p[m];if(v.element===t){f=v;break}}f&&!f.allowOnlyTimelineStyles()&&f.setStyles([a],null,h.errors,c)}return p.length?p.map(f=>f.buildKeyframes()):[bw(t,[],[],[],0,d,\"\",!1)]}visitTrigger(e,t){}visitState(e,t){}visitTransition(e,t){}visitAnimateChild(e,t){const i=t.subInstructions.get(t.element);if(i){const r=t.createSubContext(e.options),s=t.currentTimeline.currentTime,o=this._visitSubInstructions(i,r,r.options);s!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e}visitAnimateRef(e,t){const i=t.createSubContext(e.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],t,i),this.visitReference(e.animation,i),t.transformIntoNewTimeline(i.currentTimeline.currentTime),t.previousNode=e}_applyAnimationRefDelays(e,t,i){for(const r of e){const s=r?.delay;if(s){const o=\"number\"==typeof s?s:as(_u(s,r?.params??{},t.errors));i.delayNextStep(o)}}}_visitSubInstructions(e,t,i){let s=t.currentTimeline.currentTime;const o=null!=i.duration?as(i.duration):null,a=null!=i.delay?as(i.delay):null;return 0!==o&&e.forEach(c=>{const l=t.appendInstructionToTimeline(c,o,a);s=Math.max(s,l.duration+l.delay)}),s}visitReference(e,t){t.updateOptions(e.options,!0),Ii(this,e.animation,t),t.previousNode=e}visitSequence(e,t){const i=t.subContextCount;let r=t;const s=e.options;if(s&&(s.params||s.delay)&&(r=t.createSubContext(s),r.transformIntoNewTimeline(),null!=s.delay)){r.previousNode.type==Qe.Style&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=Yf);const o=as(s.delay);r.delayNextStep(o)}e.steps.length&&(e.steps.forEach(o=>Ii(this,o,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>i&&r.transformIntoNewTimeline()),t.previousNode=e}visitGroup(e,t){const i=[];let r=t.currentTimeline.currentTime;const s=e.options&&e.options.delay?as(e.options.delay):0;e.steps.forEach(o=>{const a=t.createSubContext(e.options);s&&a.delayNextStep(s),Ii(this,o,a),r=Math.max(r,a.currentTimeline.currentTime),i.push(a.currentTimeline)}),i.forEach(o=>t.currentTimeline.mergeTimelineCollectedStyles(o)),t.transformIntoNewTimeline(r),t.previousNode=e}_visitTiming(e,t){if(e.dynamic){const i=e.strValue;return Gf(t.params?_u(i,t.params,t.errors):i,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,t){const i=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;i.delay&&(t.incrementTime(i.delay),r.snapshotCurrentStyles());const s=e.style;s.type==Qe.Keyframes?this.visitKeyframes(s,t):(t.incrementTime(i.duration),this.visitStyle(s,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e}visitStyle(e,t){const i=t.currentTimeline,r=t.currentAnimateTimings;!r&&i.hasCurrentStyleProperties()&&i.forwardFrame();const s=r&&r.easing||e.easing;e.isEmptyStep?i.applyEmptyStep(s):i.setStyles(e.styles,s,t.errors,t.options),t.previousNode=e}visitKeyframes(e,t){const i=t.currentAnimateTimings,r=t.currentTimeline.duration,s=i.duration,a=t.createSubContext().currentTimeline;a.easing=i.easing,e.styles.forEach(c=>{a.forwardTime((c.offset||0)*s),a.setStyles(c.styles,c.easing,t.errors,t.options),a.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(a),t.transformIntoNewTimeline(r+s),t.previousNode=e}visitQuery(e,t){const i=t.currentTimeline.currentTime,r=e.options||{},s=r.delay?as(r.delay):0;s&&(t.previousNode.type===Qe.Style||0==i&&t.currentTimeline.hasCurrentStyleProperties())&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=Yf);let o=i;const a=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!r.optional,t.errors);t.currentQueryTotal=a.length;let c=null;a.forEach((l,u)=>{t.currentQueryIndex=u;const h=t.createSubContext(e.options,l);s&&h.delayNextStep(s),l===t.element&&(c=h.currentTimeline),Ii(this,e.animation,h),h.currentTimeline.applyStylesToKeyframe(),o=Math.max(o,h.currentTimeline.currentTime)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(o),c&&(t.currentTimeline.mergeTimelineCollectedStyles(c),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e}visitStagger(e,t){const i=t.parentContext,r=t.currentTimeline,s=e.timings,o=Math.abs(s.duration),a=o*(t.currentQueryTotal-1);let c=o*t.currentQueryIndex;switch(s.duration<0?\"reverse\":s.easing){case\"reverse\":c=a-c;break;case\"full\":c=i.currentStaggerTime}const u=t.currentTimeline;c&&u.delayNextStep(c);const h=u.currentTime;Ii(this,e.animation,t),t.previousNode=e,i.currentStaggerTime=r.currentTime-h+(r.startTime-i.currentTimeline.startTime)}}const Yf={};class Cw{constructor(e,t,i,r,s,o,a,c){this._driver=e,this.element=t,this.subInstructions=i,this._enterClassName=r,this._leaveClassName=s,this.errors=o,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=Yf,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=c||new Xf(this._driver,t,0),a.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,t){if(!e)return;const i=e;let r=this.options;null!=i.duration&&(r.duration=as(i.duration)),null!=i.delay&&(r.delay=as(i.delay));const s=i.params;if(s){let o=r.params;o||(o=this.options.params={}),Object.keys(s).forEach(a=>{(!t||!o.hasOwnProperty(a))&&(o[a]=_u(s[a],o,this.errors))})}}_copyOptions(){const e={};if(this.options){const t=this.options.params;if(t){const i=e.params={};Object.keys(t).forEach(r=>{i[r]=t[r]})}}return e}createSubContext(e=null,t,i){const r=t||this.element,s=new Cw(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,i||0));return s.previousNode=this.previousNode,s.currentAnimateTimings=this.currentAnimateTimings,s.options=this._copyOptions(),s.updateOptions(e),s.currentQueryIndex=this.currentQueryIndex,s.currentQueryTotal=this.currentQueryTotal,s.parentContext=this,this.subContextCount++,s}transformIntoNewTimeline(e){return this.previousNode=Yf,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,t,i){const r={duration:t??e.duration,delay:this.currentTimeline.currentTime+(i??0)+e.delay,easing:\"\"},s=new J7(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(s),r}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,t,i,r,s,o){let a=[];if(r&&a.push(this.element),e.length>0){e=(e=e.replace(Y7,\".\"+this._enterClassName)).replace(Z7,\".\"+this._leaveClassName);let l=this._driver.query(this.element,e,1!=i);0!==i&&(l=i<0?l.slice(l.length+i,l.length):l.slice(0,i)),a.push(...l)}return!s&&0==a.length&&o.push(function s7(){return new oe(3014,!1)}()),a}}class Xf{constructor(e,t,i,r){this._driver=e,this.element=t,this.startTime=i,this._elementTimelineStylesLookup=r,this.duration=0,this.easing=null,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){const t=1===this._keyframes.size&&this._pendingStyles.size;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,t){return this.applyStylesToKeyframe(),new Xf(this._driver,e,t||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,t){this._localTimelineStyles.set(e,t),this._globalTimelineStyles.set(e,t),this._styleSummary.set(e,{time:this.currentTime,value:t})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set(\"easing\",e);for(let[t,i]of this._globalTimelineStyles)this._backFill.set(t,i||os),this._currentKeyframe.set(t,os);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,t,i,r){t&&this._previousKeyframe.set(\"easing\",t);const s=r&&r.params||{},o=function eK(n,e){const t=new Map;let i;return n.forEach(r=>{if(\"*\"===r){i??=e.keys();for(let s of i)t.set(s,os)}else for(let[s,o]of r)t.set(s,o)}),t}(e,this._globalTimelineStyles);for(let[a,c]of o){const l=_u(c,s,i);this._pendingStyles.set(a,l),this._localTimelineStyles.has(a)||this._backFill.set(a,this._globalTimelineStyles.get(a)??os),this._updateStyle(a,l)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((e,t)=>{this._currentKeyframe.set(t,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,t)=>{this._currentKeyframe.has(t)||this._currentKeyframe.set(t,e)}))}snapshotCurrentStyles(){for(let[e,t]of this._localTimelineStyles)this._pendingStyles.set(e,t),this._updateStyle(e,t)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const e=[];for(let t in this._currentKeyframe)e.push(t);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((t,i)=>{const r=this._styleSummary.get(i);(!r||t.time>r.time)&&this._updateStyle(i,t.value)})}buildKeyframes(){this.applyStylesToKeyframe();const e=new Set,t=new Set,i=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((a,c)=>{const l=new Map([...this._backFill,...a]);l.forEach((u,h)=>{\"!\"===u?e.add(h):u===os&&t.add(h)}),i||l.set(\"offset\",c/this.duration),r.push(l)});const s=[...e.values()],o=[...t.values()];if(i){const a=r[0],c=new Map(a);a.set(\"offset\",0),c.set(\"offset\",1),r=[a,c]}return bw(this.element,r,s,o,this.duration,this.startTime,this.easing,!1)}}class J7 extends Xf{constructor(e,t,i,r,s,o,a=!1){super(e,t,o.delay),this.keyframes=i,this.preStyleProps=r,this.postStyleProps=s,this._stretchStartingKeyframe=a,this.timings={duration:o.duration,delay:o.delay,easing:o.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:t,duration:i,easing:r}=this.timings;if(this._stretchStartingKeyframe&&t){const s=[],o=i+t,a=t/o,c=new Map(e[0]);c.set(\"offset\",0),s.push(c);const l=new Map(e[0]);l.set(\"offset\",jP(a)),s.push(l);const u=e.length-1;for(let h=1;h<=u;h++){let d=new Map(e[h]);const p=d.get(\"offset\");d.set(\"offset\",jP((t+p*i)/o)),s.push(d)}i=o,t=0,r=\"\",e=s}return bw(this.element,e,this.preStyleProps,this.postStyleProps,i,t,r,!0)}}function jP(n,e=3){const t=Math.pow(10,e-1);return Math.round(n*t)/t}function VP(n,e,t,i,r,s,o,a,c,l,u,h,d){return{type:0,element:n,triggerName:e,isRemovalTransition:r,fromState:t,fromStyles:s,toState:i,toStyles:o,timelines:a,queriedElements:c,preStyleProps:l,postStyleProps:u,totalTime:h,errors:d}}const Dw={};class zP{constructor(e,t,i){this._triggerName=e,this.ast=t,this._stateStyles=i}match(e,t,i,r){return function tK(n,e,t,i,r){return n.some(s=>s(e,t,i,r))}(this.ast.matchers,e,t,i,r)}buildStyles(e,t,i){let r=this._stateStyles.get(\"*\");return void 0!==e&&(r=this._stateStyles.get(e?.toString())||r),r?r.buildStyles(t,i):new Map}build(e,t,i,r,s,o,a,c,l,u){const h=[],d=this.ast.options&&this.ast.options.params||Dw,f=this.buildStyles(i,a&&a.params||Dw,h),m=c&&c.params||Dw,v=this.buildStyles(r,m,h),C=new Set,I=new Map,L=new Map,H=\"void\"===r,ne={params:UP(m,d),delay:this.ast.options?.delay},se=u?[]:Sw(e,t,this.ast.animation,s,o,f,v,ne,l,h);let ce=0;return se.forEach(pe=>{ce=Math.max(pe.duration+pe.delay,ce)}),h.length?VP(t,this._triggerName,i,r,H,f,v,[],[],I,L,ce,h):(se.forEach(pe=>{const De=pe.element,Me=Ti(I,De,new Set);pe.preStyleProps.forEach(Ke=>Me.add(Ke));const Ve=Ti(L,De,new Set);pe.postStyleProps.forEach(Ke=>Ve.add(Ke)),De!==t&&C.add(De)}),VP(t,this._triggerName,i,r,H,f,v,se,[...C.values()],I,L,ce))}}function UP(n,e){const t={...e};return Object.entries(n).forEach(([i,r])=>{null!=r&&(t[i]=r)}),t}class nK{constructor(e,t,i){this.styles=e,this.defaultParams=t,this.normalizer=i}buildStyles(e,t){const i=new Map,r=UP(e,this.defaultParams);return this.styles.styles.forEach(s=>{\"string\"!=typeof s&&s.forEach((o,a)=>{o&&(o=_u(o,r,t));const c=this.normalizer.normalizePropertyName(a,t);o=this.normalizer.normalizeStyleValue(a,c,o,t),i.set(a,o)})}),i}}class rK{constructor(e,t,i){this.name=e,this.ast=t,this._normalizer=i,this.transitionFactories=[],this.states=new Map,t.states.forEach(r=>{this.states.set(r.name,new nK(r.style,r.options&&r.options.params||{},i))}),HP(this.states,\"true\",\"1\"),HP(this.states,\"false\",\"0\"),t.transitions.forEach(r=>{this.transitionFactories.push(new zP(e,r,this.states))}),this.fallbackTransition=function sK(n,e){return new zP(n,{type:Qe.Transition,animation:{type:Qe.Sequence,steps:[],options:null},matchers:[(o,a)=>!0],options:null,queryCount:0,depCount:0},e)}(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,t,i,r){return this.transitionFactories.find(o=>o.match(e,t,i,r))||null}matchStyles(e,t,i){return this.fallbackTransition.buildStyles(e,t,i)}}function HP(n,e,t){n.has(e)?n.has(t)||n.set(t,n.get(e)):n.has(t)&&n.set(e,n.get(t))}const oK=new Kf;class aK{constructor(e,t,i){this.bodyNode=e,this._driver=t,this._normalizer=i,this._animations=new Map,this._playersById=new Map,this.players=[]}register(e,t){const i=[],s=ww(this._driver,t,i,[]);if(i.length)throw function d7(){return new oe(3503,!1)}();this._animations.set(e,s)}_buildPlayer(e,t,i){const r=e.element,s=TP(this._normalizer,e.keyframes,t,i);return this._driver.animate(r,s,e.duration,e.delay,e.easing,[],!0)}create(e,t,i={}){const r=[],s=this._animations.get(e);let o;const a=new Map;if(s?(o=Sw(this._driver,t,s,pw,zf,new Map,new Map,i,oK,r),o.forEach(u=>{const h=Ti(a,u.element,new Map);u.postStyleProps.forEach(d=>h.set(d,null))})):(r.push(function f7(){return new oe(3300,!1)}()),o=[]),r.length)throw function p7(){return new oe(3504,!1)}();a.forEach((u,h)=>{u.forEach((d,p)=>{u.set(p,this._driver.computeStyle(h,p,os))})});const l=ks(o.map(u=>{const h=a.get(u.element);return this._buildPlayer(u,new Map,h)}));return this._playersById.set(e,l),l.onDestroy(()=>this.destroy(e)),this.players.push(l),l}destroy(e){const t=this._getPlayer(e);t.destroy(),this._playersById.delete(e);const i=this.players.indexOf(t);i>=0&&this.players.splice(i,1)}_getPlayer(e){const t=this._playersById.get(e);if(!t)throw function g7(){return new oe(3301,!1)}();return t}listen(e,t,i,r){const s=lw(t,\"\",\"\",\"\");return aw(this._getPlayer(e),i,s,r),()=>{}}command(e,t,i,r){if(\"register\"==i)return void this.register(e,r[0]);if(\"create\"==i)return void this.create(e,t,r[0]||{});const s=this._getPlayer(e);switch(i){case\"play\":s.play();break;case\"pause\":s.pause();break;case\"reset\":s.reset();break;case\"restart\":s.restart();break;case\"finish\":s.finish();break;case\"init\":s.init();break;case\"setPosition\":s.setPosition(parseFloat(r[0]));break;case\"destroy\":this.destroy(e)}}}const GP=\"ng-animate-queued\",Tw=\"ng-animate-disabled\",dK=[],$P={namespaceId:\"\",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},fK={namespaceId:\"\",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},ar=\"__ng_removed\";class Iw{get params(){return this.options.params}constructor(e,t=\"\"){this.namespaceId=t;const i=e&&e.hasOwnProperty(\"value\");if(this.value=function mK(n){return n??null}(i?e.value:e),i){const{value:s,...o}=e;this.options=o}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){const t=e.params;if(t){const i=this.options.params;Object.keys(t).forEach(r=>{null==i[r]&&(i[r]=t[r])})}}}const mu=\"void\",Aw=new Iw(mu);class pK{constructor(e,t,i){this.id=e,this.hostElement=t,this._engine=i,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName=\"ng-tns-\"+e,zi(t,this._hostClassName)}listen(e,t,i,r){if(!this._triggers.has(t))throw function _7(){return new oe(3302,!1)}();if(null==i||0==i.length)throw function m7(){return new oe(3303,!1)}();if(!function yK(n){return\"start\"==n||\"done\"==n}(i))throw function y7(){return new oe(3400,!1)}();const s=Ti(this._elementListeners,e,[]),o={name:t,phase:i,callback:r};s.push(o);const a=Ti(this._engine.statesByElement,e,new Map);return a.has(t)||(zi(e,Uf),zi(e,Uf+\"-\"+t),a.set(t,Aw)),()=>{this._engine.afterFlush(()=>{const c=s.indexOf(o);c>=0&&s.splice(c,1),this._triggers.has(t)||a.delete(t)})}}register(e,t){return!this._triggers.has(e)&&(this._triggers.set(e,t),!0)}_getTrigger(e){const t=this._triggers.get(e);if(!t)throw function v7(){return new oe(3401,!1)}();return t}trigger(e,t,i,r=!0){const s=this._getTrigger(t),o=new Mw(this.id,t,e);let a=this._engine.statesByElement.get(e);a||(zi(e,Uf),zi(e,Uf+\"-\"+t),this._engine.statesByElement.set(e,a=new Map));let c=a.get(t);const l=new Iw(i,this.id);if(!(i&&i.hasOwnProperty(\"value\"))&&c&&l.absorbOptions(c.options),a.set(t,l),c||(c=Aw),l.value!==mu&&c.value===l.value){if(!function EK(n,e){const t=Object.keys(n),i=Object.keys(e);if(t.length!=i.length)return!1;for(let r=0;r<t.length;r++){const s=t[r];if(!e.hasOwnProperty(s)||n[s]!==e[s])return!1}return!0}(c.params,l.params)){const m=[],v=s.matchStyles(c.value,c.params,m),C=s.matchStyles(l.value,l.params,m);m.length?this._engine.reportError(m):this._engine.afterFlush(()=>{To(e,v),Rr(e,C)})}return}const d=Ti(this._engine.playersByElement,e,[]);d.forEach(m=>{m.namespaceId==this.id&&m.triggerName==t&&m.queued&&m.destroy()});let p=s.matchTransition(c.value,l.value,e,l.params),f=!1;if(!p){if(!r)return;p=s.fallbackTransition,f=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:p,fromState:c,toState:l,player:o,isFallbackTransition:f}),f||(zi(e,GP),o.onStart(()=>{rc(e,GP)})),o.onDone(()=>{let m=this.players.indexOf(o);m>=0&&this.players.splice(m,1);const v=this._engine.playersByElement.get(e);if(v){let C=v.indexOf(o);C>=0&&v.splice(C,1)}}),this.players.push(o),d.push(o),o}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(t=>t.delete(e)),this._elementListeners.forEach((t,i)=>{this._elementListeners.set(i,t.filter(r=>r.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);const t=this._engine.playersByElement.get(e);t&&(t.forEach(i=>i.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,t){const i=this._engine.driver.query(e,Hf,!0);i.forEach(r=>{if(r[ar])return;const s=this._engine.fetchNamespacesByElement(r);s.size?s.forEach(o=>o.triggerLeaveAnimation(r,t,!1,!0)):this.clearElementCache(r)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(r=>this.clearElementCache(r)))}triggerLeaveAnimation(e,t,i,r){const s=this._engine.statesByElement.get(e),o=new Map;if(s){const a=[];if(s.forEach((c,l)=>{if(o.set(l,c.value),this._triggers.has(l)){const u=this.trigger(e,l,mu,r);u&&a.push(u)}}),a.length)return this._engine.markElementAsRemoved(this.id,e,!0,t,o),i&&ks(a).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){const t=this._elementListeners.get(e),i=this._engine.statesByElement.get(e);if(t&&i){const r=new Set;t.forEach(s=>{const o=s.name;if(r.has(o))return;r.add(o);const c=this._triggers.get(o).fallbackTransition,l=i.get(o)||Aw,u=new Iw(mu),h=new Mw(this.id,o,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:o,transition:c,fromState:l,toState:u,player:h,isFallbackTransition:!0})})}}removeNode(e,t){const i=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t),this.triggerLeaveAnimation(e,t,!0))return;let r=!1;if(i.totalAnimations){const s=i.players.length?i.playersByQueriedElement.get(e):[];if(s&&s.length)r=!0;else{let o=e;for(;o=o.parentNode;)if(i.statesByElement.get(o)){r=!0;break}}}if(this.prepareLeaveAnimationListeners(e),r)i.markElementAsRemoved(this.id,e,!1,t);else{const s=e[ar];(!s||s===$P)&&(i.afterFlush(()=>this.clearElementCache(e)),i.destroyInnerAnimations(e),i._onRemovalComplete(e,t))}}insertNode(e,t){zi(e,this._hostClassName)}drainQueuedTransitions(e){const t=[];return this._queue.forEach(i=>{const r=i.player;if(r.destroyed)return;const s=i.element,o=this._elementListeners.get(s);o&&o.forEach(a=>{if(a.name==i.triggerName){const c=lw(s,i.triggerName,i.fromState.value,i.toState.value);c._data=e,aw(i.player,a.phase,c,a.callback)}}),r.markedForDestroy?this._engine.afterFlush(()=>{r.destroy()}):t.push(i)}),this._queue=[],t.sort((i,r)=>{const s=i.transition.ast.depCount,o=r.transition.ast.depCount;return 0==s||0==o?s-o:this._engine.driver.containsElement(i.element,r.element)?1:-1})}destroy(e){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}}class gK{_onRemovalComplete(e,t){this.onRemovalComplete(e,t)}constructor(e,t,i){this.bodyNode=e,this.driver=t,this._normalizer=i,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(r,s)=>{}}get queuedPlayers(){const e=[];return this._namespaceList.forEach(t=>{t.players.forEach(i=>{i.queued&&e.push(i)})}),e}createNamespace(e,t){const i=new pK(e,t,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,t)?this._balanceNamespaceList(i,t):(this.newHostElements.set(t,i),this.collectEnterElement(t)),this._namespaceLookup[e]=i}_balanceNamespaceList(e,t){const i=this._namespaceList,r=this.namespacesByHostElement;if(i.length-1>=0){let o=!1,a=this.driver.getParentElement(t);for(;a;){const c=r.get(a);if(c){const l=i.indexOf(c);i.splice(l+1,0,e),o=!0;break}a=this.driver.getParentElement(a)}o||i.unshift(e)}else i.push(e);return r.set(t,e),e}register(e,t){let i=this._namespaceLookup[e];return i||(i=this.createNamespace(e,t)),i}registerTrigger(e,t,i){let r=this._namespaceLookup[e];r&&r.register(t,i)&&this.totalAnimations++}destroy(e,t){e&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{const i=this._fetchNamespace(e);this.namespacesByHostElement.delete(i.hostElement);const r=this._namespaceList.indexOf(i);r>=0&&this._namespaceList.splice(r,1),i.destroy(t),delete this._namespaceLookup[e]}))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){const t=new Set,i=this.statesByElement.get(e);if(i)for(let r of i.values())if(r.namespaceId){const s=this._fetchNamespace(r.namespaceId);s&&t.add(s)}return t}trigger(e,t,i,r){if(Zf(t)){const s=this._fetchNamespace(e);if(s)return s.trigger(t,i,r),!0}return!1}insertNode(e,t,i,r){if(!Zf(t))return;const s=t[ar];if(s&&s.setForRemoval){s.setForRemoval=!1,s.setForMove=!0;const o=this.collectedLeaveElements.indexOf(t);o>=0&&this.collectedLeaveElements.splice(o,1)}if(e){const o=this._fetchNamespace(e);o&&o.insertNode(t,i)}r&&this.collectEnterElement(t)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),zi(e,Tw)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),rc(e,Tw))}removeNode(e,t,i){if(Zf(t)){const r=e?this._fetchNamespace(e):null;r?r.removeNode(t,i):this.markElementAsRemoved(e,t,!1,i);const s=this.namespacesByHostElement.get(t);s&&s.id!==e&&s.removeNode(t,i)}else this._onRemovalComplete(t,i)}markElementAsRemoved(e,t,i,r,s){this.collectedLeaveElements.push(t),t[ar]={namespaceId:e,setForRemoval:r,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:s}}listen(e,t,i,r,s){return Zf(t)?this._fetchNamespace(e).listen(t,i,r,s):()=>{}}_buildInstruction(e,t,i,r,s){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,i,r,e.fromState.options,e.toState.options,t,s)}destroyInnerAnimations(e){let t=this.driver.query(e,Hf,!0);t.forEach(i=>this.destroyActiveAnimationsForElement(i)),0!=this.playersByQueriedElement.size&&(t=this.driver.query(e,gw,!0),t.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(e){const t=this.playersByElement.get(e);t&&t.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(e){const t=this.playersByQueriedElement.get(e);t&&t.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return ks(this.players).onDone(()=>e());e()})}processLeaveNode(e){const t=e[ar];if(t&&t.setForRemoval){if(e[ar]=$P,t.namespaceId){this.destroyInnerAnimations(e);const i=this._fetchNamespace(t.namespaceId);i&&i.clearElementCache(e)}this._onRemovalComplete(e,t.setForRemoval)}e.classList?.contains(Tw)&&this.markElementAsDisabled(e,!1),this.driver.query(e,\".ng-animate-disabled\",!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(e=-1){let t=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,r)=>this._balanceNamespaceList(i,r)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;i<this.collectedEnterElements.length;i++)zi(this.collectedEnterElements[i],\"ng-star-inserted\");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const i=[];try{t=this._flushAnimations(i,e)}finally{for(let r=0;r<i.length;r++)i[r]()}}else for(let i=0;i<this.collectedLeaveElements.length;i++)this.processLeaveNode(this.collectedLeaveElements[i]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(i=>i()),this._flushFns=[],this._whenQuietFns.length){const i=this._whenQuietFns;this._whenQuietFns=[],t.length?ks(t).onDone(()=>{i.forEach(r=>r())}):i.forEach(r=>r())}}reportError(e){throw function w7(){return new oe(3402,!1)}()}_flushAnimations(e,t){const i=new Kf,r=[],s=new Map,o=[],a=new Map,c=new Map,l=new Map,u=new Set;this.disabledNodes.forEach(ue=>{u.add(ue);const Ee=this.driver.query(ue,\".ng-animate-queued\",!0);for(let Ae=0;Ae<Ee.length;Ae++)u.add(Ee[Ae])});const h=this.bodyNode,d=Array.from(this.statesByElement.keys()),p=KP(d,this.collectedEnterElements),f=new Map;let m=0;p.forEach((ue,Ee)=>{const Ae=pw+m++;f.set(Ee,Ae),ue.forEach(tt=>zi(tt,Ae))});const v=[],C=new Set,I=new Set;for(let ue=0;ue<this.collectedLeaveElements.length;ue++){const Ee=this.collectedLeaveElements[ue],Ae=Ee[ar];Ae&&Ae.setForRemoval&&(v.push(Ee),C.add(Ee),Ae.hasAnimation?this.driver.query(Ee,\".ng-star-inserted\",!0).forEach(tt=>C.add(tt)):I.add(Ee))}const L=new Map,H=KP(d,Array.from(C));H.forEach((ue,Ee)=>{const Ae=zf+m++;L.set(Ee,Ae),ue.forEach(tt=>zi(tt,Ae))}),e.push(()=>{p.forEach((ue,Ee)=>{const Ae=f.get(Ee);ue.forEach(tt=>rc(tt,Ae))}),H.forEach((ue,Ee)=>{const Ae=L.get(Ee);ue.forEach(tt=>rc(tt,Ae))}),v.forEach(ue=>{this.processLeaveNode(ue)})});const ne=[],se=[];for(let ue=this._namespaceList.length-1;ue>=0;ue--)this._namespaceList[ue].drainQueuedTransitions(t).forEach(Ae=>{const tt=Ae.player,Ge=Ae.element;if(ne.push(tt),this.collectedEnterElements.length){const qn=Ge[ar];if(qn&&qn.setForMove){if(qn.previousTriggersValues&&qn.previousTriggersValues.has(Ae.triggerName)){const Ao=qn.previousTriggersValues.get(Ae.triggerName),Ui=this.statesByElement.get(Ae.element);if(Ui&&Ui.has(Ae.triggerName)){const Jf=Ui.get(Ae.triggerName);Jf.value=Ao,Ui.set(Ae.triggerName,Jf)}}return void tt.destroy()}}const gt=!h||!this.driver.containsElement(h,Ge),Nt=L.get(Ge),Bn=f.get(Ge),yt=this._buildInstruction(Ae,i,Bn,Nt,gt);if(yt.errors&&yt.errors.length)return void se.push(yt);if(gt)return tt.onStart(()=>To(Ge,yt.fromStyles)),tt.onDestroy(()=>Rr(Ge,yt.toStyles)),void r.push(tt);if(Ae.isFallbackTransition)return tt.onStart(()=>To(Ge,yt.fromStyles)),tt.onDestroy(()=>Rr(Ge,yt.toStyles)),void r.push(tt);const iO=[];yt.timelines.forEach(qn=>{qn.stretchStartingKeyframe=!0,this.disabledNodes.has(qn.element)||iO.push(qn)}),yt.timelines=iO,i.append(Ge,yt.timelines),o.push({instruction:yt,player:tt,element:Ge}),yt.queriedElements.forEach(qn=>Ti(a,qn,[]).push(tt)),yt.preStyleProps.forEach((qn,Ao)=>{if(qn.size){let Ui=c.get(Ao);Ui||c.set(Ao,Ui=new Set),qn.forEach((Jf,Ow)=>Ui.add(Ow))}}),yt.postStyleProps.forEach((qn,Ao)=>{let Ui=l.get(Ao);Ui||l.set(Ao,Ui=new Set),qn.forEach((Jf,Ow)=>Ui.add(Ow))})});if(se.length){const ue=[];se.forEach(Ee=>{ue.push(function E7(){return new oe(3505,!1)}())}),ne.forEach(Ee=>Ee.destroy()),this.reportError(ue)}const ce=new Map,pe=new Map;o.forEach(ue=>{const Ee=ue.element;i.has(Ee)&&(pe.set(Ee,Ee),this._beforeAnimationBuild(ue.player.namespaceId,ue.instruction,ce))}),r.forEach(ue=>{const Ee=ue.element;this._getPreviousPlayers(Ee,!1,ue.namespaceId,ue.triggerName,null).forEach(tt=>{Ti(ce,Ee,[]).push(tt),tt.destroy()})});const De=v.filter(ue=>XP(ue,c,l)),Me=new Map;qP(Me,this.driver,I,l,os).forEach(ue=>{XP(ue,c,l)&&De.push(ue)});const Ke=new Map;p.forEach((ue,Ee)=>{qP(Ke,this.driver,new Set(ue),c,\"!\")}),De.forEach(ue=>{const Ee=Me.get(ue),Ae=Ke.get(ue);Me.set(ue,new Map([...Ee?.entries()??[],...Ae?.entries()??[]]))});const ze=[],ht=[],pt={};o.forEach(ue=>{const{element:Ee,player:Ae,instruction:tt}=ue;if(i.has(Ee)){if(u.has(Ee))return Ae.onDestroy(()=>Rr(Ee,tt.toStyles)),Ae.disabled=!0,Ae.overrideTotalTime(tt.totalTime),void r.push(Ae);let Ge=pt;if(pe.size>1){let Nt=Ee;const Bn=[];for(;Nt=Nt.parentNode;){const yt=pe.get(Nt);if(yt){Ge=yt;break}Bn.push(Nt)}Bn.forEach(yt=>pe.set(yt,Ge))}const gt=this._buildAnimation(Ae.namespaceId,tt,ce,s,Ke,Me);if(Ae.setRealPlayer(gt),Ge===pt)ze.push(Ae);else{const Nt=this.playersByElement.get(Ge);Nt&&Nt.length&&(Ae.parentPlayer=ks(Nt)),r.push(Ae)}}else To(Ee,tt.fromStyles),Ae.onDestroy(()=>Rr(Ee,tt.toStyles)),ht.push(Ae),u.has(Ee)&&r.push(Ae)}),ht.forEach(ue=>{const Ee=s.get(ue.element);if(Ee&&Ee.length){const Ae=ks(Ee);ue.setRealPlayer(Ae)}}),r.forEach(ue=>{ue.parentPlayer?ue.syncPlayerEvents(ue.parentPlayer):ue.destroy()});for(let ue=0;ue<v.length;ue++){const Ee=v[ue],Ae=Ee[ar];if(rc(Ee,zf),Ae&&Ae.hasAnimation)continue;let tt=[];if(a.size){let gt=a.get(Ee);gt&&gt.length&&tt.push(...gt);let Nt=this.driver.query(Ee,gw,!0);for(let Bn=0;Bn<Nt.length;Bn++){let yt=a.get(Nt[Bn]);yt&&yt.length&&tt.push(...yt)}}const Ge=tt.filter(gt=>!gt.destroyed);Ge.length?vK(this,Ee,Ge):this.processLeaveNode(Ee)}return v.length=0,ze.forEach(ue=>{this.players.push(ue),ue.onDone(()=>{ue.destroy();const Ee=this.players.indexOf(ue);this.players.splice(Ee,1)}),ue.play()}),ze}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,t,i,r,s){let o=[];if(t){const a=this.playersByQueriedElement.get(e);a&&(o=a)}else{const a=this.playersByElement.get(e);if(a){const c=!s||s==mu;a.forEach(l=>{l.queued||!c&&l.triggerName!=r||o.push(l)})}}return(i||r)&&(o=o.filter(a=>!(i&&i!=a.namespaceId||r&&r!=a.triggerName))),o}_beforeAnimationBuild(e,t,i){const s=t.element,o=t.isRemovalTransition?void 0:e,a=t.isRemovalTransition?void 0:t.triggerName;for(const c of t.timelines){const l=c.element,u=l!==s,h=Ti(i,l,[]);this._getPreviousPlayers(l,u,o,a,t.toState).forEach(p=>{const f=p.getRealPlayer();f.beforeDestroy&&f.beforeDestroy(),p.destroy(),h.push(p)})}To(s,t.fromStyles)}_buildAnimation(e,t,i,r,s,o){const a=t.triggerName,c=t.element,l=[],u=new Set,h=new Set,d=t.timelines.map(f=>{const m=f.element;u.add(m);const v=m[ar];if(v&&v.removedBeforeQueried)return new pu(f.duration,f.delay);const C=m!==c,I=function wK(n){const e=[];return YP(n,e),e}((i.get(m)||dK).map(ce=>ce.getRealPlayer())).filter(ce=>!!ce.element&&ce.element===m),L=s.get(m),H=o.get(m),ne=TP(this._normalizer,f.keyframes,L,H),se=this._buildPlayer(f,ne,I);if(f.subTimeline&&r&&h.add(m),C){const ce=new Mw(e,a,m);ce.setRealPlayer(se),l.push(ce)}return se});l.forEach(f=>{Ti(this.playersByQueriedElement,f.element,[]).push(f),f.onDone(()=>function _K(n,e,t){let i=n.get(e);if(i){if(i.length){const r=i.indexOf(t);i.splice(r,1)}0==i.length&&n.delete(e)}return i}(this.playersByQueriedElement,f.element,f))}),u.forEach(f=>zi(f,OP));const p=ks(d);return p.onDestroy(()=>{u.forEach(f=>rc(f,OP)),Rr(c,t.toStyles)}),h.forEach(f=>{Ti(r,f,[]).push(p)}),p}_buildPlayer(e,t,i){return t.length>0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,i):new pu(e.duration,e.delay)}}class Mw{constructor(e,t,i){this.namespaceId=e,this.triggerName=t,this.element=i,this._player=new pu,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.parentPlayer=null,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((t,i)=>{t.forEach(r=>aw(e,i,void 0,r))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){const t=this._player;t.triggerCallback&&e.onStart(()=>t.triggerCallback(\"start\")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,t){Ti(this._queuedCallbacks,e,[]).push(t)}onDone(e){this.queued&&this._queueEvent(\"done\",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent(\"start\",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent(\"destroy\",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){const t=this._player;t.triggerCallback&&t.triggerCallback(e)}}function Zf(n){return n&&1===n.nodeType}function WP(n,e){const t=n.style.display;return n.style.display=e??\"none\",t}function qP(n,e,t,i,r){const s=[];t.forEach(c=>s.push(WP(c)));const o=[];i.forEach((c,l)=>{const u=new Map;c.forEach(h=>{const d=e.computeStyle(l,h,r);u.set(h,d),(!d||0==d.length)&&(l[ar]=fK,o.push(l))}),n.set(l,u)});let a=0;return t.forEach(c=>WP(c,s[a++])),o}function KP(n,e){const t=new Map;if(n.forEach(a=>t.set(a,[])),0==e.length)return t;const r=new Set(e),s=new Map;function o(a){if(!a)return 1;let c=s.get(a);if(c)return c;const l=a.parentNode;return c=t.has(l)?l:r.has(l)?1:o(l),s.set(a,c),c}return e.forEach(a=>{const c=o(a);1!==c&&t.get(c).push(a)}),t}function zi(n,e){n.classList?.add(e)}function rc(n,e){n.classList?.remove(e)}function vK(n,e,t){ks(t).onDone(()=>n.processLeaveNode(e))}function YP(n,e){for(let t=0;t<n.length;t++){const i=n[t];i instanceof CP?YP(i.players,e):e.push(i)}}function XP(n,e,t){const i=t.get(n);if(!i)return!1;let r=e.get(n);return r?i.forEach(s=>r.add(s)):e.set(n,i),t.delete(n),!0}class yu{constructor(e,t,i){this._driver=t,this._normalizer=i,this._triggerCache={},this.onRemovalComplete=(r,s)=>{},this._transitionEngine=new gK(e.body,t,i),this._timelineEngine=new aK(e.body,t,i),this._transitionEngine.onRemovalComplete=(r,s)=>this.onRemovalComplete(r,s)}registerTrigger(e,t,i,r,s){const o=e+\"-\"+r;let a=this._triggerCache[o];if(!a){const c=[],u=ww(this._driver,s,c,[]);if(c.length)throw function u7(){return new oe(3404,!1)}();a=function iK(n,e,t){return new rK(n,e,t)}(r,u,this._normalizer),this._triggerCache[o]=a}this._transitionEngine.registerTrigger(t,r,a)}register(e,t){this._transitionEngine.register(e,t)}destroy(e,t){this._transitionEngine.destroy(e,t)}onInsert(e,t,i,r){this._transitionEngine.insertNode(e,t,i,r)}onRemove(e,t,i){this._transitionEngine.removeNode(e,t,i)}disableAnimations(e,t){this._transitionEngine.markElementAsDisabled(e,t)}process(e,t,i,r){if(\"@\"==i.charAt(0)){const[s,o]=IP(i);this._timelineEngine.command(s,t,o,r)}else this._transitionEngine.trigger(e,t,i,r)}listen(e,t,i,r,s){if(\"@\"==i.charAt(0)){const[o,a]=IP(i);return this._timelineEngine.listen(o,t,a,s)}return this._transitionEngine.listen(e,t,i,r,s)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(e){this._transitionEngine.afterFlushAnimationsDone(e)}}class vu{static{this.initialStylesByElement=new WeakMap}constructor(e,t,i){this._element=e,this._startStyles=t,this._endStyles=i,this._state=0;let r=vu.initialStylesByElement.get(e);r||vu.initialStylesByElement.set(e,r=new Map),this._initialStyles=r}start(){this._state<1&&(this._startStyles&&Rr(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Rr(this._element,this._initialStyles),this._endStyles&&(Rr(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(vu.initialStylesByElement.delete(this._element),this._startStyles&&(To(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(To(this._element,this._endStyles),this._endStyles=null),Rr(this._element,this._initialStyles),this._state=3)}}function xw(n){let e=null;return n.forEach((t,i)=>{(function SK(n){return\"display\"===n||\"position\"===n})(i)&&(e=e||new Map,e.set(i,t))}),e}class ZP{constructor(e,t,i,r){this.element=e,this.keyframes=t,this.options=i,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const e=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,e,this.options),this._finalKeyframe=e.length?e[e.length-1]:new Map;const t=()=>this._onFinish();this.domPlayer.addEventListener(\"finish\",t),this.onDestroy(()=>{this.domPlayer.removeEventListener(\"finish\",t)})}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(e){const t=[];return e.forEach(i=>{t.push(Object.fromEntries(i))}),t}_triggerWebAnimation(e,t,i){return e.animate(this._convertKeyframesToObject(t),i)}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(e=>e()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=e*this.time}getPosition(){return+(this.domPlayer.currentTime??0)/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,r)=>{\"offset\"!==r&&e.set(r,this._finished?i:vw(this.element,r))}),this.currentSnapshot=e}triggerCallback(e){const t=\"start\"===e?this._onStartFns:this._onDoneFns;t.forEach(i=>i()),t.length=0}}class QP{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}containsElement(e,t){return MP(e,t)}getParentElement(e){return uw(e)}query(e,t,i){return xP(e,t,i)}computeStyle(e,t,i){return vw(e,t)}animate(e,t,i,r,s,o=[]){const c={duration:i,delay:r,fill:0==r?\"both\":\"forwards\"};s&&(c.easing=s);const l=new Map,u=o.filter(p=>p instanceof ZP);(function N7(n,e){return 0===n||0===e})(i,r)&&u.forEach(p=>{p.currentSnapshot.forEach((f,m)=>l.set(m,f))});let h=function P7(n){return n.length?n[0]instanceof Map?n:n.map(e=>new Map(Object.entries(e))):[]}(t).map(p=>new Map(p));h=function k7(n,e,t){if(t.size&&e.length){let i=e[0],r=[];if(t.forEach((s,o)=>{i.has(o)||r.push(o),i.set(o,s)}),r.length)for(let s=1;s<e.length;s++){let o=e[s];r.forEach(a=>o.set(a,vw(n,a)))}}return e}(e,h,l);const d=function bK(n,e){let t=null,i=null;return Array.isArray(e)&&e.length?(t=xw(e[0]),e.length>1&&(i=xw(e[e.length-1]))):e instanceof Map&&(t=xw(e)),t||i?new vu(n,t,i):null}(e,h);return new ZP(e,h,c,d)}}const JP=\"@.disabled\";class eO{constructor(e,t,i,r){this.namespaceId=e,this.delegate=t,this.engine=i,this._onDestroy=r,this.\\u0275type=0}get data(){return this.delegate.data}destroyNode(e){this.delegate.destroyNode?.(e)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(e,t){return this.delegate.createElement(e,t)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)}insertBefore(e,t,i,r=!0){this.delegate.insertBefore(e,t,i),this.engine.onInsert(this.namespaceId,t,e,r)}removeChild(e,t,i){this.parentNode(t)&&this.engine.onRemove(this.namespaceId,t,this.delegate)}selectRootElement(e,t){return this.delegate.selectRootElement(e,t)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,t,i,r){this.delegate.setAttribute(e,t,i,r)}removeAttribute(e,t,i){this.delegate.removeAttribute(e,t,i)}addClass(e,t){this.delegate.addClass(e,t)}removeClass(e,t){this.delegate.removeClass(e,t)}setStyle(e,t,i,r){this.delegate.setStyle(e,t,i,r)}removeStyle(e,t,i){this.delegate.removeStyle(e,t,i)}setProperty(e,t,i){\"@\"==t.charAt(0)&&t==JP?this.disableAnimations(e,!!i):this.delegate.setProperty(e,t,i)}setValue(e,t){this.delegate.setValue(e,t)}listen(e,t,i){return this.delegate.listen(e,t,i)}disableAnimations(e,t){this.engine.disableAnimations(e,t)}}class CK extends eO{constructor(e,t,i,r,s){super(t,i,r,s),this.factory=e,this.namespaceId=t}setProperty(e,t,i){\"@\"==t.charAt(0)?\".\"==t.charAt(1)&&t==JP?this.disableAnimations(e,i=void 0===i||!!i):this.engine.process(this.namespaceId,e,t.slice(1),i):this.delegate.setProperty(e,t,i)}listen(e,t,i){if(\"@\"==t.charAt(0)){const r=function DK(n){switch(n){case\"body\":return document.body;case\"document\":return document;case\"window\":return window;default:return n}}(e);let s=t.slice(1),o=\"\";return\"@\"!=s.charAt(0)&&([s,o]=function TK(n){const e=n.indexOf(\".\");return[n.substring(0,e),n.slice(e+1)]}(s)),this.engine.listen(this.namespaceId,r,s,o,a=>{this.factory.scheduleListenerCallback(a._data||-1,i,a)})}return this.delegate.listen(e,t,i)}}class IK{constructor(e,t,i){this.delegate=e,this.engine=t,this._zone=i,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,t.onRemovalComplete=(r,s)=>{s?.removeChild(null,r)}}createRenderer(e,t){const r=this.delegate.createRenderer(e,t);if(!e||!t?.data?.animation){const l=this._rendererCache;let u=l.get(r);return u||(u=new eO(\"\",r,this.engine,()=>l.delete(r)),l.set(r,u)),u}const s=t.id,o=t.id+\"-\"+this._currentId;this._currentId++,this.engine.register(o,e);const a=l=>{Array.isArray(l)?l.forEach(a):this.engine.registerTrigger(s,o,e,l.name,l)};return t.data.animation.forEach(a),new CK(this,o,r,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(e,t,i){if(e>=0&&e<this._microtaskId)return void this._zone.run(()=>t(i));const r=this._animationCallbacksBuffer;0==r.length&&queueMicrotask(()=>{this._zone.run(()=>{r.forEach(s=>{const[o,a]=s;o(a)}),this._animationCallbacksBuffer=[]})}),r.push([t,i])}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}const tO=[{provide:fw,useFactory:function MK(){return new kP}},{provide:yu,useClass:(()=>{class n extends yu{constructor(t,i,r){super(t,i,r)}ngOnDestroy(){this.flush()}static{this.\\u0275fac=function(i){return new(i||n)(Le(Yr),Le(dw),Le(fw))}}static{this.\\u0275prov=He({token:n,factory:n.\\u0275fac})}}return n})()},{provide:Yh,useFactory:function xK(n,e,t){return new IK(n,e,t)},deps:[Ty,yu,Ct]}],Pw=[{provide:dw,useFactory:()=>new QP},{provide:eb,useValue:\"BrowserAnimations\"},...tO],nO=[{provide:dw,useClass:hw},{provide:eb,useValue:\"NoopAnimations\"},...tO];let PK=(()=>{class n{static withConfig(t){return{ngModule:n,providers:t.disableAnimations?nO:Pw}}static{this.\\u0275fac=function(i){return new(i||n)}}static{this.\\u0275mod=Mc({type:n})}static{this.\\u0275inj=Ho({providers:Pw,imports:[ZH]})}}return n})();(function $H(n){return uz(function $1(n){return{appProviders:[...q1,...n?.providers??[]],platformProviders:YH}}(n))})({providers:[function IV(){return Qn(\"NgZoneless\"),function Xu(n){return{\\u0275providers:n}}([{provide:ya,useExisting:Ll},{provide:Ct,useClass:Tg},{provide:fl,useValue:!0},{provide:R_,useValue:!1},[]])}(),y0(PK,my,rv,sv,ov,mf)]}).then(n=>{customElements.define(\"configurator-component\",function n$(n,e){const t=function YG(n,e){return e.get(va).resolveComponentFactory(n).inputs}(n,e.injector),i=e.strategyFactory||new JG(n,e.injector),r=function KG(n){const e={};return n.forEach(({propName:t,templateName:i,transform:r})=>{e[function HG(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}(i)]=[t,r]}),e}(t);class s extends t${static{this.observedAttributes=Object.keys(r)}get ngElementStrategy(){if(!this._ngElementStrategy){const a=this._ngElementStrategy=i.create(this.injector||e.injector);t.forEach(({propName:c,transform:l})=>{if(!this.hasOwnProperty(c))return;const u=this[c];delete this[c],a.setInputValue(c,u,l)})}return this._ngElementStrategy}constructor(a){super(),this.injector=a}attributeChangedCallback(a,c,l,u){const[h,d]=r[a];this.ngElementStrategy.setInputValue(h,l,d)}connectedCallback(){let a=!1;this.ngElementStrategy.events&&(this.subscribeToEvents(),a=!0),this.ngElementStrategy.connect(this),a||this.subscribeToEvents()}disconnectedCallback(){this._ngElementStrategy&&this._ngElementStrategy.disconnect(),this.ngElementEventsSubscription&&(this.ngElementEventsSubscription.unsubscribe(),this.ngElementEventsSubscription=null)}subscribeToEvents(){this.ngElementEventsSubscription=this.ngElementStrategy.events.subscribe(a=>{const c=new CustomEvent(a.name,{detail:a.value});this.dispatchEvent(c)})}}return t.forEach(({propName:o,transform:a})=>{Object.defineProperty(s.prototype,o,{get(){return this.ngElementStrategy.getInputValue(o)},set(c){this.ngElementStrategy.setInputValue(o,c,a)},configurable:!0,enumerable:!0})}),s}(Fq,{injector:n.injector}))})}},Tt=>{Tt(Tt.s=501)}]);","import { IFrame } from \"@bpmn-io/form-js\";\nimport { html } from \"diagram-js/lib/ui\";\nimport classNames from \"classnames\";\nimport \"../../../assets/js/bundle.js\";\n\nexport const plotterType = \"plotter\";\n\nexport function PlotterRenderer(props) {\n  // #region Constants\n  const { field } = props;\n  const { plotter } = field;\n  //#endregion\n\n  if (plotter !== null && plotter !== undefined) {\n    const model = jsonParse(plotter.model);\n    if (model !== null) {\n      // document.querySelector('configurator-component').setAttribute('model', JSON.stringify(model));\n      setTimeout(() => {\n        document.querySelector('configurator-component').setAttribute('model', JSON.stringify(model));\n      }, 2000);\n    } else {\n      console.warn(\"Model is not an object\", plotter.model);\n    }\n  }\n\n  const styles = {\n    height: `600px`,\n  };\n\n  return html`<div style=${styles} class=${formFieldClasses(plotterType)}>\n    <configurator-component></configurator-component>\n  </div>`;\n}\n\nfunction formFieldClasses() {\n  return classNames(\"fjs-form-field\");\n}\n\nfunction jsonParse(value) {\n  if (value == null) {\n    console.warn(\"Value is null or undefined\");\n    return null;\n  }\n\n  try {\n    const result = JSON.parse(value);\n    return typeof result === \"object\" && result !== null ? result : null;\n  } catch (error) {\n    console.warn(\"Invalid JSON:\", error.message);\n    return null;\n  }\n}\n\nPlotterRenderer.config = {\n  ...IFrame.config,\n  group: \"container\",\n  type: plotterType,\n  label: \"Plotter\",\n  // iconUrl: `data:image/svg+xml,${encodeURIComponent(RangeIcon)}`,\n  propertiesPanelEntries: [\n    \"key\",\n    \"label\",\n    \"description\",\n    \"disabled\",\n    \"readonly\",\n  ],\n};\n","import { RangeRenderer, rangeType } from \"./range\";\nimport { PlotterRenderer, plotterType } from \"./plotter\";\n\nclass RangeField {\n  constructor(formFields) {\n    formFields.register(rangeType, RangeRenderer);\n  }\n}\n\nclass PlotterField {\n  constructor(formFields) {\n    formFields.register(plotterType, PlotterRenderer);\n  }\n}\n\nexport const RenderExtension = {\n  __init__: [\"rangeField\", \"plotterField\"],\n  rangeField: [\"type\", RangeField],\n  plotterField: [\"type\", PlotterField],\n};\n","import { useContext, useState, useRef, useEffect, useMemo, useCallback, useLayoutEffect } from '../preact/hooks';\nimport { isFunction, isString, isArray, get, assign, set, isNumber, debounce } from 'min-dash';\nimport { createPortal, forwardRef } from '../preact/compat';\nimport { jsx, jsxs, Fragment } from '../preact/jsx-runtime';\nimport { createContext, createElement } from '../preact';\nimport classnames from 'classnames';\nimport { query, domify } from 'min-dom';\nimport { FeelersEditor } from 'feelers';\nimport FeelEditor from '@bpmn-io/feel-editor';\nimport { lineNumbers, EditorView } from '@codemirror/view';\nimport * as focusTrap from 'focus-trap';\n\nvar ArrowIcon = function ArrowIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"m11.657 8-4.95 4.95a1 1 0 0 1-1.414-1.414L8.828 8 5.293 4.464A1 1 0 1 1 6.707 3.05L11.657 8Z\"\n    })\n  });\n};\nArrowIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar CreateIcon = function CreateIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"M9 13V9h4a1 1 0 0 0 0-2H9V3a1 1 0 1 0-2 0v4H3a1 1 0 1 0 0 2h4v4a1 1 0 0 0 2 0Z\"\n    })\n  });\n};\nCreateIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar DeleteIcon = function DeleteIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"M12 6v7c0 1.1-.4 1.55-1.5 1.55h-5C4.4 14.55 4 14.1 4 13V6h8Zm-1.5 1.5h-5v4.3c0 .66.5 1.2 1.111 1.2H9.39c.611 0 1.111-.54 1.111-1.2V7.5ZM13 3h-2l-1-1H6L5 3H3v1.5h10V3Z\"\n    })\n  });\n};\nDeleteIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\nvar DragIcon = function DragIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      fill: \"#fff\",\n      style: {\n        mixBlendMode: \"multiply\"\n      },\n      d: \"M0 0h16v16H0z\"\n    }), jsx(\"path\", {\n      fill: \"#fff\",\n      style: {\n        mixBlendMode: \"multiply\"\n      },\n      d: \"M0 0h16v16H0z\"\n    }), jsx(\"path\", {\n      d: \"M7 3H5v2h2V3zm4 0H9v2h2V3zM7 7H5v2h2V7zm4 0H9v2h2V7zm-4 4H5v2h2v-2zm4 0H9v2h2v-2z\",\n      fill: \"#161616\"\n    })]\n  });\n};\nDragIcon.defaultProps = {\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar ExternalLinkIcon = function ExternalLinkIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      clipRule: \"evenodd\",\n      d: \"M12.637 12.637v-4.72h1.362v4.721c0 .36-.137.676-.411.95-.275.275-.591.412-.95.412H3.362c-.38 0-.703-.132-.967-.396A1.315 1.315 0 0 1 2 12.638V3.362c0-.38.132-.703.396-.967S2.982 2 3.363 2h4.553v1.363H3.363v9.274h9.274ZM14 2H9.28l-.001 1.362h2.408L5.065 9.984l.95.95 6.622-6.622v2.409H14V2Z\",\n      fill: \"currentcolor\"\n    })\n  });\n};\nExternalLinkIcon.defaultProps = {\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar FeelIcon$1 = function FeelIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      d: \"M3.617 11.99c-.137.684-.392 1.19-.765 1.518-.362.328-.882.492-1.558.492H0l.309-1.579h1.264l1.515-7.64h-.912l.309-1.579h.911l.236-1.191c.137-.685.387-1.192.75-1.52C4.753.164 5.277 0 5.953 0h1.294L6.94 1.579H5.675l-.323 1.623h1.264l-.309 1.579H5.043l-1.426 7.208ZM5.605 11.021l3.029-4.155L7.28 3.202h2.073l.706 2.547h.176l1.691-2.547H14l-3.014 4.051 1.338 3.768H10.25l-.706-2.606H9.37L7.678 11.02H5.605Z\",\n      fill: \"currentcolor\"\n    })\n  });\n};\nFeelIcon$1.defaultProps = {\n  width: \"14\",\n  height: \"14\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar HelpIcon = function HelpIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      d: \"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2Zm0 26a12 12 0 1 1 12-12 12 12 0 0 1-12 12Z\"\n    }), jsx(\"circle\", {\n      cx: \"16\",\n      cy: \"23.5\",\n      r: \"1.5\"\n    }), jsx(\"path\", {\n      d: \"M17 8h-1.5a4.49 4.49 0 0 0-4.5 4.5v.5h2v-.5a2.5 2.5 0 0 1 2.5-2.5H17a2.5 2.5 0 0 1 0 5h-2v4.5h2V17a4.5 4.5 0 0 0 0-9Z\"\n    }), jsx(\"path\", {\n      style: {\n        fill: \"none\"\n      },\n      d: \"M0 0h32v32H0z\"\n    })]\n  });\n};\nHelpIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 32 32\"\n};\nvar PopupIcon = function PopupIcon(props) {\n  return jsxs(\"svg\", {\n    ...props,\n    children: [jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M28 4H10a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h18a2.006 2.006 0 0 0 2-2V6a2.006 2.006 0 0 0-2-2Zm0 16H10V6h18Z\"\n    }), jsx(\"path\", {\n      fill: \"currentColor\",\n      d: \"M18 26H4V16h2v-2H4a2.006 2.006 0 0 0-2 2v10a2.006 2.006 0 0 0 2 2h14a2.006 2.006 0 0 0 2-2v-2h-2Z\"\n    })]\n  });\n};\nPopupIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 32 32\"\n};\nvar CloseIcon = function CloseIcon(props) {\n  return jsx(\"svg\", {\n    ...props,\n    children: jsx(\"path\", {\n      fillRule: \"evenodd\",\n      d: \"m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8 12 4.7Z\",\n      fill: \"currentColor\"\n    })\n  });\n};\nCloseIcon.defaultProps = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\"\n};\n\nfunction Header(props) {\n  const {\n    element,\n    headerProvider\n  } = props;\n  const {\n    getElementIcon,\n    getDocumentationRef,\n    getElementLabel,\n    getTypeLabel\n  } = headerProvider;\n  const label = getElementLabel(element);\n  const type = getTypeLabel(element);\n  const documentationRef = getDocumentationRef && getDocumentationRef(element);\n  const ElementIcon = getElementIcon(element);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-header\",\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-header-icon\",\n      children: ElementIcon && jsx(ElementIcon, {\n        width: \"32\",\n        height: \"32\",\n        viewBox: \"0 0 32 32\"\n      })\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-header-labels\",\n      children: [jsx(\"div\", {\n        title: type,\n        class: \"bio-properties-panel-header-type\",\n        children: type\n      }), label ? jsx(\"div\", {\n        title: label,\n        class: \"bio-properties-panel-header-label\",\n        children: label\n      }) : null]\n    }), jsx(\"div\", {\n      class: \"bio-properties-panel-header-actions\",\n      children: documentationRef ? jsx(\"a\", {\n        rel: \"noopener\",\n        class: \"bio-properties-panel-header-link\",\n        href: documentationRef,\n        title: \"Open documentation\",\n        target: \"_blank\",\n        children: jsx(ExternalLinkIcon, {})\n      }) : null\n    })]\n  });\n}\n\nconst DescriptionContext = createContext({\n  description: {},\n  getDescriptionForId: () => {}\n});\n\nconst ErrorsContext = createContext({\n  errors: {}\n});\n\n/**\n * @typedef {Function} <propertiesPanel.showEntry> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {\n *   // ...\n * });\n *\n * @param {Object} context\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\nconst EventContext = createContext({\n  eventBus: null\n});\n\nconst LayoutContext = createContext({\n  layout: {},\n  setLayout: () => {},\n  getLayoutForKey: () => {},\n  setLayoutForKey: () => {}\n});\n\nconst TooltipContext = createContext({\n  tooltip: {},\n  getTooltipForId: () => {}\n});\n\n/**\n * Accesses the global TooltipContext and returns a tooltip for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n *   const tooltip = useTooltipContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nfunction useTooltipContext(id, element) {\n  const {\n    getTooltipForId\n  } = useContext(TooltipContext);\n  return getTooltipForId(id, element);\n}\n\nfunction TooltipWrapper(props) {\n  const {\n    forId,\n    element\n  } = props;\n  const contextDescription = useTooltipContext(forId, element);\n  const value = props.value || contextDescription;\n  if (!value) {\n    return props.children;\n  }\n  return jsx(Tooltip, {\n    ...props,\n    value: value,\n    forId: prefixId$9(forId)\n  });\n}\nfunction Tooltip(props) {\n  const {\n    forId,\n    value,\n    parent,\n    direction = 'right',\n    position\n  } = props;\n  const [visible, setShow] = useState(false);\n  const [focusedViaKeyboard, setFocusedViaKeyboard] = useState(false);\n  let timeout = null;\n  const wrapperRef = useRef(null);\n  const tooltipRef = useRef(null);\n  const showTooltip = async event => {\n    const show = () => setShow(true);\n    if (!visible && !timeout) {\n      if (event instanceof MouseEvent) {\n        timeout = setTimeout(show, 200);\n      } else {\n        show();\n        setFocusedViaKeyboard(true);\n      }\n    }\n  };\n  const hideTooltip = () => {\n    setShow(false);\n    setFocusedViaKeyboard(false);\n  };\n  const hideTooltipViaEscape = e => {\n    e.code === 'Escape' && hideTooltip();\n  };\n  const isTooltipHovered = ({\n    x,\n    y\n  }) => {\n    const tooltip = tooltipRef.current;\n    const wrapper = wrapperRef.current;\n    return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));\n  };\n  useEffect(() => {\n    const {\n      current\n    } = wrapperRef;\n    if (!current) {\n      return;\n    }\n    const hideHoveredTooltip = e => {\n      const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');\n      if (visible && !isTooltipHovered({\n        x: e.x,\n        y: e.y\n      }) && !(isFocused && focusedViaKeyboard)) {\n        hideTooltip();\n      }\n    };\n    const hideFocusedTooltip = e => {\n      const {\n        relatedTarget\n      } = e;\n      const isTooltipChild = el => !!el.closest('.bio-properties-panel-tooltip');\n      if (visible && !isHovered(wrapperRef.current) && relatedTarget && !isTooltipChild(relatedTarget)) {\n        hideTooltip();\n      }\n    };\n    document.addEventListener('wheel', hideHoveredTooltip);\n    document.addEventListener('focusout', hideFocusedTooltip);\n    document.addEventListener('mousemove', hideHoveredTooltip);\n    return () => {\n      document.removeEventListener('wheel', hideHoveredTooltip);\n      document.removeEventListener('mousemove', hideHoveredTooltip);\n      document.removeEventListener('focusout', hideFocusedTooltip);\n    };\n  }, [wrapperRef.current, visible, focusedViaKeyboard]);\n  const renderTooltip = () => {\n    return jsxs(\"div\", {\n      class: `bio-properties-panel-tooltip ${direction}`,\n      role: \"tooltip\",\n      id: \"bio-properties-panel-tooltip\",\n      \"aria-labelledby\": forId,\n      style: position || getTooltipPosition(wrapperRef.current),\n      ref: tooltipRef,\n      onClick: e => e.stopPropagation(),\n      children: [jsx(\"div\", {\n        class: \"bio-properties-panel-tooltip-content\",\n        children: value\n      }), jsx(\"div\", {\n        class: \"bio-properties-panel-tooltip-arrow\"\n      })]\n    });\n  };\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-tooltip-wrapper\",\n    tabIndex: \"0\",\n    ref: wrapperRef,\n    onMouseEnter: showTooltip,\n    onMouseLeave: () => {\n      clearTimeout(timeout);\n      timeout = null;\n    },\n    onFocus: showTooltip,\n    onKeyDown: hideTooltipViaEscape,\n    children: [props.children, visible ? parent ? createPortal(renderTooltip(), parent.current) : renderTooltip() : null]\n  });\n}\n\n// helper\nfunction inBounds(x, y, bounds) {\n  const {\n    top,\n    right,\n    bottom,\n    left\n  } = bounds;\n  return x >= left && x <= right && y >= top && y <= bottom;\n}\nfunction getTooltipPosition(refElement) {\n  const refPosition = refElement.getBoundingClientRect();\n  const right = `calc(100% - ${refPosition.x}px)`;\n  const top = `${refPosition.top - 10}px`;\n  return `right: ${right}; top: ${top};`;\n}\nfunction isHovered(element) {\n  return element.matches(':hover');\n}\nfunction prefixId$9(id) {\n  return `bio-properties-panel-${id}`;\n}\n\n/**\n * Accesses the global DescriptionContext and returns a description for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n *   const description = useDescriptionContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nfunction useDescriptionContext(id, element) {\n  const {\n    getDescriptionForId\n  } = useContext(DescriptionContext);\n  return getDescriptionForId(id, element);\n}\n\nfunction useError(id) {\n  const {\n    errors\n  } = useContext(ErrorsContext);\n  return errors[id];\n}\nfunction useErrors() {\n  const {\n    errors\n  } = useContext(ErrorsContext);\n  return errors;\n}\n\n/**\n * Subscribe to an event immediately. Update subscription after inputs changed.\n *\n * @param {string} event\n * @param {Function} callback\n */\nfunction useEvent(event, callback, eventBus) {\n  const eventContext = useContext(EventContext);\n  if (!eventBus) {\n    ({\n      eventBus\n    } = eventContext);\n  }\n  const didMount = useRef(false);\n\n  // (1) subscribe immediately\n  if (eventBus && !didMount.current) {\n    eventBus.on(event, callback);\n  }\n\n  // (2) update subscription after inputs changed\n  useEffect(() => {\n    if (eventBus && didMount.current) {\n      eventBus.on(event, callback);\n    }\n    didMount.current = true;\n    return () => {\n      if (eventBus) {\n        eventBus.off(event, callback);\n      }\n    };\n  }, [callback, event, eventBus]);\n}\n\nconst KEY_LENGTH = 6;\n\n/**\n * Create a persistent key factory for plain objects without id.\n *\n * @example\n * ```jsx\n * function List({ objects }) {\n *   const getKey = useKeyFactory();\n *   return (<ol>{\n *     objects.map(obj => {\n *       const key = getKey(obj);\n *       return <li key={key}>obj.name</li>\n *     })\n *   }</ol>);\n * }\n * ```\n *\n * @param {any[]} dependencies\n * @returns {(element: object) => string}\n */\nfunction useKeyFactory(dependencies = []) {\n  const map = useMemo(() => new Map(), dependencies);\n  const getKey = el => {\n    let key = map.get(el);\n    if (!key) {\n      key = Math.random().toString().slice(-KEY_LENGTH);\n      map.set(el, key);\n    }\n    return key;\n  };\n  return getKey;\n}\n\n/**\n * Creates a state that persists in the global LayoutContext.\n *\n * @example\n * ```jsx\n * function Group(props) {\n *   const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);\n * }\n * ```\n *\n * @param {(string|number)[]} path\n * @param {any} [defaultValue]\n *\n * @returns {[ any, Function ]}\n */\nfunction useLayoutState(path, defaultValue) {\n  const {\n    getLayoutForKey,\n    setLayoutForKey\n  } = useContext(LayoutContext);\n  const layoutForKey = getLayoutForKey(path, defaultValue);\n  const setState = useCallback(newValue => {\n    setLayoutForKey(path, newValue);\n  }, [setLayoutForKey]);\n  return [layoutForKey, setState];\n}\n\n/**\n * @pinussilvestrus: we need to introduce our own hook to persist the previous\n * state on updates.\n *\n * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\n\nfunction usePrevious(value) {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\n\n/**\n * Subscribe to `propertiesPanel.showEntry`.\n *\n * @param {string} id\n *\n * @returns {import('preact').Ref}\n */\nfunction useShowEntryEvent(id) {\n  const {\n    onShow\n  } = useContext(LayoutContext);\n  const ref = useRef();\n  const focus = useRef(false);\n  const onShowEntry = useCallback(event => {\n    if (event.id === id) {\n      onShow();\n      if (!focus.current) {\n        focus.current = true;\n      }\n    }\n  }, [id]);\n  useEffect(() => {\n    if (focus.current && ref.current) {\n      if (isFunction(ref.current.focus)) {\n        ref.current.focus();\n      }\n      if (isFunction(ref.current.select)) {\n        ref.current.select();\n      }\n      focus.current = false;\n    }\n  });\n  useEvent('propertiesPanel.showEntry', onShowEntry);\n  return ref;\n}\n\n/**\n * @callback setSticky\n * @param {boolean} value\n */\n\n/**\n * Use IntersectionObserver to identify when DOM element is in sticky mode.\n * If sticky is observered setSticky(true) will be called.\n * If sticky mode is left, setSticky(false) will be called.\n *\n *\n * @param {Object} ref\n * @param {string} scrollContainerSelector\n * @param {setSticky} setSticky\n */\nfunction useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {\n  const [scrollContainer, setScrollContainer] = useState(query(scrollContainerSelector));\n  const updateScrollContainer = useCallback(() => {\n    const newScrollContainer = query(scrollContainerSelector);\n    if (newScrollContainer !== scrollContainer) {\n      setScrollContainer(newScrollContainer);\n    }\n  }, [scrollContainerSelector, scrollContainer]);\n  useEffect(() => {\n    updateScrollContainer();\n  }, [updateScrollContainer]);\n  useEvent('propertiesPanel.attach', updateScrollContainer);\n  useEvent('propertiesPanel.detach', updateScrollContainer);\n  useEffect(() => {\n    const Observer = IntersectionObserver;\n\n    // return early if IntersectionObserver is not available\n    if (!Observer) {\n      return;\n    }\n\n    // TODO(@barmac): test this\n    if (!ref.current || !scrollContainer) {\n      return;\n    }\n    const observer = new Observer(entries => {\n      // scroll container is unmounted, do not update sticky state\n      if (scrollContainer.scrollHeight === 0) {\n        return;\n      }\n      entries.forEach(entry => {\n        if (entry.intersectionRatio < 1) {\n          setSticky(true);\n        } else if (entry.intersectionRatio === 1) {\n          setSticky(false);\n        }\n      });\n    }, {\n      root: scrollContainer,\n      rootMargin: '0px 0px 999999% 0px',\n      // Use bottom margin to avoid stickyness when scrolling out to bottom\n      threshold: [1]\n    });\n    observer.observe(ref.current);\n\n    // Unobserve if unmounted\n    return () => {\n      observer.unobserve(ref.current);\n    };\n  }, [ref.current, scrollContainer, setSticky]);\n}\n\n/**\n * Creates a static function reference with changing body.\n * This is necessary when external libraries require a callback function\n * that has references to state variables.\n *\n * Usage:\n * const callback = useStaticCallback((val) => {val === currentState});\n *\n * The `callback` reference is static and can be safely used in external\n * libraries or as a prop that does not cause rerendering of children.\n *\n * @param {Function} callback function with changing reference\n * @returns {Function} static function reference\n */\nfunction useStaticCallback(callback) {\n  const callbackRef = useRef(callback);\n  callbackRef.current = callback;\n  return useCallback((...args) => callbackRef.current(...args), []);\n}\n\nfunction Group(props) {\n  const {\n    element,\n    entries = [],\n    id,\n    label,\n    shouldOpen = false\n  } = props;\n  const groupRef = useRef(null);\n  const [open, setOpen] = useLayoutState(['groups', id, 'open'], shouldOpen);\n  const onShow = useCallback(() => setOpen(true), [setOpen]);\n  const toggleOpen = () => setOpen(!open);\n  const [edited, setEdited] = useState(false);\n  const [sticky, setSticky] = useState(false);\n\n  // set edited state depending on all entries\n  useEffect(() => {\n    // TODO(@barmac): replace with CSS when `:has()` is supported in all major browsers, or rewrite as in https://github.com/camunda/camunda-modeler/issues/3815#issuecomment-1733038161\n    const scheduled = requestAnimationFrame(() => {\n      const hasOneEditedEntry = entries.find(entry => {\n        const {\n          id,\n          isEdited\n        } = entry;\n        const entryNode = query(`[data-entry-id=\"${id}\"]`);\n        if (!isFunction(isEdited) || !entryNode) {\n          return false;\n        }\n        const inputNode = query('.bio-properties-panel-input', entryNode);\n        return isEdited(inputNode);\n      });\n      setEdited(hasOneEditedEntry);\n    });\n    return () => cancelAnimationFrame(scheduled);\n  }, [entries, setEdited]);\n\n  // set error state depending on all entries\n  const allErrors = useErrors();\n  const hasErrors = entries.some(entry => allErrors[entry.id]);\n\n  // set css class when group is sticky to top\n  useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow\n  };\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-group\",\n    \"data-group-id\": 'group-' + id,\n    ref: groupRef,\n    children: [jsxs(\"div\", {\n      class: classnames('bio-properties-panel-group-header', edited ? '' : 'empty', open ? 'open' : '', sticky && open ? 'sticky' : ''),\n      onClick: toggleOpen,\n      children: [jsx(\"div\", {\n        title: props.tooltip ? null : label,\n        \"data-title\": label,\n        class: \"bio-properties-panel-group-header-title\",\n        children: jsx(TooltipWrapper, {\n          value: props.tooltip,\n          forId: 'group-' + id,\n          element: element,\n          parent: groupRef,\n          children: label\n        })\n      }), jsxs(\"div\", {\n        class: \"bio-properties-panel-group-header-buttons\",\n        children: [jsx(DataMarker, {\n          edited: edited,\n          hasErrors: hasErrors\n        }), jsx(\"button\", {\n          type: \"button\",\n          title: \"Toggle section\",\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n          children: jsx(ArrowIcon, {\n            class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n          })\n        })]\n      })]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-group-entries', open ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: entries.map(entry => {\n          const {\n            component: Component,\n            id\n          } = entry;\n          return createElement(Component, {\n            ...entry,\n            element: element,\n            key: id\n          });\n        })\n      })\n    })]\n  });\n}\nfunction DataMarker(props) {\n  const {\n    edited,\n    hasErrors\n  } = props;\n  if (hasErrors) {\n    return jsx(\"div\", {\n      title: \"Section contains an error\",\n      class: \"bio-properties-panel-dot bio-properties-panel-dot--error\"\n    });\n  }\n  if (edited) {\n    return jsx(\"div\", {\n      title: \"Section contains data\",\n      class: \"bio-properties-panel-dot\"\n    });\n  }\n  return null;\n}\n\n/**\n * @typedef { {\n *  text: (element: object) => string,\n *  icon?: (element: Object) => import('preact').Component\n * } } PlaceholderDefinition\n *\n * @param { PlaceholderDefinition } props\n */\nfunction Placeholder(props) {\n  const {\n    text,\n    icon: Icon\n  } = props;\n  return jsx(\"div\", {\n    class: \"bio-properties-panel open\",\n    children: jsxs(\"section\", {\n      class: \"bio-properties-panel-placeholder\",\n      children: [Icon && jsx(Icon, {\n        class: \"bio-properties-panel-placeholder-icon\"\n      }), jsx(\"p\", {\n        class: \"bio-properties-panel-placeholder-text\",\n        children: text\n      })]\n    })\n  });\n}\n\nfunction Description(props) {\n  const {\n    element,\n    forId,\n    value\n  } = props;\n  const contextDescription = useDescriptionContext(forId, element);\n  const description = value || contextDescription;\n  if (description) {\n    return jsx(\"div\", {\n      class: \"bio-properties-panel-description\",\n      children: description\n    });\n  }\n}\n\nconst noop$6 = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus$1 = function (editor, ref) {\n  const [buffer, setBuffer] = useState(undefined);\n  ref.current = useMemo(() => ({\n    focus: offset => {\n      if (editor) {\n        editor.focus(offset);\n      } else {\n        if (typeof offset === 'undefined') {\n          offset = Infinity;\n        }\n        setBuffer(offset);\n      }\n    }\n  }), [editor]);\n  useEffect(() => {\n    if (typeof buffer !== 'undefined' && editor) {\n      editor.focus(buffer);\n      setBuffer(false);\n    }\n  }, [editor, buffer]);\n};\nconst CodeEditor$1 = forwardRef((props, ref) => {\n  const {\n    onInput,\n    disabled,\n    tooltipContainer,\n    enableGutters,\n    value,\n    onLint = noop$6,\n    onPopupOpen = noop$6,\n    popupOpen,\n    contentAttributes = {},\n    hostLanguage = null,\n    singleLine = false\n  } = props;\n  const inputRef = useRef();\n  const [editor, setEditor] = useState();\n  const [localValue, setLocalValue] = useState(value || '');\n  useBufferedFocus$1(editor, ref);\n  const handleInput = useStaticCallback(newValue => {\n    onInput(newValue);\n    setLocalValue(newValue);\n  });\n  useEffect(() => {\n    let editor;\n    editor = new FeelersEditor({\n      container: inputRef.current,\n      onChange: handleInput,\n      value: localValue,\n      onLint,\n      contentAttributes,\n      tooltipContainer,\n      enableGutters,\n      hostLanguage,\n      singleLine,\n      lineWrap: true\n    });\n    setEditor(editor);\n    return () => {\n      onLint([]);\n      inputRef.current.innerHTML = '';\n      setEditor(null);\n    };\n  }, []);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    if (value === localValue) {\n      return;\n    }\n    editor.setValue(value);\n    setLocalValue(value);\n  }, [value]);\n  const handleClick = () => {\n    ref.current.focus();\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feelers-editor-container', popupOpen ? 'popupOpen' : null),\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-feelers-editor__open-popup-placeholder\",\n      children: \"Opened in editor\"\n    }), jsx(\"div\", {\n      name: props.name,\n      class: classnames('bio-properties-panel-feelers-editor bio-properties-panel-input', localValue ? 'edited' : null, disabled ? 'disabled' : null),\n      ref: inputRef,\n      onClick: handleClick\n    }), jsx(\"button\", {\n      type: \"button\",\n      title: \"Open pop-up editor\",\n      class: \"bio-properties-panel-open-feel-popup\",\n      onClick: () => onPopupOpen('feelers'),\n      children: jsx(PopupIcon, {})\n    })]\n  });\n});\n\nconst noop$5 = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function (editor, ref) {\n  const [buffer, setBuffer] = useState(undefined);\n  ref.current = useMemo(() => ({\n    focus: offset => {\n      if (editor) {\n        editor.focus(offset);\n      } else {\n        if (typeof offset === 'undefined') {\n          offset = Infinity;\n        }\n        setBuffer(offset);\n      }\n    }\n  }), [editor]);\n  useEffect(() => {\n    if (typeof buffer !== 'undefined' && editor) {\n      editor.focus(buffer);\n      setBuffer(false);\n    }\n  }, [editor, buffer]);\n};\nconst CodeEditor = forwardRef((props, ref) => {\n  const {\n    contentAttributes,\n    enableGutters,\n    value,\n    onInput,\n    onFeelToggle = noop$5,\n    onLint = noop$5,\n    onPopupOpen = noop$5,\n    placeholder,\n    popupOpen,\n    disabled,\n    tooltipContainer,\n    variables\n  } = props;\n  const inputRef = useRef();\n  const [editor, setEditor] = useState();\n  const [localValue, setLocalValue] = useState(value || '');\n  useBufferedFocus(editor, ref);\n  const handleInput = useStaticCallback(newValue => {\n    onInput(newValue);\n    setLocalValue(newValue);\n  });\n  useEffect(() => {\n    let editor;\n\n    /* Trigger FEEL toggle when\n     *\n     * - `backspace` is pressed\n     * - AND the cursor is at the beginning of the input\n     */\n    const onKeyDown = e => {\n      if (e.key !== 'Backspace' || !editor) {\n        return;\n      }\n      const selection = editor.getSelection();\n      const range = selection.ranges[selection.mainIndex];\n      if (range.from === 0 && range.to === 0) {\n        onFeelToggle();\n      }\n    };\n    editor = new FeelEditor({\n      container: inputRef.current,\n      onChange: handleInput,\n      onKeyDown: onKeyDown,\n      onLint: onLint,\n      placeholder: placeholder,\n      tooltipContainer: tooltipContainer,\n      value: localValue,\n      variables: variables,\n      extensions: [...(enableGutters ? [lineNumbers()] : []), EditorView.lineWrapping],\n      contentAttributes\n    });\n    setEditor(editor);\n    return () => {\n      onLint([]);\n      inputRef.current.innerHTML = '';\n      setEditor(null);\n    };\n  }, []);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    if (value === localValue) {\n      return;\n    }\n    editor.setValue(value);\n    setLocalValue(value);\n  }, [value]);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    editor.setVariables(variables);\n  }, [variables]);\n  useEffect(() => {\n    if (!editor) {\n      return;\n    }\n    editor.setPlaceholder(placeholder);\n  }, [placeholder]);\n  const handleClick = () => {\n    ref.current.focus();\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feel-editor-container', disabled ? 'disabled' : null, popupOpen ? 'popupOpen' : null),\n    children: [jsx(\"div\", {\n      class: \"bio-properties-panel-feel-editor__open-popup-placeholder\",\n      children: \"Opened in editor\"\n    }), jsx(\"div\", {\n      name: props.name,\n      class: classnames('bio-properties-panel-input', localValue ? 'edited' : null),\n      ref: inputRef,\n      onClick: handleClick\n    }), jsx(\"button\", {\n      type: \"button\",\n      title: \"Open pop-up editor\",\n      class: \"bio-properties-panel-open-feel-popup\",\n      onClick: () => onPopupOpen(),\n      children: jsx(PopupIcon, {})\n    })]\n  });\n});\n\nfunction FeelIndicator(props) {\n  const {\n    active\n  } = props;\n  if (!active) {\n    return null;\n  }\n  return jsx(\"span\", {\n    class: \"bio-properties-panel-feel-indicator\",\n    children: \"=\"\n  });\n}\n\nconst noop$4 = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.label\n * @param {String} props.feel\n */\nfunction FeelIcon(props) {\n  const {\n    feel = false,\n    active,\n    disabled = false,\n    onClick = noop$4\n  } = props;\n  const feelRequiredLabel = 'FEEL expression is mandatory';\n  const feelOptionalLabel = `Click to ${active ? 'remove' : 'set a'} dynamic value with FEEL expression`;\n  const handleClick = e => {\n    onClick(e);\n\n    // when pointer event was created from keyboard, keep focus on button\n    if (!e.pointerType) {\n      e.stopPropagation();\n    }\n  };\n  return jsx(\"button\", {\n    type: \"button\",\n    class: classnames('bio-properties-panel-feel-icon', active ? 'active' : null, feel === 'required' ? 'required' : 'optional'),\n    onClick: handleClick,\n    disabled: feel === 'required' || disabled,\n    title: feel === 'required' ? feelRequiredLabel : feelOptionalLabel,\n    children: jsx(FeelIcon$1, {})\n  });\n}\n\nconst FeelPopupContext = createContext({\n  open: () => {},\n  close: () => {},\n  source: null\n});\n\n/**\n * Add a dragger that calls back the passed function with\n * { event, delta } on drag.\n *\n * @example\n *\n * function dragMove(event, delta) {\n *   // we are dragging (!!)\n * }\n *\n * domElement.addEventListener('dragstart', dragger(dragMove));\n *\n * @param {Function} fn\n * @param {Element} [dragPreview]\n *\n * @return {Function} drag start callback function\n */\nfunction createDragger(fn, dragPreview) {\n  let self;\n  let startX, startY;\n\n  /** drag start */\n  function onDragStart(event) {\n    self = this;\n    startX = event.clientX;\n    startY = event.clientY;\n\n    // (1) prevent preview image\n    if (event.dataTransfer) {\n      event.dataTransfer.setDragImage(dragPreview || emptyCanvas(), 0, 0);\n    }\n\n    // (2) setup drag listeners\n\n    // attach drag + cleanup event\n    // we need to do this to make sure we track cursor\n    // movements before we reach other drag event handlers,\n    // e.g. in child containers.\n    document.addEventListener('dragover', onDrag, true);\n    document.addEventListener('dragenter', preventDefault, true);\n    document.addEventListener('dragend', onEnd);\n    document.addEventListener('drop', preventDefault);\n  }\n  function onDrag(event) {\n    const delta = {\n      x: event.clientX - startX,\n      y: event.clientY - startY\n    };\n\n    // call provided fn with event, delta\n    return fn.call(self, event, delta);\n  }\n  function onEnd() {\n    document.removeEventListener('dragover', onDrag, true);\n    document.removeEventListener('dragenter', preventDefault, true);\n    document.removeEventListener('dragend', onEnd);\n    document.removeEventListener('drop', preventDefault);\n  }\n  return onDragStart;\n}\nfunction preventDefault(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction emptyCanvas() {\n  return domify('<canvas width=\"0\" height=\"0\" />');\n}\n\nconst noop$3 = () => {};\n\n/**\n * A generic popup component.\n *\n * @param {Object} props\n * @param {HTMLElement} [props.container]\n * @param {string} [props.className]\n * @param {boolean} [props.delayInitialFocus]\n * @param {{x: number, y: number}} [props.position]\n * @param {number} [props.width]\n * @param {number} [props.height]\n * @param {Function} props.onClose\n * @param {Function} [props.onPostActivate]\n * @param {Function} [props.onPostDeactivate]\n * @param {boolean} [props.returnFocus]\n * @param {boolean} [props.closeOnEscape]\n * @param {string} props.title\n * @param {Ref} [ref]\n */\nfunction PopupComponent(props, globalRef) {\n  const {\n    container,\n    className,\n    delayInitialFocus,\n    position,\n    width,\n    height,\n    onClose,\n    onPostActivate = noop$3,\n    onPostDeactivate = noop$3,\n    returnFocus = true,\n    closeOnEscape = true,\n    title\n  } = props;\n  const focusTrapRef = useRef(null);\n  const localRef = useRef(null);\n  const popupRef = globalRef || localRef;\n  const containerNode = useMemo(() => getContainerNode(container), [container]);\n  const handleKeydown = event => {\n    // do not allow keyboard events to bubble\n    event.stopPropagation();\n    if (closeOnEscape && event.key === 'Escape') {\n      onClose();\n    }\n  };\n\n  // re-activate focus trap on focus\n  const handleFocus = () => {\n    if (focusTrapRef.current) {\n      focusTrapRef.current.activate();\n    }\n  };\n  let style = {};\n  if (position) {\n    style = {\n      ...style,\n      top: position.top + 'px',\n      left: position.left + 'px'\n    };\n  }\n  if (width) {\n    style.width = width + 'px';\n  }\n  if (height) {\n    style.height = height + 'px';\n  }\n  useEffect(() => {\n    if (popupRef.current) {\n      popupRef.current.addEventListener('focusin', handleFocus);\n    }\n    return () => {\n      popupRef.current.removeEventListener('focusin', handleFocus);\n    };\n  }, [popupRef]);\n  useEffect(() => {\n    if (popupRef.current) {\n      focusTrapRef.current = focusTrap.createFocusTrap(popupRef.current, {\n        clickOutsideDeactivates: true,\n        delayInitialFocus,\n        fallbackFocus: popupRef.current,\n        onPostActivate,\n        onPostDeactivate,\n        returnFocusOnDeactivate: returnFocus\n      });\n      focusTrapRef.current.activate();\n    }\n    return () => focusTrapRef.current && focusTrapRef.current.deactivate();\n  }, [popupRef]);\n  useEvent('propertiesPanel.detach', onClose);\n  return createPortal(jsx(\"div\", {\n    \"aria-label\": title,\n    tabIndex: -1,\n    ref: popupRef,\n    onKeyDown: handleKeydown,\n    role: \"dialog\",\n    class: classnames('bio-properties-panel-popup', className),\n    style: style,\n    children: props.children\n  }), containerNode || document.body);\n}\nconst Popup = forwardRef(PopupComponent);\nPopup.Title = Title;\nPopup.Body = Body;\nPopup.Footer = Footer;\nfunction Title(props) {\n  const {\n    children,\n    className,\n    draggable,\n    emit = () => {},\n    title,\n    showCloseButton = false,\n    closeButtonTooltip = 'Close popup',\n    onClose,\n    ...rest\n  } = props;\n\n  // we can't use state as we need to\n  // manipulate this inside dragging events\n  const context = useRef({\n    startPosition: null,\n    newPosition: null\n  });\n  const dragPreviewRef = useRef();\n  const titleRef = useRef();\n  const onMove = (event, delta) => {\n    cancel(event);\n    const {\n      x: dx,\n      y: dy\n    } = delta;\n    const newPosition = {\n      x: context.current.startPosition.x + dx,\n      y: context.current.startPosition.y + dy\n    };\n    const popupParent = getPopupParent(titleRef.current);\n    popupParent.style.top = newPosition.y + 'px';\n    popupParent.style.left = newPosition.x + 'px';\n\n    // notify interested parties\n    emit('dragover', {\n      newPosition,\n      delta\n    });\n  };\n  const onMoveStart = event => {\n    // initialize drag handler\n    const onDragStart = createDragger(onMove, dragPreviewRef.current);\n    onDragStart(event);\n    event.stopPropagation();\n    const popupParent = getPopupParent(titleRef.current);\n    const bounds = popupParent.getBoundingClientRect();\n    context.current.startPosition = {\n      x: bounds.left,\n      y: bounds.top\n    };\n\n    // notify interested parties\n    emit('dragstart');\n  };\n  const onMoveEnd = () => {\n    context.current.newPosition = null;\n\n    // notify interested parties\n    emit('dragend');\n  };\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-popup__header', draggable && 'draggable', className),\n    ref: titleRef,\n    draggable: draggable,\n    onDragStart: onMoveStart,\n    onDragEnd: onMoveEnd,\n    ...rest,\n    children: [draggable && jsxs(Fragment, {\n      children: [jsx(\"div\", {\n        ref: dragPreviewRef,\n        class: \"bio-properties-panel-popup__drag-preview\"\n      }), jsx(\"div\", {\n        class: \"bio-properties-panel-popup__drag-handle\",\n        children: jsx(DragIcon, {})\n      })]\n    }), jsx(\"div\", {\n      class: \"bio-properties-panel-popup__title\",\n      children: title\n    }), children, showCloseButton && jsx(\"button\", {\n      title: closeButtonTooltip,\n      class: \"bio-properties-panel-popup__close\",\n      onClick: onClose,\n      children: jsx(CloseIcon, {})\n    })]\n  });\n}\nfunction Body(props) {\n  const {\n    children,\n    className,\n    ...rest\n  } = props;\n  return jsx(\"div\", {\n    class: classnames('bio-properties-panel-popup__body', className),\n    ...rest,\n    children: children\n  });\n}\nfunction Footer(props) {\n  const {\n    children,\n    className,\n    ...rest\n  } = props;\n  return jsx(\"div\", {\n    class: classnames('bio-properties-panel-popup__footer', className),\n    ...rest,\n    children: props.children\n  });\n}\n\n// helpers //////////////////////\n\nfunction getPopupParent(node) {\n  return node.closest('.bio-properties-panel-popup');\n}\nfunction cancel(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction getContainerNode(node) {\n  if (typeof node === 'string') {\n    return query(node);\n  }\n  return node;\n}\n\nconst FEEL_POPUP_WIDTH = 700;\nconst FEEL_POPUP_HEIGHT = 250;\n\n/**\n * FEEL popup component, built as a singleton. Emits lifecycle events as follows:\n *  - `feelPopup.open` - fired before the popup is mounted\n *  - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup\n *  - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup\n *  - `feelPopup.closed` - fired after the popup is unmounted\n */\nfunction FEELPopupRoot(props) {\n  const {\n    element,\n    eventBus = {\n      fire() {},\n      on() {},\n      off() {}\n    },\n    popupContainer\n  } = props;\n  const prevElement = usePrevious(element);\n  const [popupConfig, setPopupConfig] = useState({});\n  const [open, setOpen] = useState(false);\n  const [source, setSource] = useState(null);\n  const [sourceElement, setSourceElement] = useState(null);\n  const emit = (type, context) => {\n    eventBus.fire('feelPopup.' + type, context);\n  };\n  const isOpen = useCallback(() => {\n    return !!open;\n  }, [open]);\n  useUpdateEffect(() => {\n    if (!open) {\n      emit('closed');\n    }\n  }, [open]);\n  const handleOpen = (entryId, config, _sourceElement) => {\n    setSource(entryId);\n    setPopupConfig(config);\n    setOpen(true);\n    setSourceElement(_sourceElement);\n    emit('open');\n  };\n  const handleClose = (event = {}) => {\n    const {\n      id\n    } = event;\n    if (id && id !== source) {\n      return;\n    }\n    setOpen(false);\n    setSource(null);\n  };\n  const feelPopupContext = {\n    open: handleOpen,\n    close: handleClose,\n    source\n  };\n\n  // close popup on element change, cf. https://github.com/bpmn-io/properties-panel/issues/270\n  useEffect(() => {\n    if (element && prevElement && element !== prevElement) {\n      handleClose();\n    }\n  }, [element]);\n\n  // allow close and open via events\n  useEffect(() => {\n    const handlePopupOpen = context => {\n      const {\n        entryId,\n        popupConfig,\n        sourceElement\n      } = context;\n      handleOpen(entryId, popupConfig, sourceElement);\n    };\n    const handleIsOpen = () => {\n      return isOpen();\n    };\n    eventBus.on('feelPopup._close', handleClose);\n    eventBus.on('feelPopup._open', handlePopupOpen);\n    eventBus.on('feelPopup._isOpen', handleIsOpen);\n    return () => {\n      eventBus.off('feelPopup._close', handleClose);\n      eventBus.off('feelPopup._open', handleOpen);\n      eventBus.off('feelPopup._isOpen', handleIsOpen);\n    };\n  }, [eventBus, isOpen]);\n  return jsxs(FeelPopupContext.Provider, {\n    value: feelPopupContext,\n    children: [open && jsx(FeelPopupComponent, {\n      onClose: handleClose,\n      container: popupContainer,\n      sourceElement: sourceElement,\n      emit: emit,\n      ...popupConfig\n    }), props.children]\n  });\n}\nfunction FeelPopupComponent(props) {\n  const {\n    container,\n    id,\n    hostLanguage,\n    onInput,\n    onClose,\n    position,\n    singleLine,\n    sourceElement,\n    title,\n    tooltipContainer,\n    type,\n    value,\n    variables,\n    emit\n  } = props;\n  const editorRef = useRef();\n  const popupRef = useRef();\n  const isAutoCompletionOpen = useRef(false);\n  const handleSetReturnFocus = () => {\n    sourceElement && sourceElement.focus();\n  };\n  const onKeyDownCapture = event => {\n    // we use capture here to make sure we handle the event before the editor does\n    if (event.key === 'Escape') {\n      isAutoCompletionOpen.current = autoCompletionOpen(event.target);\n    }\n  };\n  const onKeyDown = event => {\n    if (event.key === 'Escape') {\n      // close popup only if auto completion is not open\n      // we need to do check this because the editor is not\n      // stop propagating the keydown event\n      // cf. https://discuss.codemirror.net/t/how-can-i-replace-the-default-autocompletion-keymap-v6/3322/5\n      if (!isAutoCompletionOpen.current) {\n        onClose();\n        isAutoCompletionOpen.current = false;\n      }\n    }\n  };\n  useEffect(() => {\n    emit('opened', {\n      domNode: popupRef.current\n    });\n    return () => emit('close', {\n      domNode: popupRef.current\n    });\n  }, []);\n  useEffect(() => {\n    // Set focus on editor when popup is opened\n    if (editorRef.current) {\n      editorRef.current.focus();\n    }\n  }, [editorRef]);\n  return jsxs(Popup, {\n    container: container,\n    className: \"bio-properties-panel-feel-popup\",\n    emit: emit,\n    position: position,\n    title: title,\n    onClose: onClose\n\n    // handle focus manually on deactivate\n    ,\n    returnFocus: false,\n    closeOnEscape: false,\n    delayInitialFocus: false,\n    onPostDeactivate: handleSetReturnFocus,\n    height: FEEL_POPUP_HEIGHT,\n    width: FEEL_POPUP_WIDTH,\n    ref: popupRef,\n    children: [jsxs(Popup.Title, {\n      title: title,\n      emit: emit,\n      showCloseButton: true,\n      closeButtonTooltip: \"Save and close\",\n      onClose: onClose,\n      draggable: true,\n      children: [type === 'feel' && jsxs(\"a\", {\n        href: \"https://docs.camunda.io/docs/components/modeler/feel/what-is-feel/\",\n        target: \"_blank\",\n        class: \"bio-properties-panel-feel-popup__title-link\",\n        children: [\"Learn FEEL expressions\", jsx(HelpIcon, {})]\n      }), type === 'feelers' && jsxs(\"a\", {\n        href: \"https://docs.camunda.io/docs/components/modeler/forms/configuration/forms-config-templating-syntax/\",\n        target: \"_blank\",\n        class: \"bio-properties-panel-feel-popup__title-link\",\n        children: [\"Learn templating\", jsx(HelpIcon, {})]\n      })]\n    }), jsx(Popup.Body, {\n      children: jsxs(\"div\", {\n        onKeyDownCapture: onKeyDownCapture,\n        onKeyDown: onKeyDown,\n        class: \"bio-properties-panel-feel-popup__body\",\n        children: [type === 'feel' && jsx(CodeEditor, {\n          enableGutters: true,\n          id: prefixId$8(id),\n          name: id,\n          onInput: onInput,\n          value: value,\n          variables: variables,\n          ref: editorRef,\n          tooltipContainer: tooltipContainer\n        }), type === 'feelers' && jsx(CodeEditor$1, {\n          id: prefixId$8(id),\n          contentAttributes: {\n            'aria-label': title\n          },\n          enableGutters: true,\n          hostLanguage: hostLanguage,\n          name: id,\n          onInput: onInput,\n          value: value,\n          ref: editorRef,\n          singleLine: singleLine,\n          tooltipContainer: tooltipContainer\n        })]\n      })\n    })]\n  });\n}\n\n// helpers /////////////////\n\nfunction prefixId$8(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction autoCompletionOpen(element) {\n  return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');\n}\n\n/**\n * This hook behaves like useEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateEffect(effect, deps) {\n  const isMounted = useRef(false);\n  useEffect(() => {\n    if (isMounted.current) {\n      return effect();\n    } else {\n      isMounted.current = true;\n    }\n  }, deps);\n}\n\nfunction ToggleSwitch(props) {\n  const {\n    id,\n    label,\n    onInput,\n    value,\n    switcherLabel,\n    inline,\n    onFocus,\n    onBlur,\n    inputRef,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleInputCallback = async () => {\n    onInput(!value);\n  };\n  const handleInput = e => {\n    handleInputCallback();\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-toggle-switch', {\n      inline\n    }),\n    children: [jsx(\"label\", {\n      class: \"bio-properties-panel-label\",\n      for: prefixId$7(id),\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-field-wrapper\",\n      children: [jsxs(\"label\", {\n        class: \"bio-properties-panel-toggle-switch__switcher\",\n        children: [jsx(\"input\", {\n          ref: inputRef,\n          id: prefixId$7(id),\n          class: \"bio-properties-panel-input\",\n          type: \"checkbox\",\n          onFocus: onFocus,\n          onBlur: onBlur,\n          name: id,\n          onInput: handleInput,\n          checked: !!localValue\n        }), jsx(\"span\", {\n          class: \"bio-properties-panel-toggle-switch__slider\"\n        })]\n      }), switcherLabel && jsx(\"p\", {\n        class: \"bio-properties-panel-toggle-switch__label\",\n        children: switcherLabel\n      })]\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {String} props.switcherLabel\n * @param {Boolean} props.inline\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction ToggleSwitchEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    switcherLabel,\n    inline,\n    getValue,\n    setValue,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const value = getValue(element);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-entry bio-properties-panel-toggle-switch-entry\",\n    \"data-entry-id\": id,\n    children: [jsx(ToggleSwitch, {\n      id: id,\n      label: label,\n      value: value,\n      onInput: setValue,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      switcherLabel: switcherLabel,\n      inline: inline,\n      tooltip: tooltip,\n      element: element\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$8(node) {\n  return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$7(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nfunction NumberField(props) {\n  const {\n    debounce,\n    disabled,\n    displayLabel = true,\n    id,\n    inputRef,\n    label,\n    max,\n    min,\n    onInput,\n    step,\n    value = '',\n    onFocus,\n    onBlur\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => {\n      if (target.validity.valid) {\n        onInput(target.value ? parseFloat(target.value) : undefined);\n      }\n    });\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-numberfield\",\n    children: [displayLabel && jsx(\"label\", {\n      for: prefixId$6(id),\n      class: \"bio-properties-panel-label\",\n      children: label\n    }), jsx(\"input\", {\n      id: prefixId$6(id),\n      ref: inputRef,\n      type: \"number\",\n      name: id,\n      spellCheck: \"false\",\n      autoComplete: \"off\",\n      disabled: disabled,\n      class: \"bio-properties-panel-input\",\n      max: max,\n      min: min,\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      step: step,\n      value: localValue\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.description\n * @param {Boolean} props.disabled\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {String} props.label\n * @param {String} props.max\n * @param {String} props.min\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {String} props.step\n * @param {Function} props.validate\n */\nfunction NumberFieldEntry(props) {\n  const {\n    debounce,\n    description,\n    disabled,\n    element,\n    getValue,\n    id,\n    label,\n    max,\n    min,\n    setValue,\n    step,\n    onFocus,\n    onBlur,\n    validate\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(NumberField, {\n      debounce: debounce,\n      disabled: disabled,\n      id: id,\n      label: label,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      onInput: onInput,\n      max: max,\n      min: min,\n      step: step,\n      value: value\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$7(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$6(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nconst noop$2 = () => {};\nfunction FeelTextfieldComponent(props) {\n  const {\n    debounce,\n    id,\n    element,\n    label,\n    hostLanguage,\n    onInput,\n    onError,\n    placeholder,\n    feel,\n    value = '',\n    disabled = false,\n    variables,\n    singleLine,\n    tooltipContainer,\n    OptionalComponent = OptionalFeelInput,\n    tooltip\n  } = props;\n  const [localValue, _setLocalValue] = useState(value);\n  const editorRef = useShowEntryEvent(id);\n  const containerRef = useRef();\n  const feelActive = isString(localValue) && localValue.startsWith('=') || feel === 'required';\n  const feelOnlyValue = isString(localValue) && localValue.startsWith('=') ? localValue.substring(1) : localValue;\n  const [focus, _setFocus] = useState(undefined);\n  const {\n    open: openPopup,\n    source: popupSource\n  } = useContext(FeelPopupContext);\n  const popuOpen = popupSource === id;\n  const setFocus = (offset = 0) => {\n    const hasFocus = containerRef.current.contains(document.activeElement);\n\n    // Keep caret position if it is already focused, otherwise focus at the end\n    const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n    _setFocus(position + offset);\n  };\n  const handleInputCallback = useMemo(() => {\n    return debounce(newValue => {\n      onInput(newValue);\n    });\n  }, [onInput, debounce]);\n  const setLocalValue = newValue => {\n    _setLocalValue(newValue);\n    if (typeof newValue === 'undefined' || newValue === '' || newValue === '=') {\n      handleInputCallback(undefined);\n    } else {\n      handleInputCallback(newValue);\n    }\n  };\n  const handleFeelToggle = useStaticCallback(() => {\n    if (feel === 'required') {\n      return;\n    }\n    if (!feelActive) {\n      setLocalValue('=' + localValue);\n    } else {\n      setLocalValue(feelOnlyValue);\n    }\n  });\n  const handleLocalInput = newValue => {\n    if (feelActive) {\n      newValue = '=' + newValue;\n    }\n    if (newValue === localValue) {\n      return;\n    }\n    setLocalValue(newValue);\n    if (!feelActive && isString(newValue) && newValue.startsWith('=')) {\n      // focus is behind `=` sign that will be removed\n      setFocus(-1);\n    }\n  };\n  const handleLint = useStaticCallback(lint => {\n    if (!(lint && lint.length)) {\n      onError(undefined);\n      return;\n    }\n    onError('Unparsable FEEL expression.');\n  });\n  const handlePopupOpen = (type = 'feel') => {\n    const popupOptions = {\n      id,\n      hostLanguage,\n      onInput: handleLocalInput,\n      position: calculatePopupPosition(containerRef.current),\n      singleLine,\n      title: getPopupTitle(element, label),\n      tooltipContainer,\n      type,\n      value: feelOnlyValue,\n      variables\n    };\n    openPopup(id, popupOptions, editorRef.current);\n  };\n  useEffect(() => {\n    if (typeof focus !== 'undefined') {\n      editorRef.current.focus(focus);\n      _setFocus(undefined);\n    }\n  }, [focus]);\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n\n    // External value change removed content => keep FEEL configuration\n    if (!value) {\n      setLocalValue(feelActive ? '=' : '');\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n\n  // copy-paste integration\n  useEffect(() => {\n    const copyHandler = event => {\n      if (!feelActive) {\n        return;\n      }\n      event.clipboardData.setData('application/FEEL', event.clipboardData.getData('text'));\n    };\n    const pasteHandler = event => {\n      if (feelActive || popuOpen) {\n        return;\n      }\n      const data = event.clipboardData.getData('application/FEEL');\n      if (data) {\n        setTimeout(() => {\n          handleFeelToggle();\n          setFocus();\n        });\n      }\n    };\n    containerRef.current.addEventListener('copy', copyHandler);\n    containerRef.current.addEventListener('cut', copyHandler);\n    containerRef.current.addEventListener('paste', pasteHandler);\n    return () => {\n      containerRef.current.removeEventListener('copy', copyHandler);\n      containerRef.current.removeEventListener('cut', copyHandler);\n      containerRef.current.removeEventListener('paste', pasteHandler);\n    };\n  }, [containerRef, feelActive, handleFeelToggle, setFocus]);\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-feel-entry', {\n      'feel-active': feelActive\n    }),\n    children: [jsxs(\"label\", {\n      for: prefixId$5(id),\n      class: \"bio-properties-panel-label\",\n      onClick: () => setFocus(),\n      children: [jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      }), jsx(FeelIcon, {\n        label: label,\n        feel: feel,\n        onClick: handleFeelToggle,\n        active: feelActive\n      })]\n    }), jsxs(\"div\", {\n      class: \"bio-properties-panel-feel-container\",\n      ref: containerRef,\n      children: [jsx(FeelIndicator, {\n        active: feelActive,\n        disabled: feel !== 'optional' || disabled,\n        onClick: handleFeelToggle\n      }), feelActive ? jsx(CodeEditor, {\n        name: id,\n        onInput: handleLocalInput,\n        contentAttributes: {\n          'id': prefixId$5(id),\n          'aria-label': label\n        },\n        disabled: disabled,\n        popupOpen: popuOpen,\n        onFeelToggle: () => {\n          handleFeelToggle();\n          setFocus(true);\n        },\n        onLint: handleLint,\n        onPopupOpen: handlePopupOpen,\n        placeholder: placeholder,\n        value: feelOnlyValue,\n        variables: variables,\n        ref: editorRef,\n        tooltipContainer: tooltipContainer\n      }) : jsx(OptionalComponent, {\n        ...props,\n        popupOpen: popuOpen,\n        onInput: handleLocalInput,\n        contentAttributes: {\n          'id': prefixId$5(id),\n          'aria-label': label\n        },\n        value: localValue,\n        ref: editorRef,\n        onPopupOpen: handlePopupOpen,\n        containerRef: containerRef\n      })]\n    })]\n  });\n}\nconst FeelTextfield = withAutoClosePopup(FeelTextfieldComponent);\nconst OptionalFeelInput = forwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    placeholder\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: position => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      if (typeof position === 'number') {\n        if (position > value.length) {\n          position = value.length;\n        }\n        input.setSelectionRange(position, position);\n      }\n    }\n  };\n  return jsx(\"input\", {\n    id: prefixId$5(id),\n    type: \"text\",\n    ref: inputRef,\n    name: id,\n    spellCheck: \"false\",\n    autoComplete: \"off\",\n    disabled: disabled,\n    class: \"bio-properties-panel-input\",\n    onInput: e => onInput(e.target.value),\n    onFocus: onFocus,\n    onBlur: onBlur,\n    placeholder: placeholder,\n    value: value || ''\n  });\n});\nconst OptionalFeelNumberField = forwardRef((props, ref) => {\n  const {\n    id,\n    debounce,\n    disabled,\n    onInput,\n    value,\n    min,\n    max,\n    step,\n    onFocus,\n    onBlur\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: position => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      if (typeof position === 'number' && position !== Infinity) {\n        if (position > value.length) {\n          position = value.length;\n        }\n        input.setSelectionRange(position, position);\n      }\n    }\n  };\n  return jsx(NumberField, {\n    id: id,\n    debounce: debounce,\n    disabled: disabled,\n    displayLabel: false,\n    inputRef: inputRef,\n    max: max,\n    min: min,\n    onInput: onInput,\n    step: step,\n    value: value,\n    onFocus: onFocus,\n    onBlur: onBlur\n  });\n});\nconst OptionalFeelTextArea = forwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    placeholder\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n      input.setSelectionRange(0, 0);\n    }\n  };\n  return jsx(\"textarea\", {\n    id: prefixId$5(id),\n    type: \"text\",\n    ref: inputRef,\n    name: id,\n    spellCheck: \"false\",\n    autoComplete: \"off\",\n    disabled: disabled,\n    class: \"bio-properties-panel-input\",\n    onInput: e => onInput(e.target.value),\n    onFocus: onFocus,\n    onBlur: onBlur,\n    placeholder: placeholder,\n    value: value || '',\n    \"data-gramm\": \"false\"\n  });\n});\nconst OptionalFeelToggleSwitch = forwardRef((props, ref) => {\n  const {\n    id,\n    onInput,\n    value,\n    onFocus,\n    onBlur,\n    switcherLabel\n  } = props;\n  const inputRef = useRef();\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n    }\n  };\n  return jsx(ToggleSwitch, {\n    id: id,\n    value: value,\n    inputRef: inputRef,\n    onInput: onInput,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    switcherLabel: switcherLabel\n  });\n});\nconst OptionalFeelCheckbox = forwardRef((props, ref) => {\n  const {\n    id,\n    disabled,\n    onInput,\n    value,\n    onFocus,\n    onBlur\n  } = props;\n  const inputRef = useRef();\n  const handleChange = ({\n    target\n  }) => {\n    onInput(target.checked);\n  };\n\n  // To be consistent with the FEEL editor, set focus at start of input\n  // this ensures clean editing experience when switching with the keyboard\n  ref.current = {\n    focus: () => {\n      const input = inputRef.current;\n      if (!input) {\n        return;\n      }\n      input.focus();\n    }\n  };\n  return jsx(\"input\", {\n    ref: inputRef,\n    id: prefixId$5(id),\n    name: id,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    type: \"checkbox\",\n    class: \"bio-properties-panel-input\",\n    onChange: handleChange,\n    checked: value,\n    disabled: disabled\n  });\n});\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction FeelEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    disabled,\n    feel,\n    label,\n    getValue,\n    setValue,\n    tooltipContainer,\n    hostLanguage,\n    singleLine,\n    validate,\n    show = noop$2,\n    example,\n    variables,\n    onFocus,\n    onBlur,\n    placeholder,\n    tooltip\n  } = props;\n  const [validationError, setValidationError] = useState(null);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setValidationError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = useStaticCallback(newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n\n    // don't create multiple commandStack entries for the same value\n    if (newValue !== value) {\n      setValue(newValue, newValidationError);\n    }\n    setValidationError(newValidationError);\n  });\n  const onError = useCallback(err => {\n    setLocalError(err);\n  }, []);\n  const temporaryError = useError(id);\n  const error = temporaryError || localError || validationError;\n  return jsxs(\"div\", {\n    class: classnames(props.class, 'bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [createElement(FeelTextfield, {\n      ...props,\n      debounce: debounce,\n      disabled: disabled,\n      feel: feel,\n      id: id,\n      key: element,\n      label: label,\n      onInput: onInput,\n      onError: onError,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      example: example,\n      hostLanguage: hostLanguage,\n      singleLine: singleLine,\n      show: show,\n      value: value,\n      variables: variables,\n      tooltipContainer: tooltipContainer,\n      OptionalComponent: props.OptionalComponent,\n      tooltip: tooltip\n    }), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.max\n * @param {String} props.min\n * @param {String} props.step\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelNumberEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-number\",\n    OptionalComponent: OptionalFeelNumberField,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n */\nfunction FeelTextAreaEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-textarea\",\n    OptionalComponent: OptionalFeelTextArea,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelToggleSwitchEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-toggle-switch\",\n    OptionalComponent: OptionalFeelToggleSwitch,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelCheckboxEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-checkbox\",\n    OptionalComponent: OptionalFeelCheckbox,\n    ...props\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.hostLanguage\n * @param {Boolean} props.singleLine\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {Boolean} props.feel\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Function} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nfunction FeelTemplatingEntry(props) {\n  return jsx(FeelEntry, {\n    class: \"bio-properties-panel-feel-templating\",\n    OptionalComponent: CodeEditor$1,\n    ...props\n  });\n}\nfunction isEdited$6(node) {\n  if (!node) {\n    return false;\n  }\n  if (node.type === 'checkbox') {\n    return !!node.checked || node.classList.contains('edited');\n  }\n  return !!node.value || node.classList.contains('edited');\n}\n\n// helpers /////////////////\n\nfunction prefixId$5(id) {\n  return `bio-properties-panel-${id}`;\n}\nfunction calculatePopupPosition(element) {\n  const {\n    top,\n    left\n  } = element.getBoundingClientRect();\n  return {\n    left: left - FEEL_POPUP_WIDTH - 20,\n    top: top\n  };\n}\n\n// todo(pinussilvestrus): make this configurable in the future\nfunction getPopupTitle(element, label) {\n  let popupTitle = '';\n  if (element && element.type) {\n    popupTitle = `${element.type} / `;\n  }\n  return `${popupTitle}${label}`;\n}\nfunction withAutoClosePopup(Component) {\n  return function (props) {\n    const {\n      id\n    } = props;\n    const {\n      close\n    } = useContext(FeelPopupContext);\n    const closePopup = useStaticCallback(close);\n    useEffect(() => {\n      return () => {\n        closePopup({\n          id\n        });\n      };\n    }, []);\n    return jsx(Component, {\n      ...props\n    });\n  };\n}\n\nconst DEFAULT_LAYOUT = {};\nconst DEFAULT_DESCRIPTION = {};\nconst DEFAULT_TOOLTIP = {};\n\n/**\n * @typedef { {\n *    component: import('preact').Component,\n *    id: String,\n *    isEdited?: Function\n * } } EntryDefinition\n *\n * @typedef { {\n *    autoFocusEntry: String,\n *    autoOpen?: Boolean,\n *    entries: Array<EntryDefinition>,\n *    id: String,\n *    label: String,\n *    remove: (event: MouseEvent) => void\n * } } ListItemDefinition\n *\n * @typedef { {\n *    add: (event: MouseEvent) => void,\n *    component: import('preact').Component,\n *    element: Object,\n *    id: String,\n *    items: Array<ListItemDefinition>,\n *    label: String,\n *    shouldOpen?: Boolean\n * } } ListGroupDefinition\n *\n * @typedef { {\n *    component?: import('preact').Component,\n *    entries: Array<EntryDefinition>,\n *    id: String,\n *    label: String,\n *    shouldOpen?: Boolean\n * } } GroupDefinition\n *\n *  @typedef { {\n *    [id: String]: GetDescriptionFunction\n * } } DescriptionConfig\n *\n *  @typedef { {\n *    [id: String]: GetTooltipFunction\n * } } TooltipConfig\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetDescriptionFunction\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetTooltipFunction\n *\n * @typedef { {\n *  getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,\n *  getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition\n * } } PlaceholderProvider\n *\n */\n\n/**\n * A basic properties panel component. Describes *how* content will be rendered, accepts\n * data from implementor to describe *what* will be rendered.\n *\n * @param {Object} props\n * @param {Object|Array} props.element\n * @param {import('./components/Header').HeaderProvider} props.headerProvider\n * @param {PlaceholderProvider} [props.placeholderProvider]\n * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups\n * @param {Object} [props.layoutConfig]\n * @param {Function} [props.layoutChanged]\n * @param {DescriptionConfig} [props.descriptionConfig]\n * @param {Function} [props.descriptionLoaded]\n * @param {TooltipConfig} [props.tooltipConfig]\n * @param {Function} [props.tooltipLoaded]\n * @param {HTMLElement} [props.feelPopupContainer]\n * @param {Object} [props.eventBus]\n */\nfunction PropertiesPanel(props) {\n  const {\n    element,\n    headerProvider,\n    placeholderProvider,\n    groups,\n    layoutConfig,\n    layoutChanged,\n    descriptionConfig,\n    descriptionLoaded,\n    tooltipConfig,\n    tooltipLoaded,\n    feelPopupContainer,\n    eventBus\n  } = props;\n\n  // set-up layout context\n  const [layout, setLayout] = useState(createLayout(layoutConfig));\n\n  // react to external changes in the layout config\n  useUpdateLayoutEffect(() => {\n    const newLayout = createLayout(layoutConfig);\n    setLayout(newLayout);\n  }, [layoutConfig]);\n  useEffect(() => {\n    if (typeof layoutChanged === 'function') {\n      layoutChanged(layout);\n    }\n  }, [layout, layoutChanged]);\n  const getLayoutForKey = (key, defaultValue) => {\n    return get(layout, key, defaultValue);\n  };\n  const setLayoutForKey = (key, config) => {\n    const newLayout = assign({}, layout);\n    set(newLayout, key, config);\n    setLayout(newLayout);\n  };\n  const layoutContext = {\n    layout,\n    setLayout,\n    getLayoutForKey,\n    setLayoutForKey\n  };\n\n  // set-up description context\n  const description = useMemo(() => createDescriptionContext(descriptionConfig), [descriptionConfig]);\n  useEffect(() => {\n    if (typeof descriptionLoaded === 'function') {\n      descriptionLoaded(description);\n    }\n  }, [description, descriptionLoaded]);\n  const getDescriptionForId = (id, element) => {\n    return description[id] && description[id](element);\n  };\n  const descriptionContext = {\n    description,\n    getDescriptionForId\n  };\n\n  // set-up tooltip context\n  const tooltip = useMemo(() => createTooltipContext(tooltipConfig), [tooltipConfig]);\n  useEffect(() => {\n    if (typeof tooltipLoaded === 'function') {\n      tooltipLoaded(tooltip);\n    }\n  }, [tooltip, tooltipLoaded]);\n  const getTooltipForId = (id, element) => {\n    return tooltip[id] && tooltip[id](element);\n  };\n  const tooltipContext = {\n    tooltip,\n    getTooltipForId\n  };\n  const [errors, setErrors] = useState({});\n  const onSetErrors = ({\n    errors\n  }) => setErrors(errors);\n  useEvent('propertiesPanel.setErrors', onSetErrors, eventBus);\n  const errorsContext = {\n    errors\n  };\n  const eventContext = {\n    eventBus\n  };\n  const propertiesPanelContext = {\n    element\n  };\n\n  // empty state\n  if (placeholderProvider && !element) {\n    return jsx(Placeholder, {\n      ...placeholderProvider.getEmpty()\n    });\n  }\n\n  // multiple state\n  if (placeholderProvider && isArray(element)) {\n    return jsx(Placeholder, {\n      ...placeholderProvider.getMultiple()\n    });\n  }\n  return jsx(LayoutContext.Provider, {\n    value: propertiesPanelContext,\n    children: jsx(ErrorsContext.Provider, {\n      value: errorsContext,\n      children: jsx(DescriptionContext.Provider, {\n        value: descriptionContext,\n        children: jsx(TooltipContext.Provider, {\n          value: tooltipContext,\n          children: jsx(LayoutContext.Provider, {\n            value: layoutContext,\n            children: jsx(EventContext.Provider, {\n              value: eventContext,\n              children: jsx(FEELPopupRoot, {\n                element: element,\n                eventBus: eventBus,\n                popupContainer: feelPopupContainer,\n                children: jsxs(\"div\", {\n                  class: \"bio-properties-panel\",\n                  children: [jsx(Header, {\n                    element: element,\n                    headerProvider: headerProvider\n                  }), jsx(\"div\", {\n                    class: \"bio-properties-panel-scroll-container\",\n                    children: groups.map(group => {\n                      const {\n                        component: Component = Group,\n                        id\n                      } = group;\n                      return createElement(Component, {\n                        ...group,\n                        key: id,\n                        element: element\n                      });\n                    })\n                  })]\n                })\n              })\n            })\n          })\n        })\n      })\n    })\n  });\n}\n\n// helpers //////////////////\n\nfunction createLayout(overrides = {}, defaults = DEFAULT_LAYOUT) {\n  return {\n    ...defaults,\n    ...overrides\n  };\n}\nfunction createDescriptionContext(overrides = {}) {\n  return {\n    ...DEFAULT_DESCRIPTION,\n    ...overrides\n  };\n}\nfunction createTooltipContext(overrides = {}) {\n  return {\n    ...DEFAULT_TOOLTIP,\n    ...overrides\n  };\n}\n\n// hooks //////////////////\n\n/**\n * This hook behaves like useLayoutEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateLayoutEffect(effect, deps) {\n  const isMounted = useRef(false);\n  useLayoutEffect(() => {\n    if (isMounted.current) {\n      return effect();\n    } else {\n      isMounted.current = true;\n    }\n  }, deps);\n}\n\nfunction DropdownButton(props) {\n  const {\n    class: className,\n    children,\n    menuItems = []\n  } = props;\n  const dropdownRef = useRef(null);\n  const menuRef = useRef(null);\n  const [open, setOpen] = useState(false);\n  const close = () => setOpen(false);\n  function onDropdownToggle(event) {\n    if (menuRef.current && menuRef.current.contains(event.target)) {\n      return;\n    }\n    event.stopPropagation();\n    setOpen(open => !open);\n  }\n  function onActionClick(event, action) {\n    event.stopPropagation();\n    close();\n    action();\n  }\n  useGlobalClick([dropdownRef.current], () => close());\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-dropdown-button', {\n      open\n    }, className),\n    onClick: onDropdownToggle,\n    ref: dropdownRef,\n    children: [children, jsx(\"div\", {\n      class: \"bio-properties-panel-dropdown-button__menu\",\n      ref: menuRef,\n      children: menuItems.map((item, index) => jsx(MenuItem, {\n        onClick: onActionClick,\n        item: item\n      }, index))\n    })]\n  });\n}\nfunction MenuItem({\n  item,\n  onClick\n}) {\n  if (item.separator) {\n    return jsx(\"div\", {\n      class: \"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--separator\"\n    });\n  }\n  if (item.action) {\n    return jsx(\"button\", {\n      type: \"button\",\n      class: \"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--actionable\",\n      onClick: event => onClick(event, item.action),\n      children: item.entry\n    });\n  }\n  return jsx(\"div\", {\n    class: \"bio-properties-panel-dropdown-button__menu-item\",\n    children: item.entry\n  });\n}\n\n/**\n *\n * @param {Array<null | Element>} ignoredElements\n * @param {Function} callback\n */\nfunction useGlobalClick(ignoredElements, callback) {\n  useEffect(() => {\n    /**\n     * @param {MouseEvent} event\n     */\n    function listener(event) {\n      if (ignoredElements.some(element => element && element.contains(event.target))) {\n        return;\n      }\n      callback();\n    }\n    document.addEventListener('click', listener, {\n      capture: true\n    });\n    return () => document.removeEventListener('click', listener, {\n      capture: true\n    });\n  }, [...ignoredElements, callback]);\n}\n\nfunction HeaderButton(props) {\n  const {\n    children = null,\n    class: classname,\n    onClick = () => {},\n    ...otherProps\n  } = props;\n  return jsx(\"button\", {\n    type: \"button\",\n    ...otherProps,\n    onClick: onClick,\n    class: classnames('bio-properties-panel-group-header-button', classname),\n    children: children\n  });\n}\n\n/**\n * @typedef { {\n *   [key: string]: string;\n * } } TranslateReplacements\n */\n\n/**\n * A simple translation stub to be used for multi-language support.\n * Can be easily replaced with a more sophisticated solution.\n *\n * @param {string} template to interpolate\n * @param {TranslateReplacements} [replacements] a map with substitutes\n *\n * @return {string} the translated string\n */\nfunction translateFallback(template, replacements) {\n  replacements = replacements || {};\n  return template.replace(/{([^}]+)}/g, function (_, key) {\n    return replacements[key] || '{' + key + '}';\n  });\n}\n\nfunction CollapsibleEntry(props) {\n  const {\n    element,\n    entries = [],\n    id,\n    label,\n    open: shouldOpen,\n    remove,\n    translate = translateFallback\n  } = props;\n  const [open, setOpen] = useState(shouldOpen);\n  const toggleOpen = () => setOpen(!open);\n  const {\n    onShow\n  } = useContext(LayoutContext);\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow: useCallback(() => {\n      setOpen(true);\n      if (isFunction(onShow)) {\n        onShow();\n      }\n    }, [onShow, setOpen])\n  };\n  const placeholderLabel = translate('<empty>');\n  return jsxs(\"div\", {\n    \"data-entry-id\": id,\n    class: classnames('bio-properties-panel-collapsible-entry', open ? 'open' : ''),\n    children: [jsxs(\"div\", {\n      class: \"bio-properties-panel-collapsible-entry-header\",\n      onClick: toggleOpen,\n      children: [jsx(\"div\", {\n        title: label || placeholderLabel,\n        class: classnames('bio-properties-panel-collapsible-entry-header-title', !label && 'empty'),\n        children: label || placeholderLabel\n      }), jsx(\"button\", {\n        type: \"button\",\n        title: translate('Toggle list item'),\n        class: \"bio-properties-panel-arrow  bio-properties-panel-collapsible-entry-arrow\",\n        children: jsx(ArrowIcon, {\n          class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n        })\n      }), remove ? jsx(\"button\", {\n        type: \"button\",\n        title: translate('Delete item'),\n        class: \"bio-properties-panel-remove-entry\",\n        onClick: remove,\n        children: jsx(DeleteIcon, {})\n      }) : null]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-collapsible-entry-entries', open ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: entries.map(entry => {\n          const {\n            component: Component,\n            id\n          } = entry;\n          return createElement(Component, {\n            ...entry,\n            element: element,\n            key: id\n          });\n        })\n      })\n    })]\n  });\n}\n\nfunction ListItem(props) {\n  const {\n    autoFocusEntry,\n    autoOpen,\n    translate = translateFallback\n  } = props;\n\n  // focus specified entry on auto open\n  useEffect(() => {\n    if (autoOpen && autoFocusEntry) {\n      const entry = query(`[data-entry-id=\"${autoFocusEntry}\"]`);\n      const focusableInput = query('.bio-properties-panel-input', entry);\n      if (focusableInput) {\n        if (isFunction(focusableInput.select)) {\n          focusableInput.select();\n        } else if (isFunction(focusableInput.focus)) {\n          focusableInput.focus();\n        }\n        focusableInput.scrollIntoView();\n      }\n    }\n  }, [autoOpen, autoFocusEntry]);\n  return jsx(\"div\", {\n    class: \"bio-properties-panel-list-item\",\n    children: jsx(CollapsibleEntry, {\n      ...props,\n      open: autoOpen,\n      translate: translate\n    })\n  });\n}\n\nconst noop$1 = () => {};\n\n/**\n * @param {import('../PropertiesPanel').ListGroupDefinition} props\n */\nfunction ListGroup(props) {\n  const {\n    add,\n    element,\n    id,\n    items,\n    label,\n    shouldOpen = true,\n    translate = translateFallback\n  } = props;\n  useEffect(() => {\n    if (props.shouldSort != undefined) {\n      console.warn('the property \\'shouldSort\\' is no longer supported');\n    }\n  }, [props.shouldSort]);\n  const groupRef = useRef(null);\n  const [open, setOpen] = useLayoutState(['groups', id, 'open'], false);\n  const [sticky, setSticky] = useState(false);\n  const onShow = useCallback(() => setOpen(true), [setOpen]);\n  const [localItems, setLocalItems] = useState([]);\n  const [newlyAddedItemIds, setNewlyAddedItemIds] = useState([]);\n\n  // Flag to mark that add button was clicked in the last render cycle\n  const [addTriggered, setAddTriggered] = useState(false);\n  const prevElement = usePrevious(element);\n  const elementChanged = element !== prevElement;\n  const shouldHandleEffects = !elementChanged && shouldOpen;\n\n  // (0) delay setting items\n  //\n  // We need to this to align the render cycles of items\n  // with the detection of newly added items.\n  // This is important, because the autoOpen property can\n  // only set per list item on its very first render.\n  useEffect(() => {\n    setLocalItems(items);\n  }, [items]);\n\n  // (1) handle auto opening when items were added\n  useEffect(() => {\n    // reset addTriggered flag\n    setAddTriggered(false);\n    if (shouldHandleEffects && localItems) {\n      if (addTriggered) {\n        const previousItemIds = localItems.map(item => item.id);\n        const currentItemsIds = items.map(item => item.id);\n        const newItemIds = currentItemsIds.filter(itemId => !previousItemIds.includes(itemId));\n\n        // open if not open, configured and triggered by add button\n        //\n        // TODO(marstamm): remove once we refactor layout handling for listGroups.\n        // Ideally, opening should be handled as part of the `add` callback and\n        // not be a concern for the ListGroup component.\n        if (!open && shouldOpen && newItemIds.length > 0) {\n          toggleOpen();\n        }\n        setNewlyAddedItemIds(newItemIds);\n      } else {\n        // ignore newly added items that do not result from a triggered add\n        setNewlyAddedItemIds([]);\n      }\n    }\n  }, [items, open, shouldHandleEffects, addTriggered, localItems]);\n\n  // set css class when group is sticky to top\n  useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n  const toggleOpen = () => setOpen(!open);\n  const hasItems = !!items.length;\n  const propertiesPanelContext = {\n    ...useContext(LayoutContext),\n    onShow\n  };\n  const handleAddClick = e => {\n    setAddTriggered(true);\n    add(e);\n  };\n  const allErrors = useErrors();\n  const hasError = items.some(item => {\n    if (allErrors[item.id]) {\n      return true;\n    }\n    if (!item.entries) {\n      return;\n    }\n\n    // also check if the error is nested, e.g. for name-value entries\n    return item.entries.some(entry => allErrors[entry.id]);\n  });\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-group\",\n    \"data-group-id\": 'group-' + id,\n    ref: groupRef,\n    children: [jsxs(\"div\", {\n      class: classnames('bio-properties-panel-group-header', hasItems ? '' : 'empty', hasItems && open ? 'open' : '', sticky && open ? 'sticky' : ''),\n      onClick: hasItems ? toggleOpen : noop$1,\n      children: [jsx(\"div\", {\n        title: props.tooltip ? null : label,\n        \"data-title\": label,\n        class: \"bio-properties-panel-group-header-title\",\n        children: jsx(TooltipWrapper, {\n          value: props.tooltip,\n          forId: 'group-' + id,\n          element: element,\n          parent: groupRef,\n          children: label\n        })\n      }), jsxs(\"div\", {\n        class: \"bio-properties-panel-group-header-buttons\",\n        children: [add ? jsxs(\"button\", {\n          type: \"button\",\n          title: translate('Create new list item'),\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-add-entry\",\n          onClick: handleAddClick,\n          children: [jsx(CreateIcon, {}), !hasItems ? jsx(\"span\", {\n            class: \"bio-properties-panel-add-entry-label\",\n            children: translate('Create')\n          }) : null]\n        }) : null, hasItems ? jsx(\"div\", {\n          title: translate(`List contains {numOfItems} item${items.length != 1 ? 's' : ''}`, {\n            numOfItems: items.length\n          }),\n          class: classnames('bio-properties-panel-list-badge', hasError ? 'bio-properties-panel-list-badge--error' : ''),\n          children: items.length\n        }) : null, hasItems ? jsx(\"button\", {\n          type: \"button\",\n          title: translate('Toggle section'),\n          class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n          children: jsx(ArrowIcon, {\n            class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n          })\n        }) : null]\n      })]\n    }), jsx(\"div\", {\n      class: classnames('bio-properties-panel-list', open && hasItems ? 'open' : ''),\n      children: jsx(LayoutContext.Provider, {\n        value: propertiesPanelContext,\n        children: localItems.map((item, index) => {\n          if (!item) {\n            return;\n          }\n          const {\n            id\n          } = item;\n\n          // if item was added, open it\n          // Existing items will not be affected as autoOpen is only applied on first render\n          const autoOpen = newlyAddedItemIds.includes(item.id);\n          return createElement(ListItem, {\n            ...item,\n            autoOpen: autoOpen,\n            element: element,\n            index: index,\n            key: id,\n            translate: translate\n          });\n        })\n      })\n    })]\n  });\n}\n\nfunction Checkbox(props) {\n  const {\n    id,\n    label,\n    onChange,\n    disabled,\n    value = false,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const handleChangeCallback = ({\n    target\n  }) => {\n    onChange(target.checked);\n  };\n  const handleChange = e => {\n    handleChangeCallback(e);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  const ref = useShowEntryEvent(id);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-checkbox\",\n    children: [jsx(\"input\", {\n      ref: ref,\n      id: prefixId$4(id),\n      name: id,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      type: \"checkbox\",\n      class: \"bio-properties-panel-input\",\n      onChange: handleChange,\n      checked: localValue,\n      disabled: disabled\n    }), jsx(\"label\", {\n      for: prefixId$4(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {boolean} [props.disabled]\n */\nfunction CheckboxEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    getValue,\n    setValue,\n    disabled,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const value = getValue(element);\n  const error = useError(id);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-entry bio-properties-panel-checkbox-entry\",\n    \"data-entry-id\": id,\n    children: [jsx(Checkbox, {\n      disabled: disabled,\n      id: id,\n      label: label,\n      onChange: setValue,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      value: value,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$5(node) {\n  return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$4(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nconst noop = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n */\nfunction TemplatingEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    disabled,\n    label,\n    getValue,\n    setValue,\n    tooltipContainer,\n    validate,\n    show = noop\n  } = props;\n  const [validationError, setValidationError] = useState(null);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setValidationError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = useStaticCallback(newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n\n    // don't create multiple commandStack entries for the same value\n    if (newValue !== value) {\n      setValue(newValue, newValidationError);\n    }\n    setValidationError(newValidationError);\n  });\n  const onError = useCallback(err => {\n    setLocalError(err);\n  }, []);\n  const temporaryError = useError(id);\n  const error = localError || temporaryError || validationError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(Templating, {\n      debounce: debounce,\n      disabled: disabled,\n      id: id,\n      label: label,\n      onInput: onInput,\n      onError: onError,\n      show: show,\n      value: value,\n      tooltipContainer: tooltipContainer\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction Templating(props) {\n  const {\n    debounce,\n    id,\n    label,\n    onInput,\n    onError,\n    value = '',\n    disabled = false,\n    tooltipContainer\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const editorRef = useShowEntryEvent(id);\n  const containerRef = useRef();\n  const [focus, _setFocus] = useState(undefined);\n  const setFocus = (offset = 0) => {\n    const hasFocus = containerRef.current.contains(document.activeElement);\n\n    // Keep caret position if it is already focused, otherwise focus at the end\n    const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n    _setFocus(position + offset);\n  };\n  const handleInputCallback = useMemo(() => {\n    return debounce(newValue => onInput(newValue.length ? newValue : undefined));\n  }, [onInput, debounce]);\n  const handleInput = newValue => {\n    handleInputCallback(newValue);\n    setLocalValue(newValue);\n  };\n  const handleLint = useStaticCallback(lint => {\n    const errors = lint && lint.length && lint.filter(e => e.severity === 'error') || [];\n    if (!errors.length) {\n      onError(undefined);\n      return;\n    }\n    const error = lint[0];\n    const message = `${error.source}: ${error.message}`;\n    onError(message);\n  });\n  useEffect(() => {\n    if (typeof focus !== 'undefined') {\n      editorRef.current.focus(focus);\n      _setFocus(undefined);\n    }\n  }, [focus]);\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value ? value : '');\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-feelers\",\n    children: [jsx(\"label\", {\n      id: prefixIdLabel(id),\n      class: \"bio-properties-panel-label\",\n      onClick: () => setFocus(),\n      children: label\n    }), jsx(\"div\", {\n      class: \"bio-properties-panel-feelers-input\",\n      ref: containerRef,\n      children: jsx(CodeEditor$1, {\n        name: id,\n        onInput: handleInput,\n        contentAttributes: {\n          'aria-labelledby': prefixIdLabel(id)\n        },\n        disabled: disabled,\n        onLint: handleLint,\n        value: localValue,\n        ref: editorRef,\n        tooltipContainer: tooltipContainer\n      })\n    })]\n  });\n}\nfunction isEdited$4(node) {\n  return node && (!!node.value || node.classList.contains('edited'));\n}\n\n// helpers /////////////////\n\nfunction prefixIdLabel(id) {\n  return `bio-properties-panel-feelers-${id}-label`;\n}\n\nfunction List(props) {\n  const {\n    id,\n    element,\n    items = [],\n    component,\n    label = '<empty>',\n    open: shouldOpen,\n    onAdd,\n    onRemove,\n    autoFocusEntry,\n    ...restProps\n  } = props;\n  const [open, setOpen] = useState(!!shouldOpen);\n  const hasItems = !!items.length;\n  const toggleOpen = () => hasItems && setOpen(!open);\n  const elementChanged = usePrevious(element) !== element;\n  const newItems = useNewItems(items, elementChanged);\n  useEffect(() => {\n    if (open && !hasItems) {\n      setOpen(false);\n    }\n  }, [open, hasItems]);\n\n  /**\n   * @param {MouseEvent} event\n   */\n  function addItem(event) {\n    event.stopPropagation();\n    onAdd();\n    if (!open) {\n      setOpen(true);\n    }\n  }\n  return jsxs(\"div\", {\n    \"data-entry-id\": id,\n    class: classnames('bio-properties-panel-entry', 'bio-properties-panel-list-entry', hasItems ? '' : 'empty', open ? 'open' : ''),\n    children: [jsxs(\"div\", {\n      class: \"bio-properties-panel-list-entry-header\",\n      onClick: toggleOpen,\n      children: [jsx(\"div\", {\n        title: label,\n        class: classnames('bio-properties-panel-list-entry-header-title', open && 'open'),\n        children: label\n      }), jsxs(\"div\", {\n        class: \"bio-properties-panel-list-entry-header-buttons\",\n        children: [jsxs(\"button\", {\n          type: \"button\",\n          title: \"Create new list item\",\n          onClick: addItem,\n          class: \"bio-properties-panel-add-entry\",\n          children: [jsx(CreateIcon, {}), !hasItems ? jsx(\"span\", {\n            class: \"bio-properties-panel-add-entry-label\",\n            children: \"Create\"\n          }) : null]\n        }), hasItems && jsx(\"div\", {\n          title: `List contains ${items.length} item${items.length != 1 ? 's' : ''}`,\n          class: \"bio-properties-panel-list-badge\",\n          children: items.length\n        }), hasItems && jsx(\"button\", {\n          type: \"button\",\n          title: \"Toggle list item\",\n          class: \"bio-properties-panel-arrow\",\n          children: jsx(ArrowIcon, {\n            class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n          })\n        })]\n      })]\n    }), hasItems && jsx(ItemsList, {\n      ...restProps,\n      autoFocusEntry: autoFocusEntry,\n      component: component,\n      element: element,\n      id: id,\n      items: items,\n      newItems: newItems,\n      onRemove: onRemove,\n      open: open\n    })]\n  });\n}\nfunction ItemsList(props) {\n  const {\n    autoFocusEntry,\n    component: Component,\n    element,\n    id,\n    items,\n    newItems,\n    onRemove,\n    open,\n    ...restProps\n  } = props;\n  const getKey = useKeyFactory();\n  const newItem = newItems[0];\n  useEffect(() => {\n    if (newItem && autoFocusEntry) {\n      // (0) select the parent entry (containing all list items)\n      const entry = query(`[data-entry-id=\"${id}\"]`);\n\n      // (1) select the first input or a custom element to be focussed\n      const selector = typeof autoFocusEntry === 'boolean' ? '.bio-properties-panel-input' : autoFocusEntry;\n      const focusableInput = query(selector, entry);\n\n      // (2) set focus\n      if (focusableInput) {\n        if (isFunction(focusableInput.select)) {\n          focusableInput.select();\n        } else if (isFunction(focusableInput.focus)) {\n          focusableInput.focus();\n        }\n      }\n    }\n  }, [newItem, autoFocusEntry, id]);\n  return jsx(\"ol\", {\n    class: classnames('bio-properties-panel-list-entry-items', open ? 'open' : ''),\n    children: items.map((item, index) => {\n      const key = getKey(item);\n      return jsxs(\"li\", {\n        class: \"bio-properties-panel-list-entry-item\",\n        children: [jsx(Component, {\n          ...restProps,\n          element: element,\n          id: id,\n          index: index,\n          item: item,\n          open: item === newItem\n        }), onRemove && jsx(\"button\", {\n          type: \"button\",\n          title: \"Delete item\",\n          class: \"bio-properties-panel-remove-entry bio-properties-panel-remove-list-entry\",\n          onClick: () => onRemove && onRemove(item),\n          children: jsx(DeleteIcon, {})\n        })]\n      }, key);\n    })\n  });\n}\nfunction useNewItems(items = [], shouldReset) {\n  const previousItems = usePrevious(items.slice()) || [];\n  if (shouldReset) {\n    return [];\n  }\n  return previousItems ? items.filter(item => !previousItems.includes(item)) : [];\n}\n\nfunction Select(props) {\n  const {\n    id,\n    label,\n    onChange,\n    options = [],\n    value = '',\n    disabled,\n    onFocus,\n    onBlur,\n    tooltip\n  } = props;\n  const ref = useShowEntryEvent(id);\n  const [localValue, setLocalValue] = useState(value);\n  const handleChangeCallback = ({\n    target\n  }) => {\n    onChange(target.value);\n  };\n  const handleChange = e => {\n    handleChangeCallback(e);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-select\",\n    children: [jsx(\"label\", {\n      for: prefixId$3(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"select\", {\n      ref: ref,\n      id: prefixId$3(id),\n      name: id,\n      class: \"bio-properties-panel-input\",\n      onInput: handleChange,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      value: localValue,\n      disabled: disabled,\n      children: options.map((option, idx) => {\n        if (option.children) {\n          return jsx(\"optgroup\", {\n            label: option.label,\n            children: option.children.map((child, idx) => jsx(\"option\", {\n              value: child.value,\n              disabled: child.disabled,\n              children: child.label\n            }, idx))\n          }, idx);\n        }\n        return jsx(\"option\", {\n          value: option.value,\n          disabled: option.disabled,\n          children: option.label\n        }, idx);\n      })\n    })]\n  });\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.getOptions\n * @param {boolean} [props.disabled]\n * @param {Function} [props.validate]\n * @param {string|import('preact').Component} props.tooltip\n */\nfunction SelectEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    label,\n    getValue,\n    setValue,\n    getOptions,\n    disabled,\n    onFocus,\n    onBlur,\n    validate,\n    tooltip\n  } = props;\n  const options = getOptions(element);\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onChange = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(Select, {\n      id: id,\n      label: label,\n      value: value,\n      onChange: onChange,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      options: options,\n      disabled: disabled,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$3(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$3(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nfunction Simple(props) {\n  const {\n    debounce,\n    disabled,\n    element,\n    getValue,\n    id,\n    onBlur,\n    onFocus,\n    setValue\n  } = props;\n  const value = getValue(element);\n  const [localValue, setLocalValue] = useState(value);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => setValue(target.value.length ? target.value : undefined));\n  }, [setValue, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsx(\"div\", {\n    class: \"bio-properties-panel-simple\",\n    children: jsx(\"input\", {\n      id: prefixId$2(id),\n      type: \"text\",\n      name: id,\n      spellCheck: \"false\",\n      autoComplete: \"off\",\n      disabled: disabled,\n      class: \"bio-properties-panel-input\",\n      onInput: handleInput,\n      \"aria-label\": localValue || '<empty>',\n      onFocus: onFocus,\n      onBlur: onBlur,\n      value: localValue\n    }, element)\n  });\n}\nfunction isEdited$2(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$2(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nfunction resizeToContents(element) {\n  element.style.height = 'auto';\n\n  // a 2px pixel offset is required to prevent scrollbar from\n  // appearing on OS with a full length scroll bar (Windows/Linux)\n  element.style.height = `${element.scrollHeight + 2}px`;\n}\nfunction TextArea(props) {\n  const {\n    id,\n    label,\n    debounce,\n    onInput,\n    value = '',\n    disabled,\n    monospace,\n    onFocus,\n    onBlur,\n    autoResize,\n    placeholder,\n    rows = autoResize ? 1 : 2,\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value);\n  const ref = useShowEntryEvent(id);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => onInput(target.value.length ? target.value : undefined));\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    autoResize && resizeToContents(e.target);\n    setLocalValue(e.target.value);\n  };\n  useLayoutEffect(() => {\n    autoResize && resizeToContents(ref.current);\n  }, []);\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-textarea\",\n    children: [jsx(\"label\", {\n      for: prefixId$1(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"textarea\", {\n      ref: ref,\n      id: prefixId$1(id),\n      name: id,\n      spellCheck: \"false\",\n      class: classnames('bio-properties-panel-input', monospace ? 'bio-properties-panel-input-monospace' : '', autoResize ? 'auto-resize' : ''),\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      rows: rows,\n      value: localValue,\n      disabled: disabled,\n      \"data-gramm\": \"false\"\n    })]\n  });\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} props.description\n * @param {boolean} props.debounce\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {number} props.rows\n * @param {boolean} props.monospace\n * @param {Function} [props.validate]\n * @param {boolean} [props.disabled]\n */\nfunction TextAreaEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    label,\n    getValue,\n    setValue,\n    rows,\n    monospace,\n    disabled,\n    validate,\n    onFocus,\n    onBlur,\n    placeholder,\n    autoResize,\n    tooltip\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(TextArea, {\n      id: id,\n      label: label,\n      value: value,\n      onInput: onInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      rows: rows,\n      debounce: debounce,\n      monospace: monospace,\n      disabled: disabled,\n      placeholder: placeholder,\n      autoResize: autoResize,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited$1(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$1(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nfunction Textfield(props) {\n  const {\n    debounce,\n    disabled = false,\n    id,\n    label,\n    onInput,\n    onFocus,\n    onBlur,\n    placeholder,\n    value = '',\n    tooltip\n  } = props;\n  const [localValue, setLocalValue] = useState(value || '');\n  const ref = useShowEntryEvent(id);\n  const handleInputCallback = useMemo(() => {\n    return debounce(target => onInput(target.value.length ? target.value : undefined));\n  }, [onInput, debounce]);\n  const handleInput = e => {\n    handleInputCallback(e.target);\n    setLocalValue(e.target.value);\n  };\n  useEffect(() => {\n    if (value === localValue) {\n      return;\n    }\n    setLocalValue(value);\n  }, [value]);\n  return jsxs(\"div\", {\n    class: \"bio-properties-panel-textfield\",\n    children: [jsx(\"label\", {\n      for: prefixId(id),\n      class: \"bio-properties-panel-label\",\n      children: jsx(TooltipWrapper, {\n        value: tooltip,\n        forId: id,\n        element: props.element,\n        children: label\n      })\n    }), jsx(\"input\", {\n      ref: ref,\n      id: prefixId(id),\n      type: \"text\",\n      name: id,\n      spellCheck: \"false\",\n      autoComplete: \"off\",\n      disabled: disabled,\n      class: \"bio-properties-panel-input\",\n      onInput: handleInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      value: localValue\n    })]\n  });\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {Function} props.validate\n */\nfunction TextfieldEntry(props) {\n  const {\n    element,\n    id,\n    description,\n    debounce,\n    disabled,\n    label,\n    getValue,\n    setValue,\n    validate,\n    onFocus,\n    onBlur,\n    placeholder,\n    tooltip\n  } = props;\n  const globalError = useError(id);\n  const [localError, setLocalError] = useState(null);\n  let value = getValue(element);\n  useEffect(() => {\n    if (isFunction(validate)) {\n      const newValidationError = validate(value) || null;\n      setLocalError(newValidationError);\n    }\n  }, [value, validate]);\n  const onInput = newValue => {\n    let newValidationError = null;\n    if (isFunction(validate)) {\n      newValidationError = validate(newValue) || null;\n    }\n    setValue(newValue, newValidationError);\n    setLocalError(newValidationError);\n  };\n  const error = globalError || localError;\n  return jsxs(\"div\", {\n    class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),\n    \"data-entry-id\": id,\n    children: [jsx(Textfield, {\n      debounce: debounce,\n      disabled: disabled,\n      id: id,\n      label: label,\n      onInput: onInput,\n      onFocus: onFocus,\n      onBlur: onBlur,\n      placeholder: placeholder,\n      value: value,\n      tooltip: tooltip,\n      element: element\n    }, element), error && jsx(\"div\", {\n      class: \"bio-properties-panel-error\",\n      children: error\n    }), jsx(Description, {\n      forId: id,\n      element: element,\n      value: description\n    })]\n  });\n}\nfunction isEdited(node) {\n  return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n  return `bio-properties-panel-${id}`;\n}\n\nconst DEFAULT_DEBOUNCE_TIME = 300;\nfunction debounceInput(debounceDelay) {\n  return function _debounceInput(fn) {\n    if (debounceDelay !== false) {\n      var debounceTime = isNumber(debounceDelay) ? debounceDelay : DEFAULT_DEBOUNCE_TIME;\n      return debounce(fn, debounceTime);\n    } else {\n      return fn;\n    }\n  };\n}\ndebounceInput.$inject = ['config.debounceInput'];\n\nvar index$1 = {\n  debounceInput: ['factory', debounceInput]\n};\n\nclass FeelPopupModule {\n  constructor(eventBus) {\n    this._eventBus = eventBus;\n  }\n\n  /**\n   * Check if the FEEL popup is open.\n   * @return {Boolean}\n   */\n  isOpen() {\n    return this._eventBus.fire('feelPopup._isOpen');\n  }\n\n  /**\n   * Open the FEEL popup.\n   *\n   * @param {String} entryId\n   * @param {Object} popupConfig\n   * @param {HTMLElement} sourceElement\n   */\n  open(entryId, popupConfig, sourceElement) {\n    return this._eventBus.fire('feelPopup._open', {\n      entryId,\n      popupConfig,\n      sourceElement\n    });\n  }\n\n  /**\n   * Close the FEEL popup.\n   */\n  close() {\n    return this._eventBus.fire('feelPopup._close');\n  }\n}\nFeelPopupModule.$inject = ['eventBus'];\n\nvar index = {\n  feelPopup: ['type', FeelPopupModule]\n};\n\nexport { ArrowIcon, CheckboxEntry, CloseIcon, CollapsibleEntry, CreateIcon, index$1 as DebounceInputModule, DeleteIcon, DescriptionContext, Description as DescriptionEntry, DragIcon, DropdownButton, ErrorsContext, EventContext, ExternalLinkIcon, FeelCheckboxEntry, FeelEntry, FeelIcon$1 as FeelIcon, FeelNumberEntry, index as FeelPopupModule, FeelTemplatingEntry, FeelTextAreaEntry, FeelToggleSwitchEntry, Group, Header, HeaderButton, HelpIcon, LayoutContext, List as ListEntry, ListGroup, ListItem, NumberFieldEntry, Placeholder, Popup, PopupIcon, PropertiesPanel, LayoutContext as PropertiesPanelContext, SelectEntry, Simple as SimpleEntry, TemplatingEntry, TextAreaEntry, TextfieldEntry as TextFieldEntry, ToggleSwitchEntry, TooltipContext, TooltipWrapper as TooltipEntry, isEdited$5 as isCheckboxEntryEdited, isEdited$6 as isFeelEntryEdited, isEdited$7 as isNumberFieldEntryEdited, isEdited$3 as isSelectEntryEdited, isEdited$2 as isSimpleEntryEdited, isEdited$4 as isTemplatingEntryEdited, isEdited$1 as isTextAreaEntryEdited, isEdited as isTextFieldEntryEdited, isEdited$8 as isToggleSwitchEntryEdited, useDescriptionContext, useError, useErrors, useEvent, useKeyFactory, useLayoutState, usePrevious, useShowEntryEvent, useStaticCallback, useStickyIntersectionObserver, useTooltipContext };\n//# sourceMappingURL=index.esm.js.map\n","import { get, set } from \"min-dash\";\nimport {\n  NumberFieldEntry,\n  isNumberFieldEntryEdited,\n} from \"@bpmn-io/properties-panel\";\nimport { html } from \"diagram-js/lib/ui\";\n\n/*\n * This is a custom properties provider for the properties panel.\n * It adds a new group `Range` with range specific properties.\n */\nexport class RangePropertiesProvider {\n  constructor(propertiesPanel) {\n    propertiesPanel.registerProvider(this, 500);\n  }\n\n  //#region Function\n  /**\n   * Return the groups provided for the given field.\n   *\n   * @param {any} field\n   * @param {function} editField\n   *\n   * @return {(Object[]) => (Object[])} groups middleware\n   */\n  getGroups(field, editField) {\n    /**\n     * We return a middleware that modifies\n     * the existing groups.\n     *\n     * @param {Object[]} groups\n     *\n     * @return {Object[]} modified groups\n     */\n    return (groups) => {\n      if (field.type !== \"range\") {\n        return groups;\n      }\n\n      const generalIdx = findGroupIdx(groups, \"general\");\n\n      /* insert range group after general */\n      groups.splice(generalIdx + 1, 0, {\n        id: \"range\",\n        label: \"Range\",\n        entries: RangeEntries(field, editField),\n      });\n\n      return groups;\n    };\n  }\n}\n\nRangePropertiesProvider.$inject = [\"propertiesPanel\"];\n\n/*\n * collect range entries for our custom group\n */\nfunction RangeEntries(field, editField) {\n  const onChange = (key) => {\n    return (value) => {\n      const range = get(field, [\"range\"], {});\n\n      editField(field, [\"range\"], set(range, [key], value));\n    };\n  };\n\n  const getValue = (key) => {\n    return () => {\n      return get(field, [\"range\", key]);\n    };\n  };\n\n  return [\n    {\n      id: \"range-min\",\n      component: Min,\n      getValue,\n      field,\n      isEdited: isNumberFieldEntryEdited,\n      onChange,\n    },\n    {\n      id: \"range-max\",\n      component: Max,\n      getValue,\n      field,\n      isEdited: isNumberFieldEntryEdited,\n      onChange,\n    },\n    {\n      id: \"range-step\",\n      component: Step,\n      getValue,\n      field,\n      isEdited: isNumberFieldEntryEdited,\n      onChange,\n    },\n  ];\n}\n\nfunction Min(props) {\n  const { field, getValue, id, onChange } = props;\n\n  const debounce = (fn) => fn;\n\n  return html`<${NumberFieldEntry}\n    id=${id}\n    element=${field}\n    getValue=${getValue(\"min\")}\n    label=\"Minimum\"\n    setValue=${onChange(\"min\")}\n    debounce=${debounce}\n  />`;\n}\n\nfunction Max(props) {\n  const { field, getValue, id, onChange } = props;\n\n  const debounce = (fn) => fn;\n\n  return html`<${NumberFieldEntry}\n    id=${id}\n    element=${field}\n    getValue=${getValue(\"max\")}\n    label=\"Maximum\"\n    setValue=${onChange(\"max\")}\n    debounce=${debounce}\n  />`;\n}\n\nfunction Step(props) {\n  const { field, getValue, id, onChange } = props;\n\n  const debounce = (fn) => fn;\n\n  return html`<${NumberFieldEntry}\n    id=${id}\n    element=${field}\n    getValue=${getValue(\"step\")}\n    min=${0}\n    label=\"Step\"\n    setValue=${onChange(\"step\")}\n    debounce=${debounce}\n  />`;\n}\n\nfunction findGroupIdx(groups, id) {\n  return groups.findIndex((g) => g.id === id);\n}\n","import { get, set } from \"min-dash\";\nimport {\n  NumberFieldEntry,\n  isNumberFieldEntryEdited,\n  FeelTemplatingEntry\n} from \"@bpmn-io/properties-panel\";\nimport { html } from \"diagram-js/lib/ui\";\n\nexport class PlotterPropertiesProvider {\n  constructor(propertiesPanel) {\n    propertiesPanel.registerProvider(this, 500);\n  }\n\n  //#region Function\n  getGroups(field, editField) {\n    return (groups) => {\n      if (field.type !== \"plotter\") {\n        return groups;\n      }\n\n      const layoutGroup = groups.find((item) => item.id === \"layout\");\n      if (layoutGroup) {\n        layoutGroup.entries = [\n          ...layoutGroup.entries,\n          ...PlotterEntries(field, editField),\n        ];\n      }\n\n      return groups;\n    };\n  }\n  //#endregion\n}\n\nPlotterPropertiesProvider.$inject = [\"propertiesPanel\"];\n\n// #region Function\nfunction PlotterEntries(field, editField) {\n  const onChange = (key) => {\n    return (value) => {\n      const plotter = get(field, [\"plotter\"], {});\n\n      editField(field, [\"plotter\"], set(plotter, [key], value));\n    };\n  };\n\n  const getValue = (key) => {\n    return () => {\n      return get(field, [\"plotter\", key]);\n    };\n  };\n\n  return [\n    // {\n    //   id: \"plotter-height\",\n    //   component: Height,\n    //   getValue,\n    //   field,\n    //   isEdited: isNumberFieldEntryEdited,\n    //   onChange,\n    // },\n    {\n      id: \"plotter-add-model\",\n      component: AddModel,\n      getValue,\n      field,\n      onChange\n    }\n  ];\n}\n\nfunction Height(props) {\n  const { field, getValue, id, onChange } = props;\n\n  const debounce = (fn) => fn;\n\n  return html`<${NumberFieldEntry}\n    id=${id}\n    element=${field}\n    getValue=${getValue(\"height\")}\n    min=${600}\n    label=\"Height\"\n    setValue=${onChange(\"height\")}\n    value=${600}\n    debounce=${debounce}\n  />`;\n}\n\nfunction AddModel(props) {\n  const { field, id, getValue, onChange, show } = props;\n\n  const debounce = (fn) => fn;\n\n  return html`<${FeelTemplatingEntry}\n    element=${field}\n    id=${id}\n    label=\"Add model\"\n    debounce=${debounce}\n    getValue=${getValue(\"model\")}\n    setValue=${onChange(\"model\")}\n  />`;\n}\n\nfunction findGroupIdx(groups, id) {\n  return groups.findIndex((g) => g.id === id);\n}\n// #endregion\n","import {get, set } from 'min-dash';\nimport { TextFieldEntry, SelectEntry } from '@bpmn-io/properties-panel';\nimport { html } from 'diagram-js/lib/ui';\n\nexport class DictionaryAttributesPropertiesProvider {\n    constructor(propertiesPanel) {\n        propertiesPanel.registerProvider(this, 500);\n    }\n\n    //#region Function\n    /**\n     * Return the groups provided for the given field.\n     *\n     * @param {any} field\n     * @param {function} editField\n     *\n     * @return {(Object[]) => (Object[])} groups middleware\n     */\n    getGroups(field, editField) {\n        /**\n         * We return a middleware that modifies\n         * the existing groups.\n         *\n         * @param {Object[]} groups\n         *\n         * @return {Object[]} modified groups\n         */\n        return (groups) => {\n\n            if (field.type === 'range') {\n                return groups;\n            }\n\n            if (field.customSettingsDictionary !== undefined) {\n                const type = get(field, ['type']);\n                const generalIdx = findGroupIdx(groups, 'general');\n                const typeCompute = {\n                    'string': ['textfield', 'textarea'],\n                    'number': ['number'],\n                    'boolean': ['checkbox'],\n                    'Date': ['datetime'],\n                    'ref': ['select']\n                }\n                const indexVal = get(field, ['customDictionaryFields']).findIndex(element => {\n                    // check type in dictionary-attributes and type in forms\n                    const isValid = typeCompute[element.type].includes(type);\n                    return isValid;\n                });\n                if (indexVal !== -1) {\n                    /* insert dictionary-attributes group after general */\n                    groups.splice(generalIdx + 1, 0, {\n                        id: 'datafield',\n                        label: 'Data Field',\n                        entries: DictionaryAttributesEntries(field, editField)\n                    });\n                }\n\n                return groups;\n            } else {\n                return groups;\n            }\n\n        };\n    }\n}\n\nDictionaryAttributesPropertiesProvider.$inject = ['propertiesPanel'];\n\nfunction DictionaryAttributesEntries(field, editField) {\n    let refDictionary = '';\n    let refDictionaryField = '';\n    let typeDictionaryField = '';\n    let fieldNameDictionary = '';\n\n    const getValue = (key) => {\n        return () => {\n            const fieldName = get(field, ['fieldNameDictionary']);\n            const indexVal = get(field, [key]).findIndex(element => element.value === fieldName);\n            if (indexVal !== -1) {\n                if (get(field, ['fieldNameDictionary']) !== undefined) fieldNameDictionary = get(field, ['fieldNameDictionary']);\n                if (get(field, ['refDictionary']) !== undefined) refDictionary = get(field, ['refDictionary']);\n                if (get(field, ['refDictionaryField']) !== undefined) refDictionaryField = get(field, ['refDictionaryField']);\n                if (get(field, ['typeDictionaryField']) !== undefined) typeDictionaryField = get(field, ['typeDictionaryField']);\n                return fieldName;\n            };\n        };\n    };\n\n    const getOptions = (key) => {\n        const types = get(field, ['type']);\n        let arrElement = [];\n        const typeCompute = {\n            'string': ['textfield', 'textarea'],\n            'number': ['number'],\n            'boolean': ['checkbox'],\n            'Date': ['datetime'],\n            'ref': ['select']\n        }\n        get(field, ['customDictionaryFields']).map(element => {\n            typeCompute[element.type].includes(types) ? arrElement.push({ value: element.name, label: element.name }) : null;\n        });\n        return () => {\n            return arrElement\n        };\n    };\n\n    const setValue = (key) => {\n        return (value) => {\n            editField(field, set(field, [key], value));\n            editField(field, set(field, ['fieldNameDictionary'], value));\n            const fieldName = get(field, ['fieldNameDictionary']);\n            const types = get(field, ['type']);\n            const indexVal = get(field, ['customDictionaryFields']).findIndex(element => element.name === fieldName);\n            if (indexVal !== -1) {\n                const indexRefDictionary = get(field, ['customDictionaryFields']).findIndex(element => element.ref !== undefined && element.name === fieldName && types === 'select');\n                if (indexRefDictionary === -1) {\n                    refDictionary = '';\n                    refDictionaryField = '';\n                    editField(field, set(field, ['refDictionary'], refDictionary)); // Editing a field with the addition of {refDictionary, refDictionaryField} parameter\n                    editField(field, set(field, ['refDictionaryField'], refDictionaryField));\n                } else {\n                    get(field, ['customDictionaryFields']).map(el => {\n                        if (el.ref !== undefined && el.ref !== undefined && el.name === fieldName) {\n                            refDictionary = el.ref;\n                            refDictionaryField = el.field;\n                            editField(field, set(field, ['refDictionary'], refDictionary));\n                            editField(field, set(field, ['refDictionaryField'], refDictionaryField));\n                        }\n                    });\n                }\n                get(field, ['customDictionaryFields']).map(elem => {\n                    if (elem.name === fieldName) {\n                        typeDictionaryField = elem.type;\n                        editField(field, set(field, ['typeDictionaryField'], typeDictionaryField));\n                    };\n                });\n            }\n        }\n    };\n\n    const getValueTypeDictionary = (key) => {\n        return () => {\n            return typeDictionaryField;\n        }\n    }\n\n    const getValueDictRef = (key) => {\n        return () => {\n            return refDictionary;\n        }\n    }\n\n    const getValueDictRefField = (key) => {\n        return () => {\n            return refDictionaryField;\n        }\n    }\n\n    const getDictionaryOutputTable = () => {\n        const types = get(field, ['type']);\n        if (types === 'select') {\n            return [{\n                id: 'select-dictionary-field',\n                component: selectDictionaryFieldComponent,\n                field,\n                label: 'Dictionary fields',\n                getOptions,\n                getValue,\n                setValue,\n            }, {\n                id: 'textfield-dictionary-type',\n                component: dictionaryFieldType,\n                field,\n                label: 'Field dictionary type',\n                getValueTypeDictionary,\n                disabled: 'true',\n            }, {\n                id: 'textfield-dictionary-ref',\n                component: dictionaryRef,\n                field,\n                label: 'Name Dictionary ref',\n                getValueDictRef,\n                disabled: 'true',\n            }, {\n                id: 'textfield-dictionary-ref-field',\n                component: dictionaryRefField,\n                field,\n                label: 'Field Dictionary ref',\n                getValueDictRefField,\n                disabled: 'true',\n            }]\n        } else {\n            return [{\n                id: 'select-dictionary-field',\n                component: selectDictionaryFieldComponent,\n                field,\n                label: 'Dictionary fields',\n                getOptions,\n                getValue,\n                setValue,\n            }, {\n                id: 'textfield-dictionary-type',\n                component: dictionaryFieldType,\n                field,\n                label: 'Field dictionary type',\n                getValueTypeDictionary,\n                disabled: 'true',\n            }]\n        }\n\n    }\n\n    return getDictionaryOutputTable();\n}\n\nfunction selectDictionaryFieldComponent(props) {\n    const {\n        id,\n        field,\n        label,\n        element,\n        getOptions,\n        getValue,\n        setValue,\n    } = props;\n\n    return html `<${SelectEntry}\n    id=${id}\n    element=${field}\n    label=${label}\n    value='name'\n    getOptions=${getOptions('customDictionarySelect')}\n    getValue=${getValue('customDictionarySelect')}\n    setValue=${setValue('label')}\n    />`;\n    // return html `<label for=\"bio-properties-panel-columns\" class=\"bio-properties-panel-label\">Dictionary fields</label><select id=\"bio-properties-panel-columns\" name=\"columns\" class=\"bio-properties-panel-input\"><option value=\"\">name</option><option value=\"2\">TestExit1</option></select>`\n}\n\nfunction dictionaryFieldType(props) {\n    const {\n        id,\n        label,\n        field,\n        disabled,\n        element,\n        getValueTypeDictionary,\n    } = props;\n\n    const debounce = (fn) => fn;\n\n    return html `<${TextFieldEntry}\n    id=${id}\n    label=${label}\n    element=${ field }\n    getValue=${getValueTypeDictionary('type')}\n    disabled=${disabled}\n    debounce=${ debounce }\n    />`;\n}\n\nfunction dictionaryRef(props) {\n    const {\n        id,\n        label,\n        field,\n        disabled,\n        element,\n        getValueDictRef,\n    } = props;\n\n    const debounce = (fn) => fn;\n\n    return html `<${TextFieldEntry}\n    id=${id}\n    label=${label}\n    element=${ field }\n    getValue=${getValueDictRef('ref')}\n    disabled=${disabled}\n    debounce=${ debounce }\n    />`;\n}\n\nfunction dictionaryRefField(props) {\n    const {\n        id,\n        label,\n        field,\n        disabled,\n        element,\n        getValueDictRefField,\n    } = props;\n\n    const debounce = (fn) => fn;\n\n    return html `<${TextFieldEntry}\n    id=${id}\n    label=${label}\n    element=${ field }\n    getValue=${getValueDictRefField('field')}\n    disabled=${disabled}\n    debounce=${ debounce }\n    />`;\n}\n\nexport const propertiesPanelExtension = {\n    __init__: ['dictionaryAttributesPropertiesProvider'],\n    dictionaryAttributesPropertiesProvider: ['type', DictionaryAttributesPropertiesProvider]\n};\n\nfunction findGroupIdx(groups, id) {\n    return groups.findIndex(g => g.id === id);\n}","import { RangePropertiesProvider } from \"./range\";\nimport { PlotterPropertiesProvider } from \"./plotter\";\nimport { DictionaryAttributesPropertiesProvider } from \"./dictionary-attributes\";\n\nexport const PropertiesPanelExtension = {\n  __init__: [\n    \"rangePropertiesProvider\",\n    \"dictionaryAttributesPropertiesProvider\",\n    \"plotterPropertiesProvider\",\n  ],\n  rangePropertiesProvider: [\"type\", RangePropertiesProvider],\n  dictionaryAttributesPropertiesProvider: [\n    \"type\",\n    DictionaryAttributesPropertiesProvider,\n  ],\n  plotterPropertiesProvider: [\"type\", PlotterPropertiesProvider],\n};\n","import { RenderExtension, PropertiesPanelExtension } from \"../custom\";\n\nclass BaseForm {\n  constructor(FormClass, options, type, isAdditionalModules = true) {\n    if (isAdditionalModules) {\n      options.additionalModules = [\n        ...(options.additionalModules || []),\n        RenderExtension,\n      ];\n      if (type !== \"Form\") {\n        options.additionalModules.push(PropertiesPanelExtension);\n      }\n    }\n    this.customForm = new FormClass(options);\n  }\n\n  importSchema(schema, data) {\n    return this.customForm.importSchema(schema, data);\n  }\n\n  saveSchema() {\n    console.info(\"Saving schema...\");\n    // saveSchema может отсутствовать в Form, поэтому проверим его наличие\n    const result = this.customForm.saveSchema\n      ? this.customForm.saveSchema()\n      : null;\n    console.info(\"Schema saved:\", result);\n    return result;\n  }\n\n  on(event, ...args) {\n    // Унифицируем метод on для обработки возможной перегрузки\n    if (typeof args[0] === \"function\") {\n      this.customForm.on(event, args[0]); // Только колбэк\n    } else {\n      this.customForm.on(event, args[0], args[1]); // Приоритет и колбэк\n    }\n  }\n}\n\nexport default BaseForm;\n","import { FormEditor as FE } from \"@bpmn-io/form-js\";\nimport BaseForm from \"./base-form\";\n\nexport class FormEditor extends BaseForm {\n  constructor(options, isAdditionalModules = true) {\n    super(FE, options, \"FormEditor\", isAdditionalModules);\n  }\n}\n\nexport default FormEditor;\n","import { Form as F } from \"@bpmn-io/form-js\";\nimport BaseForm from \"./base-form\";\n\nexport class Form extends BaseForm {\n  constructor(options, isAdditionalModules = true) {\n    super(F, options, \"Form\", isAdditionalModules);\n  }\n}\n\nexport default Form;\n"],"names":["hat_1","fn","module","exports","createCommonjsModule","hat","bits","base","undefined","digits","Math","log","pow","i","Infinity","rem","floor","res","random","toString","b","parsed","parseInt","rack","expandBy","data","iters","Error","id","Object","hasOwnProperty","call","hats","get","set","value","Ids","seed","this","_seed","length","prototype","next","element","nextPrefixed","prefix","assigned","claim","unclaim","clear","nativeToString","nativeHasOwnProperty","isUndefined","obj","isDefined","isNil","isArray","isObject","isNumber","isFunction","tag","isString","has","target","key","forEach","collection","iterator","val","result","convertKey","toNum","identity","without","arr","matcher","ensureArray","matchFn","toMatcher","filter","el","idx","some","match","find","map","push","groupBy","extractor","grouped","toExtractor","discriminator","group","uniqueBy","collections","c","e","arg","Number","bind","assign","others","path","currentTarget","nextKey","nextTarget","isNaN","defaultValue","MAX_DP","MAX_POWER","NAME","INVALID","INVALID_DP","INVALID_RM","DIV_BY_ZERO","P","UNDEFINED","NUMERIC","round","x","sd","rm","more","xc","constructor","RM","unshift","pop","stringify","doExponential","isNonzero","s","join","n","charAt","slice","abs","cmp","y","isneg","yc","j","k","l","div","Big","a","dp","DP","bl","bt","ri","bz","ai","al","r","rl","q","qc","qi","p","shift","eq","gt","gte","lt","lte","minus","sub","t","xlty","plus","xe","ye","reverse","mod","ygtx","times","neg","add","one","prec","sqrt","half","toExponential","indexOf","mul","Array","toFixed","Symbol","for","toJSON","NE","PE","toNumber","strict","toPrecision","valueOf","_Big_","TypeError","String","nl","test","replace","search","substring","parse","roundDown","roundHalfUp","roundHalfEven","roundUp","hasOwn","classNames","classes","arguments","appendClass","parseValue","apply","includes","newClass","default","window","u","o","f","h","v","d","_","parentNode","removeChild","g","children","defaultProps","type","props","ref","__k","__","__b","__e","__d","__c","__v","__i","__u","vnode","w","context","C","S","__r","debounceRendering","sort","__P","O","__n","ownerSVGElement","$","I","N","isConnected","H","nextSibling","A","insertBefore","nodeType","T","F","setProperty","L","style","cssText","toLowerCase","addEventListener","removeEventListener","removeAttribute","setAttribute","M","event","m","contextType","__E","render","B","state","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","localName","document","createTextNode","createElementNS","createElement","is","childNodes","attributes","name","__html","innerHTML","z","diffed","current","unmount","componentWillUnmount","D","firstChild","J","Consumer","Provider","splice","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","then","resolve","setTimeout","__source","__self","__H","__V","__N","every","__m","requestAnimationFrame","clearTimeout","cancelAnimationFrame","_listCacheClear","__data__","size","eq_1","other","require$$0","_assocIndexOf","array","assocIndexOf","_listCacheDelete","index","_listCacheGet","_listCacheSet","listCacheClear","listCacheDelete","require$$1","listCacheGet","require$$2","listCacheHas","listCacheSet","require$$4","ListCache","entries","entry","_ListCache","_stackClear","_stackDelete","_stackGet","_stackHas","_freeGlobal","global","freeGlobal","freeSelf","self","_root","Function","_Symbol","objectProto","nativeObjectToString","symToStringTag","toStringTag","_getRawTag","isOwn","unmasked","getRawTag","objectToString","_baseGetTag","isObject_1","baseGetTag","uid","isFunction_1","coreJsData","maskSrcKey","exec","keys","IE_PROTO","_isMasked","func","funcToString","_toSource","isMasked","toSource","require$$3","reIsHostCtor","funcProto","reIsNative","RegExp","baseIsNative","getValue","object","_getNative","_Map","_nativeCreate","nativeCreate","_hashClear","_hashDelete","_hashGet","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","Map","_isKeyable","isKeyable","_getMapData","getMapData","mapCacheClear","hash","string","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","_MapCache","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","LARGE_ARRAY_SIZE","Stack","_Stack","setCacheAdd","setCacheHas","SetCache","values","_arraySome","predicate","arraySome","cacheHas","cache","_equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","_mapToArray","_setToArray","Uint8Array","equalArrays","mapToArray","setToArray","require$$5","symbolProto","symbolValueOf","_equalByTag","byteLength","byteOffset","buffer","message","convert","stacked","_arrayPush","offset","isArray_1","arrayPush","_baseGetAllKeys","keysFunc","symbolsFunc","_arrayFilter","resIndex","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","_getSymbols","symbol","_baseTimes","iteratee","isObjectLike_1","isObjectLike","baseIsArguments","isArguments_1","stubFalse_1","root","stubFalse","freeExports","freeModule","Buffer","isBuffer","reIsUint","_isIndex","isLength_1","isLength","typedArrayTags","_baseIsTypedArray","_baseUnary","freeProcess","process","nodeUtil","types","require","binding","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","isTypedArray_1","baseTimes","isArguments","isIndex","_arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","_isPrototype","Ctor","nativeKeys","transform","overArg","isPrototype","arrayLikeKeys","baseKeys","isArrayLike","baseGetAllKeys","getSymbols","getAllKeys","_equalObjects","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","DataView","Set","WeakMap","require$$6","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","equalByTag","equalObjects","require$$7","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","_baseIsEqual","baseIsEqual","HOOKS","defaults","_disable","allowInput","allowInvalidPreload","altFormat","altInput","altInputClass","animate","navigator","userAgent","ariaDateFormat","autoFillDefaultTime","clickOpens","closeOnSelect","conjunction","dateFormat","defaultHour","defaultMinute","defaultSeconds","disable","disableMobile","enableSeconds","enableTime","errorHandler","err","console","warn","getWeek","givenDate","date","Date","getTime","setHours","setDate","getDate","getDay","week1","getFullYear","hourIncrement","ignoredFocusElements","inline","locale","minuteIncrement","mode","monthSelectorType","nextArrow","noCalendar","now","onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","plugins","position","positionElement","prevArrow","shorthandCurrentMonth","showMonths","static","time_24hr","weekNumbers","wrap","english","weekdays","shorthand","longhand","months","daysInMonth","firstDayOfWeek","ordinal","nth","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","monthAriaLabel","hourAriaLabel","minuteAriaLabel","pad","number","int","bool","debounce","wait","_this","args","arrayify","toggleClass","elem","className","classList","remove","content","textContent","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","pattern","appendChild","getEventTarget","composedPath","error","doNothing","monthToStr","monthNumber","revFormat","dateObj","monthName","setMonth","G","hour","getHours","parseFloat","day","K","shortMonth","seconds","setSeconds","U","unixSeconds","W","weekNum","weekNumber","Y","year","setFullYear","Z","ISODate","minutes","setMinutes","month","unixMillSeconds","tokenRegex","formats","toISOString","options","getMonth","getSeconds","getMinutes","createDateFormatter","_a","_b","config","_c","l10n","_d","isMobile","frmt","overrideLocale","formatDate","split","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","trim","parseDate","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","compareDates","date1","date2","isBetween","ts","ts1","ts2","min","max","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","duration","DAY","getDefaultHours","minDate","minHour","minMinutes","minSeconds","maxDate","maxHr","maxMinutes","_i","_loop_1","source","args_1","__assign","__spreadArrays","il","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","instanceConfig","defaultOptions","flatpickr","defaultConfig","English","getClosestActiveElement","calendarContainer","getRootNode","activeElement","bindToInstance","setCalendarWidth","visibility","display","daysContainer","daysWidth","days","offsetWidth","width","weekWrapper","removeProperty","updateTime","selectedDates","defaultDate","getMilliseconds","latestSelectedDateObj","preventDefault","isKeyDown","eventTarget","input","getAttribute","step","curValue","delta","which","newValue","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","prevValue","_input","setHoursFromInputs","updateValue","_debouncedChange","secondElement","limitMinHours","minTime","minDateHasTime","limitMaxHours","maxTime","maxDateHasTime","minBound","maxBound","currentTime","setHoursFromDate","onYearInput","changeYear","handler","ev","_handlers","triggerChange","triggerEvent","jumpToDate","jumpDate","jumpTo","oldYear","currentYear","oldMonth","currentMonth","buildMonthSwitch","redraw","timeIncrement","contains","inputElem","createEvent","dispatchEvent","createDay","_dayNumber","dateIsEnabled","isEnabled","dayElement","$i","todayDateElem","tabIndex","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","focus","onMouseOver","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","focusOnDay","dayFocused","isInView","body","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","utils","getDaysInMonth","createDocumentFragment","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","buildDays","frag","shouldBuildMonth","monthsDropdownContainer","selected","buildMonth","monthElement","container","monthNavFragment","selectedMonth","yearInput","tabindex","yearElement","getElementsByTagName","disabled","buildMonths","monthNav","prevMonthNav","yearElements","monthElements","nextMonthNav","buildWeekdays","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","updateNavigationCurrentMonth","isCalendarElem","documentClick","isOpen","eventTarget_1","isCalendarElement","lostFocus","relatedTarget","isIgnored","timeContainer","close","newYear","newYearNum","isNewYear","dateToCheck","enable","from","to","onBlur","isInput","valueChanged","trimEnd","getDateStr","allowKeydown","allowInlineKeydown","keyCode","blur","open","isTimeObj","focusAndClose","selectDate","delta_1","ctrlKey","stopPropagation","currentYearElement","elems","concat","pluginElements","shiftKey","cellClass","hoverDate","firstElementChild","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","rContainer","querySelectorAll","dayElem","timestamp","outOfRange","onResize","positionCalendar","minMaxDateSetter","inverseDateObj","getInputElem","querySelector","setupLocale","l10ns","JSON","dataset","customPositionElement","_positionElement","calendarHeight","reduce","acc","child","offsetHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","getBoundingClientRect","distanceFromBottom","innerHeight","bottom","showOnTop","top","pageYOffset","left","pageXOffset","isCenter","isRight","right","rightMost","centerMost","doc","editableSheet","styleSheets","sheet","cssRules","head","getDocumentStyleSheet","bodyWidth","centerLeft","centerIndex","centerStyle","insertRule","centerBefore","msMaxTouchPoints","selectedDate","shouldChangeMonth","selectedIndex","single","range","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","mobileInput","_initialDate","_createElement","destroy","lastChild","_type","click","wasOpen","select","option","CALLBACKS","setSelectedDate","toggle","updatePositionElement","inputDate","dates","parseDateRules","rule","hooks","initEvent","specificFormat","dObj","mobileFormatStr","onMonthNavClick","isPrevMonth","isNextMonth","boolOpts","userConfig","defineProperty","_enable","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","hook","pluginConf","parseConfig","nodeName","placeholder","required","setupInputs","preloadedDate","setupDates","yr","fragment","__hidePrevMonthArrow","__hideNextMonthArrow","innerContainer","buildWeeks","separator","hourInput","minuteInput","military2ampm","secondInput","title","buildTime","customAppend","appendTo","build","evt","inputType","setupMobile","debouncedResize","ontouchstart","capture","selText","bindEvents","isSafari","init","_flatpickr","nodeList","nodes","HTMLElement","instances","HTMLCollection","NodeList","selector","Node","E","en","localize","setDefaults","jQuery","fp_incr","isPureReactComponent","__f","R","$$typeof","isReactComponent","displayName","__a","__R","__O","fallback","V","delete","revealOrder","containerInfo","configurable","writable","Q","cancelBubble","X","defaultPrevented","persist","isPropagationStopped","isDefaultPrevented","nativeEvent","tn","enumerable","class","multiple","rn","un","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","construct","Reflect","fun","thisValue","Func","arrayForEach","unapply","arrayPop","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_key","_len2","_key2","addToSet","transformCaseFunc","lcElement","cleanArray","clone","newObject","property","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","__proto__","NODE_TYPE","attribute","cdataSection","entityReference","entityNode","progressingInstruction","comment","documentType","documentFragment","notation","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","DOMPurify","version","removed","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","importNode","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","_removeAttribute","getAttributeNode","_initDocument","dirty","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","_sanitizeElements","allowedTags","_isBasicCustomElement","childClone","__removalCount","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","purify","factory","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","boolTag","dateTag","errorTag","funcTag","genTag","numberTag","regexpTag","stringTag","symbolTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsOctal","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","moduleExports","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","arrayAggregator","setter","accumulator","arrayEach","arrayEachRight","arrayEvery","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayReduce","initAccum","arrayReduceRight","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTrim","trimmedEndIndex","baseValues","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","replaceHolders","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","idCounter","objectCtorString","oldDash","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","ceil","nativeFloor","nativeIsBuffer","nativeIsFinite","isFinite","nativeJoin","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","metaMap","realNames","symbolToString","lodash","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","isDeep","isFlat","isFull","initCloneArray","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","copySymbols","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","subValue","getAllKeysIn","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","escape","evaluate","interpolate","variable","imports","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGt","baseHas","baseHasIn","baseIntersection","arrays","caches","maxLength","baseInvoke","last","othProps","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIteratee","baseMatchesProperty","baseMatches","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","comparer","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","flatten","otherFunc","hasPath","hasFunc","isMaskable","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","isError","isInteger","toArray","done","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNull","isSafeInteger","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","noConflict","strLength","padEnd","padStart","radix","floating","temp","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","toLower","toSafeInteger","toUpper","trimStart","truncate","omission","newEnd","unescape","uniqueId","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","CLASS_PATTERN","hasOwnProp","annotate","$inject","CONSTRUCTOR_ARGS","FN_ARGS","FN_ARG","parseAnnotations","isClass","argMatch","Injector","modules","_parent","currentlyResolving","providers","_providers","_instances","injector","msg","parts","pivot","fnDef","locals","dependencies","dep","instantiate","createPrivateInjectorFactory","childInjector","createChild","forceNewInstances","fromParentModule","matchedScopes","privateInjectorsCache","privateChildInjectors","privateChildFactories","provider","cacheIdx","privateChildInjector","privateChildInjectorFactory","$scope","scope","factoryMap","createInitializer","moduleDefinition","initializers","__init__","loadModule","__exports__","nestedModules","__modules__","clonedModule","privateInjector","getFromPrivateInjector","typeDeclaration","arrayUnwrap","resolveDependencies","moduleDefinitions","__depends__","initialized","bootstrap","LuxonError","InvalidDateTimeError","reason","super","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","ianaName","isUniversal","offsetName","formatOffset","equals","otherZone","isValid","singleton","SystemZone","instance","Intl","DateTimeFormat","resolvedOptions","timeZone","parseZoneInfo","getTimezoneOffset","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","resetCache","isValidSpecifier","isValidZone","zone","zoneName","valid","NaN","dtf","hour12","adOrBc","formatToParts","formatted","filled","pos","partsOffset","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","hackyOffset","asTS","objToLocalTS","millisecond","intlLFCache","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","weekInfoCache","listStuff","loc","englishFn","intlFn","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","getCachedINF","fixed","roundTo","PolyDateFormatter","dt","originalZone","gmtOffset","offsetZ","setZone","toJSDate","part","PolyRelFormatter","isEnglish","hasRelative","rtf","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","numeric","narrow","units","years","quarters","weeks","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","English.formatRelativeTime","fallbackWeekSettings","firstDay","minimalDays","weekend","Locale","fromOpts","numberingSystem","outputCalendar","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","uIndex","selectedStr","smaller","calendar","parseLocaleString","intlConfigString","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","isActuallyEn","hasNoWeirdness","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","English.months","formatStr","ms","DateTime","utc","mapMonths","extract","English.weekdays","mapWeekdays","meridiems","English.meridiems","eras","English.eras","field","matching","dtFormatter","numberFormatter","relFormatter","listFormatter","ListFormat","getCachedLF","getWeekSettings","hasLocaleWeekInfo","getWeekInfo","weekInfo","getCachedWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","FixedOffsetZone","utcInstance","parseSpecifier","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","throwOnInvalid","twoDigitCutoffYear","cutoffYear","resetCaches","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","month0","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","localWeekday","localWeekNumber","localWeekYear","hasInvalidGregorianData","validYear","validMonth","integerBetween","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","bestBy","by","compare","best","thing","padded","parseInteger","parseFloating","parseMillis","fraction","towardZero","factor","trunc","modMonth","floorMod","firstWeekOffset","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","normalized","sign","RangeError","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","literal","macroTokenToFormatOpts","Formats.DATE_SHORT","DD","Formats.DATE_MED","DDD","Formats.DATE_FULL","DDDD","Formats.DATE_HUGE","Formats.TIME_SIMPLE","tt","Formats.TIME_WITH_SECONDS","ttt","Formats.TIME_WITH_SHORT_OFFSET","tttt","Formats.TIME_WITH_LONG_OFFSET","Formats.TIME_24_SIMPLE","TT","Formats.TIME_24_WITH_SECONDS","TTT","Formats.TIME_24_WITH_SHORT_OFFSET","TTTT","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","ff","Formats.DATETIME_MED","fff","Formats.DATETIME_FULL","ffff","Formats.DATETIME_HUGE","Formats.DATETIME_SHORT_WITH_SECONDS","FF","Formats.DATETIME_MED_WITH_SECONDS","FFF","Formats.DATETIME_FULL_WITH_SECONDS","FFFF","Formats.DATETIME_HUGE_WITH_SECONDS","Formatter","parseFormat","fmt","currentFull","bracketed","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","formatRange","num","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","meridiem","English.meridiemForDateTime","English.monthForDateTime","English.weekdayForDateTime","maybeMacro","English.eraForDateTime","quarter","formatDurationFromString","dur","tokenToField","tokens","realTokens","found","collapsed","shiftTo","lildur","ianaRegex","combineRegexes","regexes","full","combineExtractors","extractors","mergedVals","mergedZone","cursor","ex","patterns","regex","simpleParse","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","English.monthsShort","English.weekdaysLong","English.weekdaysShort","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","normalizeValues","previousVal","conv","rollUp","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","parseISODuration","fromISOTime","parseISOTimeOnly","week","toFormat","fmtOpts","toHuman","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","invalidReason","mapUnits","reconfigure","as","normalize","rescale","newVals","removeZeroes","shiftToAll","built","accumulated","lastUnit","own","ak","negated","invalidExplanation","v1","v2","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isAfter","dateTime","isBefore","splitAt","dateTimes","sorted","results","added","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intervals","final","sofar","item","currentCount","ends","toLocaleString","toISODate","mapEndpoints","mapFn","Info","hasDST","isValidIANAZone","locObj","getMinimumDaysInFirstWeek","getWeekendWeekdays","monthsFormat","weekdaysFormat","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highWater","lowestOrder","differs","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","append","MISSING_FTP","intUnit","post","deser","str","code","parseDigits","spaceOrNBSP","fromCharCode","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","groups","simple","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","maybeExpandMacroToken","explainFromTokens","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","unitForToken","disqualifyingUnit","regexString","handlers","re","buildRegex","rawMatches","all","specificOffset","toField","dateTimeFromMatches","df","resolvedOpts","isSpace","actualType","tokenForPart","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","longFormat","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","normalizeUnitWithLocalWeeks","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","lastOpts","argList","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","gregorian","tsFinal","offsetFinal","parseISODate","fromRFC2822","preprocessRFC2822","parseRFC2822Date","fromHTTP","parseHTTPDate","fromFormat","localeToUse","parseFromTokens","fromString","fromSQL","parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","isWeekend","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","c1","c2","isInLeapYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","mixed","normalizedUnit","endOf","toLocaleParts","ext","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","fromFormatExplain","fromStringExplain","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY","dateTimeish","DefaultBufferLength","nextPropID","Range","NodeProp","perNode","deserialize","NodeType","closedBy","openedBy","isolate","contextHash","lookAhead","mounted","MountedTree","tree","overlay","parser","noProps","flags","define","spec","skipped","src","isTop","isSkipped","isAnonymous","direct","none","NodeSet","newTypes","newProps","CachedNode","CachedInnerNode","IterMode","Tree","positions","ch","TreeCursor","topNode","cursorAt","side","moveTo","_tree","TreeNode","resolveNode","resolveInner","resolveStack","inner","layers","scan","mount","iterStack","stackIterator","iterate","enter","leave","anon","IncludeAnonymous","entered","propValues","balance","balanceRange","makeTree","nodeSet","maxBufferLength","reused","minRepeatType","FlatBufferCursor","takeNode","parentStart","minPos","inRepeat","lookAheadAtStart","startPos","findBufferSize","Uint16Array","endPos","copyToBuffer","TreeBuffer","localChildren","localPositions","localInRepeat","lastGroup","lastEnd","makeRepeatLeaf","takeFlatNode","make","makeBalanced","nodeCount","stopAt","lookAheadProp","lastI","maxSize","fork","minStart","nodeSize","localSkipped","nodeStart","bufferStart","topID","buildTree","empty","childString","findChild","checkSide","startI","endI","len","overlays","IgnoreOverlays","BaseNode","getChild","getChildren","matchContext","matchNodeContext","enterUnfinishedNodesBefore","childBefore","prevSibling","nextChild","ExcludeBuffers","BufferNode","BufferContext","hasChild","IgnoreMounts","childAfter","rPos","nextSignificantParent","toTree","cur","externalSibling","heads","picked","newHeads","StackIterator","bufferNode","yieldNode","yieldBuf","yield","enterChild","sibling","atLastNode","move","prev","mustLeave","nodeSizeCache","balanceType","mkTop","mkTree","total","maxChild","groupFrom","groupStart","groupSize","nextSize","only","TreeFragment","openStart","openEnd","addTree","fragments","applyChanges","changes","minGap","fI","nextF","cI","off","nextC","nextPos","fromA","cut","fFrom","fTo","toA","toB","Parser","startParse","ranges","StringInput","createParse","advance","lineChunks","read","InnerParse","checkRanges","ActiveOverlay","mounts","stoppedInner","MixedParse","nest","innerDone","baseTree","stoppedAt","baseParse","startInner","parsedPos","fragmentCursor","FragmentCursor","covered","isCovered","hasNode","checkCover","materialize","oldMounts","findMounts","punchRanges","enterFragments","sliceBuf","buf","newStack","innerOffset","stackPos","targetI","StructureCursor","curTo","fragI","curFrag","nextFrag","gapFrom","gapTo","findCoverChanges","iA","iB","inA","inB","nextA","nextB","reducePos","score","bufferBase","curContext","cx","StackContext","pushState","setLookAhead","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","lastBigReductionStart","bigReductionCount","lastBigReductionSize","stateFlag","baseStateID","term","isReduce","shiftContext","maxNode","nextState","nextStart","nextEnd","useNode","updateContext","tracker","reuse","stream","reset","recoverByDelete","isNode","canShift","sim","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","forceReduce","validAction","backup","findForcedReduction","explore","allActions","rDepth","forceAll","deadEnd","restart","sameState","dialectEnabled","dialectID","dialect","emitContext","emitLookAhead","newCx","goto","StackBufferCursor","maybeNext","decodeArray","Type","out","stop","digit","CachedToken","mask","nullToken","InputStream","chunkOff","chunk2","chunk2Pos","rangeIndex","chunkPos","readNext","resolveOffset","assoc","clipPos","peek","resolved","acceptToken","endOffset","acceptTokenTo","getChunk","nextChunk","setDone","TokenGroup","precTable","precOffset","groupMask","accEnd","allows","overrides","readToken","tokenPrecTable","contextual","ExternalTokenizer","findOffset","tableData","tableOffset","iPrev","verbose","env","LOG","stackIDs","cutAt","safeFrom","safeTo","trees","nextFragment","fr","nodeAt","TokenCache","mainToken","tokenizers","getActions","actionIndex","main","tokenizer","updateCachedToken","addActions","eofTerm","getMainToken","specialized","specializers","putAction","Parse","recovering","nextStackID","minStackPos","topTerm","stacks","bufferLength","stopped","stoppedTokens","newStacks","advanceStack","tok","finished","findFinished","stackID","stackToTree","getName","SyntaxError","runRecovery","maxRemaining","strictCx","cxHash","cached","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","forceBase","insert","fromCodePoint","Dialect","ContextTracker","LRParser","wrappers","nodeNames","repeatNodeCount","topTerms","topRules","nodeProps","setProp","nodeID","propSpec","skippedNodes","propSources","tokenArray","tokenData","specializerSpecs","getSpecializer","states","Uint32Array","stateData","maxTerm","dialects","dynamicPrecedences","tokenPrec","termNames","parseDialect","loose","groupTag","terminal","slot","flag","deflt","configure","info","external","contextTracker","hasWrappers","nextTagID","Tag","defineModifier","Modifier","nextModifierID","mods","exists","sameArray","configs","sets","powerSet","styleTags","byName","tags","pieces","Rule","ruleNodeProp","opaque","inherit","tagHighlighter","cls","tagClass","highlightTree","highlighter","putStyle","builder","HighlightBuilder","highlightRange","highlighters","span","startSpan","inheritedClass","getStyleTags","tagCls","highlightTags","innerHighlighters","rangeFrom","rangeTo","typeName","propertyName","heading","keyword","punctuation","bracket","meta","lineComment","blockComment","docComment","variableName","attributeName","labelName","namespace","macroName","docString","character","attributeValue","integer","float","color","url","null","atom","modifier","operatorKeyword","controlKeyword","definitionKeyword","moduleKeyword","derefOperator","arithmeticOperator","logicOperator","bitwiseOperator","compareOperator","updateOperator","definitionOperator","typeOperator","controlOperator","angleBracket","squareBracket","paren","brace","heading1","heading2","heading3","heading4","heading5","heading6","contentSeparator","list","emphasis","strong","link","monospace","strikethrough","inserted","deleted","changed","documentMeta","annotation","processingInstruction","definition","function","standard","special","identifier","nameIdentifier","expression0","ForExpression","forExpressionStart","ForInExpression","Name","Identifier","AdditionalIdentifier","forExpressionBodyStart","IfExpression","ifExpressionStart","QuantifiedExpression","quantifiedExpressionStart","QuantifiedInExpression","PositiveUnaryTest","ArithmeticExpression","arithmeticPlusStart","arithmeticTimesStart","arithmeticExpStart","arithmeticUnaryStart","VariableName","PathExpression","pathExpressionStart","FilterExpression","filterExpressionStart","FunctionInvocation","functionInvocationStart","ParameterName","nil","NumericLiteral","StringLiteral","BooleanLiteral","listStart","List","FunctionDefinition","functionDefinitionStart","Context","contextStart","ContextEntry","PropertyName","PropertyIdentifier","LOG_PARSE","LOG_PARSE_DEBUG","LOG_VARS","spaceChars","newlineChars","asterix","additionalNameChars","isPartChar","indent","spaces","parseAdditionalSymbol","parseIdentifier","namePart","inside","parseSpaces","identifiersMap","identifiers","nameMatch","variables","contextKeys","nextMatch","maybeSpace","dateTimeIdentifiers","parseName","propertyIdentifiers","insertSemicolon","char","prefixedContextStarts","contextStarts","contextEnds","ValueProducer","of","VariableContext","getKeys","isAtomic","contexts","unwrap","merged","Variables","raw","enterScope","childScope","exitScope","pushChild","computedValue","normalizeContextKey","names","contextKey","resolveName","parentScope","variableScope","pushChildren","declareName","scopeName","valuePart","trackVariables","thenPart","elsePart","sourcePart","argNames","extractNamedArgs","keyValue","contextValue","getContextValue","prefixedStart","currentChildren","currentContext","newContext","variableTracker","feelHighlighting","CompareOp","ArithOp","Wildcard","LineComment","BlockComment","spec_identifier","in","return","if","else","satisfies","or","and","between","true","false","not","Expression","Expressions","UnaryTests","getType","isContext","FunctionWrapper","aType","bType","temporalTypes","aEntries","bEntries","parameterNames","contextOrArgs","params","lastParam","parseParameterNames","$args","notImplemented","getFromContext","normalizedName","datePart","zonePart","builtins","groupingSeparator","decimalSeparator","ifValid","dLocal","today","_start","replacement","delimiter","newItem","_idx","listReplace","listFn","nonBool","any","sublist","items","concatenate","lists","product","median","stddev","buckets","decimal","scale","adjust","ceiling","modulo","exp","odd","even","value1","value2","meets","meetsRange","range1","range2","finishes","during","starts","coincides","precedes","FALSE","contextPut","remainingKeys","createArgTester","optional","objType","typeCast","fnDefinition","tester","wrappedFn","argDefinitions","checkArgs","tests","conversion","createArgsValidator","convertedArgs","xs","toDeepString","toKeyString","integral","parseExpression","expression","parseUnaryTests","interpreter","_buildExecutionTree","nodeInput","nodeRef","findNext","unfinished","lintError","nullable","op","leftType","rightType","temporal","Test","_context","fnBody","wrapFunction","fnContext","getBuiltin","iterationContexts","ctx","cartesian","cartesianProduct","_target","extractValue","_contexts","_condition","isTruthy","quotes","codePoint","charCodes","escapePattern","codePointMatch","charCodeMatch","parseString","ifCondition","thenValue","elseValue","coalecenseTypes","compareValue","compareIn","testFn","pathTarget","pathProp","filterFn","filterTarget","iterationContext","flat","combineResult","evalNode","parseTree","unaryTest","nullRange","startIncluded","endIncluded","startIdx","endIdx","direction","valuesMap","noopMap","valuesIncludes","anyIncludes","createStringRange","numberMap","createNumberRange","createDurationRange","createDateTimeRange","includesStart","inclusive","includesEnd","Text","lineAt","lineInner","line","lines","clip","decompose","TextNode","scanIdentical","RawTextCursor","lineBreak","iter","iterRange","PartialTextCursor","iterLines","LineCursor","sliceString","TextLeaf","textLength","isLine","Line","sliceText","joined","appendText","newLen","lineSep","endLine","childOpen","updated","totalLines","eA","eB","chA","chB","maxChunk","minChunk","chunked","currentLines","currentLen","currentChunk","offsets","nextInner","offsetValue","afterBreak","isExtendingChar","isRegionalIndicator","ZWJ","findClusterBreak","forward","includeExtending","nextClusterBreak","prevClusterBreak","surrogateLow","surrogateHigh","codePointAt","codePointSize","countBefore","code0","code1","DefaultSplit","MapMode","ChangeDesc","sections","newLength","ins","iterGaps","posA","posB","iterChangedRanges","individual","iterChanges","invertedDesc","composeDesc","composeSets","mapDesc","mapSet","mapPos","Simple","endA","TrackDel","TrackBefore","TrackAfter","touchesRange","fromJSON","json","ChangeSet","fromB","_toB","compose","resultSections","resultInserted","filteredSections","SectionIter","addSection","addInsert","filtered","insText","insLen","forceJoin","endB","setA","setB","mkSet","piece","len2","sectionLen","insB","textBit","forward2","SelectionRange","anchor","bidiLevel","level","goalColumn","change","EditorSelection","includeAssoc","mainIndex","asSingle","addRange","replaceRange","checkSelection","selection","docLength","nextID","Facet","combine","compareInput","isStatic","enables","extensions","reader","FacetProvider","compute","deps","computeN","facet","dynamicSlot","addresses","getter","multi","depDoc","depSel","depAddrs","tr","docChanged","ensureAll","newVal","compareArray","oldState","oldAddr","address","oldVal","getAddr","StateField","addrs","addr","ensureAddr","dynamicFacetSlot","providerAddrs","providerTypes","dynamic","depChanged","oldProviders","facets","oldValue","initField","createF","updateF","compareF","provides","provide","extension","Prec_","PrecExtension","Prec","highest","lowest","Compartment","CompartmentInstance","compartment","compartments","Configuration","dynamicSlots","staticValues","statusTemplate","staticFacet","fields","newCompartments","known","oldFacets","status","computeSlot","languageData","allowMultipleSelections","lineSeparator","changeFilter","transactionFilter","transactionExtender","readOnly","Annotation","AnnotationType","StateEffectType","StateEffect","mapping","mapEffects","effects","effect","appendConfig","Transaction","startState","annotations","scrollIntoView","_doc","_state","newDoc","newSelection","applyTransaction","ann","reconfigured","isUserEvent","userEvent","joinRanges","mergeTransaction","sequential","mapForA","mapForB","resolveTransactionInner","docSize","sel","asArray","resolveTransaction","specs","seq","extenders","extendTransaction","back","filters","filterTransaction","addToHistory","remote","CharCategory","nonASCIISingleCaseWordChar","wordChar","makeCategorizer","wordChars","Space","hasWordChar","Word","Other","EditorState","startValues","replaceSelection","toText","changeByRange","result1","newChanges","newMapped","mapBy","sliceDoc","fieldInit","configuration","tabSize","phrase","phrases","languageDataAt","charCategorizer","wordAt","cat","combineConfig","kA","kB","RangeValue","startSide","endSide","point","mapMode","cmpRange","Chunk","maxPoint","startAt","lo","hi","newPos","newFrom","newTo","curFrom","RangeSet","nextLayer","chunkEnd","updateSpec","filterFrom","filterTo","LayerCursor","spill","RangeSetBuilder","addInner","chunkIndex","addChunk","finishInner","chunks","touch","HeapCursor","oldSets","newSets","textDiff","minPointSize","sharedChunks","findSharedChunks","sideA","SpanCursor","sideB","sameValues","active","spans","openRanges","activeForPoint","openCount","pointFrom","pointRank","lazySort","finish","layer","finishChunk","newArrays","chunkStart","setMaxPoint","lastFrom","lastTo","shared","minPoint","rank","gotoInner","setRangeIndex","heap","heapBubble","childIndex","activeTo","activeRank","minActive","removeActive","findMinIndex","addActive","trackOpen","wasPoint","nextVal","startA","startB","dPos","clipEnd","comparePoint","compareRange","foundPos","countColumn","COUNT","SET","globalThis","StyleModule","rules","splitSelector","selectors","isKeyframes","isAt","keyframes","getRules","newName","nonce","setNonce","StyleSet","adoptedSet","win","defaultView","adoptedStyleSheets","CSSStyleSheet","adopted","styleTag","mac","platform","ie","getSelection","dom","hasSelection","anchorNode","clientRectsFor","textRange","nodeValue","getClientRects","isEquivalentPosition","targetOff","scanFor","domIndex","previousSibling","isBlockElement","maxOffset","contentEditable","flattenRect","rect","windowRect","vp","visualViewport","height","innerWidth","getScale","elt","scaleX","scaleY","DOMSelectionState","anchorOffset","focusNode","focusOffset","domSel","setRange","scratchRange","preventScrollSupported","focusPreventScroll","setActive","scrollTop","scrollLeft","preventScroll","setEnd","setStart","dispatchKey","cancelable","altKey","metaKey","down","KeyboardEvent","synthetic","up","clearAttributes","removeAttributeNode","isScrolledToBottom","scrollHeight","clientHeight","textNodeBefore","startNode","startOffset","textNodeAfter","DOMPos","precise","noChildren","ContentView","overrideDOMText","posAtStart","posBefore","posAtEnd","breakAfter","posAfter","sync","track","contentView","canReuseDOM","reuseDOM","written","rm$1","_dom","localPosFromDOM","bias","domBoundsAround","fromI","fromStart","toI","toEnd","prevEnd","startDOM","endDOM","markDirty","andParent","markParentsDirty","childList","setParent","setDOM","cmView","rootView","replaceChildren","ignoreMutation","_rec","ignoreEvent","_event","childCursor","ChildCursor","childPos","findPos","isEditable","isWidget","isHidden","hasStart","become","getSide","fromOff","toOff","breakAtStart","breakAtEnd","mergeChildrenInto","dLen","nav","vendor","ie_edge","ie_upto10","ie_11up","gecko","chrome","webkit","safari","ios","maxTouchPoints","browser","windows","linux","ie_version","documentMode","gecko_version","chrome_version","android","webkit_version","TextView","createDOM","textDOM","domAtPos","_from","_to","coordsAt","rects","textCoords","MarkView","mark","setAttrs","attrs","_hasStart","detachFrom","inlineDOMAtPos","coordsInChildren","WidgetView","widget","prevWidget","updateDOM","toDOM","editable","custom","fromBack","WidgetBufferView","joinInlineInto","beforePos","afterPos","fallbackRect","combineAttrs","noAttrs","attrsEq","ignore","keysA","keysB","updateAttrs","getAttrs","LineView","prevAttrs","transferDOM","setDeco","addLineDeco","deco","hack","cmIgnore","measureTextSize","textHeight","totalWidth","lineHeight","charWidth","heightOracle","viewState","dist","_other","covers","docView","block","BlockWidgetView","_takeDeco","WidgetType","estimatedHeight","lineBreaks","BlockType","Decoration","heightRelevant","MarkDecoration","inlineOrder","PointDecoration","isBlockGap","getInclusive","LineDecoration","hasHeight","isReplace","WidgetRange","WidgetBefore","WidgetAfter","widgetsEq","inclusiveStart","inclusiveEnd","margin","ContentBuilder","disallowBlockEffectsFor","curLine","pendingBuffer","bufferMarks","atCursorPos","textOff","posCovered","getLine","flushBuffer","wrapMarks","addBlockWidget","buildText","NullWidget","cursorBefore","cursorAfter","decorations","dynamicDecorationMap","Direction","LTR","RTL","dec","LowTypes","ArabicTypes","Brackets","BracketStack","charType","BidiRE","BidiSpan","order","maybe","isolatesEq","emitSpans","baseLevel","isolates","ourType","iCh","iI","sameDir","isNum","recurse","localLevel","iScan","run","iso","upto","jI","computeSectionOrder","outerType","rFrom","rTo","prevType","prevStrong","computeCharTypes","oppositeType","sI","br","sJ","embed","processBracketPairs","beforeL","fromJ","processNeutrals","trivialOrder","movedOver","moveVisually","spanI","spanEnd","nextI","nextIndex","nextSpan","autoDirection","clickAddsSelectionRange","dragMovesSelection$1","mouseSelectionStyle","exceptionSink","updateListener","inputHandler","focusChangeEffect","perLineTextDirection","nativeSelectionHidden","scrollHandler","ScrollTarget","yMargin","xMargin","isSnapshot","setEditContextFormatting","logException","exception","onerror","nextPluginID","viewPlugin","ViewPlugin","domEventHandlers","domEventObservers","buildExtensions","eventHandlers","eventObservers","plugin","pluginInst","fromClass","PluginInstance","mustUpdate","deactivate","editorAttributes","contentAttributes","outerDecorations","atomicRanges","bidiIsolatedRanges","getIsolatedRanges","fromDoc","toDoc","bidiIsolate","scrollMargins","getScrollMargins","styleModule","ChangedRange","me","extendWithRanges","dI","rI","ViewUpdate","transactions","changedRanges","viewportChanged","heightChanged","geometryChanged","focusChanged","selectionSet","DocView","domChanged","hasComposition","markedForComposition","editContextFormatting","lastCompositionAfterCursor","minWidth","minWidthFrom","minWidthTo","impreciseAnchor","impreciseHead","forceSelection","lastUpdate","contentDOM","updateDeco","updateInner","updateEditContextFormatting","readCompositionAt","inputState","composing","observer","editContext","newSel","composition","touched","touchesComposition","headPos","findCompositionNode","textNode","inv","marks","parentView","findCompositionRange","decoDiff","comp","DecorationComparator$1","findChangedDeco","oldLength","mustMeasureContent","updateChildren","contentHeight","flexBasis","selectionRange","cView","gaps","viewport","BlockGapWidget","updateGaps","compLine","compositionView","fixCompositionDOM","fix","updateSelection","mustRead","fromPointer","readSelectionRange","activeElt","focused","selectionNotFocus","moveToLine","dummy","suppressWidgetCursorChange","assignedSlot","inUneditable","rawSel","nextTo","nextToUneditable","collapse","caretBidiLevel","removeAllRanges","setSelectionRange","posFromDOM","enforceCursorAssoc","modify","lineStart","newRange","nearest","domView","bestPos","coordsForChar","childOff","measureVisibleLineHeights","contentWidth","clientWidth","isWider","scrollDOM","widest","ltr","textDirection","childRect","textDirectionAt","getComputedStyle","measure","computeBlockGapDeco","vs","viewports","lineBlockAt","allDeco","dynamicOuter","outerDeco","lineGapDeco","margins","targetRect","bounding","scrollWidth","moveX","moveY","rectHeight","boundingHeight","scrollBy","movedX","movedY","host","scrollRectIntoView","textBefore","textAfter","descAfter","descBefore","getdx","getdy","yOverlap","upTop","upBot","domPosAtCoords","closest","closestRect","closestX","closestY","above","below","aboveRect","belowRect","closestOverlap","dx","dy","domPosInText","clipX","closestOffset","closestDY","generalSide","posAtCoords","coords","docTop","paddingTop","docHeight","yOffset","halfLine","bounced","elementAtHeight","posAtCoordsImprecise","elementFromPoint","caretPositionFromPoint","offsetNode","caretRangeFromPoint","startContainer","isSuspiciousSafariCaretResult","isSuspiciousChromeCaretResult","contentRect","into","defaultCharacterWidth","lineWrapping","defaultLineHeight","lineLength","col","findColumn","moveToLineBoundary","includeWrap","blockAt","widgetLineBreaks","coordsAtPos","editorRect","moveByChar","bidiSpans","check","visualLineSide","skipAtomicRanges","atoms","moved","skipAtoms","oldPos","InputState","setSelectionOrigin","origin","lastSelectionOrigin","lastSelectionTime","lastKeyCode","lastKeyTime","lastTouchTime","lastFocusTime","lastScrollTop","lastScrollLeft","pendingIOSKey","tabFocusMode","lastContextMenu","scrollHandlers","compositionFirstChange","compositionEndedAt","compositionPendingKey","compositionPendingChange","mouseSelection","draggedContent","handleEvent","notifiedFocused","hasFocus","appliedFirefoxHack","firefoxCopyCutHack","bubbles","eventBelongsToEditor","ignoreDuringComposition","keydown","runHandlers","observers","ensureHandlers","computeHandlers","passive","modifierCodes","delayAndroidKey","pending","PendingKeys","EmacsyPendingKeys","forceFlush","flushIOSKey","startMouseSelection","bindHandler","record","dragScrollSpeed","MouseSelection","startEvent","mustSelect","scrollSpeed","scrolling","lastEvent","scrollParent","scrollableParent","addsSelectionRange","dragging","rangeCount","getRangeAt","clientX","clientY","isInPrimarySelection","getClickType","buttons","sx","sy","setScrollSpeed","setInterval","scroll","clearInterval","dispatch","brokenClipboardAPI","doPaste","byLine","linewise","lastLinewiseCopy","lastLine","rangeForClick","categorize","linePos","groupAt","visual","touchstart","touchmove","mousedown","makeStyle","button","queryPos","startSel","startRange","removeRangeAround","basicMouseSelection","mustFocus","mouseSel","insideY","findPositionSide","BadMouseDetail","lastMouseDown","lastMouseDownCount","lastMouseDownTime","detail","lastTime","dropText","dropPos","del","dragMovesSelection","dragstart","draggable","dataTransfer","effectAllowed","dragend","files","finishFile","FileReader","onload","readAsText","paste","clipboardData","capturePaste","copiedRange","clearData","selectionEnd","selectionStart","captureCopy","isFocusChange","focusChangeTransaction","getEffect","updateForFocusChange","clearSelectionRange","compositionstart","compositionupdate","compositionend","pendingRecords","flushSoon","contextmenu","beforeinput","startViewHeight","wrappingWhiteSpace","HeightOracle","heightSamples","heightForGap","heightForLine","setDoc","mustRefreshForWrapping","whiteSpace","mustRefreshForHeights","lineHeights","newHeight","refresh","knownHeights","MeasuredHeights","heights","BlockInfo","_content","QueryType","Epsilon","HeightMap","outdated","setHeight","oracle","decomposeLeft","decomposeRight","oldDoc","ByPosNoHeight","NodeBuilder","updateHeight","HeightMapText","break","brk","HeightMapBranch","HeightMapBlock","_height","_oracle","_value","forEachLine","_force","measured","widgetHeight","breaks","HeightMapGap","heightMetrics","perLine","firstLine","perChar","totalPerLine","guess","lineTop","ByHeight","linesAbove","singleHeight","rightTop","rightOffset","subQuery","ByPos","rightStart","balanced","mergeGaps","rebalance","around","lineEnd","covering","writtenTo","addBlock","enterLine","blankContent","gap","ensureLine","DecorationComparator","visiblePixelRange","overflow","parentRect","offsetParent","fullPixelRange","LineGap","same","gA","gB","draw","wrapping","LineGapWidget","vertical","ViewState","pixelViewport","inView","paddingBottom","contentDOMWidth","contentDOMHeight","editorHeight","editorWidth","scrolledToBottom","scrollAnchorPos","scrollAnchorHeight","scaler","IdScaler","scrollTarget","printing","defaultTextDirection","visibleRanges","mustEnforceCursorAssoc","guessWrapping","stateDeco","heightMap","getViewport","updateForViewport","updateViewportLines","lineGaps","ensureLineGaps","computeVisibleRanges","Viewport","updateScaler","BigScaler","viewportLines","scaleBlock","prevDeco","contentChanges","heightChanges","heightRelevantDecoChanges","prevHeight","scrollAnchor","scrollAnchorAt","mapViewport","viewportIsAppropriate","viewportChange","updateLineGaps","mapLineGaps","domRect","measureContent","dTop","dBottom","visibleTop","fromDOM","visibleBottom","marginTop","topPos","viewHeight","mayMeasure","halfMargin","doubleMargin","addGap","structure","avoid","gapSize","checkLine","lineStructure","viewFrom","viewTo","bot","marginHeight","targetFrac","findFraction","spaceFrac","findPosition","marginWidth","lineBlockAtHeight","ratio","counted","vpHeight","domBase","domTop","domBottom","bTop","bBottom","theme","strs","darkTheme","baseThemeID","baseLightID","baseDarkID","lightDarkIDs","buildTheme","scopes","baseTheme$1","boxSizing","outline","flexDirection","alignItems","fontFamily","overflowX","zIndex","flexGrow","flexShrink","wordWrap","minHeight","WebkitUserModify","whiteSpace_fallback","wordBreak","overflowWrap","caretColor","contain","background","pointerEvents","animation","opacity","borderLeft","marginLeft","borderLeftColor","unicodeBidi","backgroundColor","insetInlineStart","borderRight","textAlign","borderBottom","borderTop","verticalAlign","backgroundImage","backgroundSize","backgroundPosition","backgroundRepeat","fontSize","borderRadius","border","LineBreakPlaceholder","DOMReader","points","readRange","findPointBefore","oldLen","readNode","nextView","readTextNode","nextBreak","breakSize","fromView","findPointInside","isAtEnd","DOMPoint","DOMChange","typeOver","bounds","iHead","iAnchor","selPoints","selectionPoints","selectionFromPoints","offFrom","offTo","applyDOMChange","domChange","lastKey","preferredPos","preferredSide","minLen","findDiff","applyDOMChangeInner","defaultTr","defaultInsert","mainSel","compositionRange","replaced","rangeChanges","selOff","applyDefaultInsert","observeOptions","characterData","subtree","characterDataOldValue","useCharData","DOMObserver","selectionChanged","delayedFlush","resizeTimeout","queue","delayedAndroidKey","flushingAndroidKey","lastChange","scrollTargets","resizeScroll","intersecting","gapIntersection","printQuery","parentCheck","MutationObserver","mutations","mut","removedNodes","EditContext","EDIT_CONTEXT","EditContextManager","onCharData","onSelectionChange","onPrint","onScroll","matchMedia","ResizeObserver","observe","addWindowListeners","IntersectionObserver","listenForScroll","intersectionRatio","onScrollChanged","threshold","requestMeasure","measureReq","disconnect","wasChanged","shadowRoot","deepActiveElement","getComposedRanges","buildSelectionRangeFromRange","stopImmediatePropagation","getTargetRanges","execCommand","safariSelectionRangeHack","atElementStart","processRecords","clearDelayedAndroidKey","takeRecords","records","readMutation","readChange","readSelection","handled","rec","setWindow","removeWindowListeners","curView","endContainer","curAnchor","pendingContextChange","resetRange","toContextPos","toEditorPos","updateRangeStart","updateRangeEnd","revertPending","rangeStart","rangeEnd","DOMRect","updateCharacterBounds","getTextFormats","lineStyle","underlineStyle","thickness","underlineThickness","updateControlBounds","updateSelectionBounds","applyEdits","abort","_fromB","updateText","rangeIsValid","setSelection","contextPos","editorPos","EditorView","compositionStarted","pluginMap","editorAttrs","contentAttrs","bidiCache","destroyed","updateState","measureScheduled","measureRequests","announceDOM","dispatchTransactions","trs","getRoot","scrollTo","mountStyles","redrawn","attrsChanged","focusFlag","dispatchFocus","pendingKey","CachedOrder","updatePlugins","styleModules","showAnnouncements","docViewUpdate","listener","newState","hadFocus","prevSpecs","newPlugins","sDOM","measuring","BadMeasure","write","themeClasses","attrsFromFacet","spellcheck","autocorrect","autocapitalize","translate","contenteditable","role","changedContent","changedEditor","announce","cspNonce","readMeasured","request","documentTop","documentPadding","viewportLineBlocks","moveByGroup","nextCat","byGroup","moveVertically","distance","startY","goal","startCoords","resolvedGoal","extra","curY","charRect","posAtDOM","MaxBidiLine","fresh","computeOrder","setRoot","scrollSnapshot","setTabFocusMode","dark","baseTheme","findFromDOM","lastDir","currentPlatform","modifiers","handleKeyEvents","currentKeyEvent","keyName","charCode","isChar","prevented","storedPrefix","baseName","shiftName","ran","runFor","cmd","scopeObj","_any","bindings","keymap","Keymaps","bound","isPrefix","checkPrefix","command","alt","ctrl","normalizeKeyName","ourObj","PrefixTimeout","buildKeymap","getKeymap","themeSpec","Placeholder","Outside","TooltipViewManager","createTooltipView","removeTooltipView","tooltips","tooltipViews","newAbove","tip","tooltipView","tooltipConfig","windowSpace","tooltipSpace","knownHeight","tooltipPlugin","madeAbsolute","lastTransaction","measureTimeout","createContainer","readMeasure","writeMeasure","resizeObserver","measureSoon","manager","showTooltip","createTooltip","unobserve","intersectionObserver","observeIntersection","maybeMeasure","tooltip","shouldMeasure","newConfig","arrow","editor","makeAbsolute","tv","getCoords","space","tView","arrowHeight","noOffset","strictSide","spaceVert","resize","overlap","arrowLeft","positioned","borderTopColor","borderBottomColor","showHoverTooltip","inputs","HoverTooltipHost","createHostedView","hostedView","passProp","given","showHoverTooltipHost","HoverPlugin","setHover","hoverTime","hoverTimeout","restartTimeout","lastMove","checkHover","mouseleave","mousemove","startHover","hovered","posCoords","bidi","rtl","tooltipMargin","isInTooltip","docBottom","isOverRange","watchTooltipLeave","watch","hoverTooltip","hoverState","hideOnChange","hideOn","closeHoverTooltipEffect","getTooltip","panelConfig","topContainer","bottomContainer","panelPlugin","showPanel","panels","PanelGroup","syncClasses","panel","scrollMargin","syncDOM","curDOM","GutterMarker","elementClass","gutterLineClass","activeGutters","unfixGutters","gutters","gutterView","prevViewport","SingleGutterView","gutter","syncGutters","updateGutters","vpA","vpB","vpOverlap","detach","lineClasses","classSet","UpdateContext","advanceCursor","collect","markers","addElement","elements","newElt","GutterElement","extraMarkers","localMarkers","forLine","lineMarker","renderEmptyElements","marker","widgetMarker","spacer","initialSpacer","prevMarkers","updateSpacer","lineMarkerChange","sameMarkers","setMarkers","domPos","iNew","iOld","skipTo","lineNumberMarkers","lineNumberConfig","formatNumber","NumberMarker","lineNumberGutter","maxLineNumber","lineNumbers","languageDataProp","sublanguageProp","Language","extraExtensions","syntaxTree","language","topNodeAt","innerNode","sublang","isActiveAt","findRegions","lang","allowsNesting","topLang","LRLanguage","baseData","DocInput","cursorPos","syncTo","stringStart","ParseContext","treeLen","scheduleOn","tempSkipped","work","isDone","takeTree","withContext","endTime","withoutTempSkipped","cutFragments","updateViewport","startLen","skipUntilInView","getSkippingParser","frags","LanguageState","vpTo","parseState","requestIdle","timeout","requestIdleCallback","idle","cancelIdleCallback","isInputPending","scheduling","parseWorker","working","workScheduled","chunkBudget","scheduleWork","checkAsyncSchedule","deadline","timeRemaining","viewportFirst","catch","isWorking","languages","LanguageSupport","support","indentService","indentUnit","getIndentUnit","indentString","cols","getIndentation","IndentContext","service","ast","indentFor","syntaxIndentation","simulateBreak","simulateDoubleBreak","textAfterPos","column","override","overrideIndentation","lineIndent","overriden","simulatedBreak","indentNodeProp","strategy","indentStrategy","TreeIndentContext","closed","delimitedStrategy","ignoreClosed","topIndent","baseIndent","baseIndentFor","atBreak","isParent","delimitedIndent","closing","align","closedAt","aligned","openToken","openLine","bracketedAligned","continuedIndent","except","matchExcept","DontIndentBeyond","indentOnInput","norm","foldNodeProp","foldInside","HighlightStyle","modSpec","def","scopeOpt","themeType","highlighterFacet","fallbackHighlighter","getHighlighters","syntaxHighlighting","treeHighlighter","TreeHighlighter","markCache","buildDeco","decoratedTo","styleChange","decoratedToMapped","DefaultScanDist","DefaultBrackets","bracketMatchingConfig","afterCursor","brackets","maxScanDistance","renderMatch","defaultRenderMatch","matchingMark","nonmatchingMark","bracketMatchingState","matchBrackets","bracketMatchingUnique","bracketMatching","bracketMatchingHandle","matchingNodes","byProp","findHandle","hasHandle","handle","matchMarkedBrackets","tokenType","startCh","startToken","basePos","matchPlainBrackets","_pos","firstToken","endHandle","noTokens","typeArray","warned","byTag","defaultTable","legacyName","createTokenType","warnForPart","tagStr","tags$1","CompletionContext","explicit","abortListeners","tokenBefore","matchBefore","ensureAnchor","aborted","toSet","completeFromList","label","validFor","prefixMatch","Option","completion","addStart","addEnd","ignoreCase","pickedCompletion","SourceCache","asSource","startCompletionEffect","closeCompletionEffect","FuzzyMatcher","folded","byWord","astral","firstSize","anyTo","preciseTo","byWordTo","byWordFolded","adjacentTo","adjacentStart","adjacentEnd","hasLower","wordAdjacent","StrictMatcher","completionConfig","activateOnTyping","activateOnCompletion","activateOnTypingDelay","selectOnOpen","closeOnBlur","maxRenderedOptions","defaultKeymap","tooltipClass","optionClass","aboveCursor","icons","addToOptions","positionInfo","defaultPositionInfo","filterStrict","compareCompletions","localeCompare","interactionDelay","updateSyncTime","joinClass","maxWidth","spaceLeft","spaceRight","infoWidth","infoHeight","spaceBelow","rangeAroundSelected","CompletionTooltip","stateField","applyCompletion","infoDestroy","placeInfoReq","measureInfo","placeInfo","currentClass","cState","optionContent","icon","_s","_v","labelElt","displayLabel","detailElt","updateTooltipClass","showOptions","updateSel","createListBox","prevState","updateSelectedOption","destroyInfo","infoResult","addInfoPane","opt","listRect","infoRect","selRect","ul","curSection","section","header","li","completionTooltip","boost","CompletionDialog","setSelected","makeAttrs","addOption","hasResult","getMatch","sectionOrder","sortOptions","selectedValue","CompletionState","ActiveSource","sameResults","setSelectedEffect","baseAttrs","getUserEvent","explicitPos","handleUserEvent","handleChange","setActiveEffect","ActiveResult","checkValid","completionState","insertCompletionText","moveCompletionSelection","RunningQuery","updates","completionPlugin","debounceUpdate","running","debounceAccept","pendingStart","startQuery","doesReset","query","startUpdate","scheduleAccept","accept","dialog","commitCharacters","commitChars","maxWidth_fallback","maxHeight","textOverflow","paddingLeft","textDecoration","fontStyle","paddingRight","FieldPos","FieldRange","Snippet","fieldPositions","lineObj","tabs","rawName","fieldMarker","fieldRange","ActiveSnippet","selectionInsideField","moveToField","snippetState","fieldSelection","snippet","addSnippetKeymap","snippetPointerHandler","moveField","defaultSnippetKeymap","snippetKeymap","maps","snippetCompletion","stringPrefixes","closeBracketEffect","closedBracket","bracketState","closeBrackets","definedClosing","handleSame","handleOpen","closedBracketAt","handleClose","insertBracket","nextChar","closeBefore","dont","_open","allowTriple","canStartStringAt","quoteToken","prefixes","maxPrefix","quotePos","probablyInString","charCat","autocompletion","completionKeymapExt","completionKeymap","toggleLineComment","changeLineComment","toggleBlockComment","changeBlockComment","toggleBlockCommentByLine","fromLine","toLine","selectedLineRanges","getConfig","SearchMargin","comments","startText","endText","spaceBefore","spaceAfter","beforeOff","startSpace","endSpace","endOff","findBlockComment","prevLine","minIndent","changeSet","setSel","moveSel","how","cursorByChar","ltrAtCursor","cursorCharLeft","cursorCharRight","cursorByGroup","interestingNode","bracketProp","moveBySyntax","cursorByLine","cursorLineUp","cursorLineDown","pageInfo","selfScroll","marginBottom","cursorByPage","page","scrollRect","scrollBottom","cursorPageUp","cursorPageDown","moveByLineBoundary","extendSel","selectByChar","selectCharLeft","selectCharRight","selectByGroup","selectByLine","selectLineUp","selectLineDown","selectByPage","selectPageUp","selectPageDown","cursorDocStart","cursorDocEnd","selectDocStart","selectDocEnd","deleteBy","towards","skipAtomic","deleteByChar","byIndentUnit","targetPos","deleteCharBackward","deleteCharForward","deleteByGroup","deleteGroupBackward","selectedLineBlocks","blocks","startLine","moveLine","nextLine","copyLine","insertNewlineAndIndent","newlineAndIndent","insertBlankLine","atEof","explode","isBetweenBrackets","changeBySelectedLine","atLine","emacsStyleKeymap","standardKeymap","keep","toMatchingBracket","crelt","SelectedDiagnostic","diagnostic","LintState","diagnostics","markedDiagnostics","diagnosticFilter","lintConfig","markerFilter","DiagnosticWidget","severity","markClass","findDiagnostic","maybeEnableLint","lintState","lintExtensions","setDiagnosticsEffect","togglePanel","movePanelSelection","selPos","autoPanel","LintPanel","activeMark","lintTooltip","stackStart","stackEnd","tooltipFilter","diagnosticsTooltip","renderDiagnostic","closeLintPanel","lintPlugin","lintTime","setDiagnostics","needsRefresh","linter","assignKeys","inPanel","renderMessage","fired","keyIndex","nameElt","onclick","onmousedown","PanelItem","onkeydown","moveSelection","needsSync","newSelectedItem","_end","underline","encodeURIComponent","font","overflowY","background_fallback","color_fallback","CompositeBlock","parentHash","hashProp","addChild","LeafBlock","parsers","forwardInner","skipSpace","countIndent","moveBase","moveBaseColumn","addMarker","scrub","skipForList","OrderedList","isOrderedList","isBulletList","BulletList","isHorizontalRule","DefaultSkipMarkup","Blockquote","QuoteMark","ListItem","_cx","Document","skipSpaceBack","isFencedCode","isBlockquote","breaking","isSetextUnderline","inList","isAtxHeading","EmptyLine","CommentEnd","ProcessingEnd","HTMLBlockStyle","isHTMLBlock","getListIndent","indentAfter","indented","addCodeText","CodeText","DefaultBlockParsers","LinkReference","IndentedCode","pendingMarks","codeStart","addNode","writeElements","CodeBlock","FencedCode","fenceEnd","infoFrom","infoTo","CodeMark","CodeInfo","textStart","textEnd","prevLineEnd","startContext","HorizontalRule","newBase","ListMark","ATXHeading","endOfSpace","HeaderMark","parseInline","ATXHeading1","HTMLBlock","CommentBlock","ProcessingInstructionBlock","SetextHeading","LinkReferenceParser","leaf","stage","elts","complete","addLeafElement","nextStage","parseLinkLabel","LinkMark","parseLinkTitle","titleEnd","parseURL","SetextHeadingParser","underlineMark","SetextHeading1","SetextHeading2","DefaultLeafBlocks","DefaultEndLeaf","scanLineResult","BlockContext","atEnd","reusePlaceholders","rangeI","absoluteLineStart","absoluteLineEnd","readLine","markI","finishContext","reuseFragment","blockParsers","leafBlockParsers","endLeafBlock","finishLeaf","taken","takeNodes","moveRangeI","parentType","scanLine","lineChunkAt","textOffset","nextFrom","skipContextMarkup","eol","startComposite","getNodeType","injectMarks","addGaps","injectGaps","Paragraph","TreeElement","dummies","movePastNext","MarkdownParser","blockNames","inlineParsers","inlineNames","nodeTypes","resolveConfig","nonEmpty","defineNodes","styles","composite","parseBlock","findName","endLeaf","InlineContext","resolveMarkers","conc","wrapA","wrapB","Escape","writeTo","startOff","EmphasisUnderscore","EmphasisAsterisk","LinkStart","ImageStart","InlineDelimiter","Escapable","Punctuation","DefaultInline","Entity","InlineCode","curSize","HTMLTag","Autolink","URL","Comment","procInst","ProcessingInstruction","Emphasis","pBefore","pAfter","sBefore","sAfter","leftFlanking","rightFlanking","canOpen","canClose","HardBreak","Link","Image","LinkEnd","takeContent","finishLink","dest","LinkTitle","requireNonWS","LinkLabel","addDelimiter","hasOpenLink","emp","closeSize","findOpeningDelimiter","eI","NotLast","fragmentEnd","fragEnd","blockI","prevI","markdownHighlighting","parseSubSuper","lintSyntax","lintMessages","getNextNode","cmFeelLinter","editorView","lintAll","highlightStyle$2","fontWeight","commonTheme","_urlify","colors","black","darkGrey","grey","midGrey","lightGrey","offWhite","snowWhite","white","mossGreen","iceBlue","waterBlue","brightBlue","deepBlue","red","orangeBrown","yellow","lila","purple","colorByRole","lightBackground","darkBackground","tooltipBackground","warning","bpmnioLight","textUnderlinePosition","midGray","peach","pastelYellow","pastelOrange","highlightBackground","warningColorHex","bpmnioDark","lightTheme","CHAR_TABLE","isClosingFeelScope","isReadingCloseCurrent","isReadingCloseAhead","feelBlock","isClosingTextScope","isReadingOpenCurrent","isReadingOpenAhead","simpleTextBlock","feel","feelersHighlighting","ConditionalSpanner","ConditionalSpannerClose","ConditionalSpannerCloseNl","LoopSpanner","LoopSpannerClose","LoopSpannerCloseNl","EmptyInsert","Insert","Feelers","buildSimpleTree","templateString","nodeRepresentation","isLeafNode","buildNodeEvaluator","debug","buildDebugString","sanitizer","evaluateNode","evaluate$1","shouldRender","innerRender","shouldAddNewline","loopArray","childrenToLoop","evaluateChildren","arrayElement","parentContext","childContext","enhanceContext","evaluateNodeValue","_this_","_parent_","foldMetadata","createFeelersLanguageSupport","hostLanguageParser","hostLanguage","_mixedParser","parser$1","createMixedLanguage","lintEmptyInserts","lint","lintFeel","feelMessages","cmFeelersLinter","FeelersEditor","tooltipContainer","onLint","enableGutters","singleLine","lineWrap","darkMode","changeHandler","lintHandler","diagnosticEffects","messages","contentAttributesExtension","keyHandler","tooltipLayout","feelersLanguageSupport","parser$2","_getHostLanguageParser","_cmEditor","_getDefaults","async","gfm","pedantic","renderer","silent","walkTokens","setValue","cmEditor","_defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","escape$1","encode","unescapeTest","caret","edit","valSource","getRegex","cleanUrl","href","encodeURI","noopTest","splitCells","tableRow","row","curr","cells","rtrim","suffLen","currChar","outputLink","cap","lexer","inLink","inlineTokens","_Tokenizer","newline","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","anyPunctuation","trimmed","hr","blockquote","blockTokens","bull","isordered","ordered","itemRegex","itemContents","endsWithBlankLine","endEarly","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","ischecked","istask","task","checked","spacers","hasMultipleLineBreaks","pre","headers","aligns","rows","cell","lheading","paragraph","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","findClosingBracket","linkLen","reflink","links","nolink","emStrong","maskedSrc","prevChar","emStrongLDelim","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","emStrongRDelimAst","emStrongRDelimUnd","lastCharLength","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","autolink","prevCapZero","_backpedal","inlineText","bullet","_paragraph","_blockLabel","_tag","_comment","blockNormal","gfmTable","blockGfm","blockPedantic","_punctuation","_inlineComment","_inlineLabel","inlineNormal","blockSkip","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","normal","_Lexer","inlineQueue","lex","lexInline","lastToken","cutSrc","lastParagraphClipped","extTokenizer","startBlock","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","startInline","_Renderer","infostring","listitem","checkbox","tablerow","tablecell","em","cleanHref","image","_TextRenderer","_Parser","textRenderer","renderers","genericToken","headingToken","codeToken","tableToken","blockquoteToken","listToken","itemBody","htmlToken","paragraphToken","textToken","escapeToken","tagToken","linkToken","imageToken","strongToken","emToken","codespanToken","delToken","_Hooks","preprocess","markdown","postprocess","processAllTokens","markedInstance","setOptions","parseMarkdown","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","childTokens","pack","prevRenderer","extLevel","rendererProp","rendererFunc","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","passThroughHooks","packWalktokens","origOpt","throwError","onError","marked","getDefaults","getFlavouredFeelVariableNames","feelString","feelFlavour","specialDepthAccessors","_unfoldVariables","pathRoot","_linearizePathExpression","_getVariableNameAtPathIndex","_smartExtractVariableNames","_buildSimpleFeelStructureTree","initialDepth","accessorDepthInfos","extractedVariables","pathNodes","currentAccessor","depthOffsets","depthInfo","_extractFilterExpressions","flattenedExpressionTree","filterExpression","taggedFilterExpression","FeelExpressionLanguage","eventBus","_eventBus","isExpression","getVariableNames","fire","FeelersTemplating","isTemplate","expressions","_extractExpressionsWithDepth","simpleTreeRoot","_traverse","loopExpression","childResults","MINUTES_IN_DAY","DATETIME_SUBTYPES","DATE","TIME","DATETIME","TIME_SERIALISING_FORMATS","UTC_OFFSET","UTC_NORMALIZED","NO_TIMEZONE","DATETIME_SUBTYPES_LABELS","TIME_SERIALISINGFORMAT_LABELS","DATETIME_SUBTYPE_PATH","DATE_LABEL_PATH","DATE_DISALLOW_PAST_PATH","TIME_LABEL_PATH","TIME_USE24H_PATH","TIME_INTERVAL_PATH","TIME_SERIALISING_FORMAT_PATH","OPTIONS_SOURCES","STATIC","INPUT","EXPRESSION","OPTIONS_SOURCE_DEFAULT","OPTIONS_SOURCES_LABELS","OPTIONS_SOURCES_PATHS","OPTIONS_SOURCES_DEFAULTS","getOptionsSource","SANDBOX_ATTRIBUTE","ALLOW_ATTRIBUTE","SECURITY_ATTRIBUTES_DEFINITIONS","directive","createInjector","bootstrapModules","createFormContainer","formFieldClasses","errors","readonly","gridColumnClasses","formField","layout","columns","prefixId","formId","FormRenderContext","createContext","Empty","Hidden","Children","jsx","Row","Column","hoverInfo","cleanup","LocalExpressionContext","FormContext","getService","useService","useContext","replacer","runRecursively","components","component","wrapObjectKeysWithUnderscores","newObj","buildExpressionContext","specialContextKeys","runExpressionEvaluation","expressionLanguage","expressionContextInfo","getSimpleOptionsData","formData","valuesExpression","optionsExpression","valuesKey","optionsKey","staticOptions","normalizeOptionsData","optionsData","_isAllowedValue","_normalizeOption","createEmptyOptions","_isAllowedPrimitive","isValidLabel","useExpressionEvaluation","useMemo","useDeepCompareMemoize","useRef","LOAD_STATES","LOADING","LOADED","ERROR","useOptionsAsync","initialData","_getState","evaluatedOptions","optionsGetter","keyedOptions","buildErrorState","buildLoadedState","loadState","useDangerousHTMLWrapper","sanitizeStyleTags","sanitizedHtml","getDOMPurifyConfig","useGetLabelCorrelation","labelMap","_getValueHash","useCallback","getScrollContainer","_isElementScrollable","parentElement","EMPTY_OBJECT","EMPTY_ARRAY","useKeyDownAction","targetKey","listenerElement","downHandler","useEffect","usePrevious","useFlushDebounce","timeoutRef","lastArgsRef","shouldDebounce","useTemplateEvaluation","templating","useSingleLineTemplateEvaluation","evaluatedTemplate","ENTER_KEYDOWN_EVENT","focusRelevantFlatpickerDay","flatpickrInstance","dayToFocus","formatTime","use24h","wrappedMinutes","_getZeroPaddedString","isPM","parseInputTime","stringTime","workingString","displayHour","isValidHour","isValidMinute","serializeTime","timeSerializingFormat","normalizedMinutes","_getSignedPaddedHours","formatTimezoneOffset","parseIsoTime","isoTimeString","parseBasicMinutes","timeString","timeSegments","localOffset","offsetString","inboundOffset","serializeDate","isInvalidDateString","getNullDateTime","isValidDate","isValidTime","ALLOWED_IMAGE_SRC_PATTERN","ALLOWED_IFRAME_SRC_PATTERN","hasEqualValue","sanitizeSingleSelectValue","validValues","sanitizeMultiSelectValue","sanitizeImageSource","escapeHTML","escapeMap","useCleanupSingleSelectValue","optionValues","useCleanupMultiSelectValue","memoizedValues","hasValuesNotInOptions","type$h","Button","onFocus","evaluatedLabel","Description","description","evaluatedDescription","Errors","Label","htmlFor","collapseOnEmpty","jsxs","keyed","type$g","Checkbox","domId","validate","descriptionId","errorMessageId","emptyValue","sanitizeValue","type$f","Checklist","outerDivRef","onCheckboxBlur","onCheckboxFocus","itemDomId","isChecked","onClick","toggledValue","newValues","toggleCheckbox","noop$1","FormField","_onChange","formFields","viewerCommands","formFieldInstanceRegistry","pathRegistry","form","initialValidationTrigger","setInitialValidationTrigger","useState","FormFieldComponent","fieldConfig","localExpressionContext","valuePath","getValuePath","initialValue","conditionChecker","useReadonly","hidden","useCondition","conditional","hide","fieldInstance","instanceId","resetValidation","on","hasInitialValue","updateFieldInstanceValidation","fieldErrors","formFieldElement","escapeGridRender","ChildrenRenderer","repeatRenderManager","isRepeating","isFieldRepeating","Repeater","RepeatFooter","RepeatChildrenRenderer","ChildrenRoot","SimpleChildrenRenderer","RowsRenderer","restProps","useSharedState","isCollapsed","Fragment","parentId","verticalAlignment","formLayouter","formFieldRegistry","getRows","childId","childField","Default","_path$w","_extends$x","_path$v","_path2$4","SvgCalendar","React.createElement","xmlns","viewBox","fillRule","clipRule","getLocaleDateFormat","getLocaleReadableDateFormat","InputAdorner","rootRef","inputRef","hasErrors","onAdornmentClick","Datepicker","collapseLabelOnEmpty","onDateTimeBlur","onDateTimeFocus","disallowPassedDates","dateObject","dateInputRef","focusScopeRef","setFlatpickrInstance","isInputDirty","setIsInputDirty","forceFocusCalendar","setForceFocusCalendar","useLeadingZero","flatpickerizeDateFormat","onCalendarFocusOut","onCalendarMouseDown","onInputKeyDown","onInputFocus","onInputBlur","autoComplete","onMouseDown","onInput","_extends$w","SvgClock","DEFAULT_LABEL_GETTER","NOOP","DropdownList","getLabel","onValueSelected","emptyListMessage","initialFocusIndex","mouseControl","setMouseControl","focusedValueIndex","setFocusedValueIndex","smoothScrolling","setSmoothScrolling","dropdownContainer","mouseScreenPos","focusedItem","changeFocusedValueIndex","individualEntries","focusedEntry","scrollBehavior","onMouseMove","valueIndex","screenX","screenY","onMouseMovedInKeyboardMode","onMouseEnter","Timepicker","timeInterval","setTime","safeTimeInterval","timeInputRef","dropdownIsOpen","setDropdownIsOpen","useDropdown","rawValue","setRawValue","intervalAdjustedTime","propagateRawToMinute","newRawValue","localRawValue","correctedMinutes","timeOptions","intervalCount","intervalIndex","cacheTime","type$e","Datetime","dateLabel","timeLabel","subtype","dateTimeGroupRef","setDateTime","dateTimeUpdateRequest","setDateTimeUpdateRequest","useDatePicker","useTimePicker","computeAndSetState","newDateTimeValue","workingDate","timezoneOffsetMinutes","dayOffset","serializeDateTime","refreshOnly","newDateTime","allErrors","datePickerProps","timePickerProps","Group","showOutline","fullProps","isDateInputInformationMatching","segments","isDateTimeInputInformationSufficient","pathed","type$d","DEFAULT_HEIGHT","IFrame","security","evaluatedUrl","safeUrl","sanitizeIFrameSource","sandbox","allow","securityMemoized","useSecurityAttributesMap","iframeRefresh","setIframeRefresh","IFramePlaceholder","_path$u","_extends$v","allowScripts","_path$t","SvgButton","_extends$u","_path$s","SvgCheckbox","_extends$t","_path$r","_path2$3","_path3","SvgChecklist","_extends$s","_path$q","_path2$2","SvgDatetime","_extends$r","_rect","_rect2","_rect3","SvgTaglist","_extends$q","_path$p","SvgForm","rx","_extends$p","_path$o","SvgGroup","_extends$o","_path$n","SvgNumber","_extends$n","_path$m","SvgRadio","_extends$m","_path$l","SvgSelect","_extends$l","_path$k","SvgSeparator","_extends$k","_path$j","SvgSpacer","_extends$j","_path$i","SvgDynamicList","_extends$i","_path$h","SvgText","_extends$h","_path$g","SvgHtml","_extends$g","_path$f","SvgExpressionField","_extends$f","_path$e","SvgTextfield","_extends$e","_path$d","SvgTextarea","_extends$d","_path$c","_path2$1","SvgIFrame","_extends$c","_path$b","SvgImage","_extends$b","SvgTable","iconsByType","checklist","datetime","iframe","radio","dynamiclist","taglist","textfield","textarea","type$c","Icon","evaluatedImageSource","safeSource","altText","TemplatedInputAdorner","evaluatedPre","evaluatedPost","_path$a","_extends$a","_path$9","SvgAngelDown","stroke","strokeWidth","_extends$9","SvgAngelUp","isValidNumber","isNullEquivalentValue","type$b","Numberfield","appearance","decimalDigits","increment","incrementValue","prefixAdorner","suffixAdorner","cachedValue","setCachedValue","displayValue","setDisplayValue","debouncedOnChange","flushOnChange","stringValue","replaceAll","outerValueChanged","outerValueEqualsCache","incrementAmount","stepFlooredValue","decrement","onKeyPress","caretIndex","selectionWidth","previousValue","isFirstDot","isFirstMinus","keypressIsNumeric","dotIndex","overflowsDecimalSpace","willKeyProduceValidNumber","onPaste","serializeToString","type$a","Radio","onRadioBlur","onRadioFocus","_path$8","_extends$8","SvgXMark","SearchableSelect","setFilter","isDropdownExpanded","setIsDropdownExpanded","isFilterActive","setIsFilterActive","isEscapeClosed","setIsEscapeClose","searchbarRef","getLabelCorrelation","filteredOptions","displayState","ds","componentReady","displayCross","displayDropdown","onAngelMouseDown","searchbar","keyDownEvent","onInputMouseDown","SimpleSelect","selectRef","valueLabel","type$9","Select","searchable","selectProps","type$8","Separator","type$7","Spacer","DynamicList","SkipLink","onSkip","repeatable","allowAddRemove","defaultRepetitions","type$6","Taglist","hasOptionsLeft","deselectValue","onElementBlur","onElementFocus","shouldDisplayDropdown","onTagRemoveClick","selectValue","NODE_TYPE_TEXT","NODE_TYPE_ELEMENT","ALLOWED_NODES","ALLOWED_ATTRIBUTES","ALLOWED_URI_PATTERN","ATTR_WHITESPACE_PATTERN","FORM_ELEMENT","sanitizeHTML","sanitizeNode","type$5","textLinkTarget","disableLinks","markdownRenderer","sanitizeAndTransformLinks","unsafeHtml","tempDiv","dangerouslySetInnerHTML","type$4","Html","styleScope","rootNode","topLevelRules","cssString","extractTopLevelRules","scopedCss","firstBracket","splitRule","scopedSelector","scopeSelector","wrapCSSStyles","ExpressionField","computeOn","evaluationMemo","expressionLoopPreventer","sendValue","shouldNotRecompute","isEqual$1","registerExpressionExecution","type$2","Textfield","onInputChange","type$1","Textarea","textareaRef","useLayoutEffect","autoSizeTextarea","calculatedHeight","getPropertyValue","heightFromLines","displayHeight","_path$7","_extends$7","_path$6","SvgArrowDown","_extends$6","_path$5","SvgArrowUp","_extends$5","_path$4","SvgCaretLeft","xmlSpace","_extends$4","SvgCaretRight","Table","columnsExpression","dataSource","rowCount","setSortBy","evaluatedColumns","fallbackColumns","evaluation","isColumn","useEvaluatedColumns","columnKeys","evaluatedDataSource","sortedData","chunkedData","currentPage","setCurrentPage","toggleSortBy","getHeaderAriaLabel","colSpan","Logo","Lightbox","onBackdropClick","rel","PoweredBy","setOpen","toggleOpen","Fragment$1","createPortal","remainingOptions","generateInitialDemoData","demoData","demoDataKeys","FormComponent","schema","ariaLabel","onSubmit","onReset","filteredFormData","applyConditions","useFilteredFormData","noValidate","FormFields","_formFields","register","EXPRESSION_PROPERTIES","TEMPLATE_PROPERTIES","getAncestryList","formFieldId","ids","currentFormField","ConditionChecker","_formFieldRegistry","_pathRegistry","contextData","workingData","getFilterPath","_applyConditionsWithinScope","rootField","scopeContext","startHidden","expressionIndexes","scopeData","parentScopeData","executeRecursivelyOnFields","isClosed","isRepeatable","_checkHideCondition","preventRecursion","repeaterValuePath","repeaterValue","newScopeContext","_cleanlyClearDataAtPath","getForm","workingValuePath","parentObject","_isEmptyObject","_isEmptyArray","ExpressionLanguageModule","ExpressionLoopPreventer","_computedExpressions","expressionField","ExpressionFieldModule","MarkdownRenderer","MarkdownRendererModule","CommandStack","_handlerMap","_stack","_stackIdx","_currentExecution","trigger","_injector","_uid","execute","_pushAction","_internalExecute","_popAction","canExecute","_getHandler","_fire","emit","undo","_getUndoAction","_internalUndo","redo","_getRedoAction","_setHandler","registerHandler","handlerCls","canUndo","canRedo","_atomicDo","revert","_markDirty","_revertedAction","qualifier","_createId","execution","atomic","preExecute","_executedAction","postExecute","baseAction","stackIdx","commandModule","commandStack","UpdateFieldValidationHandler","validator","_form","_validator","oldErrors","validateField","updatedErrors","_setState","UpdateFieldInstanceValidationHandler","validateFieldInstance","ViewerCommands","_commandStack","registerHandlers","getHandlers","updateFieldValidation","ViewerCommandsModule","_path$3","_extends$3","_path$2","SvgExpand","_extends$2","_path$1","_path2","SvgCollapse","_extends$1","_path","SvgAdd","_extends","SvgDelete","RepeatRenderManager","sharedRepeatState","repeaterField","nonCollapsedItems","_getNonCollapsedItems","disableCollapse","hasChildren","showRemove","displayValues","onDeleteItem","updatedValues","parentExpressionContextInfo","itemValue","itemIndex","RepetitionScaffold","addButtonRef","setSharedRepeatState","collapseEnabled","showAdd","shouldScroll","scrolledElementRef","scrollOptions","flagRefs","_scrollOptions","_flagRefs","itemToBeScrolled","scrollContainer","itemRect","containerRect","behavior","scrollIfVisible","topOffset","_getTopOffset","useScrollIntoView","_getInitializedFieldData","elementProps","localExpressionContextInfo","RepeatRenderModule","FN_REF","EventBus","_listeners","_destroy","InternalEvent","events","priority","that","actualCallback","_addListener","wrappedCallback","__isTomb","_removeListener","firstListener","returnValue","originalType","_invokeListeners","handleError","_invokeListener","invokeFunction","newListener","previousListener","_getListeners","_setListeners","nextListener","listenerCallback","EMAIL_PATTERN","PHONE_PATTERN","VALIDATE_FEEL_PROPERTIES","Validator","_expressionLanguage","_conditionChecker","runNumberValidation","evaluatedValidation","evaluatedValidate","filteredData","evaluatedValue","oldEvaluateFEELValues","runPresetValidation","evaluateFEELValues","countDecimals","bigValue","bigIncrement","nextValue","validation","isUncheckedCheckbox","isUnsetValue","isEmptyMultiselect","minLength","validationType","Importer","fieldFactory","_fieldFactory","_formLayouter","importSchema","warnings","_cleanup","importedSchema","importFormField","calculateLayout","fieldAttrs","importFormFields","FieldFactory","applyDefaults","fieldDefinition","_ids","parentPath","knownAncestorIds","canClaimPath","labelAttrs","_ensureId","_ensureKey","claimPath","claimerId","_enforceDefaultPath","_getUniqueKeyPath","PathRegistry","_dataPaths","skipAncestryCheck","segment","_getNextSegment","repeaterId","claimCount","unclaimPath","formFieldConfig","callResult","replacements","cutoffNode","localValuePath","hasReplacement","_addIndexes","FormLayouter","_rows","addRow","rowsPerComponent","getRow","allRows","getRowForField","rowsForField","nextRowId","rowsInOrder","groupByRow","formRows","FormFieldRegistry","getAll","FormFieldInstanceRegistry","_formFieldInstances","getAllKeyed","formFieldDefinition","App","formContext","_id","_update","submit","CoreModule","importer","Form","_onEvent","_container","_createInjector","attachTo","_emit","_detach","initializedData","_getSubmitData","getErrorPath","_getModules","additionalModules","submitData","formFieldInstance","basePath","initializeFieldDataRecursively","valueData","initializedFieldValue","_e","__esModule","setImmediate","Xe","ee","Te","Ye","_once","emitterSnapshot","throws","Le","te","Re","le","ne","touches","oe","ce","ue","se","nextElementSibling","fe","De","containers","moves","accepts","isContainer","transformOffset","copySortSource","revertOnSpill","removeOnSpill","ignoreInputTextSelection","mirrorContainer","ke","canMove","pe","de","slideFactorX","slideFactorY","Ae","pageX","pageY","Ee","Oe","_mergeNamespaces","ClassList","removeMatching","bind$1","unbind$1","componentEvent","detect","bugTestDiv","bind_1","unbind_1","unbind","domify","_default","innerHTMLBug","legend","td","th","optgroup","thead","colgroup","caption","tfoot","polyline","ellipse","polygon","circle","domify$1","arrayMoveMutate","arrayMoveModule","mutate","snippets","snippetCompletion$1","contextualKeyword","matchUp","matchLeft","matchChildren","matchRight","ifInside","keywordCompletions","feelLanguage","ParenthesizedExpression","commentTokens","isNodeEmpty","isPathExpression","nodeBefore","variablesFacet","pathExpression","findPathExpression","getPath","childVar","isList","getFilter","getNodeContent","paramsWithNames","paramsSignature","createFunctionVariable","createVariableSuggestion","autocompletion$1","linter$1","autocompletionConf","placeholderConf","FeelEditor","editorExtensions","placeholder$1","setVariables","setPlaceholder","candidateSelectors","candidateSelector","NoElement","msMatchesSelector","webkitMatchesSelector","_element$getRootNode","isInert","lookUp","_node$getAttribute","inertAtt","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assignedElements","nestedCandidates","scopeParent","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","hasTabIndex","getTabIndex","_node$getAttribute2","attValue","isContentEditable","sortOrderedTabbables","documentOrder","isNonTabbableRadio","isRadio","radioSet","radioScope","queryRadios","CSS","getCheckedRadio","isTabbableRadio","isZeroArea","_node$getBoundingClie","_ref","displayCheck","nodeUnderDetails","originalNode","_nodeRoot","_nodeRootHost","_nodeRootHost$ownerDo","_node$ownerDocument","nodeRoot","nodeRootHost","attached","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isNodeAttached","isNodeMatchingSelectorFocusable","isHiddenInput","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","isScope","candidateTabindex","getSortOrderTabIndex","sortable","isTabbable","focusableCandidateSelector","isFocusable","ownKeys","_objectSpread2","_defineProperty","getOwnPropertyDescriptors","defineProperties","hint","prim","toPrimitive","_toPrimitive","_toPropertyKey","activeFocusTraps","trapStack","trap","activeTrap","pause","trapIndex","unpause","isTabEvent","isKeyForward","isKeyBackward","valueOrHandler","getActualTarget","internalTrapStack","createFocusTrap","userOptions","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","paused","delayInitialFocusTimer","recentNavEvent","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","getNodeForOption","optionValue","getInitialFocusNode","tabbableOptions","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbable","focusableNodes","focusable","lastTabbableNode","firstDomTabbableNode","lastDomTabbableNode","posTabIndexesFound","nextTabbableNode","nodeIdx","getActiveElement","tryFocus","isSelectableInput","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref2","_ref2$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref3","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref4","_destinationGroupIndex","_destinationGroup","checkPointerDown","clickOutsideDeactivates","returnFocus","allowOutsideClick","checkFocusIn","targetContained","navAcrossContainers","mruContainerIdx","mruTabIdx","checkKey","isEscapeEvent","checkKeyNav","checkClick","addListeners","removeListeners","mutationObserver","mutation","updateObservedNodes","activate","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","pauseOptions","onPause","onPostPause","unpauseOptions","onUnpause","onPostUnpause","updateContainerElements","containerElements","elementsAsArray","DebounceFactory","timer","lastNow","scheduledDiff","schedule","MIN_COLUMNS","FormLayoutValidator","sumColumns","sumFields","sumAutoCols","emptyImage","img","createEmptyImage","editorFormFieldClasses","classnames","preventDefault$1","EditorIFrame","Label$3","DragAndDropContext","drake","FormEditorContext","useService$1","SvgClose","mixBlendMode","SvgDraggable","_mask","_path4","_path5","_path6","SvgSearch","SvgEmptyForm","strokeLinecap","EditorText","Text$1","EditorHtml","EditorTable","editorColumns","EditorExpressionField","placeholderContent","editorFormFields","ModularSection","rootClass","RootElement","sectionConfig","setShouldRender","ParentElement","onAttach","onDetach","Root","FillContext","addFill","removeFill","Fill","useRef$1","fillContext","useContext$1","useEffect$1","SlotContext","fills","Slot","fillRoot","FillFragment","groupFn","_groupByGroupName","separatorFn","cropped","buildFills","fillRenderer","separatorRenderer","groupsById","groupName","_comparePriority","SlotFillRoot","setFills","onSetFill","onRemoveFill","slotContext","PaletteEntry","iconUrl","getPaletteIcon","modeling","formEditor","getIndefiniteArticle","fieldType","addFormField","PALETTE_GROUPS","Palette","initialPaletteEntries","collectPaletteEntries","paletteEntries","setPaletteEntries","searchTerm","setSearchTerm","getGroup","groupEntries","simplifyString","simplifiedSearchTerm","simplifiedEntryLabel","simplifiedEntryType","handleInput","handleClear","FillRoot","InjectedRendersRoot","injectedRenderers","fetchRenderers","injectedProps","CURSOR_CLS_PATTERN","classes$1","DRAG_CONTAINER_CLS","DROP_CONTAINER_VERTICAL_CLS","DROP_CONTAINER_HORIZONTAL_CLS","DRAG_MOVE_CLS","DRAG_ROW_MOVE_CLS","DRAG_COPY_CLS","DRAG_NO_MOVE_CLS","ERROR_DROP_CLS","Dragging","formLayoutValidator","_formLayoutValidator","_modeling","getTargetIndex","targetRow","targetFormField","siblingFormFieldNode","siblingFormField","getFormFieldIndex$1","validateDrop","formFieldNode","rowId","targetParentId","isRow","getFormParent","rowError","targetParentFormField","currentParentFormField","targetParentPath","currentParentPath","isDropAllowedByPathRegistry","fieldPath","targetIndex","sourceParent","sourceFormField","sourceIndex","sourceRow","moveFormField","createNewField","handleRowDrop","rowNode","siblingRowNode","siblingRow","handleElementDrop","createDragulaInstance","dragulaInstance","dragula","setDropNotAllowed","fieldFormIndex","FieldDragPreview","COLUMNS_REGEX","ELEMENT_RESIZING_CLS","GRID_OFFSET_PX","FieldResizer","startColumns","newColumns","currentColumns","deltaX","getParent","deltaColumns","asColumns","calculateNewColumns","columnNode","onDragStart","getElementNode","startX","onDrag","onEnd","setDragImage","createDragger$1","startWidth","setResizing","onDragEnd","editFormField","unsetResizing","oneColumn","ContextPad","EmptyGroup","EmptyForm","Element$1","setHovered","elementBounds","scrollContainerBounds","isElementLarger","isSelected","classString","DebugColumns","getRemoveButtonTitle","parentField","getFormFieldIndex","removeFormField","FormEditor$1","propertiesPanel","propertiesPanelConfig","formContainerRef","propertiesPanelRef","hasInitialized","setHasInitialized","handleSelectionChanged","setDrake","dragAndDropContext","onCreate","formRenderContext","hasDefaultPropertiesPanel","defaultPropertiesPanel","CreatePreview","handleCloned","original","paletteEntry","findPaletteEntry","renderConfig","formEditorContext","FormFieldRegistry$1","updateId","newId","_validateId","NOT_REGISTERED_ERROR","EditorActions","_actions","_registerDefaultActions","editorActions","zoomScroll","copyPaste","canvas","keyboardMove","keyboardMoveSelection","selectedElements","stepZoom","zoom","removableElements","allowed","removeElements","moveCanvas","accelerated","_registerAction","isRegistered","unregister","BaseEditorActionsModule","FormEditorActions","EditorActionsModule","EditorTemplating","EditorExpressionLanguageModule","KEYS_COPY","KEYS_PASTE","KEYS_REDO","KEYS_UNDO","isCmd","isShift","KEYDOWN_EVENT","HANDLE_MODIFIER_ATTRIBUTE","Keyboard","_config","_keydownHandler","_keyupHandler","bindTo","_keyHandler","_isEventIgnored","keyEvent","isButton","_isModifiedKeyIgnored","_getAllowedModifiers","modifierContainer","checkYourSelf","actualElement","_node","getBinding","addListener","removeListener","hasModifier","KeyboardBindings","keyboard","registerBindings","isUndo","isRedo","isCopy","isPaste","KeyboardModule","keyboardBindings","FormEditorKeyboardBindings","FormEditorKeyboardModule","DraggingModule","CommandInterceptor","createHook","handlerFn","fullEvent","unwrapEvent","preExecuted","executed","postExecuted","reverted","IdBehavior","unclaimId","claimId","KeyBehavior","unclaimKey","claimKey","PathBehavior","ValidateBehavior","newValidate","OptionsSourceBehavior","newProperties","isValuesSourceUpdate","COLUMNS_SOURCE_PROPERTIES","ColumnsSourceBehavior","oldProperties","isColumnSourceUpdate","oldColumns","oldColumnsExpression","TableDataSourceBehavior","BehaviorModule","idBehavior","keyBehavior","pathBehavior","validateBehavior","optionsSourceBehavior","columnsSourceBehavior","tableDataSourceBehavior","arrayAdd$1","arrayRemove","updatePath","refreshPathsRecursively","updateRow","FormLayoutUpdater","_formEditor","updateRowIds","updateLayout","setRowIds","AddFormFieldHandler","targetPath","EditFormFieldHandler","MoveFormFieldHandler","sourcePath","RemoveFormFieldHandler","UpdateIdClaimHandler","claiming","UpdateKeyClaimHandler","UpdatePathClaimHandler","valuePaths","Modeling","ModelingModule","formLayoutUpdater","Selection","_selection","SelectionBehavior","SelectionModule","selectionBehavior","SectionModuleBase","sectionKey","_sectionKey","isSectionRendered","_onceSectionRendered","PaletteRenderer","PaletteModule","palette","ArrowIcon","CreateIcon","DeleteIcon","DragIcon","ExternalLinkIcon","FeelIcon$1","HelpIcon","cy","PopupIcon","CloseIcon","Header","headerProvider","getElementIcon","getDocumentationRef","getElementLabel","getTypeLabel","documentationRef","ElementIcon","DescriptionContext","getDescriptionForId","ErrorsContext","EventContext","LayoutContext","setLayout","getLayoutForKey","setLayoutForKey","TooltipContext","getTooltipForId","TooltipWrapper","forId","contextDescription","useTooltipContext","Tooltip","prefixId$9","visible","setShow","focusedViaKeyboard","setFocusedViaKeyboard","wrapperRef","tooltipRef","show","MouseEvent","hideTooltip","hideHoveredTooltip","isFocused","inBounds","isTooltipHovered","hideFocusedTooltip","renderTooltip","getTooltipPosition","onMouseLeave","refElement","refPosition","useError","useErrors","useEvent","eventContext","didMount","useLayoutState","useShowEntryEvent","onShow","onShowEntry","useStickyIntersectionObserver","scrollContainerSelector","setSticky","setScrollContainer","updateScrollContainer","newScrollContainer","Observer","rootMargin","useStaticCallback","callbackRef","shouldOpen","groupRef","edited","setEdited","sticky","scheduled","hasOneEditedEntry","isEdited","entryNode","propertiesPanelContext","DataMarker","Component","Description$1","useDescriptionContext","noop$6","CodeEditor$1","forwardRef","onPopupOpen","popupOpen","setEditor","localValue","setLocalValue","setBuffer","useBufferedFocus$1","noop$5","CodeEditor","onFeelToggle","useBufferedFocus","FeelIndicator","noop$4","FeelIcon","feelOptionalLabel","pointerType","FeelPopupContext","createDragger","dragPreview","noop$3","Popup","globalRef","closeOnEscape","focusTrapRef","localRef","popupRef","containerNode","getContainerNode","handleFocus","focusTrap.createFocusTrap","fallbackFocus","getPopupParent","Title","showCloseButton","closeButtonTooltip","startPosition","newPosition","dragPreviewRef","titleRef","onMove","popupParent","Body","Footer","FEEL_POPUP_WIDTH","FEEL_POPUP_HEIGHT","FEELPopupRoot","popupContainer","prevElement","popupConfig","setPopupConfig","setSource","sourceElement","setSourceElement","isMounted","useUpdateEffect","entryId","_sourceElement","feelPopupContext","handleIsOpen","FeelPopupComponent","editorRef","isAutoCompletionOpen","domNode","onKeyDownCapture","prefixId$8","ToggleSwitch","switcherLabel","prefixId$7","handleInputCallback","ToggleSwitchEntry","isEdited$8","NumberField","validity","prefixId$6","spellCheck","NumberFieldEntry","globalError","localError","setLocalError","newValidationError","isEdited$7","noop$2","FeelTextfield","OptionalComponent","OptionalFeelInput","_setLocalValue","containerRef","feelActive","feelOnlyValue","_setFocus","openPopup","popupSource","popuOpen","setFocus","handleFeelToggle","handleLocalInput","handleLint","handlePopupOpen","popupOptions","calculatePopupPosition","getPopupTitle","copyHandler","pasteHandler","prefixId$5","closePopup","OptionalFeelNumberField","OptionalFeelToggleSwitch","FeelEntry","example","validationError","setValidationError","FeelNumberEntry","FeelTemplatingEntry","isEdited$6","popupTitle","DEFAULT_LAYOUT","DEFAULT_DESCRIPTION","DEFAULT_TOOLTIP","PropertiesPanel$1","placeholderProvider","layoutConfig","layoutChanged","descriptionConfig","descriptionLoaded","tooltipLoaded","feelPopupContainer","createLayout","useUpdateLayoutEffect","newLayout","layoutContext","set$1","createDescriptionContext","descriptionContext","createTooltipContext","tooltipContext","setErrors","errorsContext","getEmpty","getMultiple","CollapsibleEntry","placeholderLabel","autoFocusEntry","autoOpen","focusableInput","ListGroup","shouldSort","localItems","setLocalItems","newlyAddedItemIds","setNewlyAddedItemIds","addTriggered","setAddTriggered","shouldHandleEffects","previousItemIds","newItemIds","itemId","hasItems","hasError","prefixId$4","handleChangeCallback","CheckboxEntry","isEdited$5","prefixId$3","SelectEntry","getOptions","isEdited$3","resizeToContents","TextArea","autoResize","prefixId$1","isEdited$1","TextfieldEntry","FeelPopupModule","feelPopup","FormPropertiesPanelContext","arrayAdd","isValidDotPath","isProhibitedPath","prohibitedSegments","LABELED_NON_INPUTS","INPUTS","OPTIONS_INPUTS","hasIntegerPathSegment","headerlessTypes","PropertiesPanelPlaceholderProvider","EMPTY","PropertiesPanel","getProviders","selectionModule","selectedFormField","editField","getGroups","PropertiesPanelHeaderProvider","displayLine","textToLabel","getPropertiesPanelHeaderProvider","onFocusCapture","onBlurCapture","PropertiesPanelRenderer","_render","_getProviders","registerProvider","ActionEntry","Action","isDefaultVisible","useVariables","outputs","getAllComponents","expressionVariables","templateVariables","getBindingVariables","bindingVariable","getSchemaVariables","getSchema","AltTextEntry","AltText","AUTO_OPTION_VALUE","ColumnsEntry","Columns","asOption","DescriptionEntry","EMPTY_OPTION","DefaultValueEntry","matchers","defaulValueBase","DefaultValueCheckbox","DefaultValueNumber","DefaultValueSingleSelect","DefaultValueTextfield","DefaultValueTextarea","parseBooleanToString","parseStringToBoolean","decimalDigitsSet","TextAreaEntry","DisabledEntry","Disabled","IdEntry","Id","idValue","SPACE_REGEX","containsSpace","ID_REGEX","QNAME_REGEX","validateId","KeyEntry","Key$2","oldPath","newPath","canClaim","PathEntry","Path","simpleBoolEntryFactory","SimpleBoolComponent","simpleSelectEntryFactory","optionsArray","SimpleSelectComponent","simpleRangeIntegerEntryFactory","SimpleRangeIntegerEntry","MIN_SAFE_INTEGER","GroupAppearanceEntry","LabelEntry","DateLabel","TimeLabel","Label$2","getLabelText","HeightEntry","Height","validate$7","HTTPS_PATTERN","IFrameUrlEntry","Url","validate$6","ImageSourceEntry","Source$1","TextEntry","description$1","HtmlEntry","Content","validate$5","NumberEntries","NumberDecimalDigits","NumberArrowStep","validateNumberEntries","minimumValue","clearLeadingZeroes","ExpressionFieldEntries","ExpressionFieldExpression","ExpressionFieldComputeOn","NumberSerializationEntry","SerializeToString","DateTimeEntry","DateTimeSubtypeSelect","Use24h","initTimeConfig","initDateConfig","timeConfigPaths","clearTimeConfig","dateConfigPaths","clearDateConfig","DateTimeConstraintsEntry","subtypes","TimeIntervalSelect","DisallowPassedDates","timeIntervals","DateTimeFormatEntry","TimeFormatSelect","SelectEntries","ValueEntry","idPrefix","validateFactory","Label$1","Value$1","CustomValueEntry","Key$1","Value","oldKey","newKey","updateKey","AutoFocusSelectEntry","OptionsSourceSelectEntry","ValuesSourceSelect","getAutoFocusEntryId$1","valueSource","newField","valuesSource","InputKeyOptionsSourceEntry","InputValuesKey","validate$4","StaticOptionsSourceEntry","removeEntry","labelOrValueIsAlreadyAssignedForIndex","getIndexedEntry","existingEntry","AdornerEntry","PrefixAdorner","SuffixAdorner","ReadonlyEntry","Readonly","FeelToggleSwitchEntry","LayouterAppearanceEntry","RepeatableEntry","nonCollapseItemsEntry","ConditionEntry","Condition","OptionsExpressionEntry","OptionsExpression","TableDataSourceEntry","Source","validate$3","PaginationEntry","Pagination","path$2","RowCountEntry","RowCount","validate$2","OPTIONS","SELECT_OPTIONS","COLUMNS_PATH","COLUMNS_EXPRESSION_PATH","HeadersSourceSelectEntry","HeadersSourceSelect","getAutoFocusEntryId","PATH","ColumnsExpressionEntry","ColumnsExpression","validate$1","path$1","labelPath","keyPath","ColumnEntry","Key","StaticColumnsSourceEntry","GeneralGroup","SerializationGroup","ConstraintsGroup","VALIDATION_TYPE_OPTIONS","email","phone","ValidationGroup","isCustomValidation","Required","ValidationType","MinLength","MaxLength","Pattern","Min","Max","OptionsGroups","propertiesPanelEntries","hasOptionsGroupsConfigured","CustomPropertiesGroup","removeKey","AppearanceGroup","LayoutGroup","SecurityAttributesGroup","securityEntries","Advisory","createEntries","ConditionGroup","TableHeaderGroups","fieldId","areStaticColumnsEnabled","TOOLTIP_TEXT","PropertiesProvider","_filterVisibleEntries","hasEntryConfigured","PropertiesPanelModule","propertiesProvider","RenderInjector","registeredRenderers","attachRenderer","detachRenderer","RenderInjectionModule","renderInjector","SvgRepeat","EditorRepeatRenderManager","FormEditor","exporter","saveSchema","schemaVersion","exportDetails","cleanedSchema","exportSchema","rangeType","RangeRenderer","_props$errors","_field$range","_templateObject","_taggedTemplateLiteral","_ref2$errors","_ref2$disabled","_ref2$readonly","_objectSpread","_excluded","_excluded2","_e$f","_slicedToArray","_o2","webpackChunk_winconf_webcomponent","Tt","Wt","it","ve","Ne","Pe","he","Ie","_super","_typeof","ut","In","parentWindow","qt","xt","St","yn","cs","Pt","ls","Nr","lr","Xt","ur","ac","cc","Ai","xn","inputTarget","domHandler","xo","pointers","changedPointers","isFirst","isFinal","session","eventType","firstInput","Po","firstMultiple","dn","center","timeStamp","deltaTime","angle","lc","us","offsetDelta","prevDelta","prevInput","deltaY","offsetDirection","Su","Ls","overallVelocityX","overallVelocityY","overallVelocity","rotation","maxPointers","lastInterval","velocity","fi","velocityX","velocityY","srcEvent","recognize","atan2","PI","evEl","evTarget","evWin","hc","mouseup","Oo","sp","hs","pressed","pointerdown","pointermove","pointerup","pointercancel","pointerout","dc","kr","Cu","Ro","store","MSPointerEvent","PointerEvent","pointerId","sn","touchend","touchcancel","Tu","started","cp","changedTouches","Ot","Iu","Hi","targetIds","lp","Pn","fc","mouse","primaryTouch","lastTouches","ii","Au","Fs","sourceCapabilities","firesTouchEvents","pc","gc","mc","Lr","ko","Be","supports","vc","touchAction","recognizers","getTouchAction","preventDefaults","preventSrc","Lo","simultaneous","requireFail","Pu","Fo","Kn","pX","pY","wc","Ec","_timer","bc","Ou","Sc","pTime","pCenter","Br","preset","Ru","oldCssProps","inputClass","Nu","recognizeWith","requireFailure","cssProps","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","attrTest","directionTest","taps","posThreshold","failTimeout","tapCount","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","curRecognizer","gesture","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","Manager","Input","TouchAction","TouchInput","MouseInput","PointerEventInput","TouchMouseInput","SingleTouchInput","Recognizer","AttrRecognizer","Tap","Pan","Swipe","Pinch","Rotate","Press","bindFn","prefixed","Hammer","js_beautify","css","css_beautify","html_beautify","__parent","__character_count","__indent_count","__alignment_count","__wrap_point_index","__wrap_point_character_count","__wrap_point_indent_count","__wrap_point_alignment_count","__items","__cache","__indent_size","indent_size","__indent_string","indent_char","indent_with_tabs","indent_level","__base_string","__base_string_length","__indent_cache","_end_with_newline","end_with_newline","wrap_line_length","indent_empty_lines","__lines","previous_line","current_line","next_line","space_before_token","non_breaking_space","previous_token_wrapped","__add_outputline","clone_empty","set_indent","has_match","is_empty","get_indent_size","_set_wrap_point","_should_wrap","_allow_wrap","add_new_line","_remove_indent","_remove_wrap_indent","get_indent_string","__ensure_cache","__add_column","get_line_number","just_added_newline","get_code","set_wrap_point","add_raw_token","newlines","whitespace_before","add_token","__add_space_before_token","remove_indent","just_added_blankline","ensure_empty_line_above","Output","raw_options","_get_boolean","_get_characters","_get_number","preserve_newlines","max_preserve_newlines","_get_selection_list","_get_array","_get_selection","_is_valid_selection","Options","normalizeOpts","mergeOpts","__input","__input_length","__position","hasNext","__match","testChar","readUntil","readUntilAfter","get_regexp","get_literal_regexp","peekUntilAfter","lookBack","InputScanner","__directives_block_pattern","__directive_pattern","__directives_end_ignore_pattern","get_directives","readIgnored","Directives","Beautifier","beautify","_source_text","_options","_ch","NESTED_AT_RULE","media","CONDITIONAL_GROUP_RULE","NON_SEMICOLON_NEWLINE_PROPERTY","eatString","eatWhitespace","_output","foundNestedPseudoClass","print_string","_indentLevel","preserveSingleSpace","outdent","_nestedLevel","newline_between_rules","brace_style","selector_separator_newline","space_around_combinator","Token","comments_before","opened","directives","TokenStream","WhitespacePattern","START","RAW","EOF","__tokens","_patterns","whitespace","tokenize","_reset","_get_next_token","_is_comment","_is_opening","_is_closing","_is_first_token","_readWhitespace","_create_token","newline_count","whitespace_before_token","TOKEN","__tokens_length","__parent_token","_line_regexp","__set_whitespace_patterns","_match_pattern","_newline_regexp","__split","_create","_starting_pattern","_until_pattern","_until_after","read_match","until_after","starting_with","django","erb","handlebars","php","smarty","angular","__template_pattern","_disabled","__patterns","handlebars_comment","handlebars_unescaped","django_value","django_comment","smarty_comment","smarty_literal","__set_templated_pattern","read_options","exclude","_read_template","TemplatablePattern","alignment_size","tag_name","parser_token","_printer","_current_frame","_js_beautify","_css_beautify","_tag_stack","_is_wrap_attributes_force","wrap_attributes","substr","_is_wrap_attributes_force_expand_multiline","_is_wrap_attributes_force_aligned","_is_wrap_attributes_aligned_multiple","_is_wrap_attributes_preserve","_is_wrap_attributes_preserve_aligned","current_line_has_match","set_space_before_token","print_preserved_newlines","TEXT","print_newline","traverse_whitespace","print_token","deindent","get_full_indent","get_parser_token","record_tag","_try_pop_frame","_get_frame","try_pop","indent_to_tag","TAG_OPEN","COMMENT","_handle_tag_open","ATTRIBUTE","EQUALS","VALUE","tag_complete","_handle_inside_tag","TAG_CLOSE","_handle_tag_close","_handle_text","CONTROL_FLOW_OPEN","_handle_control_flow_open","CONTROL_FLOW_CLOSE","_handle_control_flow_close","is_unformatted","tag_start_char","has_wrapped_attrs","indent_content","is_content_unformatted","is_inline_element","attr_count","wrap_attributes_min_attrs","custom_beautifier_name","_print_custom_beatifier_text","Vn","indent_scripts","_get_tag_open_token","is_empty_element","is_start_tag","_set_tag_position","start_tag_token","is_end_tag","multiline_content","tag_check","wrap_attributes_indent_size","void_elements","unformatted","content_unformatted","inline_custom_elements","_do_optional_end_element","extra_liners","_calcluate_parent_multiline","indent_inner_html","indent_head_inner_html","indent_body_inner_html","indent_handlebars","unformatted_content_delimiter","UNKNOWN","_current_tag_name","word_control_flow_close_excluded","single_quote","double_quote","element_name","angular_control_flow_start","handlebars_open","handlebars_raw_close","cdata","conditional_comment","processing","_unformatted_content_delimiter","_read_open_handlebars","_read_attribute","_read_close","_read_control_flows","_read_raw_content","_read_content_word","_read_comment_or_cdata","_read_processing","_read_open","_is_content_unformatted","line_starters","positionable_operators","RESERVED","before_newline","preserve_newline","multiline_frame","start_line_index","_tokens","_last_last_text","_flags","_previous_flags","_flag_store","create_flags","indentation_level","line_indent_level","last_token","START_BLOCK","last_word","declaration_statement","declaration_assignment","inline_frame","if_block","else_block","class_start_block","do_block","do_while","import_block","in_case_statement","in_case","case_body","case_block","alignment","ternary_depth","test_output_raw","set_mode","handle_token","START_EXPR","handle_start_expr","END_EXPR","handle_end_expr","handle_start_block","END_BLOCK","handle_end_block","WORD","handle_word","SEMICOLON","handle_semicolon","STRING","handle_string","handle_equals","OPERATOR","handle_operator","COMMA","handle_comma","BLOCK_COMMENT","handle_block_comment","handle_comment","DOT","handle_dot","handle_eof","handle_unknown","handle_whitespace_and_comments","keep_array_indentation","Yt","allow_wrap_or_preserved_newline","operator_position","restore_mode","print_token_line_indentation","comma_first","start_of_object_property","start_of_statement","space_in_paren","space_before_conditional","space_after_named_function","space_after_anon_function","space_in_empty_paren","brace_preserve_inline","jslint_happy","after_newline","preserve","print_block_commment","allLineBreaks","break_chained_methods","unindent_chained_methods","identifierStart","identifierMatch","braces_on_own_line","unescape_strings","e4x","punct","block_comment","html_comment_start","html_comment_end","include","shebang","template_text","template_expression","_read_non_javascript","_read_string","_read_pair","_read_word","_read_singles","_read_comment","_read_regexp","_read_xml","_read_punctuation","has_char_escapes","_read_string_recursive","_allow_regexp_or_xml","_kn","_bl","lastCleanEpoch","producerNode","producerLastReadVersion","producerIndexOfThis","nextProducerIndex","liveConsumerNode","liveConsumerIndexOfThis","consumerAllowSignalWrites","consumerIsAlwaysLive","producerMustRecompute","producerRecomputeValue","consumerMarkedDirty","consumerOnSignalRead","_step","_iterator","_createForOfIteratorHelper","_ve","_n$consumerMarkedDirt","_n$liveConsumerNode$l","_n$liveConsumerNode","_n$producerNode","_n$producerIndexOfThi","_n$producerLastReadVe","_n$liveConsumerNode2","_n$liveConsumerIndexO","equal","computation","hasRun","cleanupFn","_classCallCheck","initialTeardown","_parentage","_finalizers","_createClass","unsubscribe","_step2","_iterator2","_step3","_iterator3","_e2","_toConsumableArray","_hasParent","_addParent","_removeParent","_setTimeout","_x","_x2","delegate","_clearTimeout","_x3","bu","_Xt","_callSuper","isStopped","destination","_assertThisInitialized","_inherits","_next","_error","_complete","_get","_getPrototypeOf","uc","rp","partialObserver","_us","_this2","observable","_subscribe","_this3","_trySubscribe","_this4","Du","subscribe","_this5","_sn","_this6","currentObservers","thrownError","lift","_this7","_throwIfClosed","_step4","_iterator4","_this8","_this9","_checkFinalizedStatuses","_innerSubscribe","_this10","asObservable","_Ot","_this11","_Ot2","_this12","hn","_us2","_this13","onFinalize","shouldUnsubscribe","_Error","_this14","_wrapNativeSuper","jr","Kt","It","vn","overriddenName","wp","LO","__forward_ref__","Ep","qe","He","providedIn","Ho","Vu","Yw","Uu","Xw","zu","bp","zO","ɵprov","ɵinj","ngInjectableDef","ngInjectorDef","_desc","ngMetadataName","__NG_ELEMENT_ID__","Ip","ɵproviders","Cc","ɵcmp","Ap","ɵdir","Mp","ɵpipe","Vr","ɵfac","Dc","Jw","__NG_ENV_ID__","Je","xp","Pp","ct","Host","Self","SkipSelf","Optional","e0","si","t0","Go","Tc","Op","Hu","qO","n0","gs","XO","be","Gu","skipSelf","Rp","ZO","Vs","$o","s0","$u","Mi","c0","Bp","qu","Ku","OnPush","Wi","Emulated","None","ShadowDom","SignalBased","HasDecoratorInputTransform","rR","jp","u0","l0","Ac","h0","d0","sR","Vp","oR","aR","cR","f0","p0","fR","zp","_n$signals","_0","decls","vars","consts","ngContentSelectors","onPush","changeDetection","directiveDefs","pipeDefs","getStandaloneInjector","signals","encapsulation","schemas","m0","Yu","_step5","_iterator5","hostVars","hostAttrs","exportAs","contentQueries","viewQuery","imul","_R","wn","mR","Mc","declarations","transitiveCompileScopes","g0","_r$","xi","On","providersResolver","hostBindings","declaredInputs","inputTransforms","inputConfig","setInput","findHostDirectiveDefs","hostDirectives","debugInfo","_n$features","y0","_len3","_key3","Up","ɵfromNgModule","_len4","_key4","Zu","v0","_loop","_n$t","ngModule","Hp","_step6","_iterator6","useFactory","useValue","_step7","_iterator7","wR","Gp","Us","Wp","$p","Qu","bR","Ju","Ki","qo","_Ki","_this15","_ngOnDestroyHooks","_onDestroyHooks","_destroyed","Kp","processProvider","Ko","injectorDefTypes","assertNotDestroyed","_step8","_iterator8","ngOnDestroy","_step9","_iterator9","_this16","removeOnDestroy","injectableDefInScope","qp","hydrate","ngTokenPath","resolveInjectorInitializers","_step10","_iterator10","_step11","_iterator11","useExisting","useClass","_construct","_iterator12","_step12","S0","Zt","ge","Ue","pn","Yi","Rn","Yn","Xo","Vt","gn","pr","Oc","D0","Zo","Qt","Hs","Qo","zr","Jo","T0","Pi","Fe","Xp","gr","ea","ih","HasTransplantedViews","bn","Un","Zp","Gs","componentOffset","rh","Xi","Nc","P0","currentValue","firstChange","O0","applyValueToInputSignal","kc","R0","ngOnChanges","VR","jR","k0","N0","ngInherit","_r","ft","Xn","Fc","mi","ng","Oi","B0","j0","oh","sh","_n$Pi","ig","_n$pr$changeDetection","changeDetectionScheduler","notify","_n$pr$changeDetection2","Ur","ah","Ze","lFrame","eE","bindingsEnabled","skipHydrationRootTNode","z0","lView","st","At","$0","currentTNode","Zi","og","K0","Y0","Qi","bindingIndex","tN","bindingRootIndex","cg","currentDirectiveIndex","ug","currentQueryIndex","lh","iN","declTNode","Q0","J0","hg","contextLView","bindingStartIndex","inI18n","elementDepthCount","currentNamespace","tE","nE","dg","Nn","qs","rE","jc","mr","uh","directiveStart","directiveEnd","_n$contentHooks","_n$contentHooks2","_n$contentCheckHooks","_n$viewHooks","_n$viewHooks2","_n$viewCheckHooks","_n$destroyHooks","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","hh","sE","dh","fg","uN","oE","ta","Vc","resolving","canSeeViewProviders","injectImpl","gg","Ks","parentInjector","_g","zc","Uc","mg","fh","cE","lE","_N","ph","uE","firstCreatePass","injectorIndex","yg","blueprint","gh","yE","vg","hE","dE","fE","pE","EN","_E","gE","vN","_h","Ys","providerIndexes","_t$preOrderHooks2","_t$preOrderHooks3","_t$preOrderCheckHooks2","_e$type$prototype","ngOnInit","ngDoCheck","_t$preOrderHooks","_t$preOrderCheckHooks","preOrderHooks","preOrderCheckHooks","Sn","_tNode","_lView","SE","kn","_e$name","bg","ngOriginalError","THROW_IF_NOT_FOUND","NULL","TE","Ji","_n","ON","PN","_Ji","_this17","_this18","ra","_n2","taskId","pendingTasks","hasPendingTasks","_hasPendingTasks","$r","_Ot3","RN","_be","_be2","_this19","destroyRef","__isAsync","_c$next","_c$error","_c$complete","wrapInTimeout","_this20","_this20$pendingTasks","_this20$pendingTasks2","vh","IE","_unused","AE","queueMicrotask","Sg","wh","NN","Ct","hasPendingMacrotasks","hasPendingMicrotasks","isStable","onUnstable","onMicrotaskEmpty","onStable","_e$enableLongStackTra","enableLongStackTrace","_e$shouldCoalesceEven","shouldCoalesceEventChangeDetection","_e$shouldCoalesceRunC","shouldCoalesceRunChangeDetection","_e$scheduleInRootZone","scheduleInRootZone","assertZonePatched","_nesting","_outer","_inner","TaskTrackingZoneSpec","longStackTraceZoneSpec","callbackScheduled","Dg","isCheckStableRunning","Cg","onInvokeTask","invokeTask","ME","xE","onInvoke","onHasTask","hasTask","_hasPendingMicrotasks","microTask","macroTask","onHandleError","runOutsideAngular","runTask","scheduleEventTask","kN","cancelTask","runGuarded","assertInAngularZone","isInAngularZone","assertNotInAngularZone","Tg","_n$","vr","_console","_findOriginalError","zN","UN","sa","oa","_n3","nativeElement","RE","HN","_results","Ig","_emitDistinctChangesOnly","_onDirty","_changesDetected","_changes","_this$_changes","POSITIVE_INFINITY","notifyOnChanges","onDirty","_this$_onDirty","Gc","Mg","$N","xg","Og","Eh","Hn","HE","$E","GE","ca","uk","JE","Xs","eb","tb","_ys$body","nb","jg","Qg","ub","ws","Important","DashCase","Jg","pa","jb","Qs","destroyNode","Bh","kh","Lb","_e$pr$changeDetection","Fb","n_","detachView","Lh","i_","Vb","s_","Hb","Fh","r_","Js","a_","$b","projection","c_","qb","projectionNext","Kb","Yb","mergedAttrs","et","l_","Xb","rt","Zb","transformFn","jh","eo","insertBeforeIndex","directiveStylingLast","propertyBindings","localNames","initialInputs","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","Qb","h_","d_","Jb","Vh","rendererFactory","createRenderer","$2","rS","f_","incompleteFirstPass","p_","queries","expandoStartIndex","hostBindingOpCodes","firstUpdatePass","staticViewQueries","staticContentQueries","directiveRegistry","pipeRegistry","ssrId","tS","_i9","nS","g_","_s8","_s9","_o7$findHostDirective","_i10","iS","_n$preOrderHooks","_n$preOrderCheckHooks","H2","z2","W2","B2","_n$components","sS","oS","y_","aS","_n$Xo","cS","_n$cleanup","zh","v_","q2","w_","_e$zr","finishViewCreation","hS","dS","J2","tL","fS","nL","Uh","_r$begin","begin","b_","_r$end","_i$inlineEffectRunner","inlineEffectRunner","gS","_S","oL","_e$pr$inlineEffectRun","_n$Pi2","_dS$pop","_n$Pi3","mS","_iterator13","_step13","rL","_n$pr$changeDetection3","sl","_cdRefInjectingView","notifyErrorHandler","_appRef","_attachedToViewContainer","Kr","_n4","lL","cL","_aL","_this21","_declarationLView","_declarationTContainer","elementRef","_this$_declarationTCo","createEmbeddedViewImpl","_i$injector","_i$embeddedViewInject","_i$dehydratedView","embeddedViewInjector","dehydratedView","createEmbeddedView","aL","Hh","ya","fl","jS","R_","tF","VS","iF","ngComponent","va","Yh","US","_n5","sF","_n6","Zh","$S","_va2","_this22","_l","WS","propName","templateName","isSignal","_VS","_this23","componentDef","componentType","isBoundToModule","_step14","_iterator14","_r5","selectRootElement","_iterator15","_step15","_gR","_step16","_iterator16","_F","lF","_tF","_this24","location","_rootLView","previousInputValues","hostView","changeDetectorRef","_this$previousInputVa","Er","_n7","mF","YS","qS","_yF","_this25","_lContainer","_hostTNode","_hostLView","KS","insertImpl","createComponent","_c$componentType","projectableNodes","environmentInjector","ngModuleRef","_adjustIndex","insertView","attachToViewContainerRef","L_","XS","createComment","B_","queryList","setDirty","j_","getByIndex","indexInDeclarationView","dirtyQueriesWithMatches","G_","JS","V_","elementStart","elementEnd","embeddedTView","z_","metadata","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","matchTNodeWithReadOption","SF","DF","eC","U_","sC","oC","Qn","_performance","_performance$mark","performance","feature","so","asReadonly","aC","_this26","readonlyFn","oo","CC","_oo","_this27","componentFactoryResolver","debugName","runEnvironmentInitializers","an","X_","TC","vl","Sa","EarlyRead","Write","MixedReadWrite","Read","RC","_n8","impl","_this$impl","ngZone","scheduler","sequences","deferredRegistrations","executing","_this28","_step17","_iterator17","PHASES","_loop2","_step20","_iterator20","_loop3","erroredOrDestroyed","pipelinedValue","_this28$errorHandler","_step18","_iterator18","afterRun","_step19","_iterator19","Cl","hm","Tl","TD","ud","hd","dd","wm","__ngLastListenerFn__","__ngNextListenerFn__","nT","listen","tT","bm","Dm","Tm","qr","e3","_n9","cachedInjectors","getOrCreateStandaloneInjector","_step21","_iterator21","Pm","jm","Ed","Fm","_n10","_this29","_ngZone","registry","_isZoneStable","_callbacks","taskTrackingZone","addToWindow","_watchAngularEvents","_this30","_runCallbacksIfReady","_this31","timeoutId","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","_this32","addCallback","registerApplication","unregisterApplication","Bm","_n11","_applications","getAllRootElements","_jm$findTestabilityIn","_jm","findTestabilityInTree","Vm","_V","pI","_n12","_be3","_this33","donePromise","appInits","runInitializers","_this34","_step22","_iterator22","_loop4","zm","Dr","_n13","_bootstrapListeners","_runningTick","_destroyListeners","_views","internalErrorHandler","afterRenderManager","zonelessEnabled","dirtyFlags","deferredDirtyFlags","externalTestViews","beforeRender","afterTick","componentTypes","pipe","_this35","_this36","resolveComponentFactory","bd","_loadComponent","tick","_tick","synchronize","synchronizeOnce","_t$begin","_t$end","_step23","_iterator23","_step23$value","wV","syncDirtyFlagsWithViews","allViews","attachView","attachToAppRef","detachFromAppRef","_this37","warnIfDestroyed","CV","_n14","applicationRef","initialize","_this38","_onMicrotaskEmptySubscription","runningTick","_this$_onMicrotaskEmp","Um","_n15","ngZoneFactory","ignoreChangesOutsideZone","Hm","_n$eventCoalescing","_n$runCoalescing","eventCoalescing","runCoalescing","TV","_n16","subscription","_this39","_t7","Ll","_n17","_be4","_this$ngZone$_inner","_be5","_this40","appRef","taskService","disableScheduling","zoneIsDefined","schedulerTickApplyArgs","__scheduler_tick__","subscriptions","angularZoneId","cancelScheduledCallback","useMicrotaskScheduler","pendingRenderTaskId","_this41","shouldScheduleTick","_this42","_this$cancelScheduled","Cs","$localize","$m","Cd","platformInjector","Ds","qm","_n18","jV","QV","_n19","ɵmod","QI","Ts","Nd","Pz","Oz","_n20","Rz","queuedEffectCount","queues","scheduleEffect","_this43","enqueue","creationZone","_this44","_step24","_iterator24","_loop5","_step24$value","flushQueue","_step25","_iterator25","Nz","_this45","effectFn","watcher","runEffect","unregisterOnDestroy","_this$injector$get","_this$unregisterOnDes","u1","ny","Lz","Yr","w1","_n21","_ngEl","_renderer","initialClasses","stateMap","rawClass","_step26","_iterator26","_updateState","_iterator27","_step27","_i16","_Object$keys","_applyStateDiff","enabled","_iterator28","_step28","_toggleClass","_this46","addClass","removeClass","klass","ngClass","S1","_n22","_viewContainer","TU","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","$implicit","ngIf","_updateView","C1","ngTemplateContextGuard","ngIfThen","ngIfElse","my","_n23","A1","IH","_Lz","_this47","supportsDOMEvents","Ey","_IH","getDefaultDocument","createHtmlDocument","isElementNode","ELEMENT_NODE","isShadowRoot","getGlobalEventTarget","Hl","baseURI","pathname","resetBaseElement","getUserAgent","getCookie","_step29","_iterator29","decodeURIComponent","cookie","_u5","PH","_n24","XMLHttpRequest","Yd","B1","_n25","_this48","_eventNameToPlugin","_plugins","_findPluginFor","getZone","Sy","j1","_n26","appId","platformId","styleRef","hostNodes","styleNodesInDOM","collectServerRenderedStyles","platformIsServer","resetHostNodes","_iterator30","_step30","changeUsageCount","onStyleAdded","_iterator31","_step31","onStyleRemoved","_step32","_iterator32","getAllStyles","_step33","_iterator33","addStyleToHost","removeHost","_iterator34","_step34","_i$get","_this$doc$head","usage","getStyleElement","_s$get","Cy","xhtml","xlink","math","Dy","kH","z1","Ty","_n27","eventManager","sharedStylesHost","removeStylesOnCompDestroy","rendererByCompId","defaultRenderer","Iy","getOrCreateRenderer","H1","applyToHost","Ay","applyStyles","jH","throwOnSyntheticProps","createText","U1","removeAttributeNS","setStyle","decoratePreventDefault","_this49","_Iy","_this50","hostEl","attachShadow","addHost","_step35","_iterator35","nodeOrShadowRoot","_Iy2","_this51","addStyles","removeStyles","_Ay","_this52","contentAttr","hostAttr","VH","_n28","_by","_this53","zH","_n29","_by2","_this54","G1","UH","Del","Esc","Left","Right","Down","Menu","Scroll","Win","HH","control","GH","_n30","_by3","parseEventName","eventCallback","fullKey","onAndCancel","domEventName","_normalizeKey","matchEventFullKeyCode","YH","makeCurrent","XH","W1","xH","getAngularTestability","getAllAngularTestabilities","getAllTestabilities","getAllAngularRootElements","frameworkStabilizers","whenStable","_e$getTestability","getTestability","q1","JU","ZH","_n31","My","tG","_Ot4","_this55","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","_trimBuffer","Is","J1","asyncIterator","SuppressedError","tA","nA","rA","sA","oA","aA","AsyncIterator","_regeneratorRuntime","_callee","_yield$Is","getReader","sent","abrupt","releaseLock","cA","Tr","lA","_iterator36","_step36","_callee2","_context2","t1","Qr","Zd","_loop6","uA","Ny","dA","ky","fA","pA","Ly","_i$next","_i19","Fy","Qd","scheduleBeforeRender","ZG","matchesSelector","mozMatchesSelector","oMatchesSelector","JG","componentFactory","e$","eventEmitters","_r9","_len5","_key5","componentRef","viewChangeDetectorRef","inputChanges","hasInputChanges","implementsOnChanges","scheduledChangeDetectionFn","scheduledDestroyFn","initialInputValues","unchangedInputs","_ref5","elementZone","_this56","runInZone","initializeComponent","_this57","getInputValue","_this58","_this59","_this59$componentRef","recordInputChange","scheduleDetectChanges","initializeInputs","initializeOutputs","detectChanges","_this60","_ref6","setInputValue","_ref7","callNgOnChanges","markForCheck","_this61","markViewForCheck","t$","_HTMLElement","_this62","ngElementEventsSubscription","rr","AREA","FILLING","FRAME","WING","DIVIDER","BEAM","DIMENSION","By","addChildren","_step37","_iterator37","a$","_e$parent","_step38","_iterator38","getElementById","Ga","_By","_A","_Ga","c$","_Ga2","l$","_Ga3","u$","_Ga4","h$","_Ga5","d$","_Ga6","f$","_a$","jy","mA","Gl","yA","As","DEFAULT","DRAW_IMPOST","DRAW_FRAME","DRAW_WING","DIMLINEAR","DIMALIGNED","Ln","wA","Li","SA","O$","$y","tf","Ir","_ref8","AA","$a","qy","sr","G$","xA","_step39","_iterator39","OA","RA","K$","sin","cos","Y$","X$","NA","_len6","_key6","Z$","cf","_len7","_key7","Q$","LA","_ref9","_ref10","determinant","inverse","reflection","scalarProduct","shear","transpose","Xy","J$","_ref11","e8","FA","t8","bernoulli","BA","binomial","i8","cauchy","l8","chiCDF","h8","exponential","a8","geometric","c8","integrate","UA","o8","normalPDF","u8","poisson","r8","smart","n8","uniform","s8","weighted","lf","jA","VA","zA","p8","g8","_step40","_iterator40","_8","_step41","_iterator41","m8","_step42","_iterator42","HA","GA","y8","_ret","_loop7","f8","coefficients","bestPolynomial","coefficient","linear","logarithmic","polynomial","power","Gn","$l","WA","_step43","_iterator43","_step43$value","project","Se","kt","xMin","xMax","yMin","yMax","changeCoordinates","Fi","rotate","p2","p1","_len8","_key8","manhattan","interpolateList","fromPolar","Zy","Wa","uf","hf","qa","$n","wu","average","slope","unitVector","perpendicular","perpendicularVector","midpoint","distanceSquared","T8","Wl","dot","lengthSquared","reflect","_$n","_this63","_$n2","rO","_this64","po","sc","go","collision","radius","contract","startAngle","Qy","rad","XA","_go","_this65","ZA","_len9","_ref12","_key9","shape","_step44","_iterator44","edges","_loop8","_arr","_i20","I8","A8","M8","Eu","_len10","_key10","signedArea","centroid","_step45","_iterator45","_step46","circumference","_iterator46","_ret2","oriented","_loop9","_step47","_iterator47","_step48","_iterator48","regular","_len11","_key11","_i22","_arr2","_step49","_arr2$_i","_iterator49","R8","_xs","_this66","cr","fromRadians","QA","oc","F8","_step50","_iterator50","_step51","_iterator51","ep","_ref13","_ref14","containsX","containsY","nM","xSum","ySum","gf","iM","G8","vertex1","vertex2","outwardNormal","inwardNormal","vertices","minX","minY","maxX","maxY","rM","isIntersectionOutside","sM","oM","_f","offsetEdges","cM","area","nv","POLYGON","we","_Se","_this67","q8","_QA","K8","_po","Ar","codeError","dataError","unknownError","Mr","unknown","Jr","Ce","_n32","We","getMiddlePoint","getPointWithOffset","equalNumbers","sortPointsByCircle","createArcs","getChildArc","customEnd","getEdgeSegment","chord","getExtremePoints","getPointsOfEdge","_this68","sortPointsByLine","createAdjacencyMatrix","getPointKey","getEdgesByPoints","Gt","getPolygonPointsByEdges","_n$getPointsOfEdge2","getS","_n$getPointsOfEdge4","_n$getPointsOfEdge6","findSegmentVariants","findApproximateSegment","getApproximateEdges","_this69","edgeArcs","_this69$getPointsOfEd2","middlePoint","circle1","circle2","intersect","containArcs","_loop10","Me","pt","Ve","Ke","ze","ht","_n$getPointsOfEdge8","_n$getPointsOfEdge9","_n$getPointsOfEdge10","_n$getPointsOfEdge12","getPointsByClockwise","getBasePoint","_n$getPointsOfEdge14","matchPolygons","externalPolygon","internal","skeleton","_this70","_this70$intersectSegm","_this70$intersectArc","edge","intersectSegment","intersectArc","externalEdge","getAngle","acos","getChildArcs","dividers","areas","deleteImposts","deleteAreas","calculateLineOrthogonalityPoint","axisTolerance","getAdjacentElements","getArc","createEdge","updateEdge","_this$getPointsOfEdge2","isPointOnEdgeVector","_this$getPointsOfEdge4","getCenterEdgeArcPoint","_this$getPointsOfEdge6","getEdgePointName","getSegmentPointName","getArcPointName","getCorrectedSegment","_n$getPointsOfEdge16","getPerpendicularProject","_n$getPointsOfEdge18","Y8","lM","_xs2","_this71","_len12","_key12","fillColor","_Ce$getPointsOfEdge2","_this72","_loop11","getEdgeCenter","customEquals","_this73","createSegments","_this74","breakDownEdgesByPoint","findLoops","_unused2","_this75","frames","cutArcs","getInnerZones","_this76","_c$getOffsetLines","getOffsetLines","line1","line2","getCutSegment_nearestIntersection","_c$getOffsetArcs","getOffsetArcs","arc1","arc2","trimEdges","getCutArc_nearestIntersection","getSkeletons","mullions","containsToChord","containPoint","uM","X8","getAngleBetweenPoints","middleOfArc","_go2","_tv","_this77","getArcParams","_this78","_Wl","_this79","getPerpendicularVectorOffset","getVectorPointWithOffset","hM","randomUUID","crypto","Z8","Q8","getRandomValues","Fn","Si","rng","fM","_Gt","_this80","es","_Gt2","_this81","beams","innerPoints","noBeams","createBeams","innerPolygon","getCutEdge","_this82","getCutLine","getParentAreas","getAreas","beadOffset","dividerOffset","getCutEdge_nearestIntersection","matchMullions","beam","convertIntoFilling","areaId","divider","setAreas","setDividers","getInnerPolygon","wingOverlap","wingOffset","deleteDividers","findDividerByCoords","_this83","isStrokeIncludePoint","findDividerById","_this84","_this85","findBeamByCoords","findAreaByCoords","_t$areas","_this86","_t$areas2","_this87","findAreaByPoints","findAreaById","_t$areas3","_this88","findAreaByDividerId","_this89","findChildDividersByDividerId","_Ce$getPointsOfEdge4","_Ce$getPointsOfEdge6","redivide","createWing","convertIntoWing","findAreaContainedPoint","findLowestArea","_this90","_s$h","_u$edge$getS","_Ce$getPointsOfEdge8","_o$h","adaptBeamPoints","pM","_es","_e$config","_e$config2","_this91","frameOffset","constructionId","couplings","withFilling","createFilling","_this$getInnerPolygon","changeImpostPoint","changeImpostPosition","changePoints","_this$getInnerPolygon2","_ref15","_this$getInnerPolygon3","e4","addFrame","addArea","findInAreas","_iterator52","_step52","checkAreaExistsUnderCoords","_ref16","createDivider","removeWingArea","removeFrameAreaById","getAllAngularPoints","getEdgeAngularPoints","_this92","getAreaDividersAngularPoints","_this93","rv","_n33","deg","transformToCutAngle","isDividerIntersectsPolygonSide","getAngleBetweenSegments","intersects","sv","_n34","materials","profiles","sizes","arcs","profileId","_this94","getBeamPointByBeamMaterial","_this94$getProfileByI","getProfileById","profile","getBeamFromDividerGeometry","convertPoint3DToPoint","_this$sizes$arcs","_ref18","getAreaFromComponent","_this95","geometry","_this$getConstruction","getConstructionSize","mf","_n35","geometryService","helpersService","_this96","_t$definition","convertFrameToCoreArea","konvaConstruction","_this97","getProfileByComponentBeam","beamTypes","handleArea","_r$dividers","_r$components2","_this98","_r$components","isPolygonInside","_a15$sizes","glazingBeadTypes","_a17$sizes","_this99","propertiesGroups","getPropertiesFromPolygon","getDividerFromArea","getTreeBeamsFromArea","fillComponentWithContent","_this100","divideParentComponent","_t$dividers","getDividerComponent","searchOthersDivider","_this101","getDividerProperties","_this102","_this103","r4","_n36","customSizes","getAngularPoints","_this$getExtremePoint","horizontal","_this104","getEdgeArcsCenterPoints","baseLinePoints","pointsIndexes","updateIndexes","updateSize","ov","_n37","constructions","onNewConstruction","onEndMullionDraw","getNoNameNextIndex","_unused3","nt","SimpleLine","PolygonLine","FrameBeamLine","GripsLine","GridMajorLine","GridMinorLine","UCSAxisLine","DummyLine","RandomLine","CustomLine","DimensionLine","DashedLine","CirclePoint","RectPoint","v4","guiConfig","viewPort","setUnitScale","unitScale","rb","tl","getUnitsConfig","drawGridInt","drawUCSInt","getGridConfig","majorStep","minorStep","drawGrid","getUCSConfig","drawUCS","w4","_Xt2","yf","_setInterval","_x4","_x5","_len13","_key13","_clearInterval","_x6","wM","_w2","_this105","recycleAsyncId","requestAsyncId","_execute","Kl","schedulerActionCtor","EM","_Kl","_this106","_active","E4","bM","cv","S4","Ka","WorkerGlobalScope","_global","isBrowser","isUnminified","dblClickWindow","angleDeg","enableTrace","pointerEventsEnabled","autoDrawEnabled","hitOnDragEnabled","capturePointerEventsEnabled","_mouseListenClick","_touchListenClick","_pointerListenClick","_mouseInDblClickWindow","_touchInDblClickWindow","_pointerInDblClickWindow","_mouseDblClickPointerId","_touchDblClickPointerId","_pointerDblClickPointerId","pixelRatio","devicePixelRatio","dragDistance","showWarnings","dragButtons","isDragging","isDragReady","releaseCanvasOnDestroy","_injectGlobal","Konva","Jt","getClassName","Ci","copyInto","getTranslation","skew","skewX","skewY","_getRotation","M4","x4","SM","uv","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","transparent","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","k4","vf","L4","_isElement","_isFunction","_isPlainObject","_isArray","_isNumber","_isString","_isBoolean","isValidSelector","_sign","requestAnimFrame","createCanvasElement","_unused4","createImageElement","_isInDocument","_urlToImage","_rgbToHex","_hexToRgb","getRandomColor","getRGB","colorToRGBA","_namedColorToRBA","_hex3ColorToRGBA","_hex4ColorToRGBA","_hex6ColorToRGBA","_hex8ColorToRGBA","_rgbColorToRGBA","_rgbaColorToRGBA","_hslColorToRGBA","_exec2","_toArray","haveIntersection","cloneObject","cloneArray","degToRad","radToDeg","_degToRad","_radToDeg","_capitalize","throw","_inRange","_getProjectionToSegment","_getProjectionToLine","MAX_VALUE","_prepareArrayForTween","_prepareToStringify","visitedByCircularReferenceRemoval","_assign","_getFirstPointerId","releaseCanvas","_len14","_key14","drawRoundedRectPath","lineTo","arc","ns","CM","hv","dv","Ya","DM","addColorStop","Ef","Yl","Xl","addGetterSetter","addGetter","addSetter","addOverloadedGetterSetter","overWriteSetter","_setAttr","addComponentsGetterSetter","getAttr","_this107","_fireChangeEvent","addDeprecatedGetterSetter","backCompat","afterSetFilter","_filterUpToDate","IM","wf","traceArr","_enableTrace","fillEnabled","_fill","strokeShape","hasStroke","_stroke","fillStrokeShape","fillAfterStrokeEnabled","fillShape","clearTrace","getCanvas","getPixelRatio","setTransform","clearRect","getWidth","getHeight","lineCap","setAttr","getAbsoluteOpacity","_applyLineJoin","lineJoin","arcTo","beginPath","bezierCurveTo","closePath","createImageData","createLinearGradient","createPattern","createRadialGradient","drawImage","isPointInPath","fillRect","strokeRect","fillText","measureText","getImageData","putImageData","quadraticCurveTo","restore","save","setLineDash","mozDash","webkitLineDash","getLineDash","strokeText","_trace","globalCompositeOperation","Y4","_wf","_this108","_canvas","getContext","_fillColor","_fillFunc","_fillPattern","_getFillPattern","_fillLinearGradient","_getLinearGradient","_getRadialGradient","getFillPriority","getFillPatternImage","getFillLinearGradientColorStops","getFillRadialGradientColorStops","_fillRadialGradient","_strokeLinearGradient","getStrokeLinearGradientStartPoint","getStrokeLinearGradientEndPoint","getStrokeLinearGradientColorStops","dash","getStrokeScaleEnabled","_applyLineCap","dashEnabled","dashOffset","getShadowForStrokeEnabled","_strokeFunc","getShadowRGBA","getShadowBlur","getShadowOffset","getAbsoluteScale","X4","_wf2","_this109","willReadFrequently","colorKey","_fillFuncHit","hasHitStroke","hitStrokeWidth","_strokeFuncHit","bf","isCache","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setSize","setWidth","toDataURL","_unused5","Xa","_bf","_this110","fv","_bf2","_this111","hitCanvas","_t","_dragElements","dragStatus","justDragged","_drag","getStage","setPointersPositions","_changedPointerPositions","startPointerPos","startDrag","_setDragPosition","_endDragBefore","getLayer","Stage","_endDragAfter","Sf","Cf","AM","_o","pv","MM","xM","Ps","gv","nW","iW","eventListeners","_allEventListeners","_cache","_attachedDepsListeners","_lastPos","_batchingTransformChange","_needClearTransformCache","_isUnderCache","_dragEventId","_shouldFireChangeEvents","_clearCache","_getCache","_this112","_clearSelfAndDescendantCache","_this$_cache$get","scene","hit","_requestDraw","getClientRect","skipTransform","relativeTo","drawBorder","hitCanvasPixelRatio","imageSmoothingEnabled","drawScene","drawHit","isCached","_transformedRect","getAbsoluteTransform","_applyOpacity","_applyGlobalCompositeOperation","_getCanvasCache","_getCachedSceneCanvas","_drawCachedHitCanvas","_delegate","_off","findAncestors","stopDrag","_remove","_clearCaches","_setChildrenIndices","clearCache","getAncestors","_this113","_batchTransformChanges","_isListening","listening","isVisible","_isVisible","shouldDrawHit","isListening","getZIndex","getAbsoluteZIndex","getDepth","_this114","getRelativePointerPosition","getPointerPosition","getMatrix","_clearTransform","_getAbsoluteTransform","_setTransform","setPosition","offsetX","offsetY","_eachAncestorReverse","moveUp","moveDown","moveToBottom","setZIndex","_getAbsoluteOpacity","_isMatch","isAncestorOf","findAncestor","hasName","_getStage","_fireAndBubble","transformsEnabled","getTransform","_getTransform","_toKonvaCanvas","mimeType","quality","_this115","_this116","toCanvas","toBlob","getDragDistance","removeName","batchDraw","_getProtoListeners","_createDragElement","getAbsolutePosition","_getPointerById","dragBoundFunc","setAbsolutePosition","_dragChange","_listenDrag","_dragCleanup","_this117","isClientRectOnScreen","_createNode","_attrsAffectingSize","Bt","rotateDeg","setRotationDeg","getRotationDeg","Di","_me","_this118","removeChildren","_validateAdd","destroyChildren","_generalFind","_descendants","_step53","_iterator53","_drawCachedSceneCanvas","_drawChildren","clipWidth","clipHeight","clipFunc","clipY","skipShadow","skipStroke","Zl","NM","mv","kM","LM","Ql","BM","jM","VM","zM","UM","HM","Jl","eu","Za","tu","Tf","If","Af","Mf","yv","GM","$M","WM","qM","vv","lW","wv","pointer","nu","Qa","KM","xf","iu","_Di","_this119","_pointerPositions","_buildDOM","_bindContentEvents","_resizeDOM","_checkVisibility","setContainer","getElementsByClassName","bufferCanvas","bufferHitCanvas","getIntersection","_len15","_key15","setPointerCapture","releaseCapture","getLayers","_this120","_ref19","_ref20","pointerenter","pointerover","_getTargetShape","pointerleave","pointerPos","_pointerdown","_this121","_pointermove","_this122","_this123","pointerclick","pointerdblclick","_wheel","_this124","_getContentPosition","_setPointerPosition","Pf","YM","XM","ZM","QM","JM","Ev","ru","_me2","_this125","sceneFunc","_sceneFunc","getHitFunc","hitFunc","_hitFunc","_hasShadow","shadowEnabled","shadowOpacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","__getFillPattern","fillPatternImage","fillPatternRepeat","fillPatternX","fillPatternY","fillPatternRotation","fillPatternScaleX","fillPatternScaleY","fillPatternOffsetX","fillPatternOffsetY","DOMMatrix","__getLinearGradient","fillLinearGradientColorStops","fillLinearGradientStartPoint","fillLinearGradientEndPoint","__getRadialGradient","fillRadialGradientColorStops","fillRadialGradientStartPoint","fillRadialGradientEndPoint","fillRadialGradientStartRadius","fillRadialGradientEndRadius","_getShadowRGBA","hasShadow","_this126","_calculate","_this127","strokeEnabled","strokeLinearGradientColorStops","perfectDrawEnabled","hasFill","shadowForStrokeEnabled","getStrokeHitEnabled","_centroid","getSelfRect","getSceneFunc","_useBufferCanvas","_applyShadow","hasPointerCapture","dashArray","getDashArray","setDashArray","drawFunc","getDrawFunc","setDrawFunc","drawHitFunc","getDrawHitFunc","setDrawHitFunc","SW","Os","_Di2","_this128","_waitingForDraw","_setSmoothEnabled","createPNGStream","getHitCanvas","getNativeCanvasElement","moveToTop","_ref21","_this129","_getIntersection","antialiased","clearBeforeDraw","hitGraphEnabled","disableHitGraph","rs","_Di3","bv","tx","An","_de","_this130","tension","bezier","getTensionPoints","_getTensionPoints","_getTensionPointsClosed","Int8Array","Rt","_de2","_this131","dataArray","pathLength","parsePathData","getPointOnEllipticalArc","getPointOnCubicBezier","getLength","getPointOnLine","getPointOnQuadraticBezier","getLineLength","l_x","l_y","convertEndpointToCenterParameterization","calcLength","Bi","_An","pointerLength","pointerWidth","pointerAtEnding","__fillStroke","pointerAtBeginning","xr","_de3","clockwise","outerRadius","innerRadius","mo","_de4","Ja","_de5","cornerRadius","nx","Cv","Dv","Tv","TW","ec","_rs","_this132","_addListeners","_sync","getText","pointerDirection","pointerHeight","yo","_de6","ix","Rf","tc","su","lx","BW","Av","Mt","_de7","_this133","_partialTextX","_partialTextY","_setTextData","textArr","letterSpacing","_getContextFont","lastInParagraph","lineWidth","strokeStyle","_partialText","measureSize","getTextWidth","textWidth","getTextHeight","fontVariant","_addTextLine","_getTextWidth","ellipsis","trimRight","_shouldHandleEllipsis","_tryToAddEllipsisToLastLine","trimLeft","HW","xLine","xLength","yLine","yLength","xText","yText","GW","stageScale","majorLine","minorLine","scalePoints","strokeScaleEnabled","_this134","Mv","_Os","_this135","xv","Pv","animIdCounter","frame","timeDiff","frameRate","setLayers","addLayer","animations","_addAnimation","_removeAnimation","_handleAnimation","_runFrames","_updateFrameObject","_animationLoop","animRunning","$W","easing","onFinish","yoyo","qW","KW","propFunc","_change","prevPos","_time","_position","_startTime","_finish","play","getPosition","getTimer","onEnterFrame","fx","ou","Linear","anim","tween","_tweenFunc","tweens","_addAttr","onUpdate","trueEnd","trueStart","_this136","onPlay","onReverse","seek","BackEaseIn","BackEaseOut","BackEaseInOut","ElasticEaseIn","asin","ElasticEaseOut","ElasticEaseInOut","BounceEaseOut","BounceEaseIn","BounceEaseInOut","EaseIn","EaseOut","EaseInOut","StrongEaseIn","StrongEaseOut","StrongEaseInOut","px","Util","Transform","Container","stages","Layer","FastLayer","Shape","shapes","Animation","Tween","Easings","Canvas","Rs","_de8","radiusX","radiusY","ji","_de9","_this137","_setImageLoad","_this138","readyState","cropWidth","cropHeight","cropX","cropY","crossOrigin","vo","_de10","_getPoints","sides","gx","wo","_de11","Pr","_de12","_this139","_updated","frameIndex","isRunning","frameOffsets","_updateIndex","getIndex","setIndex","Ns","_de13","numPoints","mx","partialText","yx","Tn","_de14","_this140","dummyCanvas","textBaseline","glyphInfo","setText","_getTextSize","kerningFunc","Ge","_unused6","transposeX","transposeY","vx","XW","wx","ZW","QW","JW","Nf","Ex","bx","Dt","_rs2","_this141","_transforming","_createElements","_handleMouseMove","_handleMouseUp","getNode","setNode","setNodes","_nodes","_getEventNamespace","_this142","useSingleNodeRotation","getAbsoluteRotation","_resetTransformCache","_proxyDrag","findOne","_this143","getNodes","getActiveAnchor","_movingAnchorName","_this144","_getNodeRect","__getNodeRect","__getNodeShape","ignoreStroke","_this145","getX","getY","_createBack","_createAnchor","_this146","_handleMouseDown","_cursorChange","_this147","rotateEnabled","rotateAnchorOffset","shouldOverdrawWholeArea","_anchorDragOffset","anchorDragBoundFunc","rotationSnapTolerance","rotationSnaps","_fitNodesInto","keepRatio","centeredScaling","_removeEvents","_this148","flipEnabled","boundBoxFunc","_this149","enabledAnchors","resizeEnabled","anchorSize","anchorStroke","anchorStrokeWidth","anchorFill","anchorCornerRadius","_batchChangeChild","borderEnabled","borderStroke","borderStrokeWidth","borderDash","lineEnabled","rotateHandlerOffset","enabledHandlers","ss","_de15","Sx","getAngleDeg","setAngleDeg","s6","o6","Ov","kf","au","Eo","Arc","Arrow","Circle","Ellipse","Rect","RegularPolygon","Ring","Sprite","Star","TextPath","Transformer","Wedge","Filters","Blur","blurRadius","Nt","Bn","yt","Brighten","brightness","Contrast","contrast","Emboss","embossStrength","embossWhiteLevel","embossDirection","embossBlend","Enhance","enhance","Grayscale","HSL","saturation","hue","luminance","HSV","Invert","Kaleidoscope","kaleidoscopePower","kaleidoscopeAngle","polarCenterX","polarCenterY","polarRotation","Mask","Noise","noise","Pixelate","pixelSize","Posterize","levels","RGB","RGBA","alpha","Sepia","Solarize","Threshold","ae","construction","framePrimary","frameInner","frameTest","frameTestPoint","areasSkeleton","areasInner","drawingLine","drawingDashedLine","drawingDimensionArrowLine","drawingDimension","dimension","activeMullions","activeMullionsPoint","activeCoreStroke","activeCorePoint","activeBeam","activeBeamPoint","mullionEdge","createImpostPoint","activeWing","activeFilling","metrics","angularPoints","activeCustomSize","customSizePoints","activeCustomSizePoint","predictedCustomSize","k6","_hammer","configureGestureConflicts","_unused7","cu","Mobile","Desktop","L6","_v3","_this150","_lastZoomStep","onDblClick","onScale","onChangeStageSize","onPress","onPressUp","onTouchStart","onTouchEnd","defaultLayer","createLayer","gridLayer","_deviceType","ucsLayer","_unitScale","_stageScale","preventDefaultEvents","initEvents","getStageSize","setStageSize","findLayer","setViewPort","_this151","stageZoom","emitTouchEvent","getCurrentPointerPosition","getOnClick","getOnMouseMove","getObjectById","createGroup","createGroupInt","getOrCreateLayer","lineToKonvaPoints","_this152","createArcInt","_ref23","drawArc","drawLine","getLineConfig","checkOrCreateGroup","createLineInt","notScale","verticesToKonvaPoints","getPolygonConfig","_this153","_this$scalePoints2","_this$scalePoints4","drawFilledDivider","_this154","_e$points","_e$points2","_this154$scalePoints2","drawShapeEdge","_this155","_this155$scalePoints2","_this155$scalePoints4","_this156","_this156$scalePoints2","drawPoint","getPointConfig","drawCircle","drawRect","_this157","_t$c","_this158","xAxis","yAxis","drawCustomDimensionLine","drawEdge","startPoint","endPoint","drawLabel","drawMetrics","drawVerticalSizeLine","_this$scalePoints6","_this$scalePoints8","_this159","createLongLengthDimensionArrowLine","drawShortLengthDimension","_this$scalePoints10","changeSize","drawWing","_t$centroid","drawSkeleton","_this160","intermediatePoint","Cx","F6","grips","vertex","getDefaultStageConfig","xAxisText","yAxisText","je_STROKE","je_COLOR","je_HIT_SIZE","Dx","nc","getMullionEdgeItem","getBeamItem","Tx","gui","drawActiveImpostPoints","_this161","drawDimension","_this162","drawPredictedCustomSize","_this163","drawActiveCustomSize","drawCustomSizeActivePoint","clearActiveCustomSize","deleteObjects","clearAllDividers","deleteObject","clearDrawingDimensionArrowLine","clearDrawingDimension","clearFrames","clearActiveFilling","clearActiveBeam","updateDrawingDashedLine","updateDrawingAngleEdgeLine","_this164","updateDrawingDimensionArrowLine","updateDrawingPredictedCustomDimension","clearPredictedCustomSizePoint","updateFrameTestEdge","getSecondEdgePoint","updateActiveMullionsPoint","clearActiveImposts","B6","_Tx","_this165","drawPolygonByLines","getActiveMullionsItem","drawActiveBeam","drawBeam","drawActiveCoreStroke","_this166","_this167","drawActiveFilling","_this168","drawConstruction","_this169","drawAreaDividers","drawConvertedArea","_this170","_this171","drawAreaDivider","_ref24","_this172","hiddenPoints","handleClick","j6","_Tx2","_this173","drawActiveWing","drawActiveImpost","_this174","_this175","_this176","_this177","_ref25","_this178","Or","SOLID","WIRE","V6","Ix","_n38","onCreateGui","_this$gui","_this$gui2","setDraggable","z6","selectedConstructionId","owspModel","componentTree","coreAreaModel","selectedComponentId","selectedComponentNode","loadingComponentTree","loadingCoreArea","statusbarMode","toolbarMode","lu","Z6","uu","Mx","Nv","_as","kv","xx","i9","r9","_EM","G6","_wM","H6","_this179","ic","_n39","_Hi","Lv","Nx","Lx","Kx","_len16","_key16","Xx","_ic","Ff","_n40","_Hi2","_this180","dispatcher","initialState","reducers","reducerFactory","addFeatures","_ref26","metaReducers","addReducers","removeFeature","removeFeatures","removeReducers","updateReducers","_this181","Zx","_sn2","fu","_n41","_sn3","_this182","actionsObserver","reducerManager","_len17","_key17","Hv","selectSignal","_this183","addReducer","removeReducer","_len18","_key18","_len19","_key19","_i23","_n42","Wv","qv","setResult","clearResult","Vi","stateFn","b9","_len20","_key20","_i26","_len21","_key21","release","_len22","_key22","projector","sP","reducer","extraSelectors","iP","Mn","_len23","_key23","lP","_len24","_key24","_loop12","_step54","_e6","_i27","_iterator54","_loop13","hP","mt","loadOwspSuccess","_p","loadOwspError","loadOwsp","convertOwspToCoreArea","convertOwspToCoreAreaSuccess","convertOwspToCoreAreaError","convertCoreAreaToComponentTree","convertCoreAreaToComponentTreeSuccess","convertCoreAreaToComponentTreeError","selectComponentId","selectComponentTreeNode","updateTreeElement","addTreeNodeElement","addConstructionElement","removeConstructionElement","makeWingElement","addConstruction","selectConstruction","removeConstruction","saveEditedConstruction","exportConstruction","selectStatusbarMode","unselectStatusbarMode","setToolbarMode","yP","_ref27","_ref28","_objectDestructuringEmpty","_ref29","_ref30","_ref31","_ref32","_ref33","_ref34","_ref35","_ref36","_ref37","componentTreeNode","_ref38","payload","_ref39","ew","selectConfiguratorState","Co","selectSelected","bq","propertyPanelGroupSettings","componentTreeSettings","wP","updatePropertiesPanelSettings","updateComponentTreeSettings","Vf","Proxy","_ref40","_ref41","tw","ni","Wn","_len25","_key25","_step55","_iterator55","EP","iw","_len26","_key26","_s22","stateSignals","computedSignals","methods","onInit","rw","sw","singleTapMode","toggleStatusbarMode","clearStatusbarMode","toggleSingleTapMode","toolbarGroupArray","toolbarActiveMode","prevToolbarActiveMode","setToolbarGroup","clearToolbarGroup","setActiveMode","bP","activeMetric","Rq","_ref43","activeMetricCustomSizes","_n43","_ref44","_objectWithoutProperties","createMetricFromConstruction","createConstructionMetrics","addMetric","setActiveMetric","addCustomSize","updateMetrics","removeCustomSizes","_e7","updateActiveMetricCustomSize","_s$activeMetric","updateActiveMetricsCustomSizeList","updateConstructionMetric","_e8","removeActiveMetricCustomSize","resetState","Nq","_n44","_this184","guiService","editorContainerSize","sizeObserver","_this185","_this$editorContainer","editorContainer","createGui","_this$editorContainer2","clearGui","_e$zr2","nC","kq","primary","secondary","Lq","toggleDrawingType","DT","zT","isDrawingButtonActive","Fq","_n45","_this186","constructionService","converterService","drawingType","drawing","isDrawingButtonEnabled","onParseModel","parseConstruction","convertOWSP","_len27","_key27","_e$injector","_e$allowSignalWrites","_s$_lView","_s$_lView$th","manualCleanup","allowSignalWrites","_this186$drawing","_this186$drawing2","_this186$drawing3","_this186$drawing4","clearDrawingLine","clearAreas","_this187","model","Qe","State","Transition","Sequence","Animate","Keyframes","Style","Trigger","Reference","AnimateChild","AnimateRef","Query","Stagger","os","SP","pu","_onDoneFns","_onStartFns","_onDestroyFns","_originalOnDoneFns","_originalOnStartFns","_started","_finished","parentPlayer","totalTime","_onFinish","hasStarted","_onStart","triggerMicrotask","_this188","CP","_this189","players","onDone","_onDestroy","onStart","beforeDestroy","triggerCallback","ks","TP","normalizePropertyName","normalizeStyleValue","aw","cw","_t$totalTime","lw","triggerName","fromState","toState","phaseName","_data","Ti","IP","S7","uw","Do","AP","MP","xP","hw","_n46","getParentElement","computeStyle","dw","fw","A7","pw","zf","Uf","Hf","OP","gw","_w","Gf","Rr","yw","To","gu","steps","mw","NP","_u","R7","_len28","_key28","Ii","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","vw","L7","kP","_fw","$f","Wf","qf","LP","V7","ww","z7","_driver","G7","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","_this190","queryCount","depCount","definitions","transitions","containsDynamicStyles","Io","_this191","_this192","Ew","strValue","timings","currentAnimateTimings","isEmptyStep","_makeStyleAst","_validateStyleAst","_step56","_iterator56","_iterator57","_step57","startTime","_this193","currentQuery","_U","_U2","includeSelf","originalSelector","currentTransition","unsupportedCSSPropertiesFound","bw","preStyleProps","postStyleProps","subTimeline","Kf","_map","_i29","Y7","Z7","Sw","Q7","buildKeyframes","Cw","currentTimeline","delayNextStep","setStyles","timelines","containsAnimation","allowOnlyTimelineStyles","subInstructions","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","_applyAnimationRefDelays","_step58","_iterator58","_r$params","appendInstructionToTimeline","updateOptions","_this194","subContextCount","snapshotCurrentStyles","Yf","applyStylesToKeyframe","_this195","mergeTimelineCollectedStyles","_visitTiming","incrementTime","hasCurrentStyleProperties","forwardFrame","applyEmptyStep","forwardTime","_this196","invokeQuery","currentQueryTotal","currentStaggerTime","_enterClassName","_leaveClassName","Xf","_this197","_copyOptions","J7","stretchStartingKeyframe","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_localTimelineStyles","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_globalTimelineStyles","_loadKeyframe","_step59","_iterator59","_step59$value","_step62","_i30","_step60","_iterator60","_iterator61","_step61","_step61$value","_iterator62","_this$_globalTimeline","_step62$value","_updateStyle","_this198","_iterator63","_step63","_step63$value","_this199","_this200","_Xf","_this201","_stretchStartingKeyframe","_this$timings","jP","VP","isRemovalTransition","fromStyles","toStyles","queriedElements","Dw","zP","_triggerName","_stateStyles","buildStyles","_this$ast$options","UP","_ref45","_ref46","nK","defaultParams","_this202","rK","_this203","_normalizer","transitionFactories","HP","fallbackTransition","matchStyles","oK","aK","bodyNode","_animations","_playersById","_this204","_buildPlayer","_getPlayer","GP","Tw","dK","$P","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","fK","ar","Iw","mu","Aw","pK","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","zi","_this205","phase","statesByElement","afterFlush","_this206","_getTrigger","Mw","absorbOptions","playersByElement","queued","matchTransition","totalQueuedPlayers","transition","player","isFallbackTransition","rc","reportError","deregister","_this207","_signalRemovalForInnerTriggers","_this208","driver","fetchNamespacesByElement","triggerLeaveAnimation","clearElementCache","afterFlushAnimationsDone","_this209","markElementAsRemoved","processLeaveNode","_this210","_this211","childElementCount","totalAnimations","playersByQueriedElement","prepareLeaveAnimationListeners","destroyInnerAnimations","_onRemovalComplete","drainQueuedTransitions","_this212","markedForDestroy","containsElement","gK","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","createNamespace","_balanceNamespaceList","collectEnterElement","registerTrigger","_this213","_fetchNamespace","_iterator64","_step64","Zf","insertNode","removeNode","previousTriggersValues","_buildInstruction","_this214","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","_this215","_e$classList","_this216","markElementAsDisabled","_this217","_flushAnimations","_this218","KP","qn","Ao","Ui","Jf","iO","instruction","Ow","_beforeAnimationBuild","_getPreviousPlayers","XP","qP","_Ee$entries","_Ae$entries","overrideTotalTime","_buildAnimation","setRealPlayer","syncPlayerEvents","vK","_step65","_this219","_iterator65","_loop14","getRealPlayer","_this220","YP","_player","_containsRealPlayer","_queuedCallbacks","_this221","_queueEvent","WP","_n$classList","_n$classList2","yu","_this222","_triggerCache","_transitionEngine","_timelineEngine","onRemove","disableAnimations","_IP2","_IP4","whenRenderingDone","vu","_element","_startStyles","_endStyles","initialStylesByElement","_initialStyles","xw","ZP","_specialStyles","_initialized","currentSnapshot","_duration","_delay","_preparePlayerBeforeStart","_this223","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","fromEntries","_convertKeyframesToObject","_this$domPlayer$curre","_this224","QP","_loop15","JP","eO","engine","ɵtype","_this$delegate$destro","_this$delegate","_this225","_this$_onDestroy","onInsert","removeStyle","CK","_eO","_this226","_this227","_TK","_TK2","scheduleListenerCallback","IK","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","_t$data","_this228","_scheduleCountTask","_this229","_this230","_s30","_this231","tO","_n47","_yu","Pw","nO","PK","_n48","rootComponent","appProviders","_n$get","platformProviders","r3Injector","moduleRef","allPlatformModules","_bootstrapComponents","ngDoBootstrap","uz","_n$providers","customElements","_s31","strategyFactory","_ref47","_t$","_this232","_this233","_ngElementStrategy","_ref48","_r$a","ngElementStrategy","subscribeToEvents","connect","disconnectedCallback","_this234","CustomEvent","observedAttributes","_ref49","plotterType","PlotterRenderer","plotter","jsonParse","RangeField","PlotterField","RenderExtension","rangeField","plotterField","withAutoClosePopup","RangePropertiesProvider","generalIdx","findGroupIdx","RangeEntries","isNumberFieldEntryEdited","Step","_templateObject2","_templateObject3","PlotterPropertiesProvider","layoutGroup","AddModel","PlotterEntries","DictionaryAttributesPropertiesProvider","customSettingsDictionary","typeCompute","boolean","DictionaryAttributesEntries","refDictionary","refDictionaryField","typeDictionaryField","fieldName","arrElement","getValueTypeDictionary","getValueDictRef","getValueDictRefField","selectDictionaryFieldComponent","dictionaryFieldType","dictionaryRef","dictionaryRefField","TextFieldEntry","_templateObject4","PropertiesPanelExtension","rangePropertiesProvider","dictionaryAttributesPropertiesProvider","plotterPropertiesProvider","BaseForm","FormClass","isAdditionalModules","customForm","_BaseForm","FE"],"mappings":"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IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,SAASC,GAAGzlY,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAIxB,GAAEsC,GAAEzE,GAAE+H,GAAEpE,GAAE9I,GAAE,OAAO,IAAIsH,GAAEtH,GAAEkN,GAAE,EAAE,IAAIA,GAAElN,GAAEkN,KAAI1F,GAAErC,IAAGmC,IAAGtH,GAAE,SAASktY,GAAG1lY,GAAErC,GAAEyE,IAAG,IAAI5J,GAAE,GAAG4J,GAAEpC,GAAE8rB,MAAMnuB,IAAG2D,GAAE,GAAG,OAAOA,GAAErE,KAAK+C,GAAE5G,KAAKZ,MAAKwH,GAAE5G,KAAKZ,MAAKwH,GAAE5G,KAAKZ,MAAKwH,GAAE5G,KAAKZ,OAAM8I,EAAC,CAAC,SAASqkY,GAAG3lY,GAAErC,IAAG,OAAOtF,KAAK4K,KAAK5K,KAAKE,IAAIyH,GAAE,GAAGrC,GAAE,GAAG,GAAGtF,KAAKE,IAAIyH,GAAE,GAAGrC,GAAE,GAAG,GAAGtF,KAAKE,IAAIyH,GAAE,GAAGrC,GAAE,GAAG,GAAG,CAACmjC,GAAE81U,gBAAgBl6N,GAAG,aAAa,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,aAAa,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,WAAW,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,iBAAiB,GAAGs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,mBAAmB,GAAGs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,kBAAkB,WAAW,KAAK57G,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,eAAc,EAAG,KAAK57G,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,UAAU,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,MAAM,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,aAAa,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,YAAY,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,MAAM,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,aAAa,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,QAAQ,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,oBAAoB,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,oBAAoB,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,YAAY,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,QAAQ,GAAGs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,YAAY,EAAEs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,SAAS,GAAGs4F,KAAKl0M,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,MAAM,GAAE,SAAS18I,IAAG,OAAW/F,KAACw9W,iBAAgB,EAAGz3W,GAAE,IAAI,IAAIA,GAAE,EAAE,EAAE3H,KAAK4G,MAAMe,OAAK8gC,GAAE81U,gBAAgBl6N,GAAG,QAAQ,GAAE,SAAS18I,IAAG,OAAW/F,KAACw9W,iBAAgB,EAAGz3W,GAAE,IAAI,IAAIA,GAAE,EAAE,EAAE3H,KAAK4G,MAAMe,OAAK8gC,GAAE81U,gBAAgBl6N,GAAG,OAAO,EAAEy5N,GAAGr1U,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,MAAM,GAAE,SAAS18I,IAAG,YAAYy3W,iBAAgB,EAAGz3W,GAAE,IAAI,IAAIA,GAAE,EAAE,EAAE3H,KAAK4G,MAAMe,GAAE,IAAG8gC,GAAE81U,gBAAgBl6N,GAAG,QAAQ,GAAE,SAAS18I,IAAG,OAAO/F,KAAKw9W,iBAAgB,EAAGz3W,GAAE,IAAI,IAAIA,GAAE,EAAE,EAAE3H,KAAK4G,MAAMe,GAAG,IAAE8gC,GAAE81U,gBAAgBl6N,GAAG,OAAO,EAAEy5N,GAAGr1U,GAAE02U,gBAAgB12U,GAAE81U,gBAAgBl6N,GAAG,QAAQ,GAAE,SAAS18I,IAAG,OAAO/F,KAAKw9W,iBAAgB,EAAGz3W,GAAE,EAAE,EAAEA,GAAE,EAAE,EAAEA,EAAC,IAAG8gC,GAAE81U,gBAAgBl6N,GAAG,YAAY,GAAGs4F,KAAKl0M,GAAE02U,gBAAgB,IAAMouB,GAAGrJ,GAAGC,KAAK9mB,QAAQ6mB,GAAG,CAACsJ,IAAIhS,GAAGiS,MAAMxS,GAAGyS,OAAO7R,GAAG8R,QAAQ5I,GAAGr8L,MAAMy8L,GAAGr5K,MAAMywK,GAAG98Q,IAAIs9Q,GAAG/jQ,KAAKwgQ,GAAGz+G,KAAKk/G,GAAG2T,KAAK7R,GAAG8R,eAAe/H,GAAGgI,KAAK3H,GAAG4H,OAAO1H,GAAG2H,KAAKjH,GAAGnvQ,KAAK4lQ,GAAGyQ,SAAS5G,GAAG6G,YAAYvF,GAAGwF,MAAMtB,GAAGuB,QAAQ,CAACC,KAAK,SAAS/oY,IAAG,IAAIyE,GAAE/J,KAAK4G,MAAMhF,KAAK0sY,cAAcvkY,GAAE,GAAG,SAAYpC,GAAErC,IAAG,IAAImC,GAAE4F,GAAE7E,GAAEnD,GAAEgD,GAAE+E,GAAEG,GAAEE,GAAEnE,GAAEgE,GAAEwD,GAAEtD,GAAEuB,GAAEU,GAAEW,GAAER,GAAE6tO,GAAGK,GAAGF,GAAGkB,GAAGb,GAAGi7G,GAAGE,GAAGC,GAAGtvV,GAAEpC,GAAE5G,KAAKZ,GAAEwH,GAAE8rB,MAAMxqB,GAAEtB,GAAEipI,OAAO0oN,GAAGh0V,GAAEA,GAAE,EAAEi0V,GAAGp5V,GAAE,EAAEg5V,GAAGlwV,GAAE,EAAE40O,GAAGv4O,GAAE,EAAE+5O,GAAGxB,IAAIA,GAAG,GAAG,EAAEqB,GAAG,IAAI6tJ,GAAG/mT,GAAG,KAAK8hT,GAAG5oJ,GAAGz1O,GAAG,KAAK8kY,GAAG,KAAKC,GAAGtB,GAAG5nY,IAAGmpY,GAAGtB,GAAG7nY,IAAG,IAAIkD,GAAE,EAAEA,GAAE8wV,GAAG9wV,KAAIs/X,GAAGA,GAAG9lY,KAAK,IAAI+qY,GAAGvkY,KAAIq1O,KAAK73J,GAAG8hT,IAAI,IAAIA,GAAG9lY,KAAKk9O,GAAG3xO,GAAEH,GAAE,EAAEC,GAAE,EAAEA,GAAEpE,GAAEoE,KAAI,CAAC,IAAIuC,GAAE6tO,GAAGK,GAAGF,GAAGnwO,GAAEnE,GAAEgE,GAAEwD,GAAE,EAAEtD,GAAEqwO,IAAIiB,GAAG/0O,GAAEqD,KAAI2B,GAAE8uO,IAAII,GAAGl0O,GAAEqD,GAAE,IAAIqC,GAAEouO,IAAIq7G,GAAGnvV,GAAEqD,GAAE,IAAIgD,GAAEytO,IAAIu7G,GAAGrvV,GAAEqD,GAAE,IAAIK,IAAG4xO,GAAGP,GAAGx1O,IAAG+1O,GAAGpB,GAAG3wO,IAAG+xO,GAAG65G,GAAGpoV,IAAGuuO,GAAG+5G,GAAG0uC,GAAG5oJ,GAAG12O,GAAE,EAAEA,GAAEq1O,GAAGr1O,KAAIs/X,GAAG7+X,EAAE61O,GAAGgpJ,GAAGj6X,EAAEowO,GAAG6pJ,GAAGpnY,EAAEw4V,GAAG4uC,GAAGt/X,EAAE4wV,GAAG0uC,GAAGA,GAAG9lY,KAAK,IAAIwG,GAAE,EAAEA,GAAEq1O,GAAGr1O,KAAIiF,KAAIq6X,GAAG7+X,EAAE61O,GAAG/0O,GAAE1E,GAAE+H,KAAImsV,GAAG/wV,GAAE+wV,GAAG/wV,KAAI,MAAM6wV,GAAGx7G,GAAGr1O,IAAGc,KAAIw+X,GAAGj6X,EAAEowO,GAAGl0O,GAAE1E,GAAE,IAAIg0V,GAAG/rV,KAAIw6X,GAAGpnY,EAAEw4V,GAAGnvV,GAAE1E,GAAE,IAAIg0V,GAAGvoV,KAAIg3X,GAAGt/X,EAAE4wV,GAAGrvV,GAAE1E,GAAE,IAAIg0V,GAAGzpV,IAAGkvO,GAAGrB,IAAIQ,GAAGH,IAAIo7G,GAAGt7G,IAAIw7G,GAAG0uC,GAAGA,GAAG9lY,KAAK,IAAIyH,GAAGy1O,GAAGqvJ,GAAGvoT,GAAGv+E,GAAE,EAAEA,GAAEtH,GAAEsH,KAAIsC,GAAEqD,GAAE,GAAGgsV,GAAGtoV,GAAE09X,IAAIC,GAAG,IAAIr1C,IAAIrvV,GAAEqD,KAAIK,GAAE+gY,IAAIC,KAAKr1C,GAAG,IAAIA,IAAIrvV,GAAEqD,GAAE,IAAI9D,GAAEklY,IAAIC,IAAIr1C,GAAGrvV,GAAEqD,GAAE,IAAIE,GAAEkhY,IAAIC,IAAIr1C,IAAIrvV,GAAEqD,IAAGrD,GAAEqD,GAAE,GAAGrD,GAAEqD,GAAE,GAAG,EAAEK,IAAGD,GAAElE,IAAGyF,GAAEzB,IAAGmC,GAAEqB,IAAGV,GAAE5C,IAAG/D,GAAGR,EAAE8F,IAAGtF,GAAGoE,EAAE4B,IAAGhG,GAAG/I,EAAE0P,IAAG3G,GAAGjB,EAAEnD,GAAEkI,KAAIlI,GAAEoC,GAAEnC,GAAE,GAAGi0V,GAAGl0V,GAAEk0V,KAAK,EAAE9rV,IAAGmC,IAAGnG,GAAGR,EAAEc,GAAE1E,IAAGiE,IAAGm0O,IAAIh0O,GAAGoE,EAAE9D,GAAE1E,GAAE,GAAGiI,IAAGwwO,IAAIr0O,GAAG/I,EAAEqJ,GAAE1E,GAAE,GAAGyL,IAAG8sO,IAAIn0O,GAAGjB,EAAEuB,GAAE1E,GAAE,GAAGoE,GAAGA,GAAGzH,KAAKwL,IAAGsxO,GAAGyvJ,GAAGtlY,EAAE8F,IAAGkvO,GAAGswJ,GAAG1gY,EAAE4B,IAAGypV,GAAGq1C,GAAG7tY,EAAE0P,IAAGgpV,GAAGm1C,GAAG/lY,EAAEoH,IAAGkvO,GAAGrB,IAAIQ,GAAGH,IAAIo7G,GAAGt7G,IAAIw7G,GAAGm1C,GAAGA,GAAGvsY,KAAKoL,IAAG,EAAEG,IAAGpN,EAAE,CAAA,IAAIsH,GAAE,EAAEA,GAAEtH,GAAEsH,KAAI,CAAC,IAAIg2O,GAAGK,GAAGF,GAAGhuO,GAAEtG,GAAEgE,GAAEwD,GAAErD,GAAE,EAAED,GAAEqwO,IAAIiB,GAAG/0O,GAAEqD,GAAE3F,IAAG,IAAIsH,GAAE8uO,IAAII,GAAGl0O,GAAEqD,GAAE,IAAIqC,GAAEouO,IAAIq7G,GAAGnvV,GAAEqD,GAAE,IAAIgD,GAAEytO,IAAIu7G,GAAGrvV,GAAEqD,GAAE,IAAIK,IAAG4xO,GAAGP,GAAGx1O,IAAG+1O,GAAGpB,GAAG3wO,IAAG+xO,GAAG65G,GAAGpoV,IAAGuuO,GAAG+5G,GAAG0uC,GAAG5oJ,GAAG12O,GAAE,EAAEA,GAAEq1O,GAAGr1O,KAAIs/X,GAAG7+X,EAAE61O,GAAGgpJ,GAAGj6X,EAAEowO,GAAG6pJ,GAAGpnY,EAAEw4V,GAAG4uC,GAAGt/X,EAAE4wV,GAAG0uC,GAAGA,GAAG9lY,KAAK,IAAIqG,GAAElI,GAAEqI,GAAE,EAAEA,IAAGlD,GAAEkD,KAAIiF,KAAIq6X,GAAG7+X,EAAE61O,GAAG/0O,GAAEqD,GAAE/E,GAAEZ,IAAG,KAAK4xV,GAAGx7G,GAAGr1O,IAAGc,KAAIw+X,GAAGj6X,EAAEowO,GAAGl0O,GAAEqD,GAAE,IAAIisV,GAAG/rV,KAAIw6X,GAAGpnY,EAAEw4V,GAAGnvV,GAAEqD,GAAE,IAAIisV,GAAGvoV,KAAIg3X,GAAGt/X,EAAE4wV,GAAGrvV,GAAEqD,GAAE,IAAIisV,GAAGzpV,IAAGkvO,GAAGrB,IAAIQ,GAAGH,IAAIo7G,GAAGt7G,IAAIw7G,GAAG0uC,GAAGA,GAAG9lY,KAAKwG,GAAE2wV,KAAK9wV,IAAGlI,IAAG,IAAIiN,GAAE3F,GAAEgC,GAAGy1O,GAAGqvJ,GAAGvoT,GAAG34E,GAAE,EAAEA,GAAEpE,GAAEoE,KAAItD,GAAE,GAAG1E,GAAE+H,IAAG,IAAIgsV,GAAGtoV,GAAE09X,IAAIC,GAAGr1C,GAAG,GAAGrvV,GAAE1E,KAAIoI,GAAE+gY,IAAIC,KAAKr1C,GAAG,IAAIA,IAAIrvV,GAAE1E,GAAE,IAAIiE,GAAEklY,IAAIC,IAAIr1C,GAAGrvV,GAAE1E,GAAE,IAAIiI,GAAEkhY,IAAIC,IAAIr1C,IAAIrvV,GAAE1E,IAAG0E,GAAE1E,GAAE,GAAG0E,GAAE1E,GAAE,GAAG,EAAEoI,IAAGD,GAAElE,IAAGyF,GAAEzB,IAAGmC,GAAEqB,IAAGV,GAAE5C,IAAG/D,GAAGR,EAAE8F,IAAGtF,GAAGoE,EAAE4B,IAAGhG,GAAG/I,EAAE0P,IAAG3G,GAAGjB,EAAEnD,GAAEoC,KAAIpC,GAAEgI,GAAEwwO,IAAIs7G,GAAG9zV,GAAE8zV,IAAIh5V,IAAG,EAAEsN,IAAGmC,IAAGnG,GAAGR,EAAEc,GAAE1E,IAAGiE,IAAGm0O,IAAIh0O,GAAGoE,EAAE9D,GAAE1E,GAAE,GAAGiI,IAAGwwO,IAAIr0O,GAAG/I,EAAEqJ,GAAE1E,GAAE,GAAGyL,IAAG8sO,IAAIn0O,GAAGjB,EAAEuB,GAAE1E,GAAE,GAAGoE,GAAGA,GAAGzH,KAAKwL,IAAGsxO,GAAGyvJ,GAAGtlY,EAAE8F,IAAGkvO,GAAGswJ,GAAG1gY,EAAE4B,IAAGypV,GAAGq1C,GAAG7tY,EAAE0P,IAAGgpV,GAAGm1C,GAAG/lY,EAAEoH,IAAGkvO,GAAGrB,IAAIQ,GAAGH,IAAIo7G,GAAGt7G,IAAIw7G,GAAGm1C,GAAGA,GAAGvsY,KAAKoL,IAAGjN,EAAC,CAAC,CAA3zD,CAA6zDmF,GAAEyE,GAAE,EAAE2kY,SAAS,SAAS/mY,IAAG,IAAIsB,GAAE3D,GAAE,IAAI1D,KAAK+sY,aAAa5kY,GAAEpC,GAAE5G,KAAKZ,GAAE4J,GAAEjI,OAAO,IAAImH,GAAE,EAAEA,GAAE9I,GAAE8I,IAAG,EAAEc,GAAEd,KAAI3D,GAAEyE,GAAEd,GAAE,IAAI3D,GAAEyE,GAAEd,GAAE,IAAI3D,EAAC,EAAEspY,SAAS,SAASjnY,IAAG,IAAIa,GAAElD,GAAEtF,KAAKE,KAAK0B,KAAKitY,WAAW,KAAK,IAAI,GAAG9kY,GAAEpC,GAAE5G,KAAKZ,GAAE4J,GAAEjI,OAAOmH,GAAE,IAAIxB,GAAE,IAAI4F,GAAE,IAAI,IAAI7E,GAAE,EAAEA,GAAErI,GAAEqI,IAAG,EAAES,GAAEc,GAAEvB,IAAGf,GAAEsC,GAAEvB,GAAE,GAAG6E,GAAEtD,GAAEvB,GAAE,GAAGS,IAAG,IAAIA,IAAG,GAAGA,IAAG3D,GAAE2D,IAAG,GAAGxB,IAAG,IAAIA,IAAG,GAAGA,IAAGnC,GAAEmC,IAAG,GAAG4F,IAAG,IAAIA,IAAG,GAAGA,IAAG/H,GAAE+H,IAAG,GAAG5F,IAAGA,IAAG,KAAK,EAAE,EAAEA,GAAE,IAAI,IAAIA,GAAE4F,IAAGA,IAAG,KAAK,EAAE,EAAEA,GAAE,IAAI,IAAIA,GAAEtD,GAAEvB,IAAGS,IAAGA,IAAG,KAAK,EAAE,EAAEA,GAAE,IAAI,IAAIA,GAAEc,GAAEvB,GAAE,GAAGf,GAAEsC,GAAEvB,GAAE,GAAG6E,EAAC,EAAEyhY,OAAO,SAASnnY,IAAG,IAAIrC,GAAE,GAAG1D,KAAKmtY,iBAAiBhlY,GAAE,IAAInI,KAAKotY,mBAAmB7uY,GAAEyB,KAAKqtY,kBAAkBhmY,GAAErH,KAAKstY,cAAcznY,GAAE,EAAE4F,GAAE,EAAE7E,GAAEb,GAAE5G,KAAKsE,GAAEsC,GAAE8rB,MAAMprB,GAAEV,GAAEipI,OAAOxjI,GAAE,EAAE/H,GAAEkI,GAAElF,GAAE,OAAOlI,IAAG,IAAI,WAAWsH,IAAG,EAAE4F,IAAG,EAAE,MAAM,IAAI,MAAM5F,IAAG,EAAE4F,GAAE,EAAE,MAAM,IAAI,YAAY5F,IAAG,EAAE4F,GAAE,EAAE,MAAM,IAAI,QAAQ5F,GAAE,EAAE4F,GAAE,EAAE,MAAM,IAAI,eAAe5F,GAAE,EAAE4F,GAAE,EAAE,MAAM,IAAI,SAAS5F,GAAE,EAAE4F,GAAE,EAAE,MAAM,IAAI,cAAc5F,GAAE,EAAE4F,IAAG,EAAE,MAAM,IAAI,OAAO5F,GAAE,EAAE4F,IAAG,EAAE,MAAM,QAAQuf,GAAER,MAAM,6BAA6BjsB,IAAG,EAAE,CAAC,IAAIsN,IAAGF,GAAE,GAAGH,GAAE9D,GAAE7B,GAAE8F,GAAEjE,GAAE,IAAIA,GAAE,GAAGiE,GAAEjE,GAAEjB,KAAIiB,GAAE,GAAG,IAAIgE,IAAGC,GAAE,EAAEjE,IAAGjE,GAAE,EAAEyL,GAAEzL,GAAE,EAAE,CAAC,IAAImI,GAAEC,GAAE,GAAGqD,GAAE,GAAG/B,GAAE1B,GAAEyD,GAAE/B,GAAE,IAAIA,GAAE,GAAG+B,GAAE/B,GAAE1J,KAAI0J,GAAE,GAAG,IAAIU,GAAEnC,GAAE,GAAGwD,GAAE,EAAE/B,IAAGa,GAAEpH,GAAEgF,GAAE,GAAGhF,GAAEiH,GAAE,GAAGguO,GAAGj1O,GAAEgF,GAAE,GAAGhF,GAAEiH,GAAE,GAAGquO,GAAGt1O,GAAEgF,IAAGhF,GAAEiH,IAAGmuO,GAAGE,GAAG,EAAEA,IAAIA,GAAG,IAAIluO,GAAE,EAAEA,IAAGA,IAAGguO,KAAKE,GAAGluO,KAAI6tO,GAAG,EAAEA,IAAIA,IAAIG,KAAKE,GAAGL,IAAIK,IAAIx4O,GAAE2D,GAAE,CAAC,IAAIiwV,GAAG1wV,GAAEgF,IAAGswO,GAAGs7G,GAAG5wV,GAAEgF,GAAE,GAAGswO,GAAGu7G,GAAG7wV,GAAEgF,GAAE,GAAGswO,GAAGt1O,GAAEgF,IAAG0rV,GAAG,IAAI,IAAIA,GAAG,EAAE,EAAEA,GAAG1wV,GAAEgF,GAAE,GAAG4rV,GAAG,IAAI,IAAIA,GAAG,EAAE,EAAEA,GAAG5wV,GAAEgF,GAAE,GAAG6rV,GAAG,IAAI,IAAIA,GAAG,EAAE,EAAEA,EAAE,KAAK,CAAC,IAAIC,GAAGvvV,GAAE+zO,GAAGw7G,GAAG,EAAEA,GAAG,EAAEA,GAAG,MAAMA,GAAG,KAAK9wV,GAAEgF,IAAGhF,GAAEgF,GAAE,GAAGhF,GAAEgF,GAAE,GAAG8rV,EAAG,CAAA,SAASxoV,GAAE,SAASvD,GAAE,EAAE4hY,QAAQ,SAASxnY,IAAG,IAAIF,GAAEpC,GAAEkI,GAAEE,GAAEnI,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO3B,GAAEmF,GAAE,GAAG2D,GAAE9I,GAAEkN,GAAE/H,GAAE,GAAGkD,GAAE6E,GAAEhF,GAAE/C,GAAE,GAAG8H,GAAE/E,GAAEiB,GAAE1H,KAAKwtY,UAAU,GAAG,IAAI9lY,GAAE,CAAC,IAAImE,GAAE,EAAEA,GAAE1D,GAAE0D,IAAG,GAAGhG,GAAEnC,GAAEmI,GAAE,IAAItN,GAAEA,GAAEsH,GAAEA,GAAEwB,KAAIA,GAAExB,KAAIpC,GAAEC,GAAEmI,GAAE,IAAIJ,GAAEA,GAAEhI,GAAEA,GAAEmD,KAAIA,GAAEnD,KAAIkI,GAAEjI,GAAEmI,GAAE,IAAIpF,GAAEA,GAAEkF,GAAEA,GAAEH,KAAIA,GAAEG,IAAG,IAAID,GAAEwD,GAAEtD,GAAEuB,GAAEU,GAAEW,GAAER,GAAE6tO,GAAGK,GAAG,IAAI70O,KAAI9I,KAAI8I,GAAE,IAAI9I,GAAE,GAAGqI,KAAI6E,KAAI7E,GAAE,IAAI6E,GAAE,GAAGD,KAAI/E,KAAI+E,GAAE,IAAI/E,GAAE,GAAGiB,GAAE,GAAGwH,GAAE7H,GAAEK,IAAG,IAAIL,IAAGuE,GAAErN,GAAEmJ,IAAGnJ,GAAE,GAAGsP,GAAEjH,GAAEc,IAAG,IAAId,IAAG4H,GAAE/C,GAAE/D,IAAG+D,GAAE,GAAGowO,GAAGrwO,GAAE9D,IAAG,IAAI8D,IAAG0wO,GAAGz1O,GAAEiB,IAAGjB,GAAE,KAAKyI,GAAE7H,GAAEK,IAAGL,IAAGqE,GAAE,IAAIrE,GAAE9I,MAAKqN,GAAErN,GAAEmJ,IAAGnJ,GAAEmN,IAAGmC,GAAEjH,GAAEc,IAAGd,IAAGuG,GAAE,IAAIvG,GAAE6E,MAAK+C,GAAE/C,GAAE/D,IAAG+D,GAAE0B,IAAG0uO,GAAGrwO,GAAE9D,IAAG8D,IAAGwC,GAAE,IAAIxC,GAAE/E,MAAKy1O,GAAGz1O,GAAEiB,IAAGjB,GAAEuH,KAAInC,GAAE,EAAEA,GAAE1D,GAAE0D,IAAG,EAAEnI,GAAEmI,GAAE,GAAG2/X,GAAG9nY,GAAEmI,GAAE,GAAGtN,GAAE8I,GAAEuE,GAAEsD,IAAGxL,GAAEmI,GAAE,GAAG2/X,GAAG9nY,GAAEmI,GAAE,GAAGJ,GAAE7E,GAAE4H,GAAEX,IAAGnK,GAAEmI,GAAE,GAAG2/X,GAAG9nY,GAAEmI,GAAE,GAAGpF,GAAE+E,GAAE0wO,GAAGL,GAAG,CAAC,EAAE4xJ,UAAU,SAAS1nY,IAAG,IAAIxH,GAAE8I,GAAE3D,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO,IAAI3B,GAAE,EAAEA,GAAE4J,GAAE5J,IAAG,EAAEmF,GAAEnF,IAAG8I,GAAE,IAAI3D,GAAEnF,IAAG,GAAGmF,GAAEnF,GAAE,GAAG,IAAImF,GAAEnF,GAAE,GAAGmF,GAAEnF,GAAE,GAAG8I,GAAE3D,GAAEnF,GAAE,GAAG8I,EAAC,EAAEqmY,IAAI,SAAS3nY,IAAG,IAAIa,GAAE4H,GAAER,GAAE6tO,GAAGK,GAAGx4O,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAOmH,GAAEjJ,KAAKE,IAAI,EAAE0B,KAAK2tY,cAAc9nY,GAAEzH,KAAK8H,IAAIlG,KAAK4tY,MAAM,KAAK,IAAIniY,GAAE,IAAIzL,KAAK6tY,YAAYpqY,GAAE,EAAE4D,GAAEjJ,KAAKsoV,IAAI7gV,GAAEzH,KAAK+qR,GAAG,KAAK1iR,GAAE,EAAEY,GAAEjJ,KAAKqoV,IAAI5gV,GAAEzH,KAAK+qR,GAAG,KAAK39Q,GAAE,KAAK,KAAK/H,GAAE,KAAKgD,GAAEkF,GAAE,KAAK,KAAKlI,GAAE,IAAIgD,GAAEoF,GAAE,KAAK,KAAKpI,GAAE,KAAKgD,GAAEiB,GAAE,KAAK,KAAKjE,GAAE,KAAKgD,GAAEiF,GAAE,KAAK,KAAKjI,GAAE,KAAKgD,GAAEyI,GAAE,KAAK,KAAKzL,GAAE,KAAKgD,GAAEmF,GAAE,KAAK,GAAGnI,GAAE,KAAKgD,GAAE0G,GAAE,KAAK,KAAK1J,GAAE,KAAKgD,GAAEoH,GAAE,KAAK,KAAKpK,GAAE,GAAGgD,GAAE,IAAIG,GAAE,EAAEA,GAAEuB,GAAEvB,IAAG,EAAEs1O,GAAGx4O,GAAEkD,GAAE,GAAGlD,GAAEkD,GAAE,GAAG4E,IAAGgD,GAAE9K,GAAEkD,GAAE,IAAI+E,IAAGqC,GAAEtK,GAAEkD,GAAE,IAAIiF,IAAGgwO,GAAGn4O,GAAEkD,GAAE,IAAI6E,GAAE/H,GAAEkD,GAAE,GAAGc,GAAE8G,GAAE9C,GAAEsC,GAAEkB,GAAE2sO,GAAGpwO,GAAE/H,GAAEkD,GAAE,GAAGgF,GAAE4C,GAAErB,GAAEa,GAAEH,GAAEguO,GAAGpwO,GAAE/H,GAAEkD,GAAE,GAAGs1O,EAAE,EAAE4xJ,IAAI,SAAS/nY,IAAG,IAAI0F,GAAEoC,GAAEW,GAAER,GAAE6tO,GAAGn4O,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO3B,GAAEH,KAAKE,IAAI,EAAE0B,KAAKH,SAASwH,GAAEjJ,KAAKE,IAAI,EAAE0B,KAAK2tY,cAAc9nY,GAAEzH,KAAK8H,IAAIlG,KAAK4tY,MAAM,KAAK,IAAIhnY,GAAErI,GAAE8I,GAAEjJ,KAAKsoV,IAAI7gV,GAAEzH,KAAK+qR,GAAG,KAAK1lR,GAAElF,GAAE8I,GAAEjJ,KAAKqoV,IAAI5gV,GAAEzH,KAAK+qR,GAAG,KAAK1iR,GAAE,KAAKlI,GAAE,KAAKqI,GAAE,KAAKnD,GAAE+H,GAAE,KAAKjN,GAAE,KAAKqI,GAAE,IAAInD,GAAEkI,GAAE,KAAKpN,GAAE,KAAKqI,GAAE,KAAKnD,GAAEoI,GAAE,KAAKtN,GAAE,KAAKqI,GAAE,KAAKnD,GAAEiE,GAAE,KAAKnJ,GAAE,KAAKqI,GAAE,KAAKnD,GAAEiI,GAAE,KAAKnN,GAAE,KAAKqI,GAAE,KAAKnD,GAAEyL,GAAE,KAAK3Q,GAAE,GAAGqI,GAAE,KAAKnD,GAAEmI,GAAE,KAAKrN,GAAE,KAAKqI,GAAE,KAAKnD,GAAE0J,GAAE,KAAK5O,GAAE,KAAKqI,GAAE,GAAGnD,GAAE,IAAIgI,GAAE,EAAEA,GAAEtD,GAAEsD,IAAG,EAAEowO,GAAGn4O,GAAE+H,GAAE,GAAG/H,GAAE+H,GAAE,GAAGhF,IAAGoH,GAAEnK,GAAE+H,GAAE,IAAID,IAAGgD,GAAE9K,GAAE+H,GAAE,IAAIE,IAAGqC,GAAEtK,GAAE+H,GAAE,IAAI/H,GAAE+H,GAAE,GAAGI,GAAEgC,GAAEnG,GAAE8G,GAAE9C,GAAEsC,GAAEtK,GAAE+H,GAAE,GAAGyD,GAAErB,GAAEjC,GAAE4C,GAAErB,GAAEa,GAAEtK,GAAE+H,GAAE,GAAGowO,EAAE,EAAEkyJ,OAAO,SAAShoY,IAAG,IAAIxH,GAAEmF,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO,IAAI3B,GAAE,EAAEA,GAAE4J,GAAE5J,IAAG,EAAEmF,GAAEnF,IAAG,IAAImF,GAAEnF,IAAGmF,GAAEnF,GAAE,GAAG,IAAImF,GAAEnF,GAAE,GAAGmF,GAAEnF,GAAE,GAAG,IAAImF,GAAEnF,GAAE,EAAE,EAAEyvY,aAAa,SAASjoY,IAAG,IAAIxH,GAAE8I,GAAExB,GAAE4F,GAAEhI,GAAEgD,GAAE+E,GAAEG,GAAEE,GAAEnI,GAAEqC,GAAE8rB,MAAM1pB,GAAEpC,GAAEipI,OAAOtnI,GAAEtJ,KAAK4G,MAAMhF,KAAKiuY,qBAAqBviY,GAAEtN,KAAK4G,MAAMhF,KAAKkuY,qBAAqBh/X,GAAE9Q,KAAKM,MAAMgF,IAAGgI,GAAE,KAAK,KAAK,KAAKhE,GAAE,GAAG,CAAC,IAAIkE,GAAEof,GAAEquV,sBAAsBztW,GAAEimB,MAAMnuB,GAAEkI,GAAEojI,OAAO7mI,GAAE,IAAIgF,GAAEvB,GAAEm1W,WAAW,MAAMhB,aAAa,EAAE,EAAEr8W,GAAEyE,IAAG6iB,GAAE2wV,cAAc/vW,IAAG,SAAS7F,GAAErC,GAAEyE,IAAG,IAAI1B,GAAE+E,GAAEG,GAAEC,GAAErN,GAAEwH,GAAE5G,KAAKkI,GAAE3D,GAAEvE,KAAK0G,GAAEE,GAAE8rB,MAAMpmB,GAAE1F,GAAEipI,OAAOpoI,GAAEuB,GAAEgmY,cAActoY,GAAE,EAAEpC,GAAE0E,GAAEimY,cAAc3iY,GAAE,EAAEI,GAAE,EAAEnE,GAAE,EAAEgE,GAAE,EAAEwD,GAAE,EAAE/B,GAAE/O,KAAK4K,KAAKpC,GAAEA,GAAEnD,GAAEA,IAAG+H,GAAE3F,GAAEe,GAAE+E,GAAEF,GAAEhI,GAAE0J,IAAGvB,GAAExN,KAAK4K,KAAKwC,GAAEA,GAAEG,GAAEA,KAAIwB,GAAEvB,GAAEuB,GAAE,IAAIa,GAAE6tO,GAAGG,GAAGkB,GAAGrvO,GAAEpC,GAAE+C,GAAE3I,GAAEq2O,GAAG,IAAI1tO,GAAEpQ,KAAK+qR,GAAG,IAAI,IAAIttC,GAAG,EAAEA,GAAGrtO,GAAEqtO,IAAI,EAAE,IAAIG,GAAG59O,KAAKqoV,IAAI5qG,GAAGK,IAAIgB,GAAG9+O,KAAKsoV,IAAI7qG,GAAGK,IAAIluO,GAAE,EAAEA,GAAEH,GAAEG,IAAG,EAAExC,GAAEpN,KAAKM,MAAMkI,GAAEuG,GAAEa,GAAEH,GAAEqvO,IAAIrxO,GAAEtN,GAAE,GAAGkI,GAAE,IAAIkF,GAAEvN,KAAKM,MAAM+E,GAAE0J,GAAEa,GAAEH,GAAEmuO,KAAKn2O,GAAE2F,MAAK9D,GAAEnJ,GAAEkI,GAAE,GAAGiF,GAAEnN,GAAEkI,GAAE,GAAGyI,GAAE3Q,GAAEkI,GAAE,GAAGY,GAAE,GAAGZ,GAAE,GAAGo1O,GAAG7tO,GAAEnI,MAAKgG,GAAExE,GAAEZ,GAAE,GAAGiB,GAAEL,GAAEZ,GAAE,GAAGiF,GAAErE,GAAEZ,GAAE,GAAGyI,EAAC,CAAxc,CAA0cnJ,GAAEoH,GAAE,CAACghY,aAAazqY,GAAE,EAAE0qY,aAAajmY,GAAE,IAAI,IAAI,IAAI0F,GAAEnK,GAAEtF,KAAKE,IAAI,EAAEoJ,IAAGmG,IAAG,GAAGA,IAAG,EAAEnG,IAAG,EAAE,IAAI8G,GAAEX,GAAEzP,KAAKulD,KAAK91C,IAAGG,GAAE,EAAE6tO,GAAGrtO,GAAE0tO,GAAG,EAAE,IAAIhtO,GAAErB,GAAEnK,KAAIsK,GAAEQ,GAAEqtO,GAAG,EAAEK,IAAI,GAAG70O,GAAE,EAAEA,GAAEc,GAAEd,IAAG,EAAE,IAAI9I,GAAEyP,GAAEzP,KAAIs9O,GAAGt9O,IAAG29O,GAAGr2O,GAAEzH,KAAK4G,MAAMzG,GAAE2Q,IAAGxL,GAAED,GAAE0J,GAAEhO,KAAK,GAAGwM,GAAE,GAAGjI,GAAE2D,GAAExB,MAAKY,GAAE0G,GAAEhO,KAAKwM,GAAE,GAAGH,GAAE2B,GAAEhO,KAAKwM,GAAE,GAAGwB,GAAEhO,KAAK,GAAG0M,GAAE,GAAGnI,GAAE2D,GAAE9I,MAAK4O,GAAEhO,KAAKwM,GAAE,GAAGwB,GAAEhO,KAAK0M,GAAE,GAAGpI,GAAE0J,GAAEhO,KAAK0M,GAAE,GAAGpF,GAAE0G,GAAEhO,KAAK0M,GAAE,GAAGL,GAAE,IAAInE,GAAE,EAAEA,GAAEc,GAAEd,IAAG,EAAE,IAAImH,GAAEpQ,KAAKM,MAAMmP,IAAGpC,GAAE,EAAEA,GAAE/D,GAAE+D,IAAG,EAAE,CAAC,IAAIlN,GAAE,EAAEA,GAAEiQ,GAAE,EAAEjQ,IAAG,EAAEkF,GAAE0J,GAAEhO,KAAK,GAAGwM,GAAE,GAAGjI,GAAE2D,GAAE9I,MAAKkI,GAAE0G,GAAEhO,KAAKwM,GAAE,GAAGH,GAAE2B,GAAEhO,KAAKwM,GAAE,GAAGwB,GAAEhO,KAAK,GAAG0M,GAAE,GAAGnI,GAAE2D,GAAE,EAAEmH,GAAEjQ,GAAE,KAAK4O,GAAEhO,KAAKwM,GAAE,GAAGwB,GAAEhO,KAAK0M,GAAE,GAAGpI,GAAE0J,GAAEhO,KAAK0M,GAAE,GAAGpF,GAAE0G,GAAEhO,KAAK0M,GAAE,GAAGL,GAAEgD,IAAG,CAAE,EAAC,SAASzI,GAAErC,GAAEyE,IAAG,IAAI1B,GAAE+E,GAAEG,GAAEE,GAAEnE,GAAEmG,GAAEtP,GAAEwH,GAAE5G,KAAKkI,GAAE3D,GAAEvE,KAAK0G,GAAEE,GAAE8rB,MAAMpmB,GAAE1F,GAAEipI,OAAOpoI,GAAEuB,GAAEgmY,cAActoY,GAAE,EAAEpC,GAAE0E,GAAEimY,cAAc3iY,GAAE,EAAEC,GAAE,EAAEwD,GAAE,EAAEtD,GAAE,EAAEuB,GAAE,EAAEqB,GAAEpQ,KAAK4K,KAAKpC,GAAEA,GAAEnD,GAAEA,IAAG+H,GAAE3F,GAAEe,GAAE+E,GAAEF,GAAEhI,GAAE+K,IAAGX,GAAEzP,KAAK4K,KAAKwC,GAAEA,GAAEG,GAAEA,KAAI6C,GAAEX,GAAEW,GAAE,IAAI0tO,GAAGF,GAAGK,GAAGruO,GAAEvC,GAAEowO,GAAGh2O,GAAEq3O,GAAG/0O,GAAEkmY,eAAe,EAAE,IAAI7iY,GAAE,EAAEA,GAAE3F,GAAE2F,IAAG,EAAE,IAAIG,GAAE,EAAEA,GAAEF,GAAEE,IAAG,EAAEE,GAAEL,GAAE5E,GAAEc,GAAEiE,GAAElI,GAAEy4O,GAAG99O,KAAK4K,KAAK6C,GAAEA,GAAEnE,GAAEA,IAAGsG,GAAEQ,GAAEwtO,IAAIA,IAAI,IAAI59O,KAAK8qR,MAAMxhR,GAAEmE,IAAGzN,KAAK+qR,GAAG,IAAIjsC,IAAI,KAAKrB,GAAG,IAAIQ,GAAGj+O,KAAKM,MAAMs9O,IAAItwO,GAAEnN,GAAE,GAAGkI,GAAE,GAAGrI,KAAKM,MAAMw9O,IAAIr2O,GAAEw2O,MAAMntO,GAAE3Q,GAAEkI,GAAE,GAAGmF,GAAErN,GAAEkI,GAAE,GAAG0G,GAAE5O,GAAEkI,GAAE,GAAGY,GAAE,GAAGZ,GAAE,GAAGkF,GAAE9F,GAAE2F,MAAKE,GAAErE,GAAEZ,GAAE,GAAGyI,GAAE7H,GAAEZ,GAAE,GAAGmF,GAAEvE,GAAEZ,GAAE,GAAG0G,GAA7e,CAAgfA,GAAEpH,GAAE,CAACsoY,cAAc,GAAG,CAAC,EAAEC,KAAK,SAASvoY,IAAG,IAAIoC,GAAE,SAAYpC,GAAErC,IAAG,IAAIyE,GAAEsjY,GAAG1lY,GAAE,EAAE,GAAGxH,GAAEktY,GAAG1lY,GAAEA,GAAE8rB,MAAM,EAAE,GAAGxqB,GAAEokY,GAAG1lY,GAAE,EAAEA,GAAEipI,OAAO,GAAGnpI,GAAE4lY,GAAG1lY,GAAEA,GAAE8rB,MAAM,EAAE9rB,GAAEipI,OAAO,GAAGvjI,GAAE/H,IAAG,GAAG,GAAGgoY,GAAGvjY,GAAE5J,IAAGkN,IAAGigY,GAAGntY,GAAEsH,IAAG4F,IAAGigY,GAAG7lY,GAAEwB,IAAGoE,IAAGigY,GAAGrkY,GAAEc,IAAGsD,GAAE,CAAC,IAAI,IAAI7E,GAAE,SAAYb,IAAG,IAAI,IAAIrC,GAAE,CAAC,EAAE,EAAE,GAAGyE,GAAE,EAAEA,GAAEpC,GAAE7F,OAAOiI,KAAIzE,GAAE,IAAIqC,GAAEoC,IAAG,GAAGzE,GAAE,IAAIqC,GAAEoC,IAAG,GAAGzE,GAAE,IAAIqC,GAAEoC,IAAG,GAAG,OAAOzE,GAAE,IAAIqC,GAAE7F,OAAOwD,GAAE,IAAIqC,GAAE7F,OAAOwD,GAAE,IAAIqC,GAAE7F,OAAOwD,EAAE,CAApJ,CAAqJ,CAACnF,GAAE4J,GAAEtC,GAAEwB,KAAI5D,GAAE,GAAGgD,GAAE,EAAEA,GAAEV,GAAE8rB,MAAM9rB,GAAEipI,OAAOvoI,KAAI,CAAC,IAAI+E,GAAEkgY,GAAG9kY,GAAE,CAACb,GAAE5G,KAAK,EAAEsH,IAAGV,GAAE5G,KAAK,EAAEsH,GAAE,GAAGV,GAAE5G,KAAK,EAAEsH,GAAE,KAAKhD,GAAEgD,IAAG+E,GAAEC,GAAE,EAAE,GAAG,CAAC,OAAOhI,EAAE,CAAA,CAAvb,CAAybsC,GAAE/F,KAAKspK,aAAa,OAAOnhK,KAAIA,GAAE,SAAYpC,GAAErC,GAAEyE,IAAG,IAAI,IAAI5J,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG8I,GAAEjJ,KAAK4G,MAAM5G,KAAK4K,KAAKzK,GAAE2B,SAAS2F,GAAEzH,KAAKM,MAAM2I,GAAE,GAAGoE,GAAE,GAAG7E,GAAE,EAAEA,GAAEuB,GAAEvB,KAAI,IAAI,IAAInD,GAAE,EAAEA,GAAEC,GAAED,KAAI,CAAC,IAAI,IAAIgD,GAAEG,GAAElD,GAAED,GAAE+H,GAAE,EAAEG,GAAE,EAAEA,GAAEtE,GAAEsE,KAAI,IAAI,IAAIE,GAAE,EAAEA,GAAExE,GAAEwE,KAAI,CAAC,IAAInE,GAAEd,GAAE+E,GAAE9F,GAAE6F,GAAEjI,GAAEoI,GAAEhG,GAAE6B,IAAG,GAAGA,GAAES,IAAGuD,IAAG,GAAGA,GAAEhI,KAAI8H,IAAGzF,GAAE2B,GAAEhE,GAAEgI,IAAGnN,GAAEoN,GAAEtE,GAAEwE,KAAIJ,GAAEhF,IAAG,OAAO+E,GAAE,IAAI,CAAC,CAAC,OAAOC,EAAC,CAA7R,CAA+RtD,GAAEpC,GAAE8rB,MAAM9rB,GAAEipI,QAAQ7mI,GAAE,SAAYpC,GAAErC,GAAEyE,IAAG,IAAI,IAAI5J,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG8I,GAAEjJ,KAAK4G,MAAM5G,KAAK4K,KAAKzK,GAAE2B,SAAS2F,GAAEzH,KAAKM,MAAM2I,GAAE,GAAGoE,GAAE,GAAG7E,GAAE,EAAEA,GAAEuB,GAAEvB,KAAI,IAAI,IAAInD,GAAE,EAAEA,GAAEC,GAAED,KAAI,CAAC,IAAI,IAAIgD,GAAEG,GAAElD,GAAED,GAAE+H,GAAE,EAAEG,GAAE,EAAEA,GAAEtE,GAAEsE,KAAI,IAAI,IAAIE,GAAE,EAAEA,GAAExE,GAAEwE,KAAI,CAAC,IAAInE,GAAEd,GAAE+E,GAAE9F,GAAE6F,GAAEjI,GAAEoI,GAAEhG,GAAE6B,IAAG,GAAGA,GAAES,IAAGuD,IAAG,GAAGA,GAAEhI,KAAI8H,IAAGzF,GAAE2B,GAAEhE,GAAEgI,IAAGnN,GAAEoN,GAAEtE,GAAEwE,IAAIJ,CAAAA,GAAEhF,IAAG+E,IAAG,KAAK,IAAI,CAAC,CAAC,OAAOC,EAAE,CAA7R,CAA8RtD,GAAEpC,GAAE8rB,MAAM9rB,GAAEipI,QAAQ7mI,GAAE,SAAYpC,GAAErC,GAAEyE,IAAG,IAAI,IAAI5J,GAAE,CAAC,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,mBAAmB8I,GAAEjJ,KAAK4G,MAAM5G,KAAK4K,KAAKzK,GAAE2B,SAAS2F,GAAEzH,KAAKM,MAAM2I,GAAE,GAAGoE,GAAE,GAAG7E,GAAE,EAAEA,GAAEuB,GAAEvB,KAAI,IAAI,IAAInD,GAAE,EAAEA,GAAEC,GAAED,KAAI,CAAC,IAAI,IAAIgD,GAAEG,GAAElD,GAAED,GAAE+H,GAAE,EAAEG,GAAE,EAAEA,GAAEtE,GAAEsE,KAAI,IAAI,IAAIE,GAAE,EAAEA,GAAExE,GAAEwE,KAAI,CAAC,IAAInE,GAAEd,GAAE+E,GAAE9F,GAAE6F,GAAEjI,GAAEoI,GAAEhG,GAAE6B,IAAG,GAAGA,GAAES,IAAGuD,IAAG,GAAGA,GAAEhI,KAAI8H,IAAGzF,GAAE2B,GAAEhE,GAAEgI,IAAGnN,GAAEoN,GAAEtE,GAAEwE,IAAG,CAACJ,GAAEhF,IAAG+E,EAAC,CAAC,OAAOC,EAAC,CAAha,CAAkatD,GAAEpC,GAAE8rB,MAAM9rB,GAAEipI,QAAQ,SAAYjpI,GAAErC,IAAG,IAAI,IAAIyE,GAAE,EAAEA,GAAEpC,GAAE8rB,MAAM9rB,GAAEipI,OAAO7mI,KAAIpC,GAAE5G,KAAK,EAAEgJ,GAAE,GAAGzE,GAAEyE,GAAG,CAAvE,CAAwEpC,GAAEoC,KAAIpC,EAAE,EAACwoY,MAAM,SAASxoY,IAAG,IAAIF,GAAEnC,GAAE,IAAI1D,KAAKwuY,QAAQrmY,GAAEpC,GAAE5G,KAAKZ,GAAE4J,GAAEjI,OAAOmH,GAAE3D,GAAE,EAAE,IAAImC,GAAE,EAAEA,GAAEtH,GAAEsH,IAAG,EAAEsC,GAAEtC,GAAE,IAAIwB,GAAE,EAAEA,GAAEjJ,KAAKQ,SAASuJ,GAAEtC,GAAE,IAAIwB,GAAE,EAAEA,GAAEjJ,KAAKQ,SAASuJ,GAAEtC,GAAE,IAAIwB,GAAE,EAAEA,GAAEjJ,KAAKQ,QAAQ,EAAE6vY,SAAS,SAAS1oY,IAAG,IAAIsB,GAAExB,GAAE4F,GAAE7E,GAAEnD,GAAEgD,GAAE+E,GAAE9D,GAAEgE,GAAEwD,GAAEtD,GAAEuB,GAAEU,GAAEW,GAAE9K,GAAEtF,KAAKulD,KAAK3jD,KAAK0uY,aAAavmY,GAAEpC,GAAE8rB,MAAMtzB,GAAEwH,GAAEipI,OAAOrjI,GAAEvN,KAAKulD,KAAKx7C,GAAEzE,IAAGmI,GAAEzN,KAAKulD,KAAKplD,GAAEmF,IAAGsK,GAAEjI,GAAE5G,KAAK,GAAGuE,IAAG,EAAEsnB,GAAER,MAAM,wCAA4Crd,IAAAA,GAAE,EAAEA,GAAExB,GAAEwB,IAAG,EAAE,IAAIU,GAAE,EAAEA,GAAEhC,GAAEgC,IAAG,EAAE,CAAC,IAAIjH,GAAE,EAAEnD,GAAE,EAAEgD,GAAE,EAAE+E,GAAE,EAAEE,IAAGhE,GAAEyF,GAAEzJ,IAAGA,GAAEkI,IAAGsD,GAAErB,GAAEnK,IAAGA,GAAE8K,GAAE,EAAEnH,GAAEK,GAAEL,GAAEqE,GAAErE,IAAG,EAAE,KAAKA,IAAGc,IAAG,IAAItC,GAAEqJ,GAAErJ,GAAE+F,GAAE/F,IAAG,EAAEA,IAAGtH,KAAIqI,IAAGoH,GAAE,GAAGvC,GAAE,GAAGtD,GAAEtC,GAAEwB,MAAK5D,IAAGuK,GAAEvC,GAAE,GAAGhF,IAAGuH,GAAEvC,GAAE,GAAGD,IAAGwC,GAAEvC,GAAE,GAAG+C,IAAG,GAAG,IAAI5H,IAAG4H,GAAE/K,IAAG+K,GAAE/H,IAAG+H,GAAEhD,IAAGgD,GAAEnH,GAAEK,GAAEL,GAAEqE,GAAErE,IAAG,EAAE,KAAKA,IAAGc,IAAG,IAAItC,GAAEqJ,GAAErJ,GAAE+F,GAAE/F,IAAG,EAAEA,IAAGtH,KAAIyP,GAAE,GAAGvC,GAAE,GAAGtD,GAAEtC,GAAEwB,MAAKT,GAAEoH,GAAEvC,GAAE,GAAGhI,GAAEuK,GAAEvC,GAAE,GAAGhF,GAAEuH,GAAEvC,GAAE,GAAGD,GAAE,CAAC,EAAEmjY,UAAU,SAAS5oY,IAAG,IAAIF,GAAEnC,GAAEtF,KAAK4G,MAAM,IAAIhF,KAAK4uY,UAAU,EAAEzmY,GAAEpC,GAAE5G,KAAKZ,GAAE4J,GAAEjI,OAAOmH,GAAE,IAAI3D,GAAE,IAAImC,GAAE,EAAEA,GAAEtH,GAAEsH,IAAG,EAAEsC,GAAEtC,IAAGzH,KAAKM,MAAMyJ,GAAEtC,IAAGwB,IAAGA,IAAGwnY,IAAI,SAAS9oY,IAAG,IAAI0F,GAAE7E,GAAElD,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO3B,GAAEyB,KAAK2pM,MAAMtiM,GAAErH,KAAK8yW,QAAQjtW,GAAE7F,KAAKiwW,OAAO,IAAIxkW,GAAE,EAAEA,GAAEtD,GAAEsD,IAAG,EAAE/H,GAAE+H,KAAI7E,IAAG,IAAIlD,GAAE+H,IAAG,GAAG/H,GAAE+H,GAAE,GAAG,IAAI/H,GAAE+H,GAAE,IAAI,KAAKlN,GAAEmF,GAAE+H,GAAE,GAAG7E,GAAES,GAAE3D,GAAE+H,GAAE,GAAG7E,GAAEf,GAAEnC,GAAE+H,GAAE,GAAG/H,GAAE+H,GAAE,EAAG,EAACqjY,KAAK,SAAS/oY,IAAG,IAAIa,GAAEnD,GAAEC,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO3B,GAAEyB,KAAK2pM,MAAMtiM,GAAErH,KAAK8yW,QAAQjtW,GAAE7F,KAAKiwW,OAAOxkW,GAAEzL,KAAK+uY,QAAQ,IAAInoY,GAAE,EAAEA,GAAEuB,GAAEvB,IAAG,EAAElD,GAAEkD,IAAGrI,GAAEkN,GAAE/H,GAAEkD,KAAInD,GAAE,EAAEgI,IAAG/H,GAAEkD,GAAE,GAAGS,GAAEoE,GAAE/H,GAAEkD,GAAE,GAAGnD,GAAEC,GAAEkD,GAAE,GAAGf,GAAE4F,GAAE/H,GAAEkD,GAAE,GAAGnD,EAAC,EAAEurY,MAAM,SAASjpY,IAAG,IAAIxH,GAAE8I,GAAExB,GAAE4F,GAAE/H,GAAEqC,GAAE5G,KAAKgJ,GAAEzE,GAAExD,OAAO,IAAI3B,GAAE,EAAEA,GAAE4J,GAAE5J,IAAG,EAAE8I,GAAE3D,GAAEnF,GAAE,GAAGsH,GAAEnC,GAAEnF,GAAE,GAAGkN,GAAE/H,GAAEnF,GAAE,GAAGmF,GAAEnF,GAAE,GAAGH,KAAK8wB,IAAI,IAAI,KAAK7nB,GAAE,KAAKxB,GAAE,KAAK4F,IAAG/H,GAAEnF,GAAE,GAAGH,KAAK8wB,IAAI,IAAI,KAAK7nB,GAAE,KAAKxB,GAAE,KAAK4F,IAAG/H,GAAEnF,GAAE,GAAGH,KAAK8wB,IAAI,IAAI,KAAK7nB,GAAE,KAAKxB,GAAE,KAAK4F,KAAIwjY,SAAS,SAASlpY,IAAG,IAAIrC,GAAEqC,GAAE5G,KAAKgJ,GAAEpC,GAAE8rB,MAAMxqB,GAAE,EAAEc,GAAEtC,GAAEE,GAAEipI,OAAO,EAAE,CAAC,IAAIvjI,IAAG5F,GAAE,GAAGwB,GAAET,GAAEuB,GAAE,EAAE,CAAC,IAAI1E,GAAEgI,GAAE,GAAG7E,GAAE,GAAGH,GAAE/C,GAAED,IAAG+H,GAAE9H,GAAED,GAAE,GAAGkI,GAAEjI,GAAED,GAAE,GAAGgD,GAAE,MAAMA,GAAE,IAAIA,IAAG+E,GAAE,MAAMA,GAAE,IAAIA,IAAGG,GAAE,MAAMA,GAAE,IAAIA,IAAGjI,GAAED,IAAGgD,GAAE/C,GAAED,GAAE,GAAG+H,GAAE9H,GAAED,GAAE,GAAGkI,EAAE,SAAQ/E,GAAE,SAASf,GAAE,EAAEqpY,UAAU,SAASnpY,IAAG,IAAIsB,GAAE3D,GAAE,IAAI1D,KAAKspK,YAAYnhK,GAAEpC,GAAE5G,KAAKZ,GAAE4J,GAAEjI,OAAO,IAAImH,GAAE,EAAEA,GAAE9I,GAAE8I,IAAG,EAAEc,GAAEd,IAAGc,GAAEd,IAAG3D,GAAE,EAAE,GAAI,KAAQyrY,GAAG,SAASppY,IAAG,OAAOA,GAAEqpY,aAAa,eAAerpY,GAAEw5V,KAAK,OAAOx5V,GAAE04X,MAAM,QAAQ14X,GAAEspY,aAAa,gBAAgBtpY,GAAEupY,WAAW,cAAcvpY,GAAEwpY,UAAU,aAAaxpY,GAAEypY,eAAe,mBAAmBzpY,GAAEmzV,MAAM,QAAQnzV,GAAE0pY,cAAc,iBAAiB1pY,GAAE2pY,WAAW,cAAc3pY,GAAE4pY,YAAY,cAAc5pY,GAAE6pY,kBAAkB,oBAAoB7pY,GAAE8pY,0BAA0B,4BAA4B9pY,GAAE+pY,iBAAiB,mBAAmB/pY,GAAEgqY,UAAU,YAAYhqY,GAAEiqY,eAAe,kBAAkBjqY,GAAEkqY,oBAAoB,wBAAwBlqY,GAAEmqY,iBAAiB,qBAAqBnqY,GAAEoqY,gBAAgB,oBAAoBpqY,GAAEqqY,WAAW,cAAcrqY,GAAEsqY,gBAAgB,oBAAoBtqY,GAAEuqY,YAAY,eAAevqY,GAAEwqY,kBAAkB,oBAAoBxqY,GAAE22V,SAAS,WAAW32V,GAAEyqY,WAAW,cAAczqY,GAAE0qY,cAAc,iBAAiB1qY,GAAE2qY,QAAQ,UAAU3qY,GAAE4qY,cAAc,gBAAgB5qY,GAAE6qY,iBAAiB,mBAAmB7qY,GAAE8qY,iBAAiB,mBAAmB9qY,GAAE+qY,sBAAsB,wBAAwB/qY,GAAEgrY,oBAAoB,sBAAsBhrY,EAAC,CAAhiC,CAAkiCopY,IAAI,IAAU6B,GAAE,WAA4E,OAAA1kG,cAA3E,SAAA0kG,GAAYttY,IAAEwoS,gBAAA8kG,KAAAA,IAAChxY,KAAKixY,QAAQ,IAAIh/G,OAAOvuR,IAAG1D,KAAKkxY,2BAA2B,GAAC,CAAA,CAAAxvY,IAAA,4BAAA7B,MAAA,WAA4B,IAAM6D,GAAE1D,KAAKixY,QAAQtxY,IAAI,OAAOwI,GAAEnI,KAAKixY,QAAQtxY,IAAI,SAASpB,GAAEyB,KAAKixY,QAAQtxY,IAAI,SAAS+D,GAAE9D,IAAI,CAACu1H,UAAU88J,OAAOnB,gBAAgB3oR,GAAEvI,IAAI,CAACo7B,QAAO,IAAKz8B,GAAEqB,IAAI,CAACi8D,KAAK,IAAIytG,UAAU,GAAI,GAAA,CAAA5nK,IAAA7B,MAAAA,MAAAgJ,SAAInF,GAAEyE,IAAGnI,KAAKixY,QAAQ7jL,GAAG1pN,GAAEyE,GAAE,GAACzG,CAAAA,IAAA7B,MAAAA,MAAA6tG,SAAIhqG,IAAG1D,KAAKixY,QAAQvjS,IAAIhqG,GAAG,GAAA,CAAAhC,IAAA,iBAAA7B,MAAA,SAAe6D,GAAEyE,IAAG,IAAInI,KAAKixY,QAAQtxY,IAAI+D,IAAG9D,IAAI,CAACo7B,OAAO7yB,IAAG,CAAC,MAAAgpY,IAAMzsX,QAAQ8F,MAAM,qBAAqG,CAAC,IAAC,CAAzgB,GAA8gB4mX,GAAG,SAASrrY,IAAG,OAAOA,GAAEA,GAAEsrY,OAAO,GAAG,SAAStrY,GAAEA,GAAEurY,QAAQ,GAAG,UAAUvrY,EAAE,CAArE,CAAsEqrY,IAAI,CAAA,GAAUG,GAAEC,SAAAA,IAAY,SAAAD,GAAY7tY,GAAEyE,GAAE5J,GAAE8I,IAAOoqY,IAAAA,GAAL5rY,KAACmF,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,KAAA8M,UAAC,GAAk0BymY,OAAh0BvlG,gBAAAqlG,KAAAA,KAAEE,GAAAhkG,WAAA8jG,KAAAA,GAAM,CAAA,CAAC9mC,GAAG,CAACxlW,EAAE,EAAEmB,EAAE,GAAGokW,GAAG,CAACvlW,EAAEoC,GAAEqjW,iBAAiB74U,MAAMzrB,EAAEiB,GAAEqjW,iBAAiB17N,SAAS3nI,MAAQwxB,UAAUn1B,GAAE+tY,GAAKrrS,OAAO,GAAGqrS,GAAKC,cAAc,EAAED,GAAKnmL,QAAQ,IAAI2/D,GAAGwmH,GAAKE,WAAW,IAAI1mH,GAAGwmH,GAAK3+K,YAAY,IAAIm4D,GAAGwmH,GAAKG,QAAQ,IAAI3mH,GAAGwmH,GAAKr5I,OAAO,IAAI6yB,GAAGwmH,GAAKI,kBAAkB,IAAI5mH,GAAGwmH,GAAKK,QAAQ,IAAI7mH,GAAGwmH,GAAKM,UAAU,IAAI9mH,GAAGwmH,GAAKO,aAAa,IAAI/mH,GAAGwmH,GAAKQ,WAAW,IAAIhnH,GAAGwmH,GAAK9wM,MAAM,IAAIkvL,GAAG,CAACh3V,UAAUn1B,GAAEkN,KAAKlN,GAAEmuB,MAAM1pB,GAAE6mI,OAAOzwI,GAAE42J,UAAUtvJ,KAAI4rY,GAAKR,QAAQ,IAAID,GAAGS,GAAK9wM,MAAM9nK,aAAa44W,GAAKS,aAAaT,GAAKU,YAAYzuY,IAAG+tY,GAAKW,UAAUX,GAAKU,YAAY,OAAO,CAACh9O,WAAU,IAAKs8O,GAAKW,UAAU9vO,OAAO,GAAGmvO,GAAKY,YAAY,iBAAiB9mY,OAAO6lY,GAAGC,OAAOD,GAAGE,QAAQG,GAAKa,SAASb,GAAKU,YAAY,MAAM,CAACh9O,WAAU,IAAKs8O,GAAKc,WAAWpqY,GAAEd,GAAEqjW,iBAAiB74U,MAAM4/W,GAAKe,YAAY,EAAEf,GAAKr8W,SAASq8W,GAAKgB,uBAAuBhB,GAAKiB,aAAYjB,GAAC,OAAA5jG,UAAA0jG,GAAAC,IAAAllG,aAAAilG,GAAA,CAAA,CAAA7vY,IAAA,YAAA/B,IAAA,WAAgB,OAAOK,KAAK2gM,MAAM/vL,MAAO,GAAA,CAAAlP,IAAA,eAAA7B,MAAA,WAAe,MAAM,CAACgyB,MAAM7xB,KAAK2gM,MAAM9uK,QAAQm9G,OAAOhvI,KAAK2gM,MAAM3xD,SAAU,GAAA,CAAAttI,IAAA,eAAA7B,MAAA,WAAeG,KAAK2gM,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAU,GAAA,CAAAhnF,IAAA,eAAA7B,MAAA,SAAa6D,KAAIA,GAAEmuB,QAAQ7xB,KAAK2gM,MAAM9uK,SAASnuB,GAAEsrI,SAAShvI,KAAK2gM,MAAM3xD,YAAYhvI,KAAK2gM,MAAM9uK,MAAMnuB,GAAEmuB,OAAO7xB,KAAK2gM,MAAM3xD,OAAOtrI,GAAEsrI,QAAQ,GAACttI,CAAAA,mBAAA7B,MAAA,SAAa6D,IAAG1D,KAAK2gM,MAAMxrC,UAAUzxJ,GAAG,GAAA,CAAAhC,IAAA7B,QAAAA,MAAAqvH,SAAMxrH,IAAG,IAAMyE,GAAEnI,KAAK2gM,MAAMvxD,SAAS7wI,GAAEyB,KAAK2gM,MAAMtxD,SAAS,OAAWrvI,KAAC2gM,MAAMzxE,MAAM,CAACjqH,EAAEkD,GAAEzE,GAAE0C,EAAE7H,GAAEmF,MAAI,CAAE,GAAChC,CAAAA,IAAA/B,YAAAA,IAAAA,WAAgB,OAAWK,KAAC2yY,cAAc,EAAC/yY,IAAA,SAAc8D,IAAG1D,KAAK4yY,aAAalvY,GAAG,GAAA,CAAAhC,IAAA,cAAA7B,MAAAsyY,SAAYzuY,GAAEyE,IAAG,IAAM5J,GAAE4J,GAACs8Q,iBAAAA,iBAAA,CAAA,EAAKt8Q,IAAEyI,CAAAA,EAAAA,CAAAA,KAAKlN,KAAG,CAACkN,KAAKlN,IAAG2D,GAAE,IAAImvX,GAAGj4X,IAAG,OAAWyB,KAAC2gM,MAAM93L,IAAIxB,IAAGrH,KAAKomG,OAAOpjG,KAAKqE,IAAGA,EAAE,GAAA,CAAA3F,IAAA,YAAA7B,MAAA,SAAU6D,IAAG,OAAW1D,KAAComG,OAAOtjG,MAAK,SAAAvE,WAAGA,GAAEw4I,MAAMnmI,MAAMlN,KAAG,GAAA,CAAAhC,IAAA,mBAAA7B,MAAA,SAAiB6D,IAAG,OAAOA,GAAE1D,KAAK2gM,MAAM/vL,QAAQlN,GAAE1D,KAAKkyY,aAAalyY,KAAK6yY,UAAUnvY,KAAI1D,KAAKmyY,YAAYzuY,IAAG1D,KAAKkyY,YAAa,GAAA,CAAAxwY,IAAA,YAAA7B,MAAA,SAAU6D,IAAG1D,KAAK2gM,MAAMxrC,cAAcn1J,KAAKwyY,YAAYxyY,KAAKwyY,YAAY9uY,GAAE1D,KAAKuyY,WAAWvyY,KAAKuyY,WAAW7uY,GAAE1D,KAAKkvH,MAAMxrH,IAAG1D,KAAK8yY,YAAY,CAACroC,GAAG,CAACxlW,EAAEjF,KAAKqqW,SAASI,GAAGxlW,EAAEvB,GAAE0C,EAAEpG,KAAKqqW,SAASI,GAAGrkW,EAAE1C,IAAG8mW,GAAG,CAACvlW,EAAEjF,KAAKqqW,SAASG,GAAGvlW,EAAEvB,GAAE0C,EAAEpG,KAAKqqW,SAASG,GAAGpkW,EAAE1C,MAAI,GAAI1D,KAAK4xY,QAAQxxY,KAAKsD,IAAI,GAAA,CAAAhC,IAAA,uBAAA7B,MAAA,WAAuBG,KAAK2gM,MAAM9nK,YAAYjqB,iBAAiB,cAAa,SAAAlL,IAAIA,GAAE2uB,gBAAiB,GAAE,GAAA,CAAA3wB,IAAA7B,aAAAA,MAAA6yY,WAAY,IAAAK,GAAA/yY,KAAC,OAAOA,KAAKqyY,aAAa,KAAKjB,GAAGE,QAAQtxY,KAAK2gM,MAAMysB,GAAG,SAAQ,SAAA1pN,IAAIqvY,GAAKznL,QAAQlrN,KAAK,CAAC6E,EAAE8tY,GAAK1oC,SAASI,GAAGxlW,EAAEvB,GAAEwhC,IAAI4kV,QAAQipB,GAAKR,WAAWnsY,EAAE2sY,GAAK1oC,SAASI,GAAGrkW,EAAE1C,GAAEwhC,IAAI6kV,QAAQgpB,GAAKR,YAAY,IAAGvyY,KAAK2gM,MAAMysB,GAAG,aAAY,SAAA1pN,IAAIA,GAAEwhC,KAAK6tW,GAAKjgL,YAAY1yN,KAAK,CAAC6E,EAAE8tY,GAAK1oC,SAASI,GAAGxlW,EAAEvB,GAAEwhC,IAAI4kV,QAAQipB,GAAKR,WAAWnsY,EAAE2sY,GAAK1oC,SAASI,GAAGrkW,EAAE1C,GAAEwhC,IAAI6kV,QAAQgpB,GAAKR,YAAY,IAAGvyY,KAAK2gM,MAAMysB,GAAG,SAAQ,SAAA1pN,IAAIA,GAAEwhC,KAAK,GAAGxhC,GAAEwhC,IAAI3I,UAAUw2W,GAAKC,UAAUtvY,GAAEwhC,IAAIgjP,OAAO,EAAE,IAAI,kBAAkB,IAAG,MAAM,KAAKkpH,GAAGC,OAAOrxY,KAAKixY,QAAQpoY,IAAI,cAAa,SAAAnF,IAAIqvY,GAAKrB,cAAc,KAAI1xY,KAAKixY,QAAQpoY,IAAI,aAAY,SAAAnF,IAAI,IAAMyE,GAAEzE,GAAEwrH,MAAM6jR,GAAKrB,cAAcqB,GAAKrB,cAAchuY,GAAEwrH,MAAM6jR,GAAKC,UAAU7qY,GAAE,IAAGnI,KAAK2gM,MAAMysB,GAAG,aAAY,SAAA1pN,IAAIqvY,GAAKE,eAAe,YAAa,IAAEjzY,KAAKixY,QAAQpoY,IAAI,qCAAoC,SAAAnF,IAAIqvY,GAAKE,eAAevvY,GAAE0I,KAAM,IAAEpM,KAAK2gM,MAAMkrL,eAAc,SAAAnoX,IAAI,OAAAqvY,GAAK36I,OAAOh4P,KAAKsD,IAAG,CAACuB,EAAEvB,GAAEuB,EAAEmB,EAAE1C,GAAE0C,EAAE,IAAGpG,KAAKo4P,OAAO6wE,KAAKyjC,GAAG,KAAK,SAAY3mW,IAAE,IAAArC,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,IAAAA,UAAA,GAAK,OAAOsgR,IAAG,SAACnjR,GAAE5J,IAAK,IAAI8I,GAAE,EAAEc,GAAE2mS,UAAUqB,GAAG5xS,IAAE,SAAAsH,IAAI,IAAM4F,GAAE1F,GAAEF,GAAEwB,OAAMoE,IAAG/H,KAAInF,GAAE6B,KAAKyF,KAAI4F,IAAGlN,GAAEsiM,UAAU,IAAI,GAAE,CAA5H,EAA6H,WAAI,OAAAkyM,GAAKpyM,MAAMxrC,WAAY,KAAE25I,WAAU,SAAAprS,IAAIqvY,GAAKD,YAAY,CAACroC,GAAG,CAACxlW,GAAGvB,GAAEuB,EAAE8tY,GAAKR,WAAWnsY,GAAG1C,GAAE0C,EAAE2sY,GAAKR,YAAY/nC,GAAG,CAACvlW,IAAIvB,GAAEuB,EAAE8tY,GAAKpyM,MAAM9uK,SAASkhX,GAAKR,WAAWnsY,IAAI1C,GAAE0C,EAAE2sY,GAAKpyM,MAAM3xD,UAAU+jQ,GAAKR,aAAc,GAAE,GAAA,CAAA7wY,IAAA,iBAAA7B,MAAA,SAAe6D,IAAG,IAAMyE,GAAEnI,KAAKkzY,4BAA4B,GAAG/qY,GAAE,OAAOzE,IAAG,IAAI,WAAW1D,KAAKgyY,aAAa5xY,KAAK+H,IAAG,MAAM,IAAI,SAASnI,KAAKiyY,WAAW7xY,KAAK+H,IAAG,MAAM,IAAI,MAAMnI,KAAKsrN,QAAQlrN,KAAK+H,IAAG,MAAM,IAAI,YAAYnI,KAAK8yN,YAAY1yN,KAAK+H,IAAG,MAAM,IAAI,QAAQnI,KAAK8xY,QAAQ1xY,KAAK+H,IAAG,MAAM,IAAI,UAAUnI,KAAK+xY,UAAU3xY,KAAK+H,IAAG,GAACzG,CAAAA,IAAA7B,4BAAAA,MAAAqzY,WAA4B,IAAMxvY,GAAE1D,KAAK2gM,MAAM6oL,qBAAqB,OAAO9lX,GAAE,CAACuB,EAAEjF,KAAKqqW,SAASI,GAAGxlW,EAAEvB,GAAEuB,EAAEjF,KAAKuyY,WAAWnsY,EAAEpG,KAAKqqW,SAASI,GAAGrkW,EAAE1C,GAAE0C,EAAEpG,KAAKuyY,YAAY,OAAK7wY,CAAAA,IAAA7B,aAAAA,MAAAszY,WAAa,OAAOnzY,KAAKsrN,OAAQ,GAAA,CAAA5pN,IAAA,iBAAA7B,MAAAuzY,WAAiB,OAAOpzY,KAAK8yN,WAAY,GAAA,CAAApxN,IAAA,gBAAA7B,MAAA,WAAgB,OAAOG,KAAK2xY,UAAW,GAAA,CAAAjwY,IAAA,gBAAA7B,MAAA,SAAc6D,IAAG,OAAO1D,KAAK2gM,MAAMqnM,QAAO,IAAA3rW,OAAK34B,IAAK,GAAA,CAAAhC,IAAA,aAAA7B,MAAA,SAAW6D,IAAG,OAAW1D,KAACqzY,cAAc3vY,IAAG8iQ,QAAO,CAAE,IAAC9kQ,IAAA,aAAA7B,MAAA,SAAW6D,IAAG,OAAW1D,KAACqzY,cAAc3vY,IAAGspN,QAAO,CAAG,GAAA,CAAAtrN,IAAA,eAAA7B,MAAA,SAAa6D,IAAG,IAAMyE,GAAEnI,KAAKqzY,cAAc3vY,IAAG,OAAOyE,IAAGA,GAAEm5B,WAAU,CAAG,GAAA,CAAA5/B,IAAA,gBAAA7B,MAAA,SAAc6D,IAAG,OAAO1D,KAAK2gM,MAAM79L,KAAI,IAAAu5B,OAAK34B,KAAK/B,SAAQ,SAAApD,IAAIA,GAAE4/M,KAAK,UAAU5/M,IAAGA,GAAE+iC,SAAS,KAAG,IAAG5/B,CAAAA,IAAA7B,cAAAA,MAAAyzY,SAAY5vY,IAAG,OAAO1D,KAAKuzY,eAAe7vY,KAAG,CAAE,GAAChC,CAAAA,IAAA7B,iBAAAA,MAAA0zY,SAAe7vY,GAAEyE,IAAG,IAAM5J,GAAEyB,KAAKwzY,iBAAiBrrY,IAAGd,GAAE,IAAImwX,GAAG9zX,GAAE,CAACpE,GAAGoE,IAAG,CAACpE,GAAG2+V,OAAO,OAAO1/V,GAAEsK,IAAIxB,IAAGA,EAAC,GAAC3F,CAAAA,yBAAA7B,MAAA,SAAmB6D,IAAG,OAAOA,GAAE1D,KAAKqzY,cAAc3vY,KAAI1D,KAAKuzY,eAAe7vY,IAAG1D,KAAKuzY,gBAAgB,GAAC7xY,CAAAA,IAAA7B,oBAAAA,MAAA4zY,SAAkB/vY,IAAG,MAAM,CAACA,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,EAAE1C,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,EAAE,GAAC1E,CAAAA,4BAAA7B,MAAA,SAAsB6D,IAAG,IAAMyE,GAAE,GAAG,OAAOzE,GAAE/B,SAAQ,SAAApD,IAAI4J,GAAEnF,KAAKzE,GAAE0G,GAAGkD,GAAEnF,KAAKzE,GAAE6H,EAAG,IAAE+B,KAAEzG,CAAAA,IAAA7B,cAAAA,MAAAm+X,SAAYt6X,IAAEgwY,IAAAA,GAAC1zY,KAAA,OAAO0D,GAAEX,KAAI,SAAAoF,IAAG,OAAAA,GAAEurY,GAAKnB,WAAWmB,GAAKlB,WAAY,GAAA,GAAC9wY,CAAAA,mCAAA7B,MAAA,SAA6B6D,IAAG,IAAMyE,GAAEzE,GAAE+gK,OAAOtmI,QAAO,SAAC5/B,GAAE8I,IAAC,OAAI9I,GAAEyE,KAAKqE,GAAEpC,EAAEoC,GAAEjB,GAAG7H,EAAE,GAAC,IAAI,OAAWyB,KAACg+X,YAAY71X,GAAG,GAAA,CAAAzG,IAAA7B,eAAAA,MAAA8zY,SAAajwY,GAAEyE,GAAE5J,IAAS,IAAA8I,GAAE,CAAC3D,GAAEgrV,OAAOhrV,GAAED,EAAEwB,EAAEvB,GAAED,EAAE2C,GAAkCwtY,GAAA/uH,eAAvBtmR,GAAE8I,GAAErH,KAAKg+X,YAAY32X,IAA5BxB,GAAAA,GAAC+tY,GAAA,GAACnoY,GAACmoY,GAAA,GAAChtY,GAACgtY,GAAA,GAA0B,OAAO,IAAIha,GAAEn1G,iBAAAA,iBAAA,CAAEx/Q,EAAEwG,GAAErF,EAAEQ,GAAEozX,YAAYn0X,GAAEk0X,YAAYl0X,GAAE4iR,SAAS,IAAI/kR,GAAEkrV,WAAWxwV,KAAK+qR,GAAGvB,MAAM,IAAIlkR,GAAEkkR,MAAMxpR,KAAK+qR,IAAMhhR,IAAE81X,CAAAA,EAAAA,CAAAA,oBAAmB,IAAI,IAACv8X,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,GAAE5J,GAAE8I,IAAG,MAAM,QAAQc,GAAEiE,KAAKpM,KAAK6zY,QAAQnwY,GAAEyE,GAAE5J,GAAE8I,IAAGrH,KAAK8zY,SAASpwY,GAAEyE,GAAE5J,GAAE8I,GAAE,GAAC3F,CAAAA,IAAA7B,WAAAA,eAAS6D,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAMxB,GAAE7F,KAAKyzY,kBAAkBtrY,IAAGsD,GAACg5Q,iBAAAA,iBAAK,CAAA,EAAAzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAGe,CAAAA,EAAAA,CAAAA,GAAGoE,KAAGkD,GAAE5G,KAAKg0Y,mBAAmB3sY,IAAG5D,GAAEzD,KAAKi0Y,cAAcpuY,GAAE4F,GAAElN,GAAE21Y,UAAU,OAAOzwY,GAAEqlX,WAAU,GAAIliX,GAAEiC,IAAIpF,IAAGzD,KAAKkyY,aAAarpY,IAAIjC,KAAG,CAAG,GAAA,CAAAlF,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAMxB,GAAC4+Q,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAE,CAAA,EAAA,CAACe,GAAGoE,KAAG+H,GAAEzL,KAAKg0Y,mBAAmB3sY,IAAGT,GAAE5G,KAAK2zY,aAAaxrY,GAAEtC,GAAEtH,GAAE21Y,UAAU,OAAOzoY,GAAE5C,IAAIjC,IAAGA,GAAEkiX,WAAU,GAAI9oX,KAAKkyY,aAAarpY,IAAI4C,KAAG,CAAG,GAAA,CAAA/J,IAAA,cAAA7B,MAAA,SAAY6D,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAMxB,GAAE7F,KAAKm0Y,sBAAsBhsY,IAAGsD,GAACg5Q,iBAAAA,iBAAK,CAAA,EAAAzkR,KAAKoqW,UAAUgqC,iBAAiB71Y,KAAE,CAAA,EAAA,CAACe,GAAGoE,KAAGkD,GAAE5G,KAAKg0Y,mBAAmB3sY,IAAG5D,GAAEzD,KAAKi0Y,cAAcpuY,GAAE4F,GAAElN,GAAE21Y,UAAU,OAAOttY,GAAEiC,IAAIpF,IAAGzD,KAAKkyY,aAAarpY,IAAIjC,KAAG,CAAE,GAAClF,CAAAA,oBAAA7B,MAAA,SAAc6D,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAE9I,GAAEmF,GAAE1D,KAAKg+X,YAAYt6X,IAAG,OAAW,IAAAk0X,GAAEnzG,iBAAAA,iBAAA,CAAEhgH,OAAOp9J,IAAKc,IAAE81X,CAAAA,EAAAA,CAAAA,oBAAmB,IAAK,GAAA,CAAAv8X,IAAA,qBAAA7B,MAAA,SAAmB6D,GAAEyE,GAAE5J,GAAE8I,IAAEgtY,IAAAA,GAACr0Y,KAAM6F,GAAC4+Q,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKoqW,UAAUgqC,iBAAiB71Y,KAAGe,CAAAA,EAAAA,CAAAA,GAAGoE,GAAEy+D,KAAK5jE,GAAE+iH,QAAO71G,GAAEzL,KAAKg0Y,mBAAmB3sY,IAAGT,GAAEuB,GAAEpF,KAAI,SAAAU,IAAC,MAAE,OAAOA,GAAE4wY,GAAKJ,cAAc,CAACxwY,GAAE+oV,GAAGvnV,EAAExB,GAAE+oV,GAAGpmV,EAAE3C,GAAE8oV,GAAGtnV,EAAExB,GAAE8oV,GAAGnmV,GAAGP,GAAEtH,GAAE21Y,UAAUG,GAAKV,aAAalwY,GAAEoC,GAAEtH,GAAE21Y,SAAS,IAAE,OAAOzoY,GAAE5C,IAAGsC,MAALM,GAACohS,mBAAQjmS,KAAG5G,KAAKkyY,aAAarpY,IAAI4C,KAAG,CAAG,GAAA,CAAA/J,IAAA,gBAAA7B,MAAA,SAAc6D,GAAEyE,GAAE5J,IAAG,GAAG,MAAMmF,GAAE,CAAO,IAAyDD,GAAEgD,GAA3DY,GAAE,CAAC3D,GAAEgrV,OAAOhrV,GAAED,EAAEwB,EAAEvB,GAAED,EAAE2C,GAA8BkuY,GAAAzvH,eAAnB7kR,KAAKg+X,YAAY32X,IAAE,GAA1BxB,GAACyuY,GAAC7oY,GAAAA,GAAC6oY,GAAC1tY,GAAAA,GAAC0tY,MAA8B9oY,IAAE,EAAG9H,GAAEgyV,UAAUzwV,IAAI1G,GAAE0G,GAAGvB,GAAEgyV,UAAUtvV,IAAI7H,GAAE6H,EAAkBK,IAAfhD,GAAEC,GAAEkrV,YAAelrV,GAAEkkR,OAAQnkR,GAAEC,GAAEkrV,WAAWlrV,GAAEkkR,MAAMnhR,GAAE/C,GAAEkrV,WAAWpjV,IAAE,GAAIrD,GAAE6zW,IAAIvwW,GAAE7E,GAAEf,GAAEpC,GAAEgD,GAAE+E,GAAE,KAAK,CAAC,IAA4C+oY,GAAA1vH,eAAjC7kR,KAAKg+X,YAAY,CAACt6X,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,IAAG,GAAtCiB,GAACktY,GAAA,GAAC1uY,GAAC0uY,GAAoCpsY,GAAAA,GAAE4zW,OAAO10W,GAAExB,GAAG,CAAA,GAACnE,CAAAA,IAAA7B,oBAAAA,MAAA20Y,SAAkB9wY,GAAEyE,GAAE5J,IAAE,IAAAk2Y,GAAAz0Y,KAAOqH,GAAErH,KAAKg0Y,mBAAmBz1Y,IAAGsH,GAAE,IAAI8lY,GAAG9I,MAAM,CAACjQ,UAAU,SAACnnX,GAAE7E,IAAI,IAAA8tY,GAAAC,GAAClpY,GAAEyzW,YAAY,IAAgE01B,GAAA/vH,eAArD4vH,GAAKzW,YAAY,SAAA0W,GAAChxY,GAAE+gK,cAAM,IAAAiwO,YAAAA,GAARA,GAAW,UAAE,IAAAA,QAAA,EAAbA,GAAezvY,EAAU,QAAT0vY,GAACjxY,GAAE+gK,cAAM,IAAAkwO,IAAK,QAALA,GAARA,GAAW,UAAE,IAAAA,QAAA,EAAbA,GAAevuY,IAAvD3C,GAAAA,GAACmxY,GAACnuY,GAAAA,GAACmuY,GAAwDnpY,GAAAA,GAAEo6F,OAAOpiG,GAAEgD,IAAG/C,GAAEozV,SAASn1V,SAAQ,SAAC6J,GAAEG,IAAK8oY,GAAKI,cAAcrpY,GAAEC,GAAE/H,GAAE+gK,OAAOzmG,GAAGryD,GAAE,IAAIjI,GAAE+gK,OAAO,GAAI,IAAEh5J,GAAEyyW,gBAAgBt3W,GAAG,EAACu7D,KAAK,SAASniE,KAAKkyY,aAAarpY,IAAIhD,IAAGwB,IAAGxB,IAAGwB,GAAEwB,IAAIhD,GAAE,GAACnE,CAAAA,wBAAA7B,MAAA,SAAkB6D,GAAEyE,GAAE5J,GAAE8I,IAAEytY,IAAAA,GAAC3sY,KAAAA,GAAE8wV,SAAS/4V,QAAQF,KAAKw0Y,kBAAkBrsY,GAAE8wV,SAAS,GAAGyD,SAAS,GAAGn+V,GAAE4wY,GAAGzyC,UAAU,IAAM72V,GAAE7F,KAAKg0Y,mBAAmB3sY,IAAGoE,GAAE,IAAIkgY,GAAG9I,MAAM,CAACjQ,UAAU,SAAChsX,GAAEnD,IAAKmD,GAAEs4W,YAAY,IAA0D61B,GAAAlwH,eAA/CiwH,GAAK9W,YAAY,CAAC71X,GAAEs8J,OAAO,GAAGx/J,EAAEkD,GAAEs8J,OAAO,GAAGr+J,IAAG,GAApDK,GAACsuY,GAACvpY,GAAAA,GAACupY,GAAkDnuY,GAAAA,GAAEi/F,OAAOp/F,GAAE+E,IAAGrD,GAAE2uV,SAASn1V,SAAQ,SAACwL,GAAEU,IAAKinY,GAAKD,cAAc1nY,GAAEvG,GAAEuB,GAAEs8J,OAAOzmG,GAAGnwD,GAAE,IAAI1F,GAAEs8J,OAAO,GAAI,IAAmF,IAAjF,IAAM94J,GAACkhS,mBAAK1kS,GAAE02V,aAAap6L,OAAO1hK,KAAI,SAAAoK,IAAG,OAAA,IAAIgnV,GAAGhnV,GAAElI,EAAEkI,GAAE/G,EAAE+G,GAAEtH,EAAG,KAAEgG,GAAEF,GAAEA,GAAEzL,OAAO,GAAG2F,EAAUsH,GAAExB,GAAEzL,OAAO,EAAEiN,GAAE,EAAEA,KAAI,CAAC,IAAMU,GAAElC,GAAEwB,GAAE,GAAGtH,EAAE8F,GAAEwB,IAAGtH,EAAEgI,IAAGA,GAAE,CAAElC,CAAAA,GAAE,GAAG9F,EAAEgG,IAAGA,GAAE,EAAQ,IAAAnE,GAACs1S,WAAKo5C,GAAEvpD,mBAAIlhS,GAAEnD,YAAWkD,GAAEhE,GAAE+8J,OAAO,GAAoCuwO,GAAAnwH,eAA3BiwH,GAAK9W,YAAY,CAACtyX,GAAEzG,EAAEyG,GAAEtF,IAA7B8I,GAAAA,GAAC8lY,GAACppY,GAAAA,GAACopY,GAA8BpuY,GAAAA,GAAEi/F,OAAO32F,GAAEtD,IAAGlE,GAAEovV,SAASn1V,SAAQ,SAACwL,GAAEU,IAAKinY,GAAKD,cAAc1nY,GAAEvG,GAAE+E,GAAEqyD,GAAGnwD,GAAE,IAAIlC,GAAE,GAAI,IAAE/E,GAAEs3W,gBAAgBz6W,GAAG,EAAC0+D,KAAK5jE,GAAE+iH,QAAQ,OAAWthH,KAACkyY,aAAarpY,IAAI4C,IAAG5F,IAAGA,GAAEgD,IAAI4C,KAAG,CAAG,GAAA,CAAA/J,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,GAAE5J,GAAE8I,IAAE4tY,IAAAA,GAACj1Y,KAAM6F,GAAC4+Q,iBAAAA,oBAAKzkR,KAAKoqW,UAAUgqC,iBAAiB71Y,KAAGe,CAAAA,EAAAA,CAAAA,GAAGoE,KAAG+H,GAAEzL,KAAKg0Y,mBAAmB3sY,IAAGT,GAAE,IAAI+kY,GAAG9I,MAAKp+G,iBAAAA,iBAAEmuG,CAAAA,UAAU,SAACnvX,GAAEgD,IAAKhD,GAAEy7W,YAAY,IAA8Dg2B,GAAArwH,eAAnDowH,GAAKjX,YAAY,CAAC71X,GAAEirV,SAAS,GAAGnuV,EAAEkD,GAAEirV,SAAS,GAAGhtV,IAAG,GAAxDoF,GAAC0pY,GAACvpY,GAAAA,GAACupY,GAAsDzxY,GAAAA,GAAEoiG,OAAOr6F,GAAEG,IAAGxD,GAAE2uV,SAASn1V,SAAQ,SAACkK,GAAEnE,IAAKutY,GAAKJ,cAAchpY,GAAEpI,GAAE0E,GAAEirV,SAASp1R,GAAGt2D,GAAE,IAAIS,GAAEirV,SAAS,GAAI,IAAE3vV,GAAEy6W,gBAAgBz3W,GAAE,GAAKZ,IAAEo4X,GAAAA,CAAAA,oBAAmB,KAAK,OAAWj+X,KAACkyY,aAAarpY,IAAIjC,IAAG6E,KAAIA,GAAE5C,IAAIjC,IAAGA,GAAEwmN,GAAG,eAAc,WAAK6nL,GAAKt0M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAU,IAAE9hF,GAAEwmN,GAAG,cAAa,WAAK6nL,GAAKt0M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAU,MAAG,CAAE,GAAChnF,CAAAA,IAAA7B,YAAAA,MAAAs1Y,SAAUzxY,GAAEyE,GAAE5J,QAAE8I,GAAC2D,UAAA9K,OAAA8K,QAAA9M,IAAA8M,cAAAA,UAAA,GAAInF,GAACmF,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAACuN,GAACT,UAAA9K,OAAA,EAAA8K,UAAA9M,QAAAA,EAAQ0I,GAAE5G,KAAKg+X,YAAY,CAAC71X,GAAElD,EAAEkD,GAAE/B,IAAI,GAAG+B,GAAE,IAAIgsV,GAAGvtV,GAAE,GAAGA,GAAE,IAAIrI,GAAE6N,OAAO+7B,GAAG8hU,YAAY,CAAC,IAAMxmW,GAAEzD,KAAKoqW,UAAUgrC,eAAe72Y,IAAGkI,GAAE,IAAI+tV,GAAGrsV,GAAEnI,KAAKg+X,YAAY,CAACv6X,GAAEirV,SAAS,IAAI1uV,KAAKq1Y,WAAW3xY,GAAE+C,GAAEhD,GAAE4D,GAAExB,GAAE4F,GAAG,CAAA,GAAGlN,GAAE6N,OAAO+7B,GAAG+hU,UAAU,CAAC,IAAMzmW,GAAEzD,KAAKoqW,UAAUgrC,eAAe72Y,IAAGkI,GAAE,IAAI6tV,GAAGnsV,GAAE1E,GAAEouB,MAAM7xB,KAAKuyY,WAAW9uY,GAAEurI,OAAOhvI,KAAKuyY,YAAYvyY,KAAKs1Y,SAAS5xY,GAAE+C,GAAEhD,GAAE4D,GAAExB,GAAE4F,GAAG,CAAA,GAAC/J,CAAAA,IAAA7B,aAAAA,eAAW6D,GAAEyE,GAAE5J,IAAW,IAAAg3Y,GAATv1Y,KAAAqH,GAAC2D,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,IAAA8M,UAAC,GAAGnF,GAACmF,UAAA9K,OAAA8K,EAAAA,kBAAA9M,EAACuN,GAACT,UAAA9K,SAAA8K,UAAA,QAAA9M,EAAQ0I,GAAE5G,KAAKoqW,UAAUgrC,eAAe72Y,IAAGkF,GAAEzD,KAAKg0Y,mBAAmBnuY,IAAE2vY,GAAWrtY,GAAE1E,EAATgD,GAAC+uY,GAAHvwY,EAAMuG,GAACgqY,GAAHpvY,EAASuF,GAAE,IAAIsuX,GAAEx1G,iBAAAA,iBAAK79Q,CAAAA,EAAAA,IAAEtH,CAAAA,EAAAA,CAAAA,GAAGoE,GAAEuB,EAAEwB,GAAEL,EAAEoF,GAAEkjV,OAAOvmV,GAAEd,EAAErH,KAAKuyY,WAAWtU,oBAAmB,KAAKj+X,KAAKkyY,aAAarpY,IAAI8C,IAAG,IAAME,GAAE,IAAIo/Q,GAAGjrR,KAAK4xY,QAAQ3oE,KAAK0jC,GAAG9gW,KAAIijS,WAAU,SAAApnS,IAAIiE,GAAE+iV,OAAO/iV,GAAE+iV,SAAShnV,GAAE,IAAGiE,GAAEyhN,GAAG,WAAU,WAAKvhN,GAAEzL,OAAOyL,GAAEg1L,UAAU,IAAGl1L,GAAEyhN,GAAG,eAAc,WAAKmoL,GAAK50M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,QAAQrhF,IAAGsE,GAAEw2D,KAAK,sBAAsB,IAAGx2D,GAAEyhN,GAAG,cAAa,WAAKmoL,GAAK50M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,UAAUrhF,IAAGsE,GAAEw2D,KAAKv7D,GAAEu7D,MAAM,cAAe,IAAE12D,IAAGE,GAAEyhN,GAAG,6BAA4B,SAAA1lN,IAAIA,GAAEkgC,cAAa,EAAGn8B,IAAG,IAAGhI,IAAGkI,IAAGlI,GAAEoF,IAAI8C,GAAE,GAACjK,CAAAA,IAAA7B,WAAAA,eAAS6D,GAAEyE,GAAE5J,IAAW,IAAAk3Y,GAATz1Y,KAAAqH,GAAC2D,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,IAAA8M,UAAC,GAAGnF,GAACmF,UAAA9K,OAAA8K,EAAAA,kBAAA9M,EAACuN,GAACT,UAAA9K,SAAA8K,UAAA,QAAA9M,EAAQ0I,GAAE5G,KAAKoqW,UAAUgrC,eAAe72Y,IAAGkF,GAAEzD,KAAKg0Y,mBAAmBnuY,IAAMY,GAAS0B,GAAXT,EAAM8D,GAAKrD,GAAP8E,EAAItB,GAAGxD,GAAHwD,EAAKE,GAAE,IAAIsuX,GAAE11G,iBAAAA,iBAAA,CAAEnlR,GAAGoE,IAAKkD,IAAC,CAAA,EAAA,CAAC3B,EAAEwB,GAAExB,EAAEmB,EAAEK,GAAEL,EAAEyrB,MAAMrmB,GAAEwjI,OAAOrjI,GAAEm+W,QAAQt+W,GAAE,EAAEu+W,QAAQp+W,GAAE,EAAEsyX,oBAAmB,KAAKj+X,KAAKkyY,aAAarpY,IAAIgD,IAAG,IAAMnE,GAAE,IAAIujR,GAAGjrR,KAAK4xY,QAAQ3oE,KAAK0jC,GAAGjlW,KAAIonS,WAAU,SAAApjS,IAAI,IAAMwD,GAAErD,GAAEgmB,QAAQnmB,GAAEE,GAAEC,GAAEmjI,SAAStjI,GAAEG,GAAEgmB,MAAM3iB,IAAGrD,GAAEmjI,OAAOpjI,IAAGC,GAAEi+W,QAAQ56W,GAAE,GAAGrD,GAAEk+W,QAAQn+W,GAAE,EAAG,IAAEC,GAAEuhN,GAAG,WAAU,WAAK1lN,GAAEtH,OAAOsH,GAAEm5L,UAAW,IAAEh1L,GAAEuhN,GAAG,eAAc,WAAKqoL,GAAK90M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,YAAYrhF,IAAGwE,GAAEs2D,KAAK,sBAAuB,IAAEt2D,GAAEuhN,GAAG,cAAa,WAAKqoL,GAAK90M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,UAAUrhF,IAAGwE,GAAEs2D,KAAKv7D,GAAEu7D,MAAM,cAAe,IAAE12D,IAAGI,GAAEuhN,GAAG,6BAA4B,SAAA1hN,IAAIA,GAAEk8B,cAAa,EAAGn8B,IAAG,IAAGhI,IAAGoI,IAAGpI,GAAEoF,IAAIgD,GAAG,GAAA,CAAAnK,IAAA7B,WAAAA,MAAAmrW,SAAStnW,IAAG1D,KAAKoyY,UAAUvlB,iBAAiB,IAAM1kX,GAAEnI,KAAKoqW,UAAUS,gBAAgB,OAAW,MAAE,IAAI+yB,GAAGl6X,GAAE1D,KAAKuyY,WAAWvyY,KAAKwyY,YAAYxyY,KAAKoyY,UAAU,CAACrnC,UAAU5iW,GAAE4iW,UAAUD,UAAU3iW,GAAE2iW,UAAUizB,UAAU/9X,KAAKoqW,UAAU2pC,cAAc5rY,GAAE41X,WAAWD,UAAU99X,KAAKoqW,UAAU2pC,cAAc5rY,GAAE21X,YAAY,GAACp8X,CAAAA,IAAA7B,UAAAA,MAAAqrW,SAAQxnW,IAAG,IAAMyE,GAAEnI,KAAKoqW,UAAUa,eAAe1sW,GAAEyB,KAAKoqW,UAAU2pC,cAAc5rY,GAAEutY,OAAOruY,GAAErH,KAAKoqW,UAAU2pC,cAAc5rY,GAAEwtY,OAAO,OAAO31Y,KAAKsyY,SAASzlB,iBAAiB,IAAIwQ,GAAG35X,GAAE1D,KAAKsyY,SAAS,CAAChV,MAAM/+X,GAAEi/X,MAAMn2X,GAAEk2X,QAAQ,GAAGE,QAAQ,KAAKvuQ,SAAQ,CAAG,GAAA,CAAAxtH,IAAA,4BAAA7B,MAAA,SAA0B6D,GAAEyE,GAAE5J,IAAE,IAAA8I,GAAC2D,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,IAAA8M,UAAC,GAAGnF,GAACmF,UAAA9K,OAAA,EAAA8K,UAAA,QAAA9M,EAACuN,GAACT,UAAA9K,OAAA,EAAA8K,UAAA,QAAA9M,EAAE,QAAQiK,GAAEiE,MAAMpM,KAAK41Y,wBAAwBlyY,GAAEyE,GAAE5J,GAAEsH,GAAEwB,GAAEoE,GAAG,GAAA,CAAA/J,IAAA,mBAAA7B,MAAA,SAAiB6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG7F,KAAK61Y,SAASnyY,GAAE,IAAIyxV,GAAGhtV,GAAE2tY,WAAW3tY,GAAEguH,KAAKq2N,IAAIjuV,GAAE8I,IAAGrH,KAAK61Y,SAASnyY,GAAE,IAAIyxV,GAAGhtV,GAAE4tY,SAAS5tY,GAAEguH,KAAKo2N,IAAIhuV,GAAE8I,IAAGrH,KAAK6vY,0BAA0BnsY,GAAEyE,GAAEguH,KAAK53H,IAAE,EAAG8I,GAAExB,IAAG7F,KAAKg2Y,UAAUtyY,GAAEyE,GAAEk/K,MAAM9oL,GAAE8I,GAAG,GAAA,CAAA3F,IAAA,uBAAA7B,MAAA,SAAqB6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG7F,KAAK6vY,0BAA0BnsY,GAAEyE,GAAEguH,KAAK53H,IAAE,EAAG8I,GAAExB,IAAG7F,KAAK61Y,SAASnyY,GAAE,IAAIyxV,GAAGhtV,GAAE2tY,WAAW3tY,GAAEguH,KAAKq2N,IAAIjuV,GAAE8I,IAAGrH,KAAK61Y,SAASnyY,GAAE,IAAIyxV,GAAGhtV,GAAE4tY,SAAS5tY,GAAEguH,KAAKo2N,IAAIhuV,GAAE8I,GAAG,GAAA,CAAA3F,IAAA,cAAA7B,MAAAo2Y,SAAYvyY,GAAEyE,GAAE5J,GAAE8I,IAAG,OAAM,CAAG,GAAA,CAAA3F,IAAA7B,uBAAAA,MAAAq2Y,SAAqBxyY,IAAE,IAAAyE,GAAC6C,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAA,GAAC,IAAIzM,GAACyM,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAACmJ,GAAC2D,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAAQ0I,GAAE,IAAIyyX,GAAE50G,iBAAAA,iBAAEhgH,CAAAA,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE8oV,GAAGvnV,EAAEkD,GAAEzE,GAAE8oV,GAAGpmV,EAAE1C,GAAE6oV,GAAGtnV,EAAEkD,GAAEzE,GAAE6oV,GAAGnmV,KAAO7H,IAAC,CAAA,EAAA,CAAC0/X,oBAAmB,EAAGxE,iBAAgB,EAAGE,oBAAmB,EAAGJ,cAAc,GAAGC,aAAa,EAAEr3T,KAAK5jE,GAAEs8V,aAAYp3V,GAAE,IAAIm0X,GAAEnzG,iBAAAA,iBAAA,CAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE8oV,GAAGvnV,EAAEkD,GAAE,GAAGzE,GAAE8oV,GAAGpmV,EAAE1C,GAAE8oV,GAAGvnV,EAAEkD,GAAE,GAAGzE,GAAE8oV,GAAGpmV,KAAO7H,IAAE0/X,CAAAA,EAAAA,CAAAA,oBAAmB,KAAKx3X,GAAE,IAAImxX,GAAEnzG,iBAAAA,iBAAA,CAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE6oV,GAAGtnV,EAAEkD,GAAE,GAAGzE,GAAE6oV,GAAGnmV,EAAE1C,GAAE6oV,GAAGtnV,EAAEkD,GAAE,GAAGzE,GAAE6oV,GAAGnmV,KAAO7H,IAAE0/X,CAAAA,EAAAA,CAAAA,oBAAmB,KAAKj+X,KAAKkyY,aAAarpY,IAAIjC,GAAEnD,GAAEgD,IAAGY,IAAGT,IAAGS,GAAEwB,IAAIjC,GAAG,GAAA,CAAAlF,IAAA,yBAAA7B,MAAA,SAAuB6D,IAAE,IAAAyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,IAAIzM,GAACyM,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAACmJ,GAAC2D,UAAA9K,OAAA,EAAA8K,UAAA9M,QAAAA,EAAQ0I,GAAE,IAAIyyX,GAAE50G,iBAAAA,iBAAA,CAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,EAAE+B,GAAEzE,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,EAAE+B,MAAO5J,IAAC,CAAA,EAAA,CAAC0/X,oBAAmB,EAAGxE,iBAAgB,EAAGE,oBAAmB,EAAGJ,cAAc,GAAGC,aAAa,EAAEr3T,KAAK5jE,GAAEs8V,aAAYp3V,GAAE,IAAIm0X,GAAEnzG,iBAAAA,iBAAA,CAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,EAAE+B,GAAE,GAAGzE,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,EAAE+B,GAAE,MAAQ5J,IAAC,CAAA,EAAA,CAAC0/X,oBAAmB,KAAKx3X,GAAE,IAAImxX,GAAEnzG,iBAAAA,iBAAEhgH,CAAAA,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,EAAE+B,GAAE,GAAGzE,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,EAAE+B,GAAE,MAAQ5J,IAAE0/X,CAAAA,EAAAA,CAAAA,oBAAmB,KAAKj+X,KAAKkyY,aAAarpY,IAAIjC,GAAEnD,GAAEgD,IAAGY,IAAGT,IAAGS,GAAEwB,IAAIjC,GAAG,GAAA,CAAAlF,IAAA,uBAAA7B,MAAA,SAAqB6D,IAAY,IAAVyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,IAAIzM,GAACyM,UAAA9K,OAAA,EAAA8K,UAAA9M,QAAAA,EAACmJ,GAAC2D,UAAA9K,OAAA,EAAA8K,UAAA,QAAA9M,EAA4Di4Y,GAAAtxH,eAA/C7kR,KAAKg+X,YAAY,CAACt6X,GAAEgqV,SAASzoV,EAAEkD,GAAEzE,GAAEgqV,SAAStnV,IAAjDP,GAAAA,GAACswY,GAAC1qY,GAAAA,GAAC0qY,MAAkDvvY,GAAE,IAAI+zX,GAAGp8X,IAAGqI,GAAEiC,IAAI,IAAI8iY,GAAG9tR,IAAI,CAAC17C,KAAK,QAAQ87T,oBAAmB,EAAGnhK,OAAO,OAAOC,YAAY,MAAM,IAAMt5N,GAAE,IAAIm4X,GAAG,CAACpwV,KAAKthC,OAAO9L,KAAK4G,MAAM,IAAItB,GAAExD,QAAQ,KAAK2iG,QAAQ,EAAEuhE,SAAS,GAAGjiG,KAAK,QAAQ87T,oBAAmB,IAAKr3X,GAAEkgB,SAAS,CAAC7hB,EAAEY,GAAEpC,GAAEy1I,WAAW,IAAI9yI,EAAEqF,GAAEhI,GAAEk5X,UAAU,IAAI/1X,GAAEiC,IAAIpF,IAAGzD,KAAKkyY,aAAarpY,IAAIjC,IAAGS,IAAGT,IAAGS,GAAEwB,IAAIjC,GAAG,GAAA,CAAAlF,IAAA,yBAAA7B,MAAA,SAAuB6D,IAAY,IAAVyE,GAAC6C,UAAA9K,eAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,IAAIzM,GAACyM,UAAA9K,OAAA8K,EAAAA,kBAAA9M,EAACmJ,GAAC2D,UAAA9K,SAAA8K,UAAA,QAAA9M,EAA4Dk4Y,GAAAvxH,eAA/C7kR,KAAKg+X,YAAY,CAACt6X,GAAEgqV,SAASzoV,EAAEvB,GAAEgqV,SAAStnV,EAAE+B,KAAG,GAApDtC,GAACuwY,GAAC3qY,GAAAA,GAAC2qY,GAAkDxvY,GAAAA,GAAE,IAAI+zX,GAAGp8X,IAAGqI,GAAEiC,IAAI,IAAI8iY,GAAG9tR,IAAI,CAAC17C,KAAK,QAAQ87T,oBAAmB,EAAGnhK,OAAO,OAAOC,YAAY,MAAM,IAAMt5N,GAAE,IAAIm4X,GAAG,CAACpwV,KAAKthC,OAAO9L,KAAK4G,MAAM,IAAItB,GAAExD,QAAQ,KAAK2iG,QAAQ,EAAEuhE,SAAS,GAAGjiG,KAAK,QAAQ87T,oBAAmB,IAAKr3X,GAAEkgB,SAAS,CAAC7hB,EAAEY,GAAEpC,GAAEk5X,UAAU,EAAEv2X,EAAEqF,GAAEhI,GAAEy1I,WAAW,MAAMtyI,GAAEiC,IAAIpF,IAAGzD,KAAKkyY,aAAarpY,IAAIjC,IAAGS,IAAGT,IAAGS,GAAEwB,IAAIjC,GAAE,IAAClF,IAAA,0BAAA7B,MAAA,SAAwB6D,GAAEyE,GAAE5J,GAAE8I,IAAS,IAAAgvY,GAAAr2Y,KAAP6F,GAACmF,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,IAAAA,UAAC,GAAGS,GAACT,UAAA9K,OAAA,EAAA8K,UAAA,QAAA9M,EAAQ0I,GAAC69Q,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAE,CAAA,EAAA,CAACe,GAAGoE,KAAGD,GAAEzD,KAAKg0Y,mBAAmB3sY,IAAGZ,GAAEzG,KAAKs2Y,mCAAmCnuY,GAAEvB,IAAGf,KAAIpC,GAAE2pN,GAAG,eAAc,SAAAzhN,IAAI0qY,GAAK11M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAU,IAAEjlF,GAAE2pN,GAAG,cAAa,SAAAzhN,IAAI0qY,GAAK11M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAU,KAAG,IAAMl9E,GAAE,IAAIowX,GAAG,CAACpwV,KAAKthC,OAAO9L,KAAK4G,MAAM,IAAImD,GAAEjI,QAAQ,KAAK2iG,QAAQ,EAAEuhE,SAAS,KAAK54J,GAAEkzW,WAAW,GAAGj4W,GAAEi4W,YAAYlzW,GAAEkzW,WAAWj4W,GAAEk4W,cAAc3+W,KAAKu2Y,yBAAyBpuY,GAAEvB,GAAEnD,IAAGgD,GAAEkzX,oBAAmB,GAAIlzX,GAAEgzX,iBAAgB,GAAIhzX,GAAE07W,aAAY,IAAKt8W,IAAGY,GAAE2mN,GAAG,aAAY,SAAAzhN,IAAIF,KAAIE,GAAEi8B,cAAa,EAAGn8B,KAAK,IAAEzL,KAAKkyY,aAAarpY,IAAIpC,IAAGhD,GAAEoF,IAAIpC,IAAGZ,IAAGpC,GAAEqlX,WAAU,EAAI,GAAA,CAAApnX,IAAA7B,2BAAAA,MAAA02Y,SAAyB7yY,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAE3D,GAAE+5V,0BAA0B/5V,GAAExD,QAAQ2F,GAAE,IAAIwzX,GAAE50G,iBAAAA,kBAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAAC32X,GAAEpC,EAAEoC,GAAEjB,EAAE1C,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,KAAO+B,IAAC,CAAA,EAAA,CAAC+6W,eAAe,GAAG+a,oBAAmB,EAAGxE,iBAAgB,EAAGE,oBAAmB,EAAGJ,cAAc,GAAGC,aAAa,EAAEr3T,KAAKh6D,GAAE0yV,UAAUz3L,QAAQj7J,GAAEi7J,WAAU33J,GAAE/H,GAAE+5V,yBAAyB/5V,GAAExD,QAAQ0G,GAAE,IAAIyyX,GAAE50G,iBAAAA,iBAAA,CAAEhgH,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,EAAEqF,GAAExG,EAAEwG,GAAErF,KAAO+B,IAAC,CAAA,EAAA,CAAC+6W,eAAe,GAAG+a,oBAAmB,EAAGxE,iBAAgB,EAAGE,oBAAmB,EAAGJ,cAAc,GAAGC,aAAa,EAAEr3T,KAAKh6D,GAAE0yV,UAAUz3L,QAAQj7J,GAAEi7J,WAAU7kK,GAAEsK,IAAIhD,GAAEe,GAAG,GAAA,CAAAlF,IAAA,qCAAA7B,MAAA,SAAmC6D,GAAEyE,IAAG,OAAW,IAAAkxX,GAAE50G,iBAAAA,iBAAEhgH,CAAAA,OAAOzkK,KAAKg+X,YAAY,CAACt6X,GAAE8oV,GAAGvnV,EAAEvB,GAAE8oV,GAAGpmV,EAAE1C,GAAE6oV,GAAGtnV,EAAEvB,GAAE6oV,GAAGnmV,KAAO+B,IAAE62W,GAAAA,CAAAA,SAAS,QAAQgD,KAAK,CAAC,GAAG,IAAIpD,QAAQ,QAAQmZ,QAAQ,GAAG7U,eAAe,GAAG+a,oBAAmB,EAAGxE,iBAAgB,EAAGE,oBAAmB,EAAGJ,cAAc,GAAGC,aAAa,EAAEr3T,KAAKh6D,GAAE0yV,UAAUz3L,QAAQj7J,GAAEi7J,UAAS,GAAC1hK,CAAAA,IAAA7B,YAAAA,eAAU6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAS,IAAA4F,GAACg5Q,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAE,CAAA,EAAA,CAACe,GAAGoE,KAAGkD,GAAE5G,KAAKg0Y,mBAAmB3sY,IAAsDmvY,GAAA3xH,eAA7C7kR,KAAKg+X,YAAY,CAAC71X,GAAE2e,SAAS7hB,EAAEkD,GAAE2e,SAAS1gB,IAA/C3C,GAAAA,GAAC+yY,GAAA,GAAC/vY,GAAC+vY,GAAA,GAAgDhrY,GAAE,IAAImvX,GAAG,CAAE,GAAEhvX,GAAE,IAAIggY,GAAG9tR,IAAI,CAAC17C,KAAK,QAAQ87T,oBAAmB,EAAGnhK,OAAO,OAAOC,YAAY,GAAG35D,QAAQ33J,GAAE23J,UAAU53J,GAAE3C,IAAI8C,IAAG,IAAME,GAAE,IAAI+vX,GAAG,CAACpwV,KAAKrjC,GAAEqjC,KAAKq3D,QAAQ,EAAEuhE,SAAS,GAAGjiG,KAAK,QAAQ87T,oBAAmB,EAAG76N,QAAQ33J,GAAE23J,UAAUj7J,GAAEsuY,WAAW5qY,GAAE6yW,WAAW7yW,GAAE8yW,aAAanzW,GAAEsb,SAAS,CAAC7hB,EAAExB,GAAE0E,GAAE0pB,MAAM,EAAEzrB,EAAEK,GAAE0B,GAAE6mI,OAAO,IAAInpI,IAAG2F,GAAE4hN,GAAG,6BAA4B,SAAA1lN,IAAIA,GAAEkgC,cAAa,EAAG/hC,IAAG,IAAG2F,GAAE3C,IAAIgD,IAAGjF,GAAEiC,IAAI2C,IAAGxL,KAAKkyY,aAAarpY,IAAIjC,GAAG,GAAA,CAAAlF,IAAA7B,WAAAA,MAAA62Y,SAAShzY,GAAEyE,GAAE5J,GAAE8I,IAAS,IAAAxB,GAAC4+Q,iBAAAA,iBAAK,CAAA,EAAAzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAE,CAAA,EAAA,CAACe,GAAGoE,KAAG+H,GAAEzL,KAAKg0Y,mBAAmB3sY,IAAGT,GAAEuB,GAAEsnV,MAAM1sV,KAAI,SAAAmM,IAAG,OAAAilV,GAAG/jL,SAASlhK,GAAEw+U,SAASvlV,GAAEioV,SAAU,IAAC7iV,OAAO,GAAG9J,GAAEmD,GAAE,IAAI,IAAIA,GAAC+vY,GAAWxuY,GAAEioV,SAAT3pV,GAACkwY,GAAH1xY,EAAMuG,GAACmrY,GAAHvwY,EAAgBuF,GAAE3L,KAAKm0Y,sBAAsB,CAAC,IAAIhgD,GAAG1tV,GAAE+E,GAAE/H,IAAG,IAAI0wV,GAAG1tV,GAAE+E,GAAE/H,MAAKoI,GAAE7L,KAAKm0Y,sBAAsB,CAAC,IAAIhgD,GAAG1tV,GAAEhD,GAAE+H,IAAG,IAAI2oV,GAAG1tV,GAAEhD,GAAE+H,MAAK9D,GAAE1H,KAAKi0Y,cAActoY,GAAE9F,GAAEtH,GAAE21Y,UAAUxoY,GAAE1L,KAAKi0Y,cAAcpoY,GAAEhG,GAAEtH,GAAE21Y,UAAUzoY,GAAE5C,IAAInB,GAAEgE,IAAG1L,KAAKkyY,aAAarpY,IAAI4C,GAAG,GAAA,CAAA/J,IAAA,eAAA7B,MAAA+2Y,SAAalzY,GAAEyE,GAAE5J,GAAE8I,IAAE,IAAoFT,GAApFiwY,GAAA72Y,KAAO6F,GAAC4+Q,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKoqW,UAAU2pC,cAAcx1Y,KAAE,GAAA,CAACe,GAAGoE,KAAG+H,GAAEzL,KAAKg0Y,mBAAmB3sY,IAAS,GAAG,QAAQc,GAAEiE,KAAKxF,GAAE5G,KAAK2zY,aAAaxrY,GAAEtC,QAAO,CAAC,IAASpC,GAAQ0E,GAAXqkV,GAAQ/lV,GAAG0B,GAANokV,GAAQ3lV,GAAE5G,KAAKi0Y,cAAc,CAACxwY,GAAEwB,EAAExB,GAAE2C,EAAEK,GAAExB,EAAEwB,GAAEL,GAAGP,GAAG4F,CAAAA,GAAE5C,IAAIjC,IAAG6E,GAAE2hN,GAAG,eAAc,WAAKypL,GAAKl2M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAS,IAAGj9E,GAAE2hN,GAAG,cAAa,WAAKypL,GAAKl2M,MAAM9nK,YAAYpqB,MAAMi6E,OAAO,SAAS,IAAG9hF,GAAEwmN,GAAG,aAAY,SAAA3pN,IAAIA,GAAEmkC,cAAa,EAAGivW,GAAKvrL,QAAQlrN,KAAK+H,GAAE2uY,kBAAmB,IAAE92Y,KAAKkyY,aAAarpY,IAAI4C,GAAG,IAAA,CAAxze+lY,CAASrnC,IAAgze,SAAS4sC,KAAK,OAAOpL,GAAGpJ,KAAK3oB,gBAAiB,CAAA,IAAMo9B,GAAEA,WAAA1qG,OAAAA,cAAA0qG,SAAAA,KAAA9qG,gBAAA8qG,KAAAA,GAAA1qG,GAAA,CAAA,CAAA5qS,IAAA,gBAAA7B,MAAC,SAAc6D,IAAG,OAAOA,GAAEyyH,MAAM,KAAKizO,GAAGE,YAAY,MAAM,CAACxsI,OAAO,OAAOC,YAAY,KAAK,KAAKqsI,GAAGC,WAAW,KAAKD,GAAGG,cAAc,MAAM,CAACzsI,OAAO,MAAMC,YAAY,KAAK,KAAKqsI,GAAGI,UAAU,MAAM,CAAC1sI,OAAO,OAAOC,YAAY,GAAG,KAAKqsI,GAAGM,cAAc,MAAM,CAAC5sI,OAAO,UAAUC,YAAY,GAAG,KAAKqsI,GAAGK,cAAc,MAAM,CAAC3sI,OAAO,YAAYC,YAAY,GAAG,KAAKqsI,GAAGO,YAAY,MAAM,CAAC7sI,OAAO,QAAQC,YAAY,GAAG,KAAKqsI,GAAGQ,UAAU,MAAM,CAAC9sI,OAAO,OAAOC,YAAY,KAAK,KAAKqsI,GAAGW,cAAc,MAAM,CAACjtI,OAAO,QAAQC,YAAY,KAAK,KAAKqsI,GAAGS,WAAY,IAAM1hW,GAAEzE,GAAE49G,OAAOy1R,KAAK,MAAM,CAAC50U,KAAKh6D,GAAE20N,OAAO30N,GAAE40N,YAAY,GAAG,KAAKqsI,GAAGU,WAAW,OAAArlF,iBAAOo2E,CAAAA,UAAUn3V,GAAEm3V,UAAU/9H,OAAOp5N,GAAE49G,MAAM59G,GAAE49G,MAAM,QAAQy7G,YAAYr5N,GAAEq5N,YAAYr5N,GAAEq5N,YAAY,GAAKr5N,IAAG,KAAK0lW,GAAGY,WAAW,OAAAvlF,iBAAO3nD,CAAAA,OAAOp5N,GAAE49G,MAAM59G,GAAE49G,MAAM,QAAQy7G,YAAYr5N,GAAEq5N,YAAYr5N,GAAEq5N,YAAY,GAAKr5N,IAAG,GAAC,CAAAhC,IAAA,iBAAA7B,MAAA,SAAe6D,IAAG,OAAOA,GAAE0I,MAAM,KAAK+7B,GAAG8hU,YAAa,IAAM9hW,GAAEzE,GAAEgrV,QAAQ,GAAG,OAAAjqE,iBAAAA,iBAAA,GAAU/gR,IAAC,CAAA,EAAA,CAACy+D,KAAKz+D,GAAEy+D,MAAM,QAAQusR,OAAOvmV,KAAG,KAAKggC,GAAG+hU,UAAW,IAAM/hW,GAAEzE,GAAEmuB,OAAO,GAAGtzB,GAAEmF,GAAEsrI,QAAQ7mI,GAAE,OAAAs8Q,iBAAAA,iBAAU/gR,CAAAA,EAAAA,IAAEy+D,GAAAA,CAAAA,KAAKz+D,GAAEy+D,MAAM,QAAQtwC,MAAM1pB,GAAE6mI,OAAOzwI,KAAI,GAACmD,CAAAA,IAAA7B,mBAAAA,MAAAu0Y,SAAiB1wY,IAAG,IAAMyE,GAAEnI,KAAK+zY,cAAcrwY,IAAGnF,GAAEmF,GAAEy+D,KAAKh6D,GAAE20N,OAAO30N,GAAE0yV,UAAU,OAAAp2E,iBAAAA,iBAAUt8Q,CAAAA,EAAAA,IAAE05K,CAAAA,EAAAA,CAAAA,QAAO,EAAG1/G,KAAK5jE,IAAE,GAACmD,CAAAA,qBAAA7B,MAAA,WAAiB,MAAM,CAAC0/V,KAAK,CAAC1oN,MAAK,EAAG1gB,KAAKizO,GAAGG,cAAcpnS,MAAK,GAAI80U,MAAM,CAACxY,MAAM,CAACtoQ,KAAKizO,GAAGI,WAAW/hF,OAAO,CAACr7Q,KAAK,YAAY+1D,MAAK,EAAGtwC,MAAM,GAAGm9G,OAAO,IAAIkoQ,OAAO,CAAC9qY,KAAK,SAAS+1D,MAAK,EAAGrvD,KAAK,KAAKiJ,OAAO,GAAI,GAAA,CAAAra,IAAA,gBAAA7B,MAAA,WAAgB,MAAM,CAACkrW,UAAU,IAAID,UAAU,EAAEizB,UAAU,CAAC5nQ,KAAKizO,GAAGM,eAAeo0B,UAAU,CAAC3nQ,KAAKizO,GAAGK,eAAe,GAAC/nW,CAAAA,IAAA7B,wBAAAA,MAAAs3Y,WAAwB,MAAM,CAACtlX,MAAM,IAAIm9G,OAAO,IAAK,GAAA,CAAAttI,IAAA,eAAA7B,MAAA,WAAe,MAAM,CAAC8uJ,OAAO,CAAC1pJ,EAAE,EAAEmB,EAAE,GAAGgxY,UAAU,IAAIC,UAAU,IAAI3B,MAAM,CAACv/Q,KAAKizO,GAAGO,aAAagsC,MAAM,CAACx/Q,KAAKizO,GAAGO,aAAa,GAACjoW,CAAAA,IAAA7B,iBAAAA,MAAA6qW,WAAiB,MAAM,CAAC74U,MAAM,IAAIm9G,OAAO,IAAK,IAAA,CAAnrDgoQ,GAAorDD,KAAK,IAAkEO,GAAU,aAA+BC,GAAS,iBAA8BC,GAAY,GAAGC,GAAG,WAAI,EAASC,GAAEA,WAAA,OAAAprG,cAAAorG,SAAAA,KAAAxrG,qBAAAwrG,GAAA,GAAA,KAAA,CAAA,CAAAh2Y,IAAA,wBAAA7B,MAAC,SAA6B6D,IAAM,IAAJyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,EAAG,MAAAqxB,GAAAA,OAAS8yW,GAAGa,eAAc,KAAA3zW,OAAI34B,GAAC,KAAA24B,OAAIl0B,GAAG,GAACzG,CAAAA,IAAA7B,qBAAAA,MAAA83Y,SAA0Bj0Y,IAAM,IAAJyE,GAAC6C,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,EAAG,MAAAqxB,GAAAA,OAAS8yW,GAAGmB,YAAWj0W,KAAAA,OAAI34B,GAAC,KAAA24B,OAAIl0B,GAAG,GAAC,CAAAzG,IAAA7B,cAAAA,MAAA+3Y,SAAmBl0Y,IAAE,IAAAyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,EAAG,MAAA,GAAAqxB,OAAS8yW,GAAG5vC,KAAI,KAAAljU,OAAI34B,GAAC,KAAA24B,OAAIl0B,GAAG,IAAQ,CAA/MuvY,GAA+MG,GAAE,WAAyC,OAAAvrG,cAAxC,SAAAurG,GAAYn0Y,GAAEyE,IAAE+jS,qBAAA2rG,IAAC73Y,KAAKoM,KAAK1I,GAAE1D,KAAK83Y,IAAI3vY,EAAE,GAAAzG,CAAAA,CAAAA,IAAA7B,yBAAAA,MAAAk4Y,SAAuBr0Y,IAAEs0Y,IAAAA,GAAC/iD,KAAAA,GAAGa,gBAAgBpyV,GAAEg1V,MAAM/2V,SAAQ,SAAAwG,IAAI6vY,GAAKF,IAAI3C,UAAUhG,GAAGa,eAAe7nY,GAAE,CAACiE,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAviB,EAAsjBqxV,eAAes0B,KAAa,EAAGrI,GAAGa,eAAgB,IAAEhwY,KAAK83Y,IAAI3C,UAAUhG,GAAGa,eAAe/6C,GAAGgG,cAAcv3V,GAAEg1V,MAAM,CAACtsV,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAjrB,EAA6sBm9G,OAAprB,EAAktBy5I,SAAS/kR,GAAEg1V,KAAKyU,SAAS+V,eAAes0B,KAAa,EAAGrI,GAAGa,eAAe,GAACtuY,CAAAA,oBAAA7B,MAAA,SAAc6D,IAAe1D,KAAK83Y,IAAIjC,SAAS1G,GAAG1Q,MAAM/6X,GAAE,CAACyyH,KAAKizO,GAAGU,WAAW/sI,YAAY,GAAGoyK,GAAG1Q,MAAM,GAAC/8X,CAAAA,IAAA7B,gBAAAA,MAAAo4Y,SAAcv0Y,GAAEyE,QAAE+vY,GAAAl4Y,KAAC0D,GAAE/B,SAAQ,SAAApD,IAAI25Y,GAAKJ,IAAIhI,iBAAiBvxY,GAAEe,GAAGf,GAAE,CAAC43H,KAAKizO,GAAGU,WAAWjP,UAAU,SAASs0C,GAAGY,WAAU,WAAA,OAAI5nY,GAAE5J,GAAEe,GAAG,GAAE,GAAE,GAAA,CAAAoC,IAAA7B,0BAAAA,MAAAs4Y,SAAwBz0Y,IAAG1D,KAAK83Y,IAAIhI,iBAAiBpsY,GAAEpE,GAAGoE,GAAE,CAACyyH,KAAKizO,GAAGU,WAAWxoP,MAAM,kBAAkBy7G,YAAY,EAAE35D,QAAQ,GAAG+rO,GAAG4B,oBAAqB,GAAA,CAAArvY,IAAA,sBAAA7B,MAAA,SAAoB6D,GAAEyE,GAAE5J,GAAE8I,IAAE+wY,IAAAA,QAACp4Y,KAAK83Y,IAAIO,qBAAqB30Y,GAAEpE,GAAGoE,GAAE,CAACyyH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQy7G,YAAY,EAAE35D,QAAQ,IAAI+rO,GAAGyB,kBAAiB,WAAA,OAAIzoY,GAAEzE,GAAEpE,GAAI,IAACoE,GAAE+kW,eAAe9mW,SAAQ,SAAAkE,IAAIuyY,GAAKN,IAAI3C,UAAUhG,GAAG0B,iBAAiBhrY,GAAE,CAACuG,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAz9C,EAAw+CirM,OAAOw6K,GAAUv6K,YAA/5C,EAA27CmmJ,eAAes0B,KAAa,EAAGrI,GAAG0B,kBAAiB,kBAAIxpY,GAAExB,GAAE,GAAE,IAAEnC,GAAE+gK,OAAO9iK,SAAQ,SAAAkE,IAAIuyY,GAAKN,IAAI3C,UAAUhG,GAAG0B,iBAAiBhrY,GAAE,CAACuG,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAnrD,EAAksDirM,OAAOw6K,GAAUv6K,YAAznD,EAAqpDmmJ,eAAes0B,KAAa,EAAGrI,GAAG0B,kBAAiB,WAAA,OAAItyY,GAAEsH,GAAG,GAAA,IAAG7F,KAAK83Y,IAAI9B,UAAUtyY,GAAEpE,GAAGoE,GAAE2jL,MAAM,CAAClxD,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQy7G,YAAY,EAAE35D,QAAQ,IAAI+rO,GAAGyB,kBAAiB,WAAA,OAAIvpY,GAAE3D,GAAE2jL,MAAMvgK,SAAS,GAAE,GAAA,CAAAplB,IAAA,4BAAA7B,MAAAy4Y,SAA0B50Y,IAAG1D,KAAK83Y,IAAI3C,UAAUhG,GAAG2B,sBAAsBptY,GAAE,CAAC0I,KAAK+7B,GAAG+hU,UAAU/nS,KAAK,QAAQtwC,MAAliE,EAAijEirM,OAAOw6K,GAAUv6K,YAAx+D,EAAogEmmJ,eAAes0B,KAAa,EAAGrI,GAAG2B,yBAAuBpvY,CAAAA,IAAA7B,wBAAAA,MAAA04Y,WAAwBv4Y,KAAK83Y,IAAIU,cAAcrJ,GAAGyB,kBAAkB5wY,KAAK83Y,IAAIU,cAAcrJ,GAAG0B,iBAAiB,GAACnvY,CAAAA,IAAA7B,kBAAAA,iBAAkBG,KAAK83Y,IAAIU,cAAcrJ,GAAGK,eAAe,GAAC9tY,CAAAA,iCAAA7B,MAAA,WAA6BG,KAAK83Y,IAAIU,cAAcrJ,GAAG2B,sBAAsB,IAACpvY,IAAA,gCAAA7B,MAAA,WAAgCG,KAAK83Y,IAAIU,cAAcrJ,GAAG4B,oBAAqB,GAAA,CAAArvY,IAAA,qBAAA7B,MAAA,WAAqBG,KAAK83Y,IAAIU,cAAcrJ,GAAGwB,cAAc,GAACjvY,CAAAA,IAAA7B,mBAAAA,MAAA44Y,WAAmBz4Y,KAAK83Y,IAAIU,cAAcrJ,GAAGmB,aAAatwY,KAAK83Y,IAAIU,cAAcrJ,GAAGzyC,SAAS,GAACh7V,CAAAA,uBAAA7B,MAAA,WAAmBG,KAAK83Y,IAAIU,cAAcrJ,GAAGQ,YAAY,IAACjuY,IAAA,qBAAA7B,MAAA,WAAqBG,KAAK83Y,IAAIY,aAAavJ,GAAGoB,mBAAmBvwY,KAAK83Y,IAAIU,cAAcrJ,GAAGQ,YAAa,GAAA,CAAAjuY,IAAA,yBAAA7B,MAAA,WAAyBG,KAAK83Y,IAAIU,cAAcrJ,GAAGS,kBAAmB,GAAA,CAAAluY,IAAA,iCAAA7B,MAAA84Y,WAAiC34Y,KAAK83Y,IAAIU,cAAcrJ,GAAGU,0BAA2B,GAAA,CAAAnuY,IAAA7B,wBAAAA,MAAA+4Y,WAAwB54Y,KAAK83Y,IAAIU,cAAcrJ,GAAGW,iBAAiB,IAACpuY,IAAA,kBAAA7B,MAAA,WAAkBG,KAAK83Y,IAAIU,cAAcrJ,GAAGY,UAAW,GAAA,CAAAruY,IAAA,aAAA7B,MAAA,WAAaG,KAAK83Y,IAAIU,cAAcrJ,GAAGj2C,OAAOl5V,KAAK83Y,IAAIU,cAAcrJ,GAAG5vC,KAAM,GAAA,CAAA79V,IAAA,cAAA7B,MAAAg5Y,WAAc74Y,KAAK83Y,IAAIU,cAAcrJ,GAAG1Q,MAAM,GAAC/8X,CAAAA,sBAAA7B,MAAA,WAAkBG,KAAK83Y,IAAIU,cAAcrJ,GAAGI,UAAU,IAAC7tY,IAAA,qBAAA7B,MAAA,WAAqBG,KAAK83Y,IAAIU,cAAcrJ,GAAGa,gBAAgBhwY,KAAK83Y,IAAIU,cAAcrJ,GAAGc,oBAAoB,GAACvuY,CAAAA,IAAA7B,wBAAAA,iBAAwBG,KAAK83Y,IAAIU,cAAcrJ,GAAGe,kBAAkBlwY,KAAK83Y,IAAIU,cAAcrJ,GAAGgB,gBAAiB,GAAA,CAAAzuY,IAAA,kBAAA7B,MAAA,WAAkBG,KAAK83Y,IAAIU,cAAcrJ,GAAGqB,cAAY9uY,CAAAA,IAAA7B,qBAAAA,MAAAi5Y,WAAqB94Y,KAAK83Y,IAAIU,cAAcrJ,GAAGsB,cAAc,GAAC/uY,CAAAA,IAAA7B,kBAAAA,MAAAk5Y,WAAkB/4Y,KAAK83Y,IAAIU,cAAcrJ,GAAGiB,YAAYpwY,KAAK83Y,IAAIU,cAAcrJ,GAAGkB,gBAAiB,GAAA,CAAA3uY,IAAA,eAAA7B,MAAA,WAAeG,KAAK83Y,IAAIU,cAAcrJ,GAAGuB,QAAS,GAAA,CAAAhvY,IAAA,oBAAA7B,MAAA,SAAkB6D,IAAG1D,KAAK83Y,IAAIU,cAAcrJ,GAAGQ,aAAa3vY,KAAK83Y,IAAIjC,SAAS1G,GAAGQ,YAAYjsY,GAAE,CAACyyH,KAAKizO,GAAGI,WAAY,GAAA,CAAA9nW,IAAA,0BAAA7B,MAAAm5Y,SAAwBt1Y,IAAG1D,KAAK83Y,IAAIU,cAAcrJ,GAAGS,mBAAmB5vY,KAAK83Y,IAAIhE,SAAS3E,GAAGS,kBAAkBlsY,GAAE,CAACyyH,KAAKizO,GAAGY,WAAWgY,KAAK,CAAC,GAAG,IAAIjlJ,YAAY,EAAE35D,QAAQ,IAAI+rO,GAAGS,kBAAmB,GAAA,CAAAluY,IAAA,6BAAA7B,MAAAo5Y,SAA2Bv1Y,IAAEw1Y,IAAAA,GAACl5Y,KAAAA,KAAK83Y,IAAIU,cAAcrJ,GAAGQ,aAAajsY,GAAE/B,SAAQ,SAAAwG,IAAI+wY,GAAKpB,IAAIjC,SAAS1G,GAAGQ,YAAYxnY,GAAE,CAACguH,KAAKizO,GAAGU,WAAWxoP,MAAM,kBAAkBy7G,YAAY,EAAE35D,QAAQ,IAAI+rO,GAAGQ,YAAa,GAAE,GAAA,CAAAjuY,IAAA,kCAAA7B,MAAAs5Y,SAAgCz1Y,GAAEyE,IAAGnI,KAAK24Y,iCAAiC34Y,KAAK83Y,IAAIjI,0BAA0BV,GAAGU,0BAA0BnsY,GAAE,CAACm3V,UAAU,OAAO1kO,KAAKizO,GAAGU,WAAW1mM,QAAQ,KAAI,EAAG+rO,GAAGU,2BAA2B7vY,KAAK83Y,IAAI9B,UAAU7G,GAAGU,0BAA0B1nY,GAAE,CAAC0yV,UAAU,OAAO1kO,KAAKizO,GAAGU,WAAW1mM,QAAQ,IAAI+rO,GAAGU,0BAA2B,GAAA,CAAAnuY,IAAA,+BAAA7B,MAAA,SAA6B6D,IAAG1D,KAAK44Y,wBAAwB54Y,KAAK83Y,IAAIhI,iBAAiBpsY,GAAEpE,GAAGoE,GAAE,CAACm3V,UAAU,OAAO1kO,KAAKizO,GAAGU,WAAW1mM,QAAQ,IAAI+rO,GAAGW,oBAAkBpuY,CAAAA,IAAA7B,wCAAAA,MAAAu5Y,SAAsC11Y,IAAG1D,KAAKq5Y,gCAAgCr5Y,KAAKm4Y,wBAAwBz0Y,GAAE,GAAChC,CAAAA,IAAA7B,sBAAAA,MAAAy5Y,SAAoB51Y,GAAEyE,IAAGnI,KAAK83Y,IAAIU,cAAcrJ,GAAGI,WAAWvvY,KAAK83Y,IAAIjC,SAAS1G,GAAGI,UAAU7rY,GAAE,CAACyyH,KAAKizO,GAAGU,WAAWxoP,MAAM,OAAOy7G,YAAY,GAAGoyK,GAAGI,WAAWpnY,IAAGnI,KAAK83Y,IAAI3C,UAAUhG,GAAGI,UAAUt6C,GAAGskD,mBAAmB71Y,IAAG,CAAC0I,KAAK+7B,GAAG8hU,YAAY9nS,KAAK,iBAAiBusR,OAA38J,GAA49Jw0B,eAAes0B,KAAa,EAAGrI,GAAGI,UAAU,GAAC7tY,CAAAA,IAAA7B,4BAAAA,MAAA25Y,SAA0B91Y,IAAG1D,KAAKy5Y,qBAAqBz5Y,KAAK83Y,IAAI3C,UAAUhG,GAAGc,oBAAoBvsY,GAAE,CAAC0I,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAA7wK,EAA4xKirM,OAAOw6K,GAAUv6K,YAAntK,EAA+uKmmJ,eAAes0B,KAAa,EAAGrI,GAAGc,oBAAoB,GAACvuY,CAAAA,IAAA7B,wBAAAA,eAAsB6D,IAAG1D,KAAK83Y,IAAIU,cAAcrJ,GAAGgB,iBAAiBnwY,KAAK83Y,IAAI3C,UAAUhG,GAAGgB,gBAAgBzsY,GAAE,CAAC0I,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAA7gL,EAA4hLirM,OAAOw6K,GAAUv6K,YAAn9K,EAA++KmmJ,eAAes0B,KAAa,EAAGrI,GAAGgB,gBAAiB,IAAA,CAAvwK,GAA8wKuJ,GAAEC,SAAAA,IAAY,SAAAD,GAAYh2Y,GAAEyE,IAAEslS,OAAAvB,gBAAAwtG,KAAAA,IAAAjsG,WAAAisG,KAAAA,GAAOh2Y,CAAAA,GAAEyE,IAAE,QAAC0lS,UAAA6rG,GAAAC,IAAArtG,aAAAotG,GAAA,CAAA,CAAAh4Y,IAAA,mBAAA7B,MAAA,SAAiB6D,IAAEk2Y,IAAAA,GAACl2Y,KAAAA,KAAIA,GAAEg5V,SAAS/6V,SAAQ,SAACwG,GAAE5J,IAAKq7Y,GAAK9B,IAAI+B,mBAAmBnC,GAAGoC,sBAAsBp2Y,GAAEpE,GAAGf,IAAG4J,GAAE2uV,SAAS,CAAC3gO,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQn/C,MAAK,EAAG46J,YAAY,GAAGoyK,GAAGa,eAAgB,IAAEhwY,KAAK+3Y,uBAAuBr0Y,IAAG,GAAChC,CAAAA,IAAA7B,iBAAAA,MAAAk6Y,SAAer2Y,IAAG1D,KAAK83Y,IAAIkC,SAAS7K,GAAGiB,WAAW1sY,GAAE,CAACyyH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQn/C,MAAK,GAAIgtU,GAAGiB,WAAY,GAAA,CAAA1uY,IAAA7B,uBAAAA,MAAAo6Y,SAAqBv2Y,IAAEw2Y,IAAAA,QAACx2Y,GAAE+6V,MAAM98V,SAAQ,SAAAwG,IAAI+xY,GAAKpC,IAAIkC,SAAS7K,GAAGe,iBAAiB/nY,GAAE,CAACguH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQn/C,MAAK,GAAIgtU,GAAGe,qBAAoBxsY,GAAE+gK,OAAO9iK,SAAQ,SAAAwG,IAAI+xY,GAAKpC,IAAI3C,UAAUhG,GAAGgB,gBAAgBhoY,GAAE,CAACiE,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAxvM,EAAuwMqxV,eAAes0B,KAAa,EAAGrI,GAAGgB,oBAAmBzsY,GAAEozV,SAASn1V,SAAQ,SAAAwG,IAAI,IAAM5J,GAAE02V,GAAGgG,cAAc9yV,IAAG+xY,GAAKpC,IAAI3C,UAAUhG,GAAGgB,gBAAgB5xY,GAAE,CAAC6N,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAh6M,EAA47Mm9G,OAAn6M,EAAi8My5I,SAAStgR,GAAEglW,SAAS+V,eAAes0B,KAAa,EAAGrI,GAAGgB,gBAAgB,GAAE,GAACzuY,CAAAA,qBAAA7B,MAAA,SAAe6D,IAAE,IAAAy2Y,GAAAn6Y,KAAC0D,GAAE+6V,MAAM98V,SAAQ,SAAAwG,IAAIgyY,GAAKrC,IAAIkC,SAAS7K,GAAGqB,WAAWroY,GAAE,CAACguH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQn/C,MAAK,GAAIgtU,GAAGqB,WAAW,IAAG9sY,GAAE+gK,OAAO9iK,SAAQ,SAAAwG,IAAIgyY,GAAKrC,IAAI3C,UAAUhG,GAAGqB,WAAWroY,GAAE,CAACiE,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAxxN,EAAuyNqxV,eAAes0B,KAAa,EAAGrI,GAAGqB,eAAc9sY,GAAEozV,SAASn1V,SAAQ,SAAAwG,IAAI,IAAM5J,GAAE02V,GAAGgG,cAAc9yV,IAAGgyY,GAAKrC,IAAI3C,UAAUhG,GAAGqB,WAAWjyY,GAAE,CAAC6N,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAt7N,EAAk9Nm9G,OAAz7N,EAAu9Ny5I,SAAStgR,GAAEglW,SAAS+V,eAAes0B,KAAa,EAAGrI,GAAGqB,WAAY,GAAE,GAAA,CAAA9uY,IAAA,oBAAA7B,MAAAu6Y,SAAkB12Y,IAAE22Y,IAAAA,GAAC32Y,KAAAA,GAAE+6V,MAAM98V,SAAQ,SAAAwG,IAAIkyY,GAAKvC,IAAIkC,SAAS7K,GAAGsB,cAActoY,GAAE,CAACguH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQn/C,MAAK,GAAIgtU,GAAGsB,iBAAgB,GAAC/uY,CAAAA,IAAA7B,mBAAAA,MAAAy6Y,SAAiB52Y,IAAE,IAAA62Y,GAAAv6Y,KAAC0D,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIoyY,GAAKC,iBAAiBryY,IAAGoyY,GAAKE,kBAAkBtyY,GAAE,GAAE,GAACzG,CAAAA,IAAA7B,oBAAAA,eAAkB6D,IAAE,IAAAg3Y,GAAA16Y,KAAC0D,GAAE+6V,MAAM98V,SAAQ,SAACwG,GAAE5J,IAAKm8Y,GAAK5C,IAAIkC,SAAStC,GAAGE,YAAYzvY,GAAE7I,GAAGf,IAAG4J,GAAE,CAACguH,KAAKizO,GAAGU,WAAW/sI,YAAY,GAAG89H,UAAUn3V,GAAEm3V,WAAWs0C,GAAG5vC,KAAK,IAAG77V,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIuyY,GAAKD,kBAAkBtyY,GAAG,GAAE,GAAA,CAAAzG,IAAA,kBAAA7B,MAAA,SAAgB6D,IAAG1D,KAAK83Y,IAAIkC,SAAStC,GAAGC,mBAAmBj0Y,GAAEpE,IAAIoE,GAAE67V,KAAK,CAACppO,KAAKizO,GAAGU,WAAW/sI,YAAY,GAAG89H,UAAUn3V,GAAEg5V,SAAS,GAAG7B,WAAWs0C,GAAGmB,YAAa,GAAA,CAAA5uY,IAAA7B,mBAAAA,MAAA26Y,SAAiB92Y,IAAEi3Y,IAAAA,QAACj3Y,GAAEu1V,SAASt3V,SAAQ,SAAAwG,IAAIwyY,GAAKC,gBAAgBzyY,OAAKzE,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIwyY,GAAKH,iBAAiBryY,GAAG,GAAE,GAAA,CAAAzG,IAAA,mBAAA7B,MAAA,SAAAg7Y,IAAyD,IAAAC,GAAA96Y,KAAhC0D,GAACm3Y,GAARp2O,OAAsBt8J,GAAC0yY,GAAdE,aAA2Bx8Y,GAACs8Y,GAAbG,YAAgBt3Y,GAAE/B,SAAQ,SAAA0F,IAAIyzY,GAAKhD,IAAI3C,UAAUhG,GAAGwB,cAActpY,GAAE,CAAC+E,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAp6P,IAAo7P,EAAGs9W,GAAGwB,cAAcpyY,IAAI,WAAA,OAAIA,GAAE8I,GAAE,EAAG,IAAEc,IAAGA,GAAExG,SAAQ,SAAA0F,IAAIyzY,GAAKhD,IAAI3C,UAAUhG,GAAGwB,cAActpY,GAAE,CAAC+E,KAAK+7B,GAAG+hU,UAAU/nS,KAAK,cAActwC,MAAtjQ,IAAskQ,EAAGs9W,GAAGwB,cAAcpyY,IAAI,WAAI,OAAAA,GAAE8I,GAAE,EAAE,GAAE,IAA59EwwY,CAAT8B,CAAS9B,IAAo+EoD,GAAE,SAAAC,IAAY,SAAAD,GAAYv3Y,GAAEyE,IAAE,IAAAgzY,UAAAjvG,gBAAAlsS,KAAAi7Y,KAACE,GAAA1tG,WAAAztS,KAAAi7Y,GAAMv3Y,CAAAA,GAAEyE,MAAQizY,eAAe3D,GAAG0D,GAAKf,kBAAkB3C,GAAE0D,EAAA,CAAC,OAAAttG,UAAAotG,GAAAC,IAAA5uG,aAAA2uG,GAAAv5Y,CAAAA,CAAAA,IAAA7B,mBAAAA,MAAAw7Y,SAAiB33Y,IAAGA,KAAI1D,KAAK83Y,IAAIjC,SAAS6B,GAAGoC,sBAAsBp2Y,GAAEpE,IAAIoE,GAAEg1V,KAAK,CAACviO,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQy7G,YAAY,GAAGoyK,GAAGa,gBAAgBhwY,KAAK+3Y,uBAAuBr0Y,OAAIhC,CAAAA,IAAA7B,iBAAAA,MAAAk6Y,SAAer2Y,IAAG1D,KAAK83Y,IAAIlB,aAAazH,GAAGiB,WAAW1sY,GAAEg1V,KAAK,CAACviO,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQy7G,YAAY,EAAEmmJ,eAAe,IAAIisB,GAAGiB,WAAY,GAAA,CAAA1uY,IAAA,uBAAA7B,MAAAo6Y,SAAqBv2Y,IAAE43Y,IAAAA,GAAC53Y,KAAAA,GAAEozV,SAASn1V,SAAQ,SAAAwG,IAAI,IAAM5J,GAAE02V,GAAGgG,cAAc9yV,IAAGmzY,GAAKxD,IAAIjC,SAAS1G,GAAGe,iBAAiB/nY,GAAE,CAACguH,KAAKizO,GAAGU,WAAWxoP,MAAM,QAAQy7G,YAAY,GAAGoyK,GAAGe,kBAAkBoL,GAAKxD,IAAI3C,UAAUhG,GAAGgB,gBAAgB5xY,GAAE,CAAC6N,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAA1vR,EAAsxRm9G,OAA7vR,EAA2xRy5I,SAAStgR,GAAEglW,SAAS+V,eAAes0B,KAAa,EAAGrI,GAAGgB,gBAAgB,IAAGzsY,GAAE+gK,OAAO9iK,SAAQ,SAAAwG,IAAImzY,GAAKxD,IAAI3C,UAAUhG,GAAGgB,gBAAgBhoY,GAAE,CAACiE,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAn/R,EAAkgSqxV,eAAes0B,KAAa,EAAGrI,GAAGgB,gBAAiB,MAAEzuY,CAAAA,IAAA7B,mBAAAA,MAAAy6Y,SAAiB52Y,QAAE63Y,GAAAv7Y,KAAC0D,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIozY,GAAKf,iBAAiBryY,IAAGozY,GAAKd,kBAAkBtyY,MAAI,GAACzG,CAAAA,IAAA7B,oBAAAA,MAAA46Y,SAAkB/2Y,IAAE,IAAA83Y,GAAAx7Y,KAAC0D,GAAE0I,OAAOo8B,GAAGo6S,OAAOl/U,GAAE+6V,MAAM98V,SAAQ,SAACwG,GAAE5J,IAAKi9Y,GAAK1D,IAAIlB,aAAac,GAAGE,YAAYzvY,GAAE7I,GAAGf,IAAG4J,GAAEuwV,KAAK,CAACviO,KAAKizO,GAAGU,WAAWjP,UAAUn3V,GAAEm3V,UAAUqoB,eAAe,IAAIisB,GAAG5vC,KAAK,IAAG77V,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIqzY,GAAKf,kBAAkBtyY,GAAG,GAAE,GAAA,CAAAzG,IAAA,kBAAA7B,MAAA,SAAgB6D,IAAG1D,KAAK83Y,IAAIlB,aAAac,GAAGC,mBAAmBj0Y,GAAEpE,IAAIoE,GAAEg1V,KAAK,CAACviO,KAAKizO,GAAGU,WAAWoZ,eAAe,IAAIisB,GAAGmB,YAAY,GAAC5uY,CAAAA,IAAA7B,mBAAAA,eAAiB6D,IAAE,IAAA+3Y,GAAAz7Y,KAAC0D,GAAEu1V,SAASt3V,SAAQ,SAAAwG,IAAIszY,GAAKb,gBAAgBzyY,GAAE,IAAGzE,GAAEw1V,MAAMv3V,SAAQ,SAAAwG,IAAIszY,GAAKjB,iBAAiBryY,GAAG,GAAE,GAAA,CAAAzG,IAAA,mBAAA7B,MAAA,SAAA67Y,IAA0CC,IAAAA,GAAjB37Y,KAAA0D,GAACg4Y,GAARj3O,OAAqBlmK,GAACm9Y,GAAbV,YAAgBt3Y,GAAE/B,SAAQ,SAAA0F,IAAIs0Y,GAAK7D,IAAI3C,UAAUhG,GAAGwB,cAActpY,GAAE,CAAC+E,KAAK+7B,GAAG+hU,UAAU/nS,KAAKo1U,GAAS1lX,MAAvvT,IAAuwT,EAAGs9W,GAAGwB,cAAcpyY,IAAI,WAAA,OAAIA,GAAE8I,GAAE,EAAG,GAAE,IAAA,CAAxrD,CAASwwY,IAAorD+D,GAAG,SAAS71Y,IAAG,OAAOA,GAAE81Y,MAAM,QAAQ91Y,GAAE+1Y,KAAK,OAAO/1Y,EAAC,CAAlD,CAAoD61Y,IAAI,IAAUG,GAAEz1J,kBAAAA,kBAAGs1J,CAAAA,EAAAA,GAAGC,OAAO,SAAA91Y,IAAC,WAAM2zY,GAAGkC,GAAGC,MAAM91Y,GAAE,IAAE61Y,GAAGE,MAAM,SAAA/1Y,WAAO,IAAAk1Y,GAAGW,GAAGE,KAAK/1Y,GAAG,IAAKi2Y,GAAI,SAAAC,IAAW,IAAAl2Y,GAAC,WAAqD,OAAAumS,cAApD,SAAAvmS,IAAammS,gBAAAlsS,KAAA+F,GAAC/F,KAAK83Y,IAAI,KAAK93Y,KAAKk8Y,YAAY,IAAIjxH,EAAE,KAACvpR,IAAA,YAAA7B,MAAA,SAAUsI,IAA2B,IAAzB5J,GAACyM,UAAA9K,OAAA8K,QAAA9M,IAAA8M,aAAAA,UAAA,GAAC,CAAC6mB,MAAM,IAAIm9G,OAAO,KAAMhvI,KAAK83Y,IAAI,IAAIvG,GAAGppY,GAAE5J,GAAEszB,MAAMtzB,GAAEywI,OAAO,IAAIgoQ,IAAIh3Y,KAAKk8Y,YAAY97Y,KAAKJ,KAAK83Y,IAAI,GAACp2Y,CAAAA,iBAAA7B,MAAA,SAAWsI,IAAE,IAAAg0Y,GAAS,QAARA,GAAIn8Y,KAAC83Y,WAAG,IAAAqE,IAARA,GAAUvJ,aAAa,CAAC/gX,MAAM1pB,GAAE0pB,MAAMm9G,OAAO7mI,GAAE6mI,QAAS,GAAA,CAAAttI,IAAA,eAAA7B,MAAA,SAAasI,IAAE,IAAAi0Y,GAASA,QAARA,GAAIp8Y,KAAC83Y,WAALsE,IAAQA,IAARA,GAAUC,aAAal0Y,GAAG,GAAA,CAAAzG,IAAA,WAAA7B,MAAA,WAAWG,KAAK83Y,IAAI,IAAI,IAACmE,CAA/S,GAA+a,OAAhIA,GAAhTl2Y,IAA4TgtS,KAAU,SAASx0S,IAAG,OAAO,IAAIA,IAAGwH,KAAWk2Y,GAAKlqG,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,KAAUzB,WAAW,SAAiBvrS,EAAC,CAAnc,GAAqdu2Y,GAAG,CAACvzC,cAAc,GAAGwzC,uBAAuB,KAAK7jX,SAAS,CAAC8jX,UAAU,KAAKC,cAAc,KAAKC,cAAc,KAAKC,oBAAoB,KAAKC,sBAAsB,KAAKC,sBAAqB,EAAGC,iBAAgB,GAAIC,cAAc,GAAGC,YAAYl4D,GAAGC,SAAS,SAASk4D,GAAGl3Y,IAAG,OAAOulR,IAAG,SAAC5nR,GAAEyE,IAAK,IAAItC,GAAEtH,GAAE,KAAK8I,IAAE,EAAG9I,GAAEmF,GAAEorS,UAAUqB,GAAGhoS,QAAE,OAAO,GAAO,SAAAsD,IAAI5F,GAAEu4U,GAAGr4U,GAAE0F,GAAEwxY,GAAGl3Y,GAAHk3Y,CAAMv5Y,MAAKnF,IAAGA,GAAEguS,cAAchuS,GAAE,KAAKsH,GAAEipS,UAAU3mS,KAAId,IAAE,MAAMA,KAAI9I,GAAEguS,cAAchuS,GAAE,KAAKsH,GAAEipS,UAAU3mS,IAAG,GAAE,CAAC,SAAS+0Y,GAAGn3Y,GAAErC,IAAG,OAAOqC,KAAIrC,EAAC,CAAC,SAASy5Y,GAAGp3Y,IAAGA,KAAIV,KAAKU,GAAEuuS,GAAG6U,KAAK,IAAMzlT,GAAE,IAAIgnR,IAAG,SAAAviR,IAAG,OAAApC,GAAEqgB,UAAUje,GAAE/H,KAAKyD,KAAKsE,IAAI,IAAC,OAAO,SAAAA,IAAC,OAAEA,GAAE8gU,KAAK0jC,GAAGjpW,IAAG,CAAA,CAA8Z,SAAS05Y,GAAGr3Y,GAAErC,IAAG,GAAsB,mBAAmBA,GAAE,OAAO25Y,GAAGt3Y,IAAE,WAAA0+Q,OAAAA,iBAAAA,iBAAa/gR,CAAAA,EAAAA,GAACyH,WAAA,EAAAH,YAAOoB,CAAAA,EAAAA,CAAAA,KAAKrG,IAAG,IAAE,OAAOrC,GAAEA,GAAE45Y,IAAI,SAAS,IAAI,QAAQ,OAAOD,GAAGt3Y,IAAE,WAAK,MAAA,CAACqG,KAAKrG,GAAE,IAAG,IAAI,QAAQ,OAAOs3Y,GAAGt3Y,IAAE,SAAAxH,IAAC,OAAAkmR,iBAAAA,iBAAOlmR,GAAAA,IAAE6N,GAAAA,CAAAA,KAAKrG,QAAK,QAAQ,MAAU,IAAA1G,MAAM,sBAAsB,CAAC,SAASg+Y,GAAGt3Y,GAAErC,IAAG,OAAOnE,OAAOwjC,eAAer/B,GAAE,OAAO,CAAC7D,MAAMkG,GAAE2hC,UAAS,GAAI,CAAC,SAAS61W,GAAGx3Y,IAAG,OAAOA,GAAEC,OAAO,GAAGy5D,cAAc15D,GAAEwE,UAAU,GAAG,SAASizY,GAAGz3Y,IAAG,IAAarC,GAAYqC,GAAnBqqB,OAAgBjoB,GAAGpC,GAAV+sO,OAAY,OAAOvzO,OAAO2W,KAAK/N,IAAGg2B,QAAO,SAAC5/B,GAAE8I,IAACo9Q,OAAAA,iBAAAA,iBAAQlmR,CAAAA,EAAAA,OAAC+nP,kBAAA,CAAA,EAAgC,SAAYvgP,IAAG,OAAOA,GAAEmoB,OAAOT,MAAM,KAAK1qB,KAAI,SAACW,GAAEyE,IAAC,OAAI,IAAGA,GAAE,SAAYpC,IAAG,OAAOA,GAAEC,OAAO,GAAG2I,cAAc5I,GAAEwE,UAAU,EAAG,CAA/D,CAAgE7G,IAAG65Y,GAAG75Y,GAAG,IAACoC,KAAK,GAAG,CAA3K23Y,CAAGp2Y,IAAI+1Y,GAAqK,SAAYr3Y,GAAErC,IAAG,MAAA24B,IAAAA,OAAUt2B,GAACs2B,MAAAA,OAAK34B,GAAG,CAAtMg6Y,CAAGh6Y,GAAE2D,IAAGc,GAAEd,MAAK,GAAC,CAAE,EAAE,CAAh6B,aAAAs2Y,IAAA,SAAAC,KAAA,OAAA1xG,gBAAAlsS,KAAA49Y,IAAAnwG,WAAAztS,KAAA49Y,GAAA5yY,UAAA,CAAAshS,OAAAuB,UAAA+vG,GAAAD,IAAArxG,aAAAsxG,GAAqBvxC,CAArB,CAAqBA,IAArB,UAAuBwxC,IAAuB,SAAAC,GAAYp6Y,GAAEyE,QAAE41Y,GAAwCA,OAAxC7xG,gBAAAlsS,KAAA89Y,KAACC,GAAAtwG,WAAAztS,KAAA89Y,GAAA,CAAMp6Y,GAAEyE,MAAQq6T,UAAU9+T,GAAEq6Y,GAAK9/N,KAAK91K,GAAC41Y,EAAClwG,CAAA,OAAAA,UAAAiwG,GAAAD,IAAAvxG,aAAAwxG,GAAA,CAAA,CAAAp8Y,IAAA,WAAA7B,MAAA,SAAS6D,IAAM,IAAJyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,EAAG,OAAO7C,GAAE,EAAC8lS,KAAAC,gBAAA4vG,GAAA39Y,WAAA,WAAAH,MAAAP,KAAAO,KAAgB0D,GAAEyE,KAAInI,KAAK08D,MAAMv0D,GAAEnI,KAAKuP,MAAM7L,GAAE1D,KAAKwiU,UAAUhmQ,MAAMx8D,MAAMA,KAAM,GAAA,CAAA0B,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,IAAG,OAAOA,GAAE,GAAGnI,KAAK6hL,OAAMosH,KAAAC,gBAAA4vG,GAAA39Y,WAAA,UAAAH,MAAAP,KAAAO,KAAe0D,GAAEyE,IAAGnI,KAAKksW,SAASxoW,GAAEyE,GAAE,GAACzG,CAAAA,IAAA7B,iBAAAA,eAAe6D,GAAEyE,IAAM,IAAJ5J,GAACyM,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAA,GAAC,EAAG,OAAO,MAAMzM,IAAGA,GAAE,GAAG,MAAMA,IAAGyB,KAAK08D,MAAM,EAACuxO,KAAAC,gBAAA4vG,GAAA39Y,WAAAV,iBAAAA,MAAAA,KAAsBiE,KAAAA,GAAEyE,GAAE5J,KAAImF,GAAE84D,MAAMx8D,MAAM,EAAE,IAAlW6rW,EAAAA,KAAwiC,IAAImyC,GAAI,SAAAC,IAAW,IAAAl4Y,GAAC,SAAAm4Y,IAAY,SAAAn4Y,IAAa0nS,OAAAvB,gBAAAlsS,KAAA+F,GAAA0nS,WAAA1nS,KAAAA,EAAO,CAAA,CAACqG,KAAK,qBAAoB,CAACkgS,OAAAuB,UAAA9nS,EAAAm4Y,IAAA5xG,aAAAvmS,EAAArE,CAAAA,CAAAA,IAAA7B,OAAAA,eAAKsI,IAAG,GAAG,mBAAmBA,GAAE,MAAM,IAAI8B,UAAU,uPAAuP,GAAGw7Q,QAAOt9Q,IAAE,IAAI,MAAM,IAAI8B,UAAU,2BAA2B,GAAGw7Q,QAAOt9Q,GAAEiE,MAAK,IAAI,MAAU,IAAAnC,UAAU,qCAAqCgkS,KAAAC,gBAAAnoS,EAAA5F,WAAAV,OAAAA,MAAAA,UAAW0I,GAAE,GAAC,CAAAzG,IAAA,WAAA7B,MAAA,WAAU,GAAE,CAAA6B,IAAA,cAAA7B,MAAA,WAAcouS,KAAAC,gBAAAnoS,EAAA5F,WAAA,WAAAH,MAAAP,KAAAO,KAAgB,IAAC,CAA5iB,CAASmrR,IAAipB,OAA/oB8yH,GAAZl4Y,IAAyjBgtS,KAAU,SAASx0S,IAAG,OAAWA,IAAAA,IAAGwH,GAAG,EAAQk4Y,GAAKlsG,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,OAAoBhtS,EAAC,CAA9qB,GAAmrB,IAAIwC,GAAG,mCAAmC,IAAIA,GAAG,sCAAsC,IAAM41Y,GAAG,IAAI51Y,GAAG,6BAA6B61Y,GAAG,IAAI71Y,GAAG,+BAA+B81Y,IAAI,IAAI91Y,GAAG,iDAAiD,IAAIA,GAAG,iCAAiC,SAAS+1Y,KAAQC,IAAAA,IAAAA,GAAAvzY,UAAA9K,OAAF6F,GAAC,IAAAsD,MAAAk1Y,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAADz4Y,GAACy4Y,IAAAxzY,UAAAwzY,IAAE,OAAO,SAAS96Y,IAAG,GAAG,IAAIqC,GAAE7F,OAAO,OAAOwD,GAAE,IAAMyE,GAAEpC,GAAEA,GAAE7F,OAAO,GAAG,OAAO6F,GAAEE,MAAM,GAAG,GAAGmiE,aAAY,SAAC/gE,GAAExB,IAAI,OAAAA,GAAEwB,GAAE,GAACc,GAAEzE,IAAG,EAAE,IAAI6E,GAAG,yCAAyC,IAAIA,GAAG,8BAA8B,IAAIA,GAAG,uCAAuC,IAAIA,GAAG,yCAAyC,IAAIA,GAAG,wCAAwC,IAAIA,GAAG,uCAAuC,IAAIA,GAAG,+CAA+C,IAAIA,GAAG,gCAAgC,IAAIA,GAAG,2CAA2C,IAAIA,GAAG,6BAA6B,IAAIA,GAAG,+CAA+C,IAAIA,GAAG,0CAA0C,IAAIA,GAAG,mDAAmD,IAAIA,GAAG,uCAAuC,IAAIA,GAAG,gDAAgD,IAAIA,GAAG,mCAAmC,IAAIA,GAAG,sCAAsC,IAAMk2Y,GAAE,SAAAC,IAAA,SAAAD,KAAAhxG,OAAAvB,gBAAAlsS,KAAAy+Y,IAAAhxG,WAAAgxG,KAAAA,GAAAzzY,UAAA6iS,CAAA,OAAAA,UAAA4wG,GAAAC,IAAApyG,aAAAmyG,GAAA,CAAA,CAAST,IAAQW,GAAI,SAAAC,IAAW,IAAA74Y,GAAC,SAAA84Y,IAAuD,SAAA94Y,EAAYoC,GAAE5J,GAAE8I,GAAExB,IAAE,IAAAi5Y,GAA0FA,OAA1F5yG,gBAAAnmS,KAAAA,IAAC+4Y,GAAArxG,WAAA1nS,KAAAA,EAAMF,CAAAA,GAAEwB,GAAE9I,OAASwgZ,WAAW52Y,GAAE22Y,GAAKE,aAAazgZ,GAAEugZ,GAAKG,SAAS53Y,GAAEy3Y,GAAKI,eAAer5Y,GAACi5Y,EAACjxG,CAAAvB,OAAAuB,UAAA9nS,EAAA84Y,IAAAvyG,aAAAvmS,EAAA,CAAA,CAAArE,IAAA,kBAAA/B,IAA1J,WAAsB,OAAOK,KAAKi/Y,QAAS,GAAA,CAAAv9Y,IAAA7B,aAAAA,MAA+G,SAAWsI,IAAGnI,KAAKm/Y,YAAY,CAACh3Y,OAAIzG,CAAAA,IAAA7B,cAAAA,MAAAs/Y,SAAYh3Y,IAAG,IAAM5J,GAAE4J,GAAEg2B,QAAO,SAAC92B,GAAC+3Y,IAAW,IAAAv5Y,GAACu5Y,GAAVH,SAA0BxzY,GAAC2zY,GAAhBF,eAA8Bt4Y,GAACw4Y,GAAdC,aAA4B57Y,GAAC27Y,GAAdJ,aAAmBv4Y,GAAC24Y,GAAL19Y,IAAgB8J,GAAE,mBAAmB3F,GAAE,SAAYE,IAAG,IAAMrC,GAAE2F,MAAMnI,QAAQ6E,KAAIA,GAAE7F,OAAO,EAAEo+Y,GAAEnzY,WAAA,EAAA0hS,mBAAI9mS,KAAG,SAAAoC,IAAC,OAAEA,EAAE,EAAA,gBAAOA,GAAE5J,IAAC,OAAI4J,GAAEzE,GAAEyE,IAAG,SAACd,GAAExB,WAAIsC,GAAEd,QAAE,IAASA,GAAE9I,GAAE8I,GAAExB,KAAI,CAArH,CAAsHe,GAAtH,CAAyHf,GAAEpC,IAAG,SAAYsC,GAAErC,IAAG,OAAO2F,MAAMnI,QAAQwC,KAAIA,GAAExD,OAAO,IAAI6F,GAAEu4Y,GAAGnzY,MAAM,KAAIkxB,GAAAA,OAAAwwQ,mBAAKnpS,IAAC,CAACqC,OAAK,SAACoC,GAAE5J,IAAK,IAAM8I,GAAEtB,GAAEoC,IAAG,gBAAOtC,GAAE4F,IAAC,OAAGpE,GAAExB,QAAE,IAASA,GAAEtH,GAAEsH,GAAE4F,GAAG,CAAA,CAAA,CAA1I,CAA4IA,GAAE7E,GAA9I,CAAiJf,GAAEpC,IAAG,OAAO4D,GAAEZ,IAAG+E,GAAEnE,EAAE,GAAC,CAAE,GAAErH,KAAKs/Y,YAAY/gZ,GAAE,GAACmD,CAAAA,IAAA7B,gBAAAA,MAAA0/Y,SAAcp3Y,IAAGnI,KAAKw/Y,eAAe,CAACr3Y,IAAI,GAAA,CAAAzG,IAAA,iBAAA7B,MAAA2/Y,SAAer3Y,IAAGnI,KAAKy/Y,eAAet3Y,GAAEpF,KAAI,SAAAxE,IAAG,OAAAA,GAAEmD,GAAG,IAAE,GAACA,CAAAA,iBAAA7B,MAAA,SAAWsI,GAAE5J,IAAGyB,KAAKs/Y,YAAWh5J,kBAAGn+O,CAAAA,EAAAA,GAAG5J,IAAG,GAACmD,CAAAA,IAAA7B,cAAAA,MAAAy/Y,SAAYn3Y,IAAGnI,KAAKi/Y,SAAQx6H,iBAAAA,iBAAA,CAAA,EAAKzkR,KAAKi/Y,UAAY92Y,IAAGnI,KAAK0/Y,eAAengZ,OAAO2W,KAAK/N,IAAI,GAAA,CAAAzG,IAAA,gBAAA7B,MAAA,SAAcsI,IAAGnI,KAAKy/Y,eAAe,CAACt3Y,IAAG,GAACzG,CAAAA,IAAA7B,iBAAAA,MAAA4/Y,SAAet3Y,IAAEw3Y,IAAAA,GAACx3Y,KAAAA,GAAExG,SAAQ,SAAApD,IAAIohZ,GAAKV,SAAS,SAAYl5Y,GAAErC,IAAG,OAAOnE,OAAO2W,KAAKnQ,IAAGtD,QAAO,SAAA0F,IAAG,OAAAA,KAAIzE,EAAE,IAACy6B,QAAO,SAACh2B,GAAE5J,IAAI,OAAAgB,OAAOuE,OAAOqE,GAACm+O,kBAAG/nP,CAAAA,EAAAA,GAAGwH,GAAExH,KAAK,GAAA,CAAE,EAAE,CAAtG,CAAuGohZ,GAAKV,SAAS1gZ,GAAE,IAAGyB,KAAK0/Y,eAAev3Y,GAAG,GAAA,CAAAzG,IAAA7B,iBAAAA,MAAA6/Y,SAAev3Y,IAAGnI,KAAKI,KAAKJ,KAAKk/Y,eAAel/Y,KAAKi/Y,SAASj/Y,KAAKg/Y,eAAeh/Y,KAAK++Y,WAAW3+Y,KAAK,CAACgM,KAAK,8BAA8B4nF,SAAS7rF,IAAI,GAAA,CAAAzG,IAAA,cAAA7B,MAAA,WAAcG,KAAK6gM,UAAU,IAArwCsqF,CAAT,CAASA,IAAi5C,OAA/4CyzH,GAAZ74Y,IAA4xCgtS,KAAU,SAASx0S,IAAG,OAAO,IAAIA,IAAGwH,IAAG01O,GAAGgjK,IAAIhjK,GAAG0iK,IAAI1iK,GAAG4iK,IAAI5iK,GAAG2iK,IAAK,EAAQQ,GAAK7sG,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,OAAoBhtS,GAA76C,GAAy7C65Y,GAAEC,SAAAA,IAAAD,SAAAA,KAAAnyG,OAAAvB,gBAAA0zG,KAAAA,IAAAnyG,gBAAAmyG,GAAA50Y,UAAA,CAAAshS,OAAAuB,UAAA+xG,GAAAC,IAAAvzG,aAAAszG,GAASl1H,CAATm1H,CAASn1H,IAAQo1H,GAAI,SAAAC,IAAI,IAAOh6Y,GAACi6Y,SAAAA,IAAY,SAAAj6Y,EAAYoC,GAAE5J,GAAE8I,IAAE44Y,IAAAA,GAAsFA,OAAtF/zG,gBAAAnmS,KAAAA,IAACk6Y,GAAAxyG,WAAA1nS,KAAAA,IAAam6Y,gBAAgB3hZ,GAAE0hZ,GAAKE,eAAe94Y,GAAE44Y,GAAK7vX,OAAOjoB,GAAE83Y,GAAK1wY,MAAMpH,GAAEoH,MAAK0wY,GAAC,OAAApyG,UAAA9nS,EAAAi6Y,IAAA1zG,aAAAvmS,EAAArE,CAAAA,CAAAA,IAAA7B,SAAAA,MAAA8hC,SAAOx5B,IAAOi4Y,IAAAA,IAAAA,GAAAp1Y,UAAA9K,OAAF3B,OAAC8K,MAAA+2Y,GAAA,EAAAA,GAAA,EAAA,GAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAAD9hZ,GAAC8hZ,MAAAr1Y,UAAAq1Y,IAAE,OAAOC,GAAG7gZ,KAAI0L,MAAPm1Y,GAAE,CAAM,KAAKn4Y,IAACk0B,OAAI99B,IAAlB+hZ,CAAqBtgZ,QAAM0B,CAAAA,IAAA7B,eAAAA,MAAA0gZ,SAAap4Y,GAAE5J,IAAE,IAAAiiZ,GAAAxgZ,KAAC,OAAOguU,IAAG,WAAI,OAAA7lU,GAAEq4Y,GAAKjxY,QAAQ,GAAChR,GAAG,GAAA,CAAAmD,IAAA,OAAA7B,MAAA,SAAKsI,IAAG,IAAM5J,GAAE,IAAIwH,EAAE/F,KAAKA,KAAKkgZ,gBAAgBlgZ,KAAKmgZ,gBAAgB,OAAO5hZ,GAAEm3D,SAASvtD,GAAE5J,KAAEmD,CAAAA,IAAA7B,WAAAA,MAAAizJ,SAAS3qJ,IAAGnI,KAAKkgZ,gBAAgB9/Y,KAAK+H,GAAG,GAAA,CAAAzG,IAAA,OAAA7B,MAAA,SAAKsI,IAAGnI,KAAKkgZ,gBAAgB9/Y,KAAK+H,GAAG,GAAA,CAAAzG,IAAA,QAAA7B,MAAA,SAAMsI,IAAGnI,KAAKkgZ,gBAAgB11X,MAAMriB,GAAE,GAACzG,CAAAA,IAAA7B,WAAAA,MAAAghM,WAAW7gM,KAAKkgZ,gBAAgBr/M,aAAWn/L,CAAAA,IAAA7B,aAAAA,MAAA4gZ,SAAWt4Y,GAAE5J,IAAGyB,KAAKmgZ,eAAeM,WAAWt4Y,GAAE5J,GAAG,GAAA,CAAAmD,IAAA,gBAAA7B,MAAA6gZ,SAAcv4Y,IAAGnI,KAAKmgZ,eAAeO,cAAcv4Y,GAAE,IAApjBuiR,CAATs1H,CAASt1H,IAAyrB,OAAvrBq1H,GAAZh6Y,IAA2kBgtS,KAAU,SAASx0S,IAAG,OAAO,IAAIA,IAAGwH,IAAG01O,GAAGmkK,IAAInkK,GAAGuiK,IAAIviK,GAAGkjK,IAAI,EAASoB,GAAKhuG,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,OAAoBhtS,EAAC,CAAttB,GAA2tB,SAASu6Y,GAAGv6Y,GAAErC,YAAOi9Y,GAAA31Y,UAAA9K,OAAFiI,GAAC,IAAAkB,MAAAs3Y,GAAA,EAAAA,GAAA,EAAA,GAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAADz4Y,GAACy4Y,MAAA51Y,UAAA41Y,IAAE,OAAO,SAASv5Y,IAAG,IAAIxB,GAAE,GAAG,iBAAiBE,GAAE,CAAC,IAAM0F,GAAE,CAAC/H,IAAC24B,OAAIl0B,IAAG1F,OAAOuxC,SAASnuC,GAAEwB,GAAE4hU,KAAK,WAAiB,IAAA,IAAA43E,GAAA71Y,UAAA9K,OAAF6F,GAAC,IAAAsD,MAAAw3Y,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAAD/6Y,GAAC+6Y,IAAA91Y,UAAA81Y,IAAE,IAAMp9Y,GAAEqC,GAAE7F,OAAO,GAAG,IAAIwD,GAAE,MAAM,IAAIrE,MAAM,uCAAuC,OAAOssR,IAAG,SAAAxjR,IAAY,IAAR,IAAI5J,GAAE4J,GAAUd,GAAE,EAAEA,GAAE3D,GAAE2D,KAAI,CAAA,IAAA05Y,GAAOl7Y,GAAGk7Y,QAAFA,GAACxiZ,cAACwiZ,UAADA,GAAIh7Y,GAAEsB,KAAI,KAAKo+Q,QAAO5/Q,IAAE,KAAK,OAAOtH,GAAEsH,EAAE,CAAA,OAAOtH,KAAG,EAAC4M,WAACpF,EAAAA,CAAAA,IAACs2B,OAAAwwQ,mBAAIphS,MAAI,KAAI,CAAC,GAAG,mBAAmB1F,GAAE,MAAU,IAAAkE,UAAS,oBAAAoyB,OAAAopP,QAA4B1/Q,IAAwD,0DAAEF,GAAEwB,GAAE4hU,KAAKt9C,IAAG,SAAAlgR,IAAG,OAAA1F,GAAE0F,GAAE/H,GAAE,IAAE,CAAC,OAAOmC,GAAEojU,KAAK,SAAYljU,GAACi7Y,IAAM,IAALt9Y,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAACm/Q,GAAI,OAAOpkR,GAAGi7Y,QAAFA,GAACj7Y,UAACi7Y,IAAAA,GAAAA,GAAE9D,GAAG5xH,IAAG,SAACnjR,GAAE5J,IAAK,IAAI8I,GAAExB,IAAE,EAAGsC,GAAE2mS,UAAUqB,GAAG5xS,IAAE,SAAAkN,IAAI,IAAM7E,GAAElD,GAAE+H,KAAI5F,KAAIE,GAAEsB,GAAET,OAAMf,IAAE,EAAGwB,GAAET,GAAErI,GAAE6B,KAAKqL,IAAG,IAAI,IAAjI,GAAsI,CAAE,CAAgO,SAASw1Y,GAAGl7Y,GAAErC,IAAG,OAAOqC,KAAIrC,EAAC,CAAC,SAASw9Y,GAAGn7Y,IAAE,IAAeF,GAAfnC,GAACsH,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAACi2Y,GAAAA,GAAG94Y,GAAC6C,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAACi2Y,GAAAA,GAAU1iZ,GAAE,KAAK8I,GAAE,KAAK,MAAM,CAACu1D,SAAS,WAAa,QAAG,IAAS/2D,GAAE,OAAOA,GAAE9D,OAAO,IAAIxD,GAAE,OAAO8I,GAAEtB,GAAEoF,MAAM,KAAKH,WAAWzM,GAAEyM,UAAU3D,GAAE,IAAI,SAAYtB,GAAErC,GAAEyE,IAAG,IAAI,IAAI5J,GAAE,EAAEA,GAAEwH,GAAE7F,OAAO3B,KAAI,IAAI4J,GAAEpC,GAAExH,IAAGmF,GAAEnF,KAAI,OAAM,EAAG,OAAM,CAAE,CAAhF,CAAkFyM,UAAUzM,GAAEmF,IAAG,OAAO2D,GAAE,IAAMmE,GAAEzF,GAAEoF,MAAM,KAAKH,WAAW,OAAOzM,GAAEyM,UAAU7C,GAAEd,GAAEmE,IAAGnE,IAAGA,GAAEmE,GAAEA,GAAG,EAAC8nG,MAAM,WAAa/0G,GAAE,KAAK8I,GAAE,IAAK,EAAC85Y,UAAU,WAAqBt7Y,GAAE,CAAC9D,OAAZiJ,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,QAAA,EAAqB,EAACo2Y,YAAY,WAAav7Y,QAAE,CAAO,EAAE,CAAA,SAASw7Y,KAAS,OAAgB,SAAGt7Y,QAAErC,GAACsH,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,CAACs2Y,QAAQC,IAAK,OAAO,WAAcC,IAAAA,IAAAA,GAAAx2Y,UAAA9K,OAAFiI,GAACkB,IAAAA,MAAAm4Y,IAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAADt5Y,GAACs5Y,IAAAz2Y,UAAAy2Y,IAAE,IAAIljZ,GAAE4J,GAAE,GAAGkB,MAAMnI,QAAQ3C,GAAE,IAAI,CAAC,IAAemjZ,GAAAlnC,SAADj8W,IAARiN,GAACk2Y,GAAI/1Y,GAAAA,GAAC+1Y,GAAAz7Y,MAAA,GAAI1H,GAAC,GAAA89B,OAAAwwQ,mBAAKrhS,IAACqhS,mBAAIlhS,IAAG,UAASpN,GAAE2B,QAAQ,SAAY6F,IAAG,QAAQA,IAAG,UAAQ0/Q,QAAS1/Q,KAAGxG,OAAOka,OAAO1T,IAAGwM,OAAM,SAAA7O,UAAG,mBAAmBA,EAAC,GAAE,CAA9F,CAA+FnF,GAAE,MAAMA,GAAE,SAAYwH,IAAG,IAAMrC,GAAEnE,OAAOka,OAAO1T,IAAGoC,GAAE5I,OAAO2W,KAAKnQ,IAAG,MAAAs2B,GAAAA,OAAU34B,GAAE,CAAA,WAAA,IAAA,IAAAi+Y,GAAA32Y,UAAA9K,OAAImH,GAACgC,IAAAA,MAAAs4Y,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAADv6Y,GAACu6Y,IAAA52Y,UAAA42Y,IAAA,OAAGz5Y,GAAEg2B,QAAO,SAACt4B,GAAE4F,GAAE7E,IAAC,OAAA69Q,iBAAAA,iBAAA,CAAA,EAAQ5+Q,IAAC,CAAA,EAAAygP,kBAAA,CAAA,EAAE76O,GAAGpE,GAAET,QAAK,CAAA,EAAI,GAAA,CAArH,CAAuHrI,GAAE,KAAK,IAAM8I,GAAE9I,GAAE0H,MAAM,EAAE1H,GAAE2B,OAAO,GAAG2F,GAAEtH,GAAEA,GAAE2B,OAAO,GAAGuL,GAAEpE,GAAE5E,QAAO,SAAA+I,IAAC,OAAEA,GAAEq2Y,SAAS,mBAAmBr2Y,GAAEq2Y,OAAO,IAAEj7Y,GAAEb,IAAE,WAAc,IAAA,IAAA+7Y,GAAA92Y,UAAA9K,OAAFsL,GAACnC,IAAAA,MAAAy4Y,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAADv2Y,GAACu2Y,IAAA/2Y,UAAA+2Y,IAAE,OAAOl8Y,GAAEsF,MAAM,KAAKK,GAAE,IAAG/H,GAAEy9Y,IAAG,SAAS11Y,GAAEG,IAAG,OAAOjI,GAAE49Y,QAAQn2Y,MAAM,KAAK,CAACK,GAAEnE,GAAEsE,GAAE/E,IAAG,IAAG,OAAOrH,OAAOuE,OAAOL,GAAEm5D,SAAS,CAACilV,QAAQ,WAAap+Y,GAAE6vG,QAAQ1sG,GAAE0sG,QAAQ7nG,GAAE9J,SAAQ,SAAA6J,IAAG,OAAAA,GAAEq2Y,SAAS,KAAGG,UAAUp7Y,GAAEg2D,SAASukV,UAAU19Y,GAAE09Y,UAAUC,YAAY39Y,GAAE29Y,aAAa,CAAE,CAA7tB,CAA8tBF,IAAG/1Y,WAAA,EAAAH,UAAO,CAAA,SAASu2Y,GAAGx7Y,GAAErC,GAAEyE,GAAE5J,IAAG,QAAG,IAAS4J,GAAE,CAAC,IAAMtC,GAAEnC,GAAEX,KAAI,SAAA0I,IAAG,OAAAA,GAAE1F,GAAG,IAAC,OAAOxH,GAAEq+D,SAASzxD,MAAM,KAAKtF,GAAE,CAAC,IAAMwB,GAAE3D,GAAEX,KAAI,SAAA8C,IAAC,OAAEA,GAAEE,GAAEoC,GAAG,IAAC,OAAO5J,GAAEq+D,SAASzxD,MAAM,KAAIkxB,GAAAA,OAAAwwQ,mBAAKxlS,IAAEc,CAAAA,MAAI,SAAS85Y,GAAGl8Y,IAAG,IAAWrC,GAA8BqC,GAAnC6K,KAAezI,GAAoBpC,GAA5Bm8Y,QAAyB3jZ,GAAGwH,GAAlBo8Y,eAAoB96Y,GAAE,SAAYtB,IAAG,OAAOs7Y,IAAG,SAAA39Y,WAAGA,GAAEqC,GAAE,IAAC,SAAArC,WAAGA,EAAE,GAAA,CAAtC,CAAwCA,IAAGmC,GAAE,SAAYE,GAAErC,IAAG,IAAMyE,GAAE,SAAYpC,IAAG,OAAOA,QAAE,EAAO,CAACqG,KAAK,sBAAuB,CAA5D,CAA6D1I,IAAG,OAAxyD,SAAYqC,IAAG,IAAI,SAAYA,IAAG,OAAgB,SAAGA,IAAG,MAAM,UAAQ0/Q,QAAS1/Q,KAAG,OAAOA,EAAE,CAAzC,CAA0CA,MAAK,SAAYA,IAAG,OAAOsD,MAAMnI,QAAQ6E,GAAE,CAAtC,CAAwCA,GAAE,CAAxH,CAA0HA,IAAG,OAAM,EAAG,IAAMrC,GAAEnE,OAAOopC,eAAe5iC,IAAG,OAAOrC,KAAInE,OAAOY,WAAW,OAAOuD,EAAC,CAAglD0+Y,CAAGj6Y,IAAG5I,OAAO2W,KAAK/N,IAAG,IAAIg2B,QAAO,SAAC92B,GAAExB,IAAC4+Q,OAAAA,iBAAAA,iBAAQp9Q,CAAAA,EAAAA,IAACi/O,GAAAA,kBAAAjqN,CAAAA,EAAAA,SAAAA,OAAWkhX,GAAG13Y,KAAMw7Y,GAAGt7Y,IAAE,SAAA0F,IAAC,OAAEA,cAAAA,EAAAA,GAAI5F,GAAE,QAAI,CAAE,EAAE,CAAvL,CAAwLwB,GAAEc,IAAGsD,GAACg5Q,iBAAAn+B,8BAAAjqN,OAAYkhX,GAAG75Y,IAAW2D,SAAAA,IAAKxB,IAAGe,GAAErI,GAAEA,GAAEkN,IAAG,GAAG,OAAAg5Q,iBAAAA,iBAAA,CAAO7zQ,KAAKlN,GAAEw+Y,QAAQ/5Y,IAAKsD,IAAK7E,GAAE,CAAC,SAASy7Y,KAAQC,IAAAA,IAAAA,GAAAt3Y,UAAA9K,OAAF6F,GAAC,IAAAsD,MAAAi5Y,IAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAADx8Y,GAACw8Y,IAAAv3Y,UAAAu3Y,IAAE,MAAM,CAACL,QAAQn8Y,GAAEN,MAAM4Y,MAAMtY,GAAEhD,KAAI,SAAAxE,IAAC,OAAEA,GAAE6N,IAAK,IAAE,CAAA,SAASo2Y,GAAGz8Y,IAAwB,IAAhB,IAAMoC,GAAE,IAAI4P,IAAI0qY,GAAAz3Y,UAAA9K,OAAnBwD,GAAC2F,IAAAA,MAAAo5Y,GAAAA,EAAAA,GAAAC,EAAAA,GAAAA,GAAAA,EAAAA,GAAAD,GAAAC,KAADh/Y,GAACg/Y,GAAA,GAAA13Y,UAAA03Y,IAAkB,IAAlBC,IAAAA,QAAAA,WAAsB,IAAmCC,GAA7BrkZ,GAACskZ,GAAAC,IAAAC,GAAA33G,2BAAqB7sS,GAAE8f,OAAK,IAAA,IAAA2kY,QAAA,WAAC,IAAb37Y,GAACu7Y,GAAA/iZ,MAAmBgG,GAAEsC,GAAExI,IAAI0H,IAAGc,GAAEvI,IAAIyH,GAAExB,GAAE,SAACe,GAAEnD,IAAI,OAAAlF,GAAE2jZ,QAAQr8Y,GAAEe,GAAEnD,IAAGA,GAAE,EAAClF,GAAE2jZ,UAAhF,IAAAa,GAAAl9Y,MAAA+8Y,GAAAG,GAAAh9Y,KAAAy3D,MAAAwlV,SAAyF,OAAAv+X,IAAAs+X,GAAAr/Y,EAAA+gB,GAAA,CAAA,QAAAs+X,GAAAr3Y,GAAA,CAAA,EAA1Go3Y,GAAAD,EAAAA,GAAen/Y,GAACo/Y,GAAAD,GAAA3iZ,OAAA4iZ,KAAAH,UAA0F,OAAO,WAAS,IAAApkZ,GAACyM,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAA,GAACjF,GAAEsB,GAAC2D,UAAA9K,OAAA,EAAA8K,UAAA,QAAA9M,EAAQ2H,GAAEsC,GAAExI,IAAI0H,GAAE+E,MAAM,OAAOvG,GAAEA,GAAEtH,GAAE8I,IAAG9I,EAAC,CAAE,CAAA,SAAS0kZ,GAAGl9Y,GAAErC,IAAE,IAAAyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,GAAI,OAAOjF,GAAEkjU,KAAKg0E,IAAG,SAAA1+Y,IAAI,OAAAmF,IAAGA,GAAEgwO,YAAYn1O,IAAG4J,IAAG,EAAEpC,GAAEk9Y,GAAGl9Y,GAAErC,GAAEyE,GAAE,EAAE,IAAI,CAAA,IAAII,GAAG,qCAAqC,IAAIA,GAAG,uCAAuC,IAAIA,GAAG,uCAAuC,IAAIA,GAAG,iDAAiD,IAAIA,GAAG,0CAA0C,IAAIA,GAAG,0DAA0D,IAAIA,GAAG,sCAAsC,CAAC+oS,WAAW,OAAOp5P,QAAQ,kBAAI+qW,EAAG,IAAE7F,GAAG,sBAAsB,IAAM8F,GAAG1F,GAAG,CAACptX,OAAO,eAAe0iN,OAAO,CAACqwK,gBAAgB,CAAC7F,IAAI,QAAQ8F,QAAG,GAAQC,cAAc,CAAC/F,IAAI,QAAQ8F,QAAG,GAAQE,SAAS,CAAChG,IAAI,QAAQ8F,QAAG,GAAQG,sBAAsB,CAACjG,IAAI,QAAQ8F,QAAG,GAAQI,6BAA6B,CAAClG,IAAI,QAAQ8F,QAAG,GAAQK,2BAA2B,CAACnG,IAAI,QAAQ8F,QAAG,GAAQM,+BAA+B,CAACpG,IAAI,QAAQ8F,QAAG,GAAQO,sCAAsC,CAACrG,IAAI,QAAQ8F,QAAG,GAAQQ,oCAAoC,CAACtG,IAAI,QAAQ8F,QAAG,GAAQS,kBAAkB,CAACvG,IAAI,QAAQ8F,QAAG,GAAQU,wBAAwB,CAACxG,IAAI,QAAQ8F,QAAG,GAAQW,kBAAkB,CAACzG,IAAI,QAAQ8F,QAAG,GAAQY,mBAAmB,CAAC1G,IAAI,QAAQ8F,QAAG,GAAQa,uBAAuB,CAAC3G,IAAI,QAAQ8F,QAAG,GAAQc,0BAA0B,CAAC5G,IAAI,QAAQ8F,QAAG,GAAQe,gBAAgB,CAAC7G,IAAI,QAAQ8F,QAAG,GAAQgB,gBAAgB,CAAC9G,IAAI,QAAQ8F,QAAG,GAAQiB,mBAAmB,CAAC/G,IAAI,QAAQ8F,QAAG,GAAQkB,mBAAmB,CAAChH,IAAI,QAAQ8F,QAAG,GAAQmB,uBAAuB,CAACjH,IAAI,QAAQ8F,QAAG,GAAQoB,mBAAmB,CAAClH,IAAI,QAAQ8F,QAAG,GAAQqB,oBAAoB,CAACnH,IAAI,QAAQ8F,QAAG,GAAQsB,sBAAsB,CAACpH,IAAI,QAAQ8F,QAAG,GAAQuB,eAAe,CAACrH,IAAI,QAAQ8F,QAAG,MAAiBwB,GAAG3C,GAAG,CAACrxY,KAAK,eAAesxY,QAAQM,GAAGlG,GAAG+F,GAAGa,GAAGI,UAAS,SAAAv9Y,IAAC,OAAA0+Q,iBAAO1+Q,GAAAA,GAAG,IAAEs8Y,GAAGa,GAAGC,iBAAgB,SAACp9Y,GAAC8+Y,IAAA,IAAOnhZ,GAACmhZ,GAAN1lZ,KAAI,OAAAslR,iBAAAA,iBAAW1+Q,GAAAA,IAAE2yB,GAAAA,CAAAA,SAAQ+rP,iBAAAA,oBAAK1+Q,GAAE2yB,UAAQ,CAAA,EAAA,CAAC8jX,UAAU94Y,MAAI,IAAE2+Y,GAAGa,GAAGG,eAAc,SAACt9Y,GAAC++Y,WAAAC,0BAAAD,IAAArgI,iBAAA,CAAA,EAAW1+Q,GAAC,IAAIs8Y,GAAGa,GAAGK,uBAAsB,SAAAx9Y,IAAC,OAAA0+Q,iBAAAA,iBAAA,CAAA,EAAO1+Q,IAAC,CAAA,EAAA,CAAC2yB,SAAQ+rP,iBAAAA,iBAAK1+Q,CAAAA,EAAAA,GAAE2yB,UAASokX,CAAAA,EAAAA,CAAAA,iBAAgB,KAAG,IAAIuF,GAAGa,GAAGM,8BAA6B,SAACz9Y,GAACi/Y,IAAA,IAAOthZ,GAACshZ,GAAN7lZ,KAAIslR,OAAAA,iBAAAA,oBAAW1+Q,IAAC,CAAA,EAAA,CAACgjW,cAAa,GAAA1sU,OAAAwwQ,mBAAK9mS,GAAEgjW,eAAa,CAACrlW,KAAGg1B,SAAQ+rP,iBAAAA,iBAAA,CAAA,EAAK1+Q,GAAE2yB,UAAQ,GAAA,CAACokX,iBAAgB,EAAGJ,cAAch5Y,MAAI,IAAE2+Y,GAAGa,GAAGO,4BAA2B,SAAC19Y,GAACk/Y,WAAAF,0BAAAE,IAAAxgI,iBAAAA,iBAAA,CAAA,EAAW1+Q,IAAC,CAAA,EAAA,CAAC2yB,SAAQ+rP,iBAAAA,iBAAA,CAAA,EAAK1+Q,GAAE2yB,UAAQ,CAAA,EAAA,CAACokX,iBAAgB,KAAK,IAAEuF,GAAGa,GAAGQ,gCAA+B,SAAC39Y,GAACm/Y,IAAA,OAAAH,0BAAAG,IAAAzgI,iBAAAA,iBAAA,CAAA,EAAW1+Q,IAAC,CAAA,EAAA,CAAC2yB,SAAQ+rP,iBAAAA,iBAAA,GAAK1+Q,GAAE2yB,UAASmkX,CAAAA,EAAAA,CAAAA,sBAAqB,SAAOwF,GAAGa,GAAGS,uCAAsC,SAAC59Y,GAACo/Y,IAAA,IAAOzhZ,GAACyhZ,GAANhmZ,KAAIslR,OAAAA,iBAAAA,iBAAW1+Q,GAAAA,QAAE2yB,SAAQ+rP,iBAAAA,iBAAA,CAAA,EAAK1+Q,GAAE2yB,UAAQ,CAAA,EAAA,CAACmkX,sBAAqB,EAAGJ,cAAc/4Y,MAAI,IAAE2+Y,GAAGa,GAAGU,qCAAoC,SAAC79Y,GAACq/Y,IAAA3gI,OAAAsgI,0BAAAK,IAAA3gI,iBAAAA,iBAAW1+Q,CAAAA,EAAAA,QAAE2yB,SAAQ+rP,iBAAAA,iBAAA,CAAA,EAAK1+Q,GAAE2yB,UAASmkX,CAAAA,EAAAA,CAAAA,sBAAqB,KAAK,IAAEwF,GAAGa,GAAGW,mBAAkB,SAAC99Y,GAACs/Y,IAAK,IAAA3hZ,GAAC2hZ,GAAJ/lZ,GAAEmlR,OAAAA,iBAAAA,iBAAW1+Q,GAAAA,IAAE2yB,CAAAA,EAAAA,CAAAA,SAAQ+rP,iBAAAA,iBAAA,CAAA,EAAK1+Q,GAAE2yB,UAAQ,CAAA,EAAA,CAACikX,oBAAoBj5Y,MAAI,IAAE2+Y,GAAGa,GAAGmB,oBAAmB,SAACt+Y,GAACu/Y,QAAK5hZ,GAAC4hZ,GAAJhmZ,GAAEmlR,OAAAA,iBAAAA,iBAAA,CAAA,EAAW1+Q,IAAC,CAAA,EAAA,CAACw2Y,uBAAuB74Y,IAAC,IAAI2+Y,GAAGa,GAAGkB,iBAAgB,SAACr+Y,GAACw/Y,IAAA,OAAAR,0BAAAQ,IAAA9gI,iBAAA,CAAA,EAAW1+Q,GAAC,IAAIs8Y,GAAGa,GAAGY,yBAAwB,SAAC/9Y,GAACy/Y,IAAA,IAAoB9hZ,GAAC8hZ,GAAnBC,kBAAiBhhI,OAAAA,iBAAAA,iBAAA,CAAA,EAAW1+Q,IAAC,CAAA,EAAA,CAAC2yB,SAAQ+rP,iBAAAA,iBAAK1+Q,CAAAA,EAAAA,GAAE2yB,UAASkkX,GAAAA,CAAAA,sBAAsBl5Y,MAAI,IAAE2+Y,GAAGa,GAAGuB,qBAAoB,SAAC1+Y,GAAC2/Y,IAAA,IAAOhiZ,GAACgiZ,GAAN9/X,KAAezd,GAACu9Y,GAATC,QAAOlhI,OAAAA,iBAAAA,iBAAW1+Q,CAAAA,EAAAA,IAAEg3Y,CAAAA,EAAAA,CAAAA,cAAc50Y,GAAEpC,GAAEg3Y,cAAc1gX,OAAO34B,IAAGqC,GAAEg3Y,cAAct6Y,QAAO,SAAAlE,IAAG,OAACmF,GAAE0H,SAAS7M,GAAE,KAAG,IAAE8jZ,GAAGa,GAAGwB,uBAAsB,SAAA3+Y,IAAC0+Q,OAAAA,iBAAAA,iBAAO1+Q,GAAAA,IAAEg3Y,GAAAA,CAAAA,cAAc,IAAI,IAAEsF,GAAGa,GAAGyB,gBAAe,SAAC5+Y,GAAC6/Y,IAAO,IAAAliZ,GAACkiZ,GAANhgY,KAAI6+P,OAAAA,iBAAAA,iBAAW1+Q,CAAAA,EAAAA,IAAEi3Y,CAAAA,EAAAA,CAAAA,YAAYj3Y,GAAEi3Y,cAAct5Y,GAAEohV,GAAGC,QAAQrhV,IAAC,OAAgCmiZ,GAAIjB,GAA5BkB,wBAA+CC,GAAInB,GAAnBoB,eAAsB3E,GAAG0E,IAAG,SAAAhgZ,IAAC,OAAEA,cAAAA,EAAAA,GAAGy2Y,SAAS,IAAE6E,GAAG0E,IAAG,SAAAhgZ,IAAG,OAAAA,cAAC,EAADA,GAAG22Y,aAAc,IAAC2E,GAAG0E,IAAG,SAAAhgZ,IAAG,OAAAA,cAAC,EAADA,GAAG62Y,qBAAsB,IAACyE,GAAG0E,IAAG,SAAAhgZ,WAAGA,cAAAA,EAAAA,GAAG02Y,iBAAe4E,GAAG0E,IAAG,SAAAhgZ,IAAC,OAAEA,cAAAA,EAAAA,GAAG42Y,uBAAqB0E,GAAG0E,IAAG,SAAAhgZ,IAAC,OAAEA,cAAAA,EAAAA,GAAG+2Y,mBAAiBuE,GAAG0E,IAAG,SAAAhgZ,IAAC,OAAEA,cAAAA,EAAAA,GAAG82Y,wBAAsBwE,GAAGwE,IAAG,SAAA9/Y,IAAC,OAAEA,cAAC,EAADA,GAAGw2Y,sBAAsB,IAAE8E,GAAGwE,IAAG,SAAA9/Y,IAAG,OAAAA,GAAEg3Y,aAAa,IAAEsE,GAAGwE,IAAG,SAAA9/Y,IAAG,OAAAA,GAAEi3Y,WAAW,IAAE,IAAMiJ,GAAG,CAACC,2BAA2B,CAAC,CAACt1Y,KAAK,QAAQm5M,YAAY,OAA2B9sE,MAAM,EAAEvuB,MAAM,CAACm2N,GAAG,QAAQ,SAAuC,GAAGA,GAAG,SAAS,SAAuC,MAAMshE,sBAAsB,CAACvhE,GAAG,QAAQ,OAA2B,EAAE,YAAYA,GAAG,OAAO,QAAiC,GAAGA,GAAG,UAAU,cAAqE,GAAGA,GAAG,OAAO,UAA6C,GAAGA,GAAG,UAAU,aAA+D,KAAKwhE,GAAG5I,GAAG,CAACptX,OAAO,sBAAsB0iN,OAAO,CAACuzK,8BAA8B,CAAC/I,IAAI,QAAQ8F,QAAG,GAAQkD,4BAA4B,CAAChJ,IAAI,QAAQ8F,QAAG,MAA+O,SAASmD,GAAGxgZ,IAAG,IAAMrC,GAAEuqU,IAAG,WAAI,OAAAloU,IAAG,IAAE,OAAO,SAAYA,IAAG,OAAOA,cAAAA,EAAAA,GAAGT,eAAc/F,MAAM,CAA7C,CAA+CmE,IAAG,IAAI8iZ,MAAMzgZ,GAAE,CAACpG,IAAI,SAACwI,GAAE5J,IAAC,OAAGA,MAAKmF,IAAG,SAAYqC,IAAG,MAAM,mBAAmBA,SAAG,IAASA,GAAEs/Q,GAAG,CAAzD,CAA2Dl9Q,GAAE5J,MAAKgB,OAAOwjC,eAAe56B,GAAE5J,GAAE,CAACsB,MAAMmuU,IAAG,kBAAI7lU,KAAI5J,GAAE,IAAEkpC,cAAa,IAAK8+W,GAAGp+Y,GAAE5J,MAAK4J,GAAE5J,GAAE,IAAGwH,EAAC,CAAtfk8Y,GAAG,CAACrxY,KAAK,uBAAuBsxY,QAAQM,GAAGyD,GAAG5D,GAAG+D,GAAGC,+BAA8B,SAACtgZ,GAAC0gZ,IAAA,IAAW/iZ,GAAC+iZ,GAAVz9U,SAAQ,OAAAy7M,iBAAAA,iBAAA,CAAA,EAAW1+Q,IAAEmgZ,GAAAA,CAAAA,2BAA2BxiZ,IAAG,IAAE2+Y,GAAG+D,GAAGE,6BAA4B,SAACvgZ,GAAC2gZ,IAAW,IAAAhjZ,GAACgjZ,GAAV19U,SAAQ,OAAAy7M,iBAAAA,iBAAW1+Q,CAAAA,EAAAA,IAAEogZ,CAAAA,EAAAA,CAAAA,sBAAsBziZ,IAAG,OAAwR,IAAMijZ,GAAG,IAAI9lY,QAAQ+lY,GAAGr9Y,OAAO,gBAAgB,SAASs9Y,GAAG9gZ,IAAO,IAAA,IAAA+gZ,GAAA97Y,UAAA9K,OAAFwD,GAAC2F,IAAAA,MAAAy9Y,KAAAA,GAAA,EAAA,GAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAADrjZ,GAACqjZ,GAAA,GAAA/7Y,UAAA+7Y,IAAEhhZ,GAAE6gZ,IAAI5hV,QAAO,SAAA78D,IAAC,OAAEzE,GAAEy6B,QAAO,SAAC5/B,GAAE8I,IAACo9Q,OAAAA,iBAAAA,iBAAQlmR,CAAAA,EAAAA,IAAK,mBAAmB8I,GAAEA,GAAE9I,IAAG8I,GAAG,GAACc,OAAI,SAAYpC,IAAG,IAAoEihZ,GAA9DtjZ,GAAE,SAAYqC,IAAG,OAAO4gZ,GAAGhnZ,IAAIoG,GAAE6gZ,MAAM,EAAG,CAAxC,CAAyC7gZ,IAAGkhZ,GAAA77G,2BAAe1nS,IAAf,IAAA,IAAAujZ,GAAAphZ,MAAAmhZ,GAAAC,GAAAlhZ,KAAAy3D,MAAiB,EAAAr1D,EAAN6+Y,GAAAnnZ,OAAQouU,IAAG,WAAI,OAAAi5E,GAAGnhZ,OAAG,CAAC,CAAA,MAAA0e,IAAAwiY,GAAAvjZ,EAAA+gB,GAAA,CAAA,QAAAwiY,GAAAv7Y,GAAA,CAAA,CAApG,CAAsG3F,GAAG,CAAA,SAASmhZ,GAAGnhZ,IAAG,OAAOA,GAAE6gZ,KAAM,CAAA,SAASO,KAAQC,IAAAA,IAAAA,GAAAp8Y,UAAA9K,OAAF6F,GAACsD,IAAAA,MAAA+9Y,IAAAC,GAAA,EAAAA,GAAAD,GAAAC,KAADthZ,GAACshZ,IAAAr8Y,UAAAq8Y,IAAE,IAAM3jZ,GAAC,GAAA24B,OAAKt2B,IAAGoC,GAAE,mBAAmBzE,GAAE,GAAG,CAAA,EAAGA,GAAEiE,QAAQpJ,GAAEmF,GAAE,OAAO4jZ,SAAAA,IAAI,IAAOzhZ,GAACymS,cAAC,SAAAzmS,IAAaqmS,gBAAArmS,KAAAA,GAAO,IAAAe,GAAErI,GAAE4/B,QAAO,SAACjvB,GAAEtD,IAAI,OAAAA,GAAEsD,MAAiBo3O,kBAAAA,kBAAAA,kBAAAA,kBAAAA,qBAAQsgK,GAAI9lF,GAAG,CAAA,IAAG,eAAc,IAAE,kBAAiB,IAAW,UAAA,CAAE,GAAA,QAAO,CAAE,IAAoBr9T,GAAuCmD,GAApD2gZ,aAA+B9gZ,GAAqBG,GAArC4gZ,gBAA0Bh8Y,GAAW5E,GAAnB6gZ,QAAgB97Y,GAAG/E,GAATy7B,MAAWx2B,GAAC44Q,iBAAAA,iBAAAA,iBAAA,CAAA,EAAKhhR,IAAKgD,IAAK+E,IAAkB,IAAI,IAAM0D,MAAzBlP,KAAK4mZ,IAAIhgZ,GAAEggZ,IAAmB/6Y,GAAE7L,KAAKkP,IAAGrD,GAAEqD,IAAG,IAAaxH,GAAeiE,GAAtB+7Y,OAAmBh8Y,GAAGC,GAAbya,UAAe1e,IAAGA,KAAIgE,IAAG4oS,GAAG6U,IAAI/iS,UAAU1a,GAAG,IAAiI,OAAjI47Y,GAA7TzhZ,GAACygP,kBAADzgP,GAAC,QAA6U,SAASpC,IAAG,OAAO,IAAIA,IAAGoC,GAAE,IAACygP,kBAA3WzgP,WAA8XwrS,GAAG,CAAC7iR,MAAM3oB,GAAEqyC,QAAQryC,GAAEktS,KAAUzB,WAAWnpS,GAAEmpS,YAAY,QAAczrS,EAAE,CAAldyhZ,EAAqd,CAAC,SAASK,GAAG5hZ,IAAG,OAAO,SAAArC,IAAI,IAAMyE,GAAEpC,GAAC0+Q,iBAAAA,iBAAAA,iBAAAn+B,kBAAA,CAAA,EAAGsgK,GAAIljZ,GAAEkjZ,KAAOljZ,GAAE6jZ,cAAgB7jZ,GAAE8jZ,iBAAmB9jZ,GAAE+jZ,UAAU,OAAqBhjI,iBAAAA,iBAAA,CAAA,EAAK/gR,IAAC,CAAA,EAAA,CAAC+jZ,QAAOhjI,iBAAAA,iBAAK/gR,CAAAA,EAAAA,GAAE+jZ,SAAWt/Y,KAAG,CAAE,CAAA,SAASy/Y,GAAG7hZ,IAAG,OAAOrC,SAAAA,IAAI,IAAMyE,GAAE,mBAAmBpC,GAAEA,KAAIA,GAAExH,GAAEgB,OAAO2W,KAAK/N,IAAGzE,GAAEkjZ,IAAI5hV,QAAO,SAAAn/D,IAAC,OAAA4+Q,iBAAAA,iBAAA,GAAO5+Q,IAAKsC,GAAC,IAAI,IAAMd,GAAE9I,GAAE4/B,QAAO,SAACt4B,GAAE4F,IAAK,IAAM7E,GAAEonU,IAAG,WAAA,OAAItqU,GAAEkjZ,MAAMn7Y,GAAG,IAAC,OAAAg5Q,iBAAAA,iBAAA,CAAA,EAAU5+Q,IAAC,CAAA,EAAAygP,kBAAA,CAAA,EAAE76O,GAAG86Y,GAAG3/Y,KAAG,GAAE,CAAE,GAAE,OAAA69Q,iBAAAA,iBAAU/gR,GAAAA,IAAE6jZ,CAAAA,EAAAA,CAAAA,aAAY9iI,iBAAAA,iBAAK/gR,GAAAA,GAAE6jZ,cAAgBlgZ,KAAG,CAAE8/Y,CAAAA,GAAG,CAAC71G,WAAW,QAAQs2G,GAAG,CAAC7K,cAAc,GAAG8K,eAAc,IAAKF,IAAG,SAAC5hZ,IAAC,IAACrC,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAACspS,GAAAA,GAAGwrG,IAAG,MAAI,CAACgI,oBAAmB,SAAC3/Y,IAAG0+Y,GAAG9gZ,IAAE,SAAAxH,IAAI,IAAM8I,GAAE9I,GAAEw+Y,cAAc3xY,SAASjD,IAAG5J,GAAEw+Y,cAAct6Y,QAAO,SAAAoD,IAAG,OAAAA,KAAIsC,EAAC,IAACk0B,GAAAA,OAAAwwQ,mBAAKtuS,GAAEw+Y,eAAc50Y,CAAAA,KAAG,OAAAs8Q,iBAAAA,iBAAA,CAAA,EAAUlmR,IAAC,CAAA,EAAA,CAACw+Y,cAAc11Y,IAAE,IAAG3D,GAAEovJ,SAASowP,GAAGuB,oBAAoB,CAAC7+X,KAAK,CAACzd,IAAGw9Y,QAAQ5/Y,GAAEg3Y,gBAAgB3xY,SAASjD,MAAM,EAAC4/Y,mBAAkB,WAAGlB,GAAG9gZ,IAAE,SAAAoC,IAACs8Q,OAAAA,iBAAAA,iBAAOt8Q,GAAAA,IAAE40Y,GAAAA,CAAAA,cAAc,OAAK,EAAEiL,oBAAmBA,WAAGnB,GAAG9gZ,IAAE,SAAAoC,IAAC,OAAAs8Q,iBAAAA,iBAAOt8Q,CAAAA,EAAAA,IAAE0/Y,CAAAA,EAAAA,CAAAA,eAAe1/Y,GAAE0/Y,eAAa,GAAG,EAAE,KAAIV,GAAG,CAAC71G,WAAW,QAAQs2G,GAAG,CAACK,kBAAkB,GAAGC,kBAAkBpjE,GAAGC,QAAQojE,sBAAsBrjE,GAAGC,UAAU4iE,IAAG,SAAA5hZ,IAAC,MAAG,CAACqiZ,gBAAe,SAAC1kZ,IAAGmjZ,GAAG9gZ,IAAE,SAAAoC,IAACs8Q,OAAAA,iBAAAA,oBAAOt8Q,IAAC,CAAA,EAAA,CAAC8/Y,kBAAkBvkZ,IAAC,GAAG,EAAE2kZ,kBAAiBA,WAAGxB,GAAG9gZ,IAAE,SAAArC,IAAC,OAAA+gR,iBAAAA,iBAAA,CAAA,EAAO/gR,IAAEukZ,CAAAA,EAAAA,CAAAA,kBAAkB,IAAI,GAAE,EAACK,cAAaA,SAAC5kZ,IAAGmjZ,GAAG9gZ,IAAE,SAAAoC,IAAC,OAAAs8Q,iBAAAA,iBAAA,CAAA,EAAOt8Q,IAAEggZ,CAAAA,EAAAA,CAAAA,sBAAsBhgZ,GAAE+/Y,kBAAkBA,kBAAkB//Y,GAAE+/Y,oBAAoBxkZ,GAAEohV,GAAGC,QAAQrhV,IAAG,GAAE,EAAE,KAAG,IAAM6kZ,GAAG,CAAC7X,QAAQ,GAAG8X,aAAa,MAAMC,IAAItB,GAAG,CAAC71G,WAAW,QAAQs2G,GAAGW,IAAI,SAAYxiZ,IAAG,OAAOrC,SAAAA,IAAI,IAAMyE,GAAEpC,GAAC0+Q,iBAAAA,iBAAK/gR,CAAAA,EAAAA,GAAE6jZ,cAAgB7jZ,GAAE8jZ,kBAAkB,OAAqB/iI,iBAAAA,iBAAK/gR,CAAAA,EAAAA,QAAE8jZ,gBAAe/iI,iBAAAA,iBAAA,CAAA,EAAK/gR,GAAE8jZ,iBAAmBr/Y,KAAI,CAAA,CAAvJ,EAAyJ,SAAAugZ,IAAe,IAAA3iZ,GAAC2iZ,GAAdF,aAAY,MAAO,CAACG,wBAAwB36E,IAAG,WAAA,IAAA46E,GAAA,OAAO,QAAHA,GAAA7iZ,YAAG,IAAA6iZ,QAAA,EAAHA,GAAKzgD,cAAa,EAAG,IAAE,IAAEw/C,IAAG,SAAAkB,IAAU,IAAA9iZ,GAAC8iZ,GAATnY,QAAuBhtY,GAACmlZ,GAAdL,aAAkBrgZ,GAAC2gZ,yBAAAD,GAAAnkI,IAAEnmR,GAACyM,UAAA9K,OAAA8K,QAAA9M,IAAA8M,aAAAA,UAAA,GAACspS,GAAG2zD,IAAO,MAAA,CAAC8gD,6BAA4B,SAAC1hZ,IAAG,IAAMxB,GAAEtH,GAAEyqZ,0BAA0B3hZ,IAAGrH,KAAKipZ,UAAUpjZ,IAAG7F,KAAKkpZ,gBAAgBrjZ,GAAE08V,eAAgB,EAAC0mD,UAAS,SAAC5hZ,IAAGtB,KAAIjD,MAAK,SAAA2I,IAAC,OAAEA,GAAE82V,iBAAiBl7V,GAAEk7V,cAAc,IAAEskD,GAAG1+Y,GAAE,CAACuoY,QAAQ3qY,KAAIhD,KAAI,SAAA0I,IAAC,OAAEA,GAAE82V,iBAAiBl7V,GAAEk7V,eAAc99E,iBAAAA,iBAAKp9Q,CAAAA,EAAAA,IAAE8gW,CAAAA,EAAAA,CAAAA,YAAY18V,GAAE08V,cAAa18V,EAAC,MAAIo7Y,GAAG1+Y,GAAE,CAACuoY,QAAO,GAAAr0W,OAAAwwQ,mBAAK9mS,MAAIsB,CAAAA,MAAK,EAAC6hZ,gBAAe,SAAC7hZ,IAAGtB,KAAIjD,MAAK,SAAA2I,IAAC,OAAEA,GAAE82V,iBAAiBl7V,EAAE,IAACw/Y,GAAG1+Y,GAAE,CAACqgZ,aAAaziZ,KAAIjD,MAAK,SAAA2I,IAAG,OAAAA,GAAE82V,iBAAiBl7V,EAAE,KAAE,OAAOrH,KAAKipZ,UAAU,CAAC1mD,eAAel7V,GAAE8gW,YAAY,IAAI,EAAEghD,cAAa,SAAC9hZ,IAAGw/Y,GAAG1+Y,IAAE,SAAAtC,IAAC,OAAA4+Q,iBAAAA,iBAAA,CAAA,EAAO5+Q,IAAC,CAAA,EAAA,CAAC2iZ,aAAY/jI,iBAAAA,iBAAA,CAAA,EAAK5+Q,GAAE2iZ,cAAargD,CAAAA,EAAAA,CAAAA,YAAW9rU,GAAAA,OAAAwwQ,mBAAKhnS,GAAE2iZ,aAAargD,aAAW,CAAC9gW,QAAK,IAAErH,KAAKopZ,eAAgB,EAACC,kBAAiB,SAAChiZ,IAAG,IAAMxB,GAAEnC,KAAG+gR,iBAAAA,iBAAA,GAAK/gR,MAAG,CAAA,EAAA,CAACykW,YAAYzkW,KAAIykW,YAAY1lW,QAAO,SAAAgJ,IAAC,OAAEA,GAAEnM,KAAK+H,QAAI3D,KAAImjZ,GAAG1+Y,GAAE,CAACqgZ,aAAa3iZ,KAAI7F,KAAKopZ,eAAgB,EAACA,cAAa,WAAG1lZ,MAAKmjZ,GAAG1+Y,GAAE,CAACuoY,QAAQ3qY,KAAIhD,KAAI,SAAAsE,IAACiiZ,IAAAA,GAAE,OAAAjiZ,GAAEk7V,kBAAoB+mD,QAANA,GAAG5lZ,YAAA4lZ,IAAGA,QAAHA,EAAAA,GAAK/mD,gBAAe7+V,KAAI2D,EAAC,KAAI,EAACkiZ,6BAA4BA,SAACliZ,IAAGw/Y,GAAG1+Y,IAAE,SAAAtC,IAAC2jZ,IAAAA,GAAA/kI,OAAAA,iBAAAA,iBAAO5+Q,CAAAA,EAAAA,IAAE2iZ,GAAAA,CAAAA,aAAY/jI,iBAAAA,oBAAK5+Q,GAAE2iZ,cAAY,CAAA,EAAA,CAACrgD,aAA0B,QAAdqhD,GAAA3jZ,GAAE2iZ,oBAAY,IAAAgB,QAAA,EAAdA,GAAgBrhD,YAAYplW,KAAI,SAAA0I,IAAC,OAAEA,GAAEnM,KAAK+H,GAAE/H,GAAG+H,GAAEoE,EAAC,MAAG,MAAG,IAAIzL,KAAKopZ,eAAe,EAAEK,2CAAkCpiZ,IAAGw/Y,GAAG1+Y,IAAE,SAAAtC,IAAC4+Q,OAAAA,iBAAAA,iBAAO5+Q,GAAAA,QAAE2iZ,aAAY/jI,iBAAAA,iBAAA,GAAK5+Q,GAAE2iZ,cAAargD,CAAAA,EAAAA,CAAAA,YAAY9gW,MAAE,IAAIrH,KAAKopZ,eAAgB,EAACM,yBAAwB,SAACriZ,IAAE,IAAAsiZ,GAAO9jZ,GAAEtH,GAAEyqZ,0BAA0B3hZ,IAAGrH,KAAKipZ,UAASxkI,iBAAAA,iBAAK5+Q,CAAAA,EAAAA,QAAEsiW,aAAewhD,QAAHA,GAAAjmZ,YAAAimZ,IAAGA,QAAHA,EAAAA,GAAKxhD,cAAa,KAAI,EAAEyhD,6BAA4BA,SAACviZ,IAAGw/Y,GAAG1+Y,GAAE,CAACqgZ,aAAY/jI,iBAAAA,iBAAA,CAAA,EAAK/gR,MAAG,CAAA,EAAA,CAACykW,YAAYzkW,KAAIykW,YAAY1lW,QAAO,SAAAoD,IAAC,OAAEA,GAAEvG,KAAK+H,EAAE,QAAIrH,KAAKopZ,eAAe,EAAES,WAAUA,WAAGhD,GAAG1+Y,GAACs8Q,iBAAA,GAAK8jI,IAAK,EAAE,KAAG,CAAC,oBAAwBuB,GAAI,SAAAC,IAAW,IAAAhkZ,GAAC,WAA0P,OAAAumS,cAAzP,SAAAvmS,EAAYoC,GAAE5J,IAAEyrZ,IAAAA,GAAA99G,KAAAA,gBAAAnmS,KAAAA,GAAC/F,KAAKiqZ,WAAW9hZ,GAAEnI,KAAKsqT,WAAW/rT,GAAEyB,KAAK4Q,KAAK,kBAAkB5Q,KAAKkqZ,oBAAoB,IAAIj/H,GAAGjrR,KAAKmqZ,aAAa,IAAIphP,gBAAe,SAAA1hK,IAAI2iZ,GAAKE,oBAAoB9pZ,KAAK,CAACyxB,MAAMxqB,GAAE,GAAG6lJ,YAAYr7H,MAAMm9G,OAAO3nI,GAAE,GAAG6lJ,YAAYle,QAAS,GAAE,GAAA,CAAA,CAAAttI,IAAA,WAAA7B,MAAA,WAAUuqZ,IAAAA,QAACpqZ,KAAKkqZ,oBAAoBjhF,KAAKyjC,GAAG,KAAKywC,GAAGn9Y,KAAKsqT,aAAaxb,WAAU,SAAA3mS,IAAIiiZ,GAAKH,WAAWxT,WAAWtuY,GAAE,GAAG,GAAA,CAAAzG,IAAA,kBAAA7B,MAAA,WAAiBwqZ,IAAAA,YAACA,GAAArqZ,KAAKsqZ,uBAAe,IAAAD,QAAA,EAApBA,GAAsBv7F,iBAAgB9uT,KAAKmqZ,aAAanhP,QAAQhpK,KAAKsqZ,gBAAgBx7F,eAAe9uT,KAAKiqZ,WAAWM,UAAUvqZ,KAAKsqZ,gBAAgBx7F,cAAcxvT,OAAKoC,CAAAA,IAAA7B,cAAAA,MAAAm8S,WAAa,IAAAwuG,GAACxqZ,KAAKiqZ,WAAWQ,WAAWzqZ,KAAKkqZ,oBAAoB39G,cAAcvsS,KAAKmqZ,aAAan1O,UAA8Bw1O,QAArBA,GAACxqZ,KAAKsqZ,uBAALE,IAAoBA,QAApBA,EAAAA,GAAsB17F,cAAc,IAACi7F,CAAvrB,GAAq9C,OAA9xBA,GAAxrBhkZ,IAAosBgtS,KAAU,SAASx0S,IAAG,OAAO,IAAIA,IAAGwH,IAAGqtT,GAAG4oF,IAAI5oF,GAAGjK,IAAI,EAAS4gG,GAAKt3G,KAAUiE,GAAG,CAACtqS,KAAKrG,GAAEymI,UAAU,CAAC,CAAC,oCAAoCyrK,UAAU,SAAS15S,GAAE8I,IAAoD,IAAIxB,IAAlD,EAAEtH,IAAG,SAAYwH,GAAErC,GAAEyE,KAApvnV,SAAYpC,GAAErC,GAAEyE,IAAG,IAAM5J,GAAEujT,KAAYvjT,GAAEqoT,kBAAkB,SAAY7gT,GAAErC,GAAEyE,IAAG,OAAOpC,GAAEivT,UAAUjvT,GAAEivT,QAAQ,IAAIsK,IAAIv5T,GAAEivT,QAAQ/iL,MAAM,IAAIytL,GAAGh8T,GAAEyE,IAAG,CAApF,CAAsF5J,GAAE,IAAI8gU,GAAGt5T,GAAErC,GAAEyE,KAAI,KAAK,GAAGzE,MAAKnF,GAAE62T,mBAAkB,IAAK,SAAYrvT,GAAErC,GAAEyE,GAACuiZ,IAAE,IAAMnsZ,GAAE,IAAI2wT,KAAK,GAAG/mT,MAAW,SAAYpC,GAAErC,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAEuvT,GAAGlzT,IAAG2D,GAAErE,KAAKmF,IAAGpC,GAAE6gT,iBAAiBkQ,GAAG/wT,IAAG/C,KAAKzE,GAAE8I,GAAEnH,OAAO,IAAtF,CAA0F6F,GAAErC,GAAEnF,GAAEA,GAAE+iC,UAAeopX,QAANA,GAAChnZ,GAAE26S,WAAGqsG,IAAAA,GAAAA,GAALhnZ,GAAE26S,IAAM,IAAI2gB,IAAIhK,QAAQhyT,KAAK,IAAI67T,GAAGtgU,IAAK,CAAvM,CAAyMA,GAAE48O,KAAKz3O,GAAG,CAA41mVinZ,CAAG5kZ,GAAErC,GAAEyE,GAAG,CAA7B,CAA8BsgZ,GAAG,GAAG,EAAElqZ,MAAS,SAAawH,IAAG,IAAMrC,GAAEy3O,KAAKhzO,GAAE25S,KAAKvjT,GAAEqkT,KAAKE,GAAGvkT,GAAE,GAAG,IAAM8I,GAAE+3T,GAAGj3T,GAAE5J,IAAG,GAAGwH,GAAEsuC,OAAO,SAAYtuC,IAAG,QAAQ,GAAGA,GAAEu3S,IAAK,CAAjC,CAAkC55S,QAAO,GAAG2D,GAAEs4T,SAASr7N,OAAO,CAAC,GAAG,OAAOj9F,GAAEktC,QAAQxuC,GAAEutG,MAAM,QAAQ,CAAC,IAAMztG,GAAE06T,GAAG78T,GAAEnF,IAAGwH,GAAEutG,MAAMztG,GAAEkpT,IAAIhpT,GAAE0pT,iBAAiB,CAAC,OAAM,CAAE,CAAC,OAAM,CAAG,CAAvP,CAAyP5pT,GAAzk6U,SAAGE,GAAErC,IAAG,OAAOqC,GAAEs4S,IAAI2W,QAAQtxT,IAAGo7T,SAAU,CAA1C,CAA2C3jF,KAAKynE,SAAmi6Uv7S,GAAEijZ,gBAAgBzkZ,GAAEykE,OAAO,EAAEmsG,OAAO,CAAC7lK,KAAK,QAAQ8pE,YAAW,EAAGsZ,SAAS,CAACmxO,IAAItuB,MAAM,EAAEC,KAAK,EAAEC,OAAO,CAAC,CAAC,kBAAkB,IAAI,CAAC,EAAE,kBAAkB,EAAE,OAAO5nQ,SAAS,SAAS5wC,GAAE8I,IAAG,EAAE9I,IAAG0lU,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE1lU,IAAGqlU,GAAG,KAAKv8T,GAAEuJ,OAAOyzL,OAAO,CAAC,+DAA+D6yG,gBAAgB,IAAYnxS,EAAC,CAAz+C,GAAo/C6kZ,GAAG,SAAC7kZ,GAAErC,IAAC,MAAI,CAACmnZ,QAAQ9kZ,GAAE+kZ,UAAUpnZ,GAAG,EAAC,SAASqnZ,GAAGhlZ,GAAErC,IAAG,GAAG,EAAEqC,GAAE,CAAC,IAAMoC,GAAuBgzO,KAAQ2oF,GAAG,EAAE,SAAS,GAAGK,GAAG,SAAQ,WAAW,OAAgB,SAAGp+T,IAAUw7S,GAAGC,OAAO4B,aAAar9S,GAAEA,GAAE63S,GAAG,CAA3C,CAA6Cz1S,IAAG,SAAYpC,IAAG,OAAOw7S,GAAGC,OAAO4B,aAAa,KAAKr9S,EAAC,CAAnD,CAAqD0+T,KAAKumF,wBAAuBlnF,GAAG,EAAE,OAAO,GAAG,SAAY/9T,IAAE,IAAArC,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,GAAU7C,GAAEgzO,KAAK58O,GAAEujT,KAAKz6S,GAAEtB,GAAE04S,GAAG54S,GAAEtH,GAAEqoT,gBAAgB4M,GAAGj1T,GAAE8I,GAAE,EAAE3D,GAAE,MAAMnF,GAAEY,KAAKkI,IAAGoE,GAAxu7U,SAAC1F,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAAC,OAAI28S,IAAG,GAAI,SAAYj+S,GAAErC,IAAG,OAAOqC,GAAEmyU,WAAWx0U,GAAG,CAAxC,CAAyCA,GAAEw3O,IAAI38O,GAAG,CAAmq7U0sZ,CAAG1sZ,EAAE4J,GAAEtC,EAAEnC,IAAKyE,GAAEd,IAAGoE,GAAEs4S,MAAMsO,GAAG9zT,GAAE4J,GAAEsD,GAAE5F,IAAGq8S,GAAGr8S,IAAE,EAAI,CAAhJ,CAAiJ,GAAGm+T,MAAM,CAAC,GAAG,EAAEj+T,GAAE,CAAC,IAAMoC,GAAEs8T,KAAKb,GAAG,UAA105U,SAAY79T,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAAG,OAAO,SAAYtB,GAAErC,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,IAAG,IAAM7E,GAAElD,GAAEyE,GAAE,OAAgB,SAAGpC,GAAErC,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAEq6T,GAAG37T,GAAErC,GAAEyE,IAAG,OAAOu5T,GAAG37T,GAAErC,GAAE,EAAEnF,KAAI8I,EAAC,CAAnD,CAAqDtB,GAAEa,GAAES,GAAExB,IAAG,SAAYE,GAAErC,GAAEyE,IAAG,OAAOpC,GAAErC,IAAGyE,EAAE,CAAjC,CAAkCpC,GAAEa,GAAE,EAAE6E,GAAElN,GAAEkB,KAAKgM,GAAEpE,GAAExB,IAAGtH,GAAE8I,GAAExB,KAAI,SAAYE,GAAErC,IAAG,IAAMyE,GAAEpC,GAAErC,IAAG,OAAOyE,KAAI8qT,QAAG,EAAO9qT,EAAC,CAApD,CAAsDpC,GAAEa,GAAE,EAAG,CAAlP,CAAmPu0O,KAAK,WAAc,IAAMp1O,GAAEw7S,GAAGC,OAAW99S,GAAEqC,GAAE08S,iBAAiB,OAAO,IAAI/+S,KAAIA,GAAEqC,GAAE08S,iBAAiB18S,GAAE8vK,MAAMwtI,mBAAmB3/S,EAAE,CAA1H,GAA6HqC,GAAErC,GAAEyE,GAAE5J,GAAE8I,GAAE,CAAu74U6jZ,CAAG,EAAEN,GAAGziZ,GAAEgjZ,yBAAyBhjZ,GAAEgjZ,0BAA0Bj4F,GAAG,GAAGwR,GAAG,mBAAmB,CAAC,IAAI0mF,GAAI,SAAAC,IAAW,IAAAtlZ,GAAC,WAA4rC,OAAAumS,cAA3rC,SAAAvmS,EAAYoC,GAAE5J,GAAE8I,GAAExB,IAAE,IAAAylZ,GAAAtrZ,KAAAksS,gBAAAlsS,KAAA+F,GAAC/F,KAAKurZ,oBAAoBpjZ,GAAEnI,KAAKwrZ,iBAAiBjtZ,GAAEyB,KAAKiqZ,WAAW5iZ,GAAErH,KAAKsqT,WAAWzkT,GAAE7F,KAAKovY,aAAatuE,GAAG,MAAM9gU,KAAK83Y,IAAIh3E,GAAG,MAAM9gU,KAAKyrZ,YAAY3qF,GAAG86E,GAAGC,OAAO77Y,KAAK0rZ,QAAQ19E,IAAG,WAAI,OAAAs9E,GAAKxT,MAAMiE,GAAGuP,GAAKG,eAAeH,GAAKxT,OAAO,IAAI,IAAE93Y,KAAK2rZ,uBAAuB39E,IAAG,WAAI,QAAEs9E,GAAKI,aAAaJ,GAAKlc,cAAc,IAAEpvY,KAAKmrZ,sBAAsBn9E,IAAG,WAAI,OAAAs9E,GAAKG,gBAAgB7P,GAAGC,KAAM,IAAC77Y,KAAK4rZ,aAAa,IAAI3gI,GAAGjrR,KAAK4rZ,aAAa3iF,KAAKk0E,GAAGn9Y,KAAKsqT,YAAYs0B,IAAG,SAAAnzU,IAAG,OAAA6/Y,GAAKC,oBAAoBM,kBAAkBpgZ,IAAGw9T,KAAKt9C,IAAG,SAAA/kR,IAAC,OAAE0kZ,GAAKE,iBAAiBM,YAAYllZ,IAAGy/V,iBAAkB,IAAC42C,IAAG,SAAAr2Y,IAAG,OAAA,WAAiB,IAAA,IAAAmlZ,GAAA/gZ,UAAA9K,OAAF6F,GAACsD,IAAAA,MAAA0iZ,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAADjmZ,GAACimZ,IAAAhhZ,UAAAghZ,IAAE,OAAO5sE,GAAGr5U,GAAEi5U,GAAGj5U,IAAI,CAArC,CAAsCa,GAAE,IAAE,KAAGkoS,WAAU,SAAArjS,IAAI6/Y,GAAKlc,aAAaxvY,IAAI6L,GAAE,IAAG,SAAY1F,GAAErC,GAACuoZ,GAAAC,GAAAC,GAAAC,IAAE3rF,GAAG,cAAc/8T,WAAAA,GAAGopE,WAAUznE,KAAK,IAAM8C,GAAa8jZ,QAAZA,GAACvoZ,cAAC,EAADA,GAAGopE,gBAAQm/U,IAAAA,GAAAA,GAAE33G,GAAGsU,IAAIrqT,IAAE,KAAKmF,cAAC,EAADA,GAAG2oZ,eAAclkZ,GAAExI,IAAIwpT,IAAI,KAAK9hT,GAAE,IAAI+nU,GAAGjnU,GAAExI,IAAIuuU,IAAInoU,IAAa0/Q,oBAAJzzM,KAAIyzM,YAAAA,QAAJzzM,OAAK,IAAI,KAAKA,KAAK/gE,QAAQ1S,GAAE4J,WAAC+jZ,GAACxoZ,cAAAA,EAAAA,GAAG4oZ,yBAAiB,IAAAJ,IAAAA,IAAMrmZ,GAAEsC,GAAExI,IAAI8tU,GAAG,KAAK,CAACj9M,UAAS,IAAY3qH,IAAG,EAAEA,GAAE6iT,OAAOpL,KAAiB8uG,QAAbA,IAACD,GAAAtmZ,GAAE6iT,QAAO/pE,WAAGytK,IAAAA,GAAAA,GAAZD,GAASxtK,IAAM,IAAI37O,KAAKqE,GAAEkoU,QAAQpuB,QAAQ95S,GAAEkoU,QAAQpuB,QAAW,CAApU,EAAqU,WAAI,IAAAorG,GAAAC,GAAAC,GAAAC,GAACpB,GAAKxT,OAAOwT,GAAKlc,gBAAgBkc,GAAKI,YAA0B,QAAda,GAAAjB,GAAKI,iBAALa,IAAcA,IAAdA,GAAgBI,mBAAiC,QAAfH,GAAClB,GAAKI,iBAAS,IAAAc,IAAdA,GAAgB/T,mBAAiCgU,QAAfA,GAACnB,GAAKI,iBAALe,IAAcA,IAAdA,GAAgBG,aAA2B,QAAfF,GAACpB,GAAKI,iBAAS,IAAAgB,IAAdA,GAAgBpS,iBAAiBgR,GAAKlc,gBAAiB,GAAE,GAAA,CAAA,CAAA1tY,IAAA7B,WAAAA,MAAAqoT,WAAU,IAAA2kG,GAAA7sZ,KAACA,KAAKiqZ,WAAW/N,YAAYjzE,KAAKk0E,GAAGn9Y,KAAKsqT,aAAaxb,WAAU,SAAA3mS,IAAI0kZ,GAAK/U,IAAIl4Y,IAAIuI,GAAE,GAAE,GAACzG,CAAAA,kBAAA7B,MAAA,SAAYsI,IAAGA,GAAE2kZ,OAAO9sZ,KAAK8sZ,OAAO9sZ,KAAK4rZ,aAAaxrZ,KAAKJ,KAAK8sZ,MAAM,IAACprZ,IAAA,oBAAA7B,MAAA,WAAoBG,KAAK0rZ,WAAW1rZ,KAAKovY,gBAAgBpvY,KAAKyrZ,YAAYzmV,QAAO,SAAA78D,IAAC,OAAEA,KAAIyzY,GAAGC,MAAMD,GAAGE,KAAKF,GAAGC,KAAK,GAAE,IAAA,CAAv9C,GAA6qG,OAAttDwP,GAAx9CtlZ,IAAo+CgtS,KAAU,SAASx0S,IAAG,OAAWA,IAAAA,IAAGwH,IAAGqtT,GAAGy1C,IAAIz1C,GAAG0yC,IAAI1yC,GAAG4oF,IAAI5oF,GAAGjK,IAAI,EAASkiG,GAAK54G,KAAUiE,GAAG,CAACtqS,KAAKrG,GAAEymI,UAAU,CAAC,CAAC,0BAA0BiqC,OAAO,CAACq2O,MAAM,SAASpyU,YAAW,EAAGsZ,SAAS,CAAC4rN,GAAGulB,IAAItuB,MAAM,EAAEC,KAAK,EAAEC,OAAO,CAAC,CAAC,EAAE,mCAAmC,CAAC,QAAQ,cAAc,EAAE,UAAU,QAAQ,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,WAAW,CAAC,EAAE,mBAAmB5nQ,SAAS,SAAS5wC,GAAE8I,IAAG,EAAE9I,KAAI0lU,GAAG,EAAE,kCAAkC,GAAGtC,GAAG,EAAEopF,GAAG,EAAE,EAAE,SAAS,IAAI,EAAExsZ,KAAI20T,KAAK0Q,GAAG,OAAOv8T,GAAEskZ,0BAA2B,EAACv+U,aAAa,CAACmlQ,GAAGvC,GAAGwB,GAAGs4E,IAAIzlN,OAAO,CAAC,+oCAA+oC6yG,gBAAgB,IAAYnxS,EAAE,CAAlsG,GAA0sGgnZ,GAAG,SAAShnZ,IAAG,OAAOA,GAAEA,GAAEinZ,MAAM,GAAG,QAAQjnZ,GAAEA,GAAEknZ,WAAW,GAAG,aAAalnZ,GAAEA,GAAEmnZ,SAAS,GAAG,WAAWnnZ,GAAEA,GAAE8vN,MAAM,GAAG,QAAQ9vN,GAAEA,GAAEonZ,QAAQ,GAAG,UAAUpnZ,GAAEA,GAAEqnZ,UAAU,GAAG,YAAYrnZ,GAAEA,GAAEsnZ,MAAM,GAAG,QAAQtnZ,GAAEA,GAAEunZ,QAAQ,GAAG,UAAUvnZ,GAAEA,GAAEwnZ,UAAU,GAAG,YAAYxnZ,GAAEA,GAAEynZ,aAAa,GAAG,eAAeznZ,GAAEA,GAAE0nZ,WAAW,IAAI,aAAa1nZ,GAAEA,GAAE2nZ,MAAM,IAAI,QAAQ3nZ,GAAEA,GAAE4nZ,QAAQ,IAAI,UAAU5nZ,EAAE,CAA7W,CAA8WgnZ,IAAI,CAAE,GAAQa,GAAG,IAAI,SAASC,GAAG9nZ,IAAG,MAAM,CAACqG,KAAK2gZ,GAAGM,MAAMhpN,OAAOt+L,GAAEgW,OAAO,KAAM,CAAA,IAAM+xY,GAAG,WAA0P,OAAAxhH,cAA1P,SAAAwhH,KAAY,IAAApqZ,GAACsH,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,EAAE7C,GAAC6C,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,aAAC,EAACkhS,gBAAAlsS,KAAA8tZ,IAAE9tZ,KAAK+tZ,WAAW,GAAG/tZ,KAAKguZ,YAAY,GAAGhuZ,KAAKiuZ,cAAc,GAAGjuZ,KAAKkuZ,mBAAmB,GAAGluZ,KAAKmuZ,oBAAoB,GAAGnuZ,KAAKouZ,UAAS,EAAGpuZ,KAAKw7S,YAAW,EAAGx7S,KAAKquZ,WAAU,EAAGruZ,KAAKggY,UAAU,EAAEhgY,KAAKsuZ,aAAa,KAAKtuZ,KAAKuuZ,UAAU7qZ,GAAEyE,EAAE,GAAAzG,CAAAA,CAAAA,IAAA7B,YAAAA,MAAA2uZ,WAAYxuZ,KAAKquZ,YAAYruZ,KAAKquZ,WAAU,EAAGruZ,KAAK+tZ,WAAWpsZ,SAAQ,SAAA+B,IAAG,OAAAA,IAAI,IAAC1D,KAAK+tZ,WAAW,GAAI,GAAA,CAAArsZ,IAAA,UAAA7B,MAAA,SAAQ6D,IAAG1D,KAAKmuZ,oBAAoBnrZ,KAAKU,IAAG1D,KAAKguZ,YAAYhrZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,SAAA7B,MAAA,SAAO6D,IAAG1D,KAAKkuZ,mBAAmBlrZ,KAAKU,IAAG1D,KAAK+tZ,WAAW/qZ,KAAKU,GAAE,GAAChC,CAAAA,IAAA7B,YAAAA,MAAAumB,SAAU1iB,IAAG1D,KAAKiuZ,cAAcjrZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,aAAA7B,MAAA,WAAa,OAAOG,KAAKouZ,QAAS,GAAA,CAAA1sZ,IAAA7B,OAAAA,MAAA8lC,WAAQ,GAAA,CAAAjkC,IAAA7B,OAAAA,MAAAsgY,WAAOngY,KAAKyuZ,eAAezuZ,KAAK0uZ,WAAW1uZ,KAAK2uZ,oBAAoB3uZ,KAAKouZ,UAAS,CAAG,GAAA,CAAA1sZ,IAAA7B,mBAAAA,MAAA8uZ,WAAkB,IAAAC,GAAA5uZ,KAACmrT,gBAAe,WAAI,OAAAyjG,GAAKJ,WAAY,GAAA,GAAC9sZ,CAAAA,IAAA7B,WAAAA,MAAA6uZ,WAAW1uZ,KAAKguZ,YAAYrsZ,SAAQ,SAAA+B,IAAG,OAAAA,IAAG,IAAE1D,KAAKguZ,YAAY,EAAG,GAAA,CAAAtsZ,IAAA,QAAA7B,MAAAqnP,WAAS,GAAA,CAAAxlP,IAAA,UAAA7B,MAAA40G,WAAS,GAAE,CAAA/yG,IAAA,SAAA7B,MAAAoqI,WAASjqI,KAAKwuZ,WAAW,GAAC9sZ,CAAAA,IAAA7B,UAAAA,MAAAyhC,WAAUthC,KAAKw7S,aAAax7S,KAAKw7S,YAAW,EAAGx7S,KAAKyuZ,cAAczuZ,KAAK0uZ,WAAW1uZ,KAAKiqI,SAASjqI,KAAKiuZ,cAActsZ,SAAQ,SAAA+B,IAAC,OAAEA,IAAI,IAAC1D,KAAKiuZ,cAAc,MAAIvsZ,CAAAA,IAAA7B,QAAAA,MAAAyzG,WAAQtzG,KAAKouZ,UAAS,EAAGpuZ,KAAKquZ,WAAU,EAAGruZ,KAAKguZ,YAAYhuZ,KAAKmuZ,oBAAoBnuZ,KAAK+tZ,WAAW/tZ,KAAKkuZ,kBAAmB,GAAA,CAAAxsZ,IAAA,cAAA7B,MAAA,SAAY6D,IAAG1D,KAAKggY,UAAUhgY,KAAKuuZ,UAAU7qZ,GAAE1D,KAAKuuZ,UAAU,CAAC,GAAC7sZ,CAAAA,IAAA7B,cAAAA,MAAAugY,WAAc,OAAWpgY,KAACuuZ,UAAUvuZ,KAAKggY,UAAUhgY,KAAKuuZ,UAAU,CAAC,IAAC7sZ,IAAA,kBAAA7B,MAAA,SAAgB6D,IAAG,IAAMyE,GAAE,SAASzE,GAAE1D,KAAKguZ,YAAYhuZ,KAAK+tZ,WAAW5lZ,GAAExG,SAAQ,SAAApD,IAAG,OAAAA,IAAI,IAAC4J,GAAEjI,OAAO,CAAC,IAAQ,CAAvzC,GAAuzC2uZ,GAAE,WAA+e,OAAAviH,cAA9e,SAAAuiH,GAAYnrZ,QAAEorZ,GAAA9uZ,KAAAksS,gBAAAlsS,KAAA6uZ,IAAC7uZ,KAAK+tZ,WAAW,GAAG/tZ,KAAKguZ,YAAY,GAAGhuZ,KAAKquZ,WAAU,EAAGruZ,KAAKouZ,UAAS,EAAGpuZ,KAAKw7S,YAAW,EAAGx7S,KAAKiuZ,cAAc,GAAGjuZ,KAAKsuZ,aAAa,KAAKtuZ,KAAKuuZ,UAAU,EAAEvuZ,KAAK+uZ,QAAQrrZ,GAAE,IAAIyE,GAAE,EAAE5J,GAAE,EAAE8I,GAAE,EAAQxB,GAAE7F,KAAK+uZ,QAAQ7uZ,OAAO,GAAG2F,GAAEslT,gBAAe,WAAI,OAAA2jG,GAAKN,WAAY,IAACxuZ,KAAK+uZ,QAAQptZ,SAAQ,SAAA8J,IAAIA,GAAEujZ,QAAO,aAAO7mZ,IAAGtC,IAAGipZ,GAAKN,WAAY,IAAE/iZ,GAAE2a,WAAU,aAAO7nB,IAAGsH,IAAGipZ,GAAKG,YAAa,IAAExjZ,GAAEyjZ,SAAQ,aAAO7nZ,IAAGxB,IAAGipZ,GAAKJ,UAAU,GAAE,IAAG1uZ,KAAKuuZ,UAAUvuZ,KAAK+uZ,QAAQ5wX,QAAO,SAAC1yB,GAAE7E,IAAC,OAAGxI,KAAK+wB,IAAI1jB,GAAE7E,GAAE2nZ,UAAW,GAAA,EAAG,GAAA,CAAA,CAAA7sZ,IAAA,YAAA7B,MAAA2uZ,WAAYxuZ,KAAKquZ,YAAYruZ,KAAKquZ,WAAU,EAAGruZ,KAAK+tZ,WAAWpsZ,SAAQ,SAAA+B,IAAG,OAAAA,IAAI,IAAC1D,KAAK+tZ,WAAW,GAAG,GAACrsZ,CAAAA,IAAA7B,OAAAA,MAAA8lC,WAAO3lC,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAC,OAAEA,GAAEiiC,MAAO,GAAA,GAACjkC,CAAAA,IAAA7B,UAAAA,MAAAqvZ,SAAQxrZ,IAAG1D,KAAKguZ,YAAYhrZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,WAAA7B,MAAA,WAAWG,KAAKyuZ,eAAezuZ,KAAKouZ,UAAS,EAAGpuZ,KAAKguZ,YAAYrsZ,SAAQ,SAAA+B,IAAC,OAAEA,IAAI,IAAC1D,KAAKguZ,YAAY,GAAG,GAACtsZ,CAAAA,IAAA7B,SAAAA,MAAAmvZ,SAAOtrZ,IAAG1D,KAAK+tZ,WAAW/qZ,KAAKU,GAAE,GAAChC,CAAAA,IAAA7B,YAAAA,MAAAumB,SAAU1iB,IAAG1D,KAAKiuZ,cAAcjrZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,aAAA7B,MAAA,WAAa,OAAOG,KAAKouZ,QAAS,GAAA,CAAA1sZ,IAAA7B,OAAAA,MAAAsgY,WAAOngY,KAAKsuZ,cAActuZ,KAAK2lC,OAAO3lC,KAAK0uZ,WAAW1uZ,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAC,OAAEA,GAAEy8X,MAAM,GAAE,GAAA,CAAAz+X,IAAA,QAAA7B,MAAA,WAAQG,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAG,OAAAA,GAAEwjP,OAAQ,GAAA,GAACxlP,CAAAA,IAAA7B,UAAAA,iBAAUG,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAC,OAAEA,GAAE+wG,SAAS,GAAE,GAAA,CAAA/yG,IAAA,SAAA7B,MAAA,WAASG,KAAKwuZ,YAAYxuZ,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAC,OAAEA,GAAEumI,QAAS,GAAA,IAACvoI,IAAA,UAAA7B,MAAA,WAAUG,KAAKivZ,YAAY,GAACvtZ,CAAAA,IAAA7B,aAAAA,iBAAaG,KAAKw7S,aAAax7S,KAAKw7S,YAAW,EAAGx7S,KAAKwuZ,YAAYxuZ,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAC,OAAEA,GAAE49B,SAAS,IAAEthC,KAAKiuZ,cAActsZ,SAAQ,SAAA+B,IAAC,OAAEA,QAAK1D,KAAKiuZ,cAAc,GAAG,IAACvsZ,IAAA,QAAA7B,MAAA,WAAQG,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAG,OAAAA,GAAE4vG,OAAO,IAAEtzG,KAAKw7S,YAAW,EAAGx7S,KAAKquZ,WAAU,EAAGruZ,KAAKouZ,UAAS,CAAG,GAAA,CAAA1sZ,IAAA,cAAA7B,MAAA,SAAY6D,IAAG,IAAMyE,GAAEzE,GAAE1D,KAAKuuZ,UAAUvuZ,KAAK+uZ,QAAQptZ,SAAQ,SAAApD,IAAI,IAAM8I,GAAE9I,GAAEgwZ,UAAUnwZ,KAAK8wB,IAAI,EAAE/mB,GAAE5J,GAAEgwZ,WAAW,EAAEhwZ,GAAEsrX,YAAYxiX,GAAE,GAAE,GAAC3F,CAAAA,IAAA7B,cAAAA,MAAAugY,WAAc,IAAM18X,GAAE1D,KAAK+uZ,QAAQ5wX,QAAO,SAACh2B,GAAE5J,IAAC,cAAU4J,IAAG5J,GAAEgwZ,UAAUpmZ,GAAEomZ,UAAUhwZ,GAAE4J,EAAC,GAAC,MAAM,OAAO,MAAMzE,GAAEA,GAAE08X,cAAc,CAAE,GAAA,CAAA1+X,IAAA,gBAAA7B,MAAAsvZ,WAAgBnvZ,KAAK+uZ,QAAQptZ,SAAQ,SAAA+B,IAAIA,GAAEyrZ,eAAezrZ,GAAEyrZ,eAAe,GAAE,GAACztZ,CAAAA,IAAA7B,kBAAAA,MAAAuvZ,SAAgB1rZ,IAAG,IAAMyE,GAAE,SAASzE,GAAE1D,KAAKguZ,YAAYhuZ,KAAK+tZ,WAAW5lZ,GAAExG,SAAQ,SAAApD,IAAG,OAAAA,IAAG,IAAE4J,GAAEjI,OAAO,KAAG,CAArzD,GAAqzD,SAAS4G,GAAGf,IAAG,OAAO,IAAIg2O,GAAG,KAAI,EAAG,CAAC,SAASszK,GAAGtpZ,IAAG,OAAOA,GAAE7F,QAAQ,KAAK,EAAE,OAAO,IAAI4tZ,GAAG,OAAO,OAAO/nZ,GAAE,GAAG,QAAQ,OAAO,IAAI8oZ,GAAG9oZ,IAAG,CAAC,SAASupZ,GAAGvpZ,GAAErC,IAAE,IAAAyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,IAAI+M,IAAIxZ,GAACyM,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,IAAI+M,IAAW1Q,GAAE,GAAGxB,GAAE,GAAO4F,IAAG,EAAE7E,GAAE,KAAK,GAAGlD,GAAE/B,SAAQ,SAAA8B,IAAI,IAAMgD,GAAEhD,GAAE9D,IAAI,UAAU6L,GAAE/E,IAAGgF,GAAEE,GAAEH,IAAG5E,IAAG,IAAImR,IAAItU,GAAE9B,SAAQ,SAACkK,GAAEnE,IAAK,IAAIgE,GAAEhE,GAAEwH,GAAErD,GAAE,GAAG,WAAWnE,GAAE,OAAOgE,GAAE3F,GAAEwpZ,sBAAsB7jZ,GAAErE,IAAG6H,IAAG,IAAI,IAAIA,GAAE/G,GAAExI,IAAI+H,IAAG,MAAM,KAAKkmZ,GAAG1+Y,GAAE3Q,GAAEoB,IAAI+H,IAAG,MAAM,QAAQwH,GAAEnJ,GAAEypZ,oBAAoB9nZ,GAAEgE,GAAEwD,GAAE7H,IAAGsE,GAAE/L,IAAI8L,GAAEwD,GAAE,IAAG1D,IAAG3F,GAAE7C,KAAK2I,IAAG/E,GAAE+E,GAAEF,GAAEhF,EAAC,IAAGY,GAAEnH,OAAO,MAA2B,IAAI67O,GAAG,MAAK,GAAO,OAAOl2O,EAAE,CAAA,SAAS4pZ,GAAG1pZ,GAAErC,GAAEyE,GAAE5J,IAAG,OAAOmF,IAAG,IAAI,QAAQqC,GAAEmpZ,SAAQ,WAAA,OAAI3wZ,GAAE4J,IAAGunZ,GAAGvnZ,GAAE,QAAQpC,QAAK,MAAM,IAAI,OAAOA,GAAEipZ,QAAO,WAAI,OAAAzwZ,GAAE4J,IAAGunZ,GAAGvnZ,GAAE,OAAOpC,IAAI,IAAC,MAAM,IAAI,UAAUA,GAAEqgB,WAAU,kBAAI7nB,GAAE4J,IAAGunZ,GAAGvnZ,GAAE,UAAUpC,IAAG,IAAE,CAAC,SAAS2pZ,GAAG3pZ,GAAErC,GAAEyE,IAAE,IAAAwnZ,GAAO9pZ,GAAE+pZ,GAAG7pZ,GAAE1F,QAAQ0F,GAAE8pZ,YAAY9pZ,GAAE+pZ,UAAU/pZ,GAAEgqZ,QAAQrsZ,IAAGqC,GAAEiqZ,UAAqB,QAAZL,GAACxnZ,GAAEomZ,iBAAS,IAAAoB,GAAAA,GAAE5pZ,GAAEwoZ,YAAYpmZ,GAAEixB,UAAU3tB,GAAE1F,GAAEkqZ,MAAM,aAAaxkZ,KAAI5F,GAAEoqZ,MAAMxkZ,IAAG5F,EAAC,CAAC,SAAS+pZ,GAAG7pZ,GAAErC,GAAEyE,GAAE5J,IAAc,MAAM,CAAC8B,QAAQ0F,GAAE8pZ,YAAYnsZ,GAAEosZ,UAAU3nZ,GAAE4nZ,QAAQxxZ,GAAEyxZ,UAAhEhlZ,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,GAA2EujZ,UAAvEvjZ,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,EAAkFouB,YAA/EpuB,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,GAA4F,CAAC,SAASgyZ,GAAGnqZ,GAAErC,GAAEyE,IAAG,IAAI5J,GAAEwH,GAAEpG,IAAI+D,IAAG,OAAOnF,IAAGwH,GAAEnG,IAAI8D,GAAEnF,GAAE4J,IAAG5J,EAAC,CAAC,SAAS4xZ,GAAGpqZ,IAAG,IAAMrC,GAAEqC,GAAEoD,QAAQ,KAAK,MAAM,CAACpD,GAAEwE,UAAU,EAAE7G,IAAGqC,GAAEE,MAAMvC,GAAE,GAAI,CAAA,IAAM0sZ,IAAkB3qI,oBAARp1Q,SAAQo1Q,YAAAA,QAARp1Q,WAAS,IAAI,KAAKA,SAASqkC,gBAAgB,SAAS27W,GAAGtqZ,IAAG,IAAMrC,GAAEqC,GAAEgG,YAAYhG,GAAEskJ,MAAM,KAAK,OAAO3mJ,KAAI0sZ,GAAG,KAAK1sZ,EAAC,CAAC,IAAI4sZ,GAAG,KAAKC,IAAG,EAAG,SAASC,GAAGzqZ,GAAErC,IAAG,KAAKA,IAAG,CAAC,GAAGA,KAAIqC,GAAE,OAAM,EAAGrC,GAAE2sZ,GAAG3sZ,GAAE,CAAC,OAAM,CAAG,CAAA,SAAS+sZ,GAAG1qZ,GAAErC,GAAEyE,IAAG,GAAGA,GAAE,OAAOkB,MAAM4xB,KAAKl1B,GAAEm3B,iBAAiBx5B,KAAI,IAAMnF,GAAEwH,GAAE43B,cAAcj6B,IAAG,OAAOnF,GAAE,CAACA,IAAG,EAAE,CAAC,IAAImyZ,GAAI,SAAAC,IAAI,IAAO5qZ,GAAC,WAAA,OAAAumS,cAAA,SAAAvmS,IAAAmmS,gBAAAlsS,KAAA+F,EAAA,GAAArE,CAAAA,CAAAA,IAAA7B,wBAAAA,MAAC,SAAsBsI,IAAG,OAAgB,SAAGpC,IAAGuqZ,KAAKA,KAAuC7qI,oBAARp1Q,SAAQo1Q,YAAAA,QAARp1Q,WAAS,IAAIA,SAAS6mB,KAAK,OAAS,CAAE,EAACq5X,KAAKD,GAAG7hZ,OAAO,qBAAqB6hZ,GAAG7hZ,OAAO,IAAI/K,IAAE,EAAG,OAAO4sZ,GAAG7hZ,QAAQ,SAAY1I,IAAG,MAAM,SAASA,GAAEwE,UAAU,EAAE,EAAG,CAA/C,CAAgDxE,QAAKrC,GAAEqC,MAAKuqZ,GAAG7hZ,QAAU8hZ,KAAK7sZ,GAAE,SAASqC,GAAEC,OAAO,GAAGy5D,cAAc15D,GAAEE,MAAM,KAAKqqZ,GAAG7hZ,QAAQ/K,EAAE,CAAvS,CAAwSyE,GAAG,GAAA,CAAAzG,IAAA,kBAAA7B,MAAA,SAAgBsI,GAAE5J,IAAG,OAAOiyZ,GAAGroZ,GAAE5J,GAAE,GAACmD,CAAAA,IAAA7B,mBAAAA,MAAA+wZ,SAAiBzoZ,IAAG,OAAOkoZ,GAAGloZ,GAAG,GAAA,CAAAzG,IAAA,QAAA7B,MAAA,SAAMsI,GAAE5J,GAAE8I,IAAG,OAAOopZ,GAAGtoZ,GAAE5J,GAAE8I,GAAG,GAAA,CAAA3F,IAAA7B,eAAAA,MAAAgxZ,SAAa1oZ,GAAE5J,GAAE8I,IAAG,OAAOA,IAAG,KAAG3F,CAAAA,IAAA7B,UAAAA,MAAA2jB,SAAQrb,GAAE5J,GAAE8I,GAAExB,GAAE4F,IAAU,OAAW,IAAAqiZ,GAAGzmZ,GAAExB,OAAG8qZ,CAAtgB,GAAonB,OAA9GA,GAAvgB5qZ,IAAmhBgtS,KAAU,SAASx0S,IAAG,OAAWA,IAAAA,IAAGwH,GAAG,EAAQ4qZ,GAAK5+G,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,OAAoBhtS,EAAC,CAAxoB,GAAmpB+qZ,GAAExkH,cAAA,SAAAwkH,KAAA5kH,gBAAAlsS,KAAA8wZ,GAAA,IAAFA,GAAen/L,KAAK,IAAI++L,GAAE,IAAQK,GAAEzkH,cAAAykH,SAAAA,KAAA7kH,gBAAA6kH,KAAAA,GAAE,IAAMC,GAAG,IAAIC,GAAG,WAAWC,GAAG,WAAWC,GAAG,aAAaC,GAAG,cAAcC,GAAG,eAAeC,GAAG,gBAAgB,SAASthU,GAAGjqF,IAAG,GAAG,iBAAiBA,GAAE,OAAOA,GAAE,IAAMrC,GAAEqC,GAAElD,MAAM,qBAAqB,OAAOa,IAAGA,GAAExD,OAAO,EAAE,EAAEqxZ,GAAGpmY,WAAWznB,GAAE,IAAIA,GAAE,GAAI,CAAA,SAAS6tZ,GAAGxrZ,GAAErC,IAAG,MAAM,MAAMA,GAAEqC,GAAEirZ,GAAGjrZ,EAAE,CAAA,SAASyrZ,GAAGzrZ,GAAErC,GAAEyE,IAAG,OAAOpC,GAAEvG,eAAe,YAAYuG,GAAE,SAAYA,GAAErC,GAAEyE,IAAG,IAAId,GAAExB,GAAE,EAAE4F,GAAE,GAAG,GAAG,iBAAiB1F,GAAE,CAAC,IAAMa,GAAEb,GAAElD,MAAM,4EAA4E,GAAG,OAAO+D,GAAE,OAAOlD,GAAEV,KAAK8D,MAAM,CAAC0oB,SAAS,EAAEktC,MAAM,EAAE6iU,OAAO,IAAIl4X,GAAEkqZ,GAAGpmY,WAAWvkB,GAAE,IAAIA,GAAE,IAAI,IAAMnD,GAAEmD,GAAE,GAAG,MAAMnD,KAAIoC,GAAE0rZ,GAAGpmY,WAAW1nB,IAAGmD,GAAE,KAAK,IAAMH,GAAEG,GAAE,GAAGH,KAAIgF,GAAEhF,GAAG,MAAKY,GAAEtB,GAAE,IAAIoC,GAAE,CAAC,IAAIvB,IAAE,EAAGnD,GAAEC,GAAExD,OAAOmH,GAAE,IAAI3D,GAAEV,KAA0B,IAAI+4O,GAAG,MAAK,IAAQn1O,IAAE,GAAIf,GAAE,IAAInC,GAAEV,KAA0B,IAAI+4O,GAAG,MAAK,IAAQn1O,IAAE,GAAIA,IAAGlD,GAAE+N,OAAOhO,GAAE,EAAEqD,KAAK,CAAC,MAAM,CAAC0oB,SAASnoB,GAAEq1D,MAAM72D,GAAE05X,OAAO9zX,GAAE,CAA5gB,CAA8gB1F,GAAErC,GAAEyE,GAAG,CAAA,SAASspZ,GAAG1rZ,GAAErC,GAAEyE,IAAGzE,GAAE/B,SAAQ,SAACpD,GAAE8I,IAAK,IAAMxB,GAAE6rZ,GAAGrqZ,IAAGc,KAAIA,GAAE3G,IAAI6F,KAAIc,GAAEvI,IAAIyH,GAAEtB,GAAE0I,MAAM5I,KAAIE,GAAE0I,MAAM5I,IAAGtH,EAAE,GAAE,CAAA,SAASozZ,GAAG5rZ,GAAErC,IAAGA,GAAE/B,SAAQ,SAACwG,GAAE5J,IAAK,IAAM8I,GAAEqqZ,GAAGnzZ,IAAGwH,GAAE0I,MAAMpH,IAAG,EAAG,GAAE,CAAA,SAASuqZ,GAAG7rZ,IAAG,OAAOsD,MAAMnI,QAAQ6E,IAAG,GAAGA,GAAE7F,OAAO6F,GAAE,GAAG,SAAYA,IAAS,IAAPrC,GAACsH,UAAA9K,eAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,KAAM,MAAM,CAACoB,KAAK2gZ,GAAGG,SAAS2E,MAAM9rZ,GAAE2mB,QAAQhpB,GAAE,CAAhE,CAAkEqC,IAAGA,EAAE,CAAA,IAAM+rZ,GAAG,IAAIh7Y,OAAO,oBAAoB,KAAK,SAASi7Y,GAAGhsZ,IAAG,IAAIrC,GAAE,GAAG,GAAG,iBAAiBqC,GAAE,CAAO,IAAN,IAAIoC,GAAOA,GAAE2pZ,GAAG77Y,KAAKlQ,KAAIrC,GAAEV,KAAKmF,GAAE,IAAI2pZ,GAAG1vW,UAAU,CAAC,CAAC,OAAO1+C,EAAC,CAAC,SAASsuZ,GAAGjsZ,GAAErC,GAAEyE,IAAG,IAAM5J,GAAC,GAAA89B,OAAIt2B,IAAIsB,GAAE9I,GAAE8L,QAAQynZ,IAAG,SAACjsZ,GAAE4F,IAAK,IAAI7E,GAAElD,GAAE+H,IAAG,OAAW,MAAE7E,KAAIuB,GAAEnF,KAA8B,IAAA+4O,GAAG,MAAK,IAAQn1O,GAAE,IAAIA,GAAE/H,UAAW,IAAE,OAAOwI,IAAG9I,GAAEwH,GAAEsB,EAAC,CAAC,IAAM4qZ,GAAG,gBAAgB,SAASP,GAAG3rZ,IAAG,OAAOA,GAAEsE,QAAQ4nZ,IAAG,WAAA,IAAA,IAAAC,GAAAlnZ,UAAA9K,OAAIwD,GAAC,IAAA2F,MAAA6oZ,IAAAC,GAAAA,EAAAA,GAAAD,GAAAC,KAADzuZ,GAACyuZ,IAAAnnZ,UAAAmnZ,IAAA,OAAGzuZ,GAAE,GAAG+7D,aAAa,GAAE,CAAA,SAAS2yV,GAAGrsZ,GAAErC,GAAEyE,IAAG,OAAOzE,GAAE0I,MAAM,KAAK2gZ,GAAGO,QAAQ,OAAOvnZ,GAAEssZ,aAAa3uZ,GAAEyE,IAAG,KAAK4kZ,GAAGC,MAAM,OAAOjnZ,GAAEusZ,WAAW5uZ,GAAEyE,IAAG,KAAK4kZ,GAAGE,WAAW,OAAOlnZ,GAAEwsZ,gBAAgB7uZ,GAAEyE,IAAG,KAAK4kZ,GAAGG,SAAS,OAAOnnZ,GAAEysZ,cAAc9uZ,GAAEyE,IAAG,KAAK4kZ,GAAGl3L,MAAM,OAAO9vN,GAAE0sZ,WAAW/uZ,GAAEyE,IAAG,KAAK4kZ,GAAGI,QAAQ,OAAOpnZ,GAAE2sZ,aAAahvZ,GAAEyE,IAAG,KAAK4kZ,GAAGK,UAAU,OAAOrnZ,GAAE4sZ,eAAejvZ,GAAEyE,IAAG,KAAK4kZ,GAAGM,MAAM,OAAOtnZ,GAAE6sZ,WAAWlvZ,GAAEyE,IAAG,KAAK4kZ,GAAGQ,UAAU,OAAOxnZ,GAAE8sZ,eAAenvZ,GAAEyE,IAAG,KAAK4kZ,GAAGS,aAAa,OAAOznZ,GAAE+sZ,kBAAkBpvZ,GAAEyE,IAAG,KAAK4kZ,GAAGU,WAAW,OAAO1nZ,GAAEgtZ,gBAAgBrvZ,GAAEyE,IAAG,KAAK4kZ,GAAGW,MAAM,OAAO3nZ,GAAEitZ,WAAWtvZ,GAAEyE,IAAG,KAAK4kZ,GAAGY,QAAQ,OAAO5nZ,GAAEktZ,aAAavvZ,GAAEyE,IAAG,QAAQ,MAA2B,IAAI4zO,GAAG,MAAK,GAAO,CAAC,SAASm3K,GAAGntZ,GAAErC,IAAG,OAAO6H,OAAOy9I,iBAAiBjjJ,IAAGrC,GAAE,CAAC,IAAMyvZ,GAAG,IAAIvyY,IAAI,CAAC,QAAQ,SAAS,WAAW,YAAY,WAAW,YAAY,OAAO,MAAM,SAAS,QAAQ,WAAW,eAAe,gBAAgB,aAAa,cAAc,gBAAgB,eAAe,YAAY,aAAa,eAAe,cAAc,eAAe,cAAc,iBAAiB,kBAAkB,mBAAmB,oBAAoB,aAAa,gBAAsBwyY,GAAE,SAAAC,IAAA,SAAAD,KAAA3lH,OAAAvB,gBAAAlsS,KAAAozZ,IAAA3lH,WAAA2lH,KAAAA,GAAApoZ,UAAA6iS,CAAA,OAAAA,UAAAulH,GAAAC,IAAA/mH,aAAA8mH,GAAA,CAAA,CAAA1xZ,IAAA,wBAAA7B,MAAY,SAAsB6D,GAAEyE,IAAG,OAAOupZ,GAAGhuZ,GAAG,GAAA,CAAAhC,IAAA,sBAAA7B,MAAA,SAAoB6D,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAIxB,GAAE,GAAS4F,GAAElN,GAAEM,WAAWqvB,OAAO,GAAGilY,GAAG3xZ,IAAI2G,KAAI,IAAI5J,IAAG,MAAMA,GAAE,GAAG,iBAAiBA,GAAEsH,GAAE,SAAS,CAAC,IAAMe,GAAErI,GAAEsE,MAAM,0BAA0B+D,IAAG,GAAGA,GAAE,GAAG1G,QAAQmH,GAAErE,KAA8B,IAAA+4O,GAAG,MAAK,GAAQ,CAAA,OAAOtwO,GAAE5F,EAAC,IAAnSkrZ,CAAT,CAASA,IAA2SuC,GAAG,IAAUC,GAAG,IAAI3yY,IAAI,CAAC,OAAO,MAAM4yY,GAAG,IAAI5yY,IAAI,CAAC,QAAQ,MAAM,SAAS6yY,GAAG1tZ,GAAErC,IAAG,IAAMyE,GAAEorZ,GAAG/xZ,IAAIuE,KAAIytZ,GAAGhyZ,IAAIuE,IAAGxH,GAAEg1Z,GAAG/xZ,IAAIkC,KAAI8vZ,GAAGhyZ,IAAIkC,IAAG,gBAAO2D,GAAExB,IAAK,IAAI4F,GAAE1F,IAAGutZ,IAAIvtZ,IAAGsB,GAAET,GAAElD,IAAG4vZ,IAAI5vZ,IAAGmC,GAAE,OAAO4F,IAAGtD,IAAG,kBAAkBd,KAAIoE,GAAEpE,GAAEksZ,GAAG/xZ,IAAIuE,IAAGytZ,GAAGhyZ,IAAIuE,MAAKa,IAAGrI,IAAG,kBAAkBsH,KAAIe,GAAEf,GAAE0tZ,GAAG/xZ,IAAIkC,IAAG8vZ,GAAGhyZ,IAAIkC,KAAI+H,IAAG7E,EAAE,CAAA,CAAC,IAAM8sZ,GAAG,IAAI58Y,OAAO,cAAc,KAAK,SAAS68Y,GAAG5tZ,GAAErC,GAAEyE,GAAE5J,IAAG,OAAO,IAAIq1Z,GAAG7tZ,IAAGk/B,MAAMvhC,GAAEyE,GAAE5J,GAAE,CAAC,IAAMq1Z,GAAG,WAA8B,OAAAtnH,cAA9B,SAAAsnH,GAAYlwZ,IAAEwoS,gBAAAlsS,KAAA4zZ,IAAC5zZ,KAAK6zZ,QAAQnwZ,EAAE,GAAAhC,CAAAA,CAAAA,IAAA7B,QAAAA,MAAAolC,SAAMvhC,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAE,IAAIysZ,GAAG3rZ,IAAG,OAAOnI,KAAK+zZ,8BAA8B1sZ,IAAG+qZ,GAAGpyZ,KAAK4xZ,GAAGluZ,IAAG2D,GAAG,GAAA,CAAA3F,IAAA,gCAAA7B,MAAA,SAA8B6D,IAAGA,GAAEswZ,qBAAqB,GAAGtwZ,GAAEuwZ,gBAAgB,IAAIl8Y,IAAIrU,GAAEuwZ,gBAAgBr0Z,IAAI,GAAG,IAAImY,KAAKrU,GAAEywB,YAAY,CAAC,GAACzyB,CAAAA,mBAAA7B,MAAA,SAAa6D,GAAEyE,IAAE,IAAA+rZ,GAACl0Z,KAAIzB,GAAE4J,GAAEgsZ,WAAW,EAAE9sZ,GAAEc,GAAEisZ,SAAS,EAAQvuZ,GAAE,GAAG4F,GAAE,GAAG,MAAM,KAAK/H,GAAEkN,KAAK5K,OAAO,IAAImC,GAAE44M,OAAO/9M,KAA8B,IAAA+4O,GAAG,MAAK,IAAQr4O,GAAE2wZ,YAAY1yZ,SAAQ,SAAAiF,IAAI,GAAGstZ,GAAKH,8BAA8B5rZ,IAAGvB,GAAEwF,MAAM2gZ,GAAGC,MAAM,CAAC,IAAMvpZ,GAAEmD,GAAEH,GAAEhD,GAAEmN,KAAKnK,GAAE5H,WAAW4uB,MAAM,WAAW9rB,SAAQ,SAAA6J,IAAI/H,GAAEmN,KAAKpF,GAAE3F,GAAE7C,KAAKkxZ,GAAK5B,WAAW7uZ,GAAE0E,IAAI,IAAE1E,GAAEmN,KAAKnK,EAAE,MAAQG,GAAAA,GAAEwF,MAAM2gZ,GAAGE,WAAW,CAAC,IAAMxpZ,GAAEywZ,GAAK3B,gBAAgB3rZ,GAAEuB,IAAG5J,IAAGkF,GAAE0wZ,WAAW9sZ,IAAG5D,GAAE2wZ,SAAS3oZ,GAAEzI,KAAKS,GAAE,MAAM0E,GAAE44M,OAAO/9M,KAA0B,IAAI+4O,GAAG,MAAK,GAAQ,IAAE,CAAC3vO,KAAK2gZ,GAAGO,QAAQ18Y,KAAKlN,GAAEkN,KAAK4rG,OAAO32G,GAAEyuZ,YAAY7oZ,GAAE0oZ,WAAW51Z,GAAE61Z,SAAS/sZ,GAAEqlB,QAAQ,QAAMhrB,CAAAA,IAAA7B,aAAAA,MAAAyyZ,SAAW5uZ,GAAEyE,IAAG,IAAM5J,GAAEyB,KAAK4yZ,WAAWlvZ,GAAE2gM,OAAOl8L,IAAGd,GAAE3D,GAAEgpB,SAAShpB,GAAEgpB,QAAQugG,QAAQ,KAAK,GAAG1uH,GAAEg2Z,sBAAsB,CAAC,IAAM1uZ,GAAE,IAAI+a,IAAInV,GAAEpE,IAAG,CAAE,EAAC9I,GAAE8lM,OAAO1iM,SAAQ,SAAAiF,IAAIA,cAAamR,KAAKnR,GAAEjF,SAAQ,SAAA8B,IAAIsuZ,GAAGtuZ,IAAG9B,SAAQ,SAAA8E,IAAIgF,GAAEjM,eAAeiH,KAAIZ,GAAEgD,IAAIpC,GAAE,GAAE,GAAE,IAAGZ,GAAEiN,MAAM3K,GAAE44M,OAAO/9M,MAA6C6C,GAAE4T,SAAjB,IAAAsiO,GAAG,MAAK,IAAoB,CAAA,MAAM,CAAC3vO,KAAK2gZ,GAAGC,MAAMp8Y,KAAKlN,GAAEkN,KAAKnC,MAAMlQ,GAAEmuB,QAAQrlB,GAAE,CAAC4lH,OAAO5lH,IAAG,KAAM,GAAA,CAAA3F,IAAA,kBAAA7B,MAAA,SAAgB6D,GAAEyE,IAAGA,GAAEgsZ,WAAW,EAAEhsZ,GAAEisZ,SAAS,EAAE,IAAM71Z,GAAE6zZ,GAAGpyZ,KAAK4xZ,GAAGluZ,GAAEy/J,WAAWh7J,IAAGd,GAAE,SAAYtB,GAAErC,IAAG,IAAMyE,GAAE,GAAG,MAAM,iBAAiBpC,GAAEA,GAAE0nB,MAAM,WAAW9rB,SAAQ,SAAApD,IAAC,OAAW,SAAGwH,GAAErC,GAAEyE,IAAG,GAAG,KAAKpC,GAAE,GAAG,CAAC,IAAMtC,GAAE,SAAYsC,GAAErC,IAAG,OAAOqC,IAAG,IAAI,SAAS,MAAM,YAAY,IAAI,SAAS,MAAM,YAAY,IAAI,aAAa,OAAOoC,SAAAA,GAAE5J,IAAI,OAAA4sB,WAAW5sB,IAAG4sB,WAAWhjB,KAAG,IAAI,aAAa,OAAOA,SAAAA,GAAE5J,IAAI,OAAA4sB,WAAW5sB,IAAG4sB,WAAWhjB,GAAG,EAAA,QAAQ,OAAOzE,GAAEV,SAA8B+4O,GAAG,MAAK,IAAQ,SAAS,CAArR,CAAuRh2O,GAAEoC,IAAG,GAAG,mBAAmB1E,GAAE,YAAYC,GAAEV,KAAKS,IAAGsC,GAAEtC,EAAE,CAAA,IAAMlF,GAAEwH,GAAElD,MAAM,2CAA2C,GAAG,MAAMtE,IAAGA,GAAE2B,OAAO,EAAE,OAAOiI,GAAEnF,KAA0B,IAAI+4O,GAAG,MAAK,IAAQr4O,GAAE,IAAM2D,GAAE9I,GAAE,GAAGsH,GAAEtH,GAAE,GAAGkN,GAAElN,GAAE,GAAGmF,GAAEV,KAAKywZ,GAAGpsZ,GAAEoE,KAAI,KAAK5F,GAAE,KAAKwB,IAAGisZ,IAAI7nZ,IAAG6nZ,KAAK5vZ,GAAEV,KAAKywZ,GAAGhoZ,GAAEpE,IAAI,CAA/kB,CAAglB9I,GAAE4J,GAAEzE,GAAG,IAACyE,GAAEnF,KAAK+C,IAAGoC,EAAC,CAA/rB,CAAisBzE,GAAEoyC,KAAK3tC,GAAE44M,QAAQ,MAAM,CAAC30M,KAAK2gZ,GAAGE,WAAWz1I,SAASnwQ,GAAE87J,UAAU5kK,GAAE41Z,WAAWhsZ,GAAEgsZ,WAAWC,SAASjsZ,GAAEisZ,SAAS1nY,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA7B,gBAAAA,MAAA2yZ,SAAc9uZ,GAAEyE,QAAEssZ,GAAAz0Z,KAAC,MAAM,CAACoM,KAAK2gZ,GAAGG,SAAS2E,MAAMnuZ,GAAEmuZ,MAAM9uZ,KAAI,SAAAxE,IAAC,OAAE6zZ,GAAGqC,GAAKl2Z,GAAE4J,GAAG,IAACukB,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA7B,aAAAA,MAAA4yZ,SAAW/uZ,GAAEyE,IAAEusZ,IAAAA,GAAC10Z,KAAMzB,GAAE4J,GAAEgsB,YAAgB9sB,GAAE,EAAQxB,GAAEnC,GAAEmuZ,MAAM9uZ,KAAI,SAAA0I,IAAItD,GAAEgsB,YAAY51B,GAAE,IAAMqI,GAAEwrZ,GAAGsC,GAAKjpZ,GAAEtD,IAAG,OAAOd,GAAEjJ,KAAK+wB,IAAI9nB,GAAEc,GAAEgsB,aAAavtB,EAAC,IAAG,OAAOuB,GAAEgsB,YAAY9sB,GAAE,CAAC+E,KAAK2gZ,GAAGl3L,MAAMg8L,MAAMhsZ,GAAE6mB,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAS,GAAChrB,CAAAA,IAAA7B,eAAAA,MAAA6yZ,SAAahvZ,GAAEyE,IAAG,IAAM5J,GAAE,SAAYwH,GAAErC,IAAG,GAAGqC,GAAEvG,eAAe,YAAY,OAAOuG,GAAE,GAAG,iBAAiBA,GAAE,OAAO4uZ,GAAGnD,GAAGzrZ,GAAErC,IAAG8rB,SAAS,EAAE,IAAI,IAAMrnB,GAAEpC,GAAE,GAAGoC,GAAEslB,MAAM,OAAO7qB,MAAK,SAAAiD,IAAG,MAAA,KAAKA,GAAEG,OAAO,IAAI,KAAKH,GAAEG,OAAO,EAAG,IAAC,CAAC,IAAMH,GAAE8uZ,GAAG,EAAE,EAAE,IAAI,OAAO9uZ,GAAEo6H,SAAQ,EAAGp6H,GAAE+uZ,SAASzsZ,GAAEtC,EAAC,CAAC,IAAMwB,GAAEmqZ,GAAGrpZ,GAAEzE,IAAG,OAAOixZ,GAAGttZ,GAAEmoB,SAASnoB,GAAEq1D,MAAMr1D,GAAEk4X,OAAO,CAAtS,CAAwS77X,GAAEmxZ,QAAQ1sZ,GAAE44M,QAAQ54M,GAAE2sZ,sBAAsBv2Z,GAAE,IAAI8I,GAAExB,GAAEnC,GAAE2gM,OAAO3gM,GAAE2gM,OAAOwpN,GAAG,CAAA,GAAI,GAAGhoZ,GAAEuG,MAAM2gZ,GAAGK,UAAU/lZ,GAAErH,KAAK2yZ,eAAe9sZ,GAAEsC,QAAO,CAAC,IAAIsD,GAAE/H,GAAE2gM,OAAOz9L,IAAE,EAAG,IAAI6E,GAAE,CAAC7E,IAAE,EAAG,IAAMH,GAAE,GAAGlI,GAAEghY,SAAS94X,GAAE84X,OAAOhhY,GAAEghY,QAAQ9zX,GAAEoiZ,GAAGpnZ,GAAE,CAAC0B,GAAEgsB,aAAa51B,GAAEixB,SAASjxB,GAAEm+D,MAAM,IAAMj5D,GAAEzD,KAAK4yZ,WAAWnnZ,GAAEtD,IAAG1E,GAAEsxZ,YAAYnuZ,GAAES,GAAE5D,EAAC,CAAC,OAAO0E,GAAE2sZ,sBAAsB,KAAK,CAAC1oZ,KAAK2gZ,GAAGI,QAAQ0H,QAAQt2Z,GAAEkQ,MAAMpH,GAAEqlB,QAAQ,KAAM,GAAA,CAAAhrB,IAAA,aAAA7B,MAAA,SAAW6D,GAAEyE,IAAG,IAAM5J,GAAEyB,KAAKg1Z,cAActxZ,GAAEyE,IAAG,OAAOnI,KAAKi1Z,kBAAkB12Z,GAAE4J,IAAG5J,EAAE,GAAA,CAAAmD,IAAA,gBAAA7B,MAAA,SAAc6D,GAAEyE,IAAG,IAAuE+sZ,GAAjE32Z,GAAE,GAAiD42Z,GAAA/pH,2BAA5C/hS,MAAMnI,QAAQwC,GAAE2gM,QAAQ3gM,GAAE2gM,OAAO,CAAC3gM,GAAE2gM,SAAsB,IAAd,IAAA8wN,GAAAtvZ,MAAAqvZ,GAAAC,GAAApvZ,KAAAy3D,MAAe,CAAP,IAAA52D,GAACsuZ,GAAAr1Z,MAAM,iBAAiB+G,GAAEA,KAAIgnZ,GAAGrvZ,GAAEyE,KAAK4D,IAAGuB,GAAE44M,OAAO/9M,KAAK,IAAI+4O,GAAG,MAAK,IAAKx9O,GAAEyE,KAAK,IAAI+U,IAAIxY,OAAO2U,QAAQtN,MAAK,CAAA6d,MAAAA,IAAA0wY,GAAAzxZ,EAAA+gB,GAAA0wY,CAAAA,QAAAA,GAAAzpZ,GAAI,CAAA,IAAA7F,IAAE,EAAG4F,GAAE,KAAK,OAAOlN,GAAEoD,SAAQ,SAAAiF,IAAI,GAAGA,cAAamR,MAAMnR,GAAEpF,IAAI,YAAYiK,GAAE7E,GAAEjH,IAAI,UAAUiH,GAAQ,OAAC,YAAYf,IAAEuvZ,CAAAA,IAAwBC,GAAxBD,GAAAhqH,2BAAcxkS,GAAE6S,UAAQ,IAAvB,IAAA27Y,GAAAvvZ,MAAAwvZ,GAAAD,GAAArvZ,KAAAy3D,MAAwB,CAAA,GAAf63V,GAAAx1Z,MAAoBhB,WAAWsK,QAAQ,OAAO,EAAE,CAACtD,IAAE,EAAG,KAAK,CAAA,CAAC,OAAA4e,IAAA2wY,GAAA1xZ,EAAA+gB,GAAA,CAAA,QAAA2wY,GAAA1pZ,GAAA,CAAA,CAAA,IAAG,CAACU,KAAK2gZ,GAAGM,MAAMhpN,OAAO9lM,GAAEghY,OAAO9zX,GAAEsQ,OAAOrY,GAAEqY,OAAOw4Y,sBAAsB1uZ,GAAE6mB,QAAQ,KAAM,GAAA,CAAAhrB,IAAA,oBAAA7B,MAAA,SAAkB6D,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAE2sZ,sBAA0BztZ,GAAEc,GAAEgsB,YAAYtuB,GAAEsC,GAAEgsB,YAAY51B,IAAGsH,GAAE,IAAIA,IAAGtH,GAAEixB,SAASjxB,GAAEm+D,OAAOh5D,GAAE2gM,OAAO1iM,SAAQ,SAAA8J,IAAI,iBAAiBA,IAAGA,GAAE9J,SAAQ,SAACiF,GAAEnD,IAAK,IAAMgD,GAAE0B,GAAE8rZ,gBAAgBt0Z,IAAIwI,GAAE6rZ,sBAAsBxoZ,GAAE/E,GAAE9G,IAAI8D,IAAOkI,IAAE,EAAGH,KAAI3F,IAAGwB,IAAGxB,IAAG2F,GAAE8pZ,WAAWjuZ,IAAGmE,GAAE6yK,UAAUl2K,GAAE44M,OAAO/9M,KAA8B,IAAA+4O,GAAG,MAAK,IAAQpwO,IAAE,GAAI9F,GAAE2F,GAAE8pZ,WAAW3pZ,IAAGlF,GAAE7G,IAAI6D,GAAE,CAAC6xZ,UAAUzvZ,GAAEw4K,QAAQh3K,KAAIc,GAAEukB,SAAS,SAAY3mB,GAAErC,GAAEyE,IAAG,IAAM5J,GAAEmF,GAAEupH,QAAQ,CAAA,EAAG5lH,GAAE0qZ,GAAGhsZ,IAAGsB,GAAEnH,QAAQmH,GAAE1F,SAAQ,SAAAkE,IAAItH,GAAEiB,eAAeqG,KAAIsC,GAAEnF,KAA0B,IAAI+4O,GAAG,MAAK,GAAO,GAAE,CAA9I,CAAgJn1O,GAAEuB,GAAEukB,QAAQvkB,GAAE44M,OAAQ,MAAG,GAACr/M,CAAAA,IAAA7B,iBAAAA,MAAA8yZ,SAAejvZ,GAAEyE,IAAE,IAAAotZ,GAAAv1Z,KAAOzB,GAAE,CAAC6N,KAAK2gZ,GAAGK,UAAU/oN,OAAO,GAAG33K,QAAQ,MAAM,IAAIvkB,GAAE2sZ,sBAAsB,OAAO3sZ,GAAE44M,OAAO/9M,KAA8B,IAAA+4O,GAAG,MAAK,IAAQx9O,GAAE,IAAIsH,GAAE,EAAQ4F,GAAE,GAAO7E,IAAE,EAAGnD,IAAE,EAAGgD,GAAE,EAAQ+E,GAAE9H,GAAEmuZ,MAAM9uZ,KAAI,SAAAoK,IAAI,IAAMU,GAAE0nZ,GAAKP,cAAc7nZ,GAAEhF,IAAOqG,GAAE,MAAMX,GAAEkO,OAAOlO,GAAEkO,OAAO,SAAYhW,IAAG,GAAG,iBAAiBA,GAAE,OAAW,KAAC,IAAIrC,GAAE,KAAK,GAAG2F,MAAMnI,QAAQ6E,IAAGA,GAAEpE,SAAQ,SAAAwG,IAAI,GAAGA,cAAa4P,KAAK5P,GAAE3G,IAAI,UAAU,CAAC,IAAMjD,GAAE4J,GAAEzE,GAAEynB,WAAW5sB,GAAEoB,IAAI,WAAWpB,GAAQ,OAAC,UAAU,SAAWwH,GAAAA,cAAagS,KAAKhS,GAAEvE,IAAI,UAAU,CAAC,IAAM2G,GAAEpC,GAAErC,GAAEynB,WAAWhjB,GAAExI,IAAI,WAAWwI,GAAC,OAAQ,SAAS,CAAC,OAAOzE,EAAC,CAAhT,CAAkTmK,GAAEw2L,QAAQr2L,GAAE,EAAE,OAAW,MAAEQ,KAAI3I,KAAImI,GAAEH,GAAEkO,OAAOvN,IAAG/K,GAAEA,IAAGuK,GAAE,GAAGA,GAAE,EAAEpH,GAAEA,IAAGoH,GAAEvH,GAAEA,GAAEuH,GAAEvC,GAAEzI,KAAKgL,IAAGH,EAAC,IAAGpK,IAAG0E,GAAE44M,OAAO/9M,KAA8B,IAAA+4O,GAAG,MAAK,IAAQn1O,IAAGuB,GAAE44M,OAAO/9M,KAA0B,IAAI+4O,GAAG,MAAK,IAAQ,IAAMpwO,GAAEjI,GAAEmuZ,MAAM3xZ,OAAW2L,GAAE,EAAEhG,GAAE,GAAGA,GAAE8F,GAAExD,GAAE44M,OAAO/9M,KAA8B,IAAA+4O,GAAG,MAAK,IAAQ,GAAGl2O,KAAIgG,GAAE,GAAGF,GAAE,IAAI,IAAMjE,GAAEiE,GAAE,EAAED,GAAEvD,GAAEgsB,YAAYjlB,GAAE/G,GAAE2sZ,sBAAsBlpZ,GAAEsD,GAAEsgB,SAAS,OAAOhkB,GAAE7J,SAAQ,SAACwL,GAAEU,IAAK,IAAMW,GAAE3C,GAAE,EAAEgC,IAAGnG,GAAE,EAAEmE,GAAEgC,GAAEpC,GAAEoC,IAAGG,GAAEQ,GAAE5C,GAAEzD,GAAEgsB,YAAYzoB,GAAEwD,GAAEwtD,MAAM1uD,GAAEkB,GAAEsgB,SAASxhB,GAAEunZ,GAAKN,kBAAkB9nZ,GAAEhF,IAAGgF,GAAE4O,OAAOvN,GAAEjQ,GAAE8lM,OAAOrhM,KAAKmK,GAAE,IAAG5O,EAAC,GAACmD,CAAAA,qBAAA7B,MAAA,SAAe6D,GAAEyE,IAAG,MAAM,CAACiE,KAAK2gZ,GAAGQ,UAAUpqP,UAAUivP,GAAGpyZ,KAAK4xZ,GAAGluZ,GAAEy/J,WAAWh7J,IAAGukB,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA,oBAAA7B,MAAA,SAAkB6D,GAAEyE,IAAG,OAAOA,GAAEisZ,WAAW,CAAChoZ,KAAK2gZ,GAAGS,aAAa9gY,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA,kBAAA7B,MAAA,SAAgB6D,GAAEyE,IAAG,MAAM,CAACiE,KAAK2gZ,GAAGU,WAAWtqP,UAAUnjK,KAAK6yZ,eAAenvZ,GAAEy/J,UAAUh7J,IAAGukB,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA7B,aAAAA,MAAAmzZ,SAAWtvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAE6rZ,qBAAqB3sZ,GAAE3D,GAAEgpB,SAAS,CAAA,EAAGvkB,GAAEgsZ,aAAahsZ,GAAEqtZ,aAAa9xZ,GAAE,IAAA+xZ,GAAW,SAAY1vZ,IAAG,IAAMrC,KAAIqC,GAAE0nB,MAAM,WAAW3qB,MAAK,SAAAqF,IAAC,MAAE,SAASA,EAAC,IAAE,OAAOzE,KAAIqC,GAAEA,GAAEsE,QAAQqpZ,GAAG,KAAK3tZ,GAAEA,GAAEsE,QAAQ,OAAO+mZ,IAAI/mZ,QAAQ,SAAQ,SAAAlC,IAAC,OAAEipZ,GAAG,IAAIjpZ,GAAElC,MAAM,EAAG,IAACoE,QAAQ,cAAcinZ,IAAI,CAACvrZ,GAAErC,GAAE,CAA3L,CAA6LA,GAAEyiC,UAASuvX,GAAA7wI,eAAA4wI,GAA7M5vZ,GAAAA,GAAC6vZ,GAACjqZ,GAAAA,GAACiqZ,GAAA,GAA2MvtZ,GAAE6rZ,qBAAqBz1Z,GAAE2B,OAAO3B,GAAE,IAAIsH,GAAEA,GAAEqqZ,GAAG/nZ,GAAE8rZ,gBAAgB9rZ,GAAE6rZ,qBAAqB,IAAIj8Y,KAAK,IAAMnR,GAAEwrZ,GAAGpyZ,KAAK4xZ,GAAGluZ,GAAEy/J,WAAWh7J,IAAG,OAAOA,GAAEqtZ,aAAa,KAAKrtZ,GAAE6rZ,qBAAqBz1Z,GAAE,CAAC6N,KAAK2gZ,GAAGW,MAAMvnX,SAAStgC,GAAEm+D,MAAM38D,GAAE28D,OAAO,EAAEwsD,WAAWnpH,GAAEmpH,SAASmlS,YAAYlqZ,GAAE03J,UAAUv8J,GAAEgvZ,iBAAiBlyZ,GAAEyiC,SAASzZ,QAAQ8nY,GAAG9wZ,GAAEgpB,SAAU,GAAA,CAAAhrB,IAAA,eAAA7B,MAAA,SAAa6D,GAAEyE,IAAGA,GAAEqtZ,cAAcrtZ,GAAE44M,OAAO/9M,KAA0B,IAAI+4O,GAAG,MAAK,IAAQ,IAAMx9O,GAAE,SAASmF,GAAEmxZ,QAAQ,CAACrlY,SAAS,EAAEktC,MAAM,EAAE6iU,OAAO,QAAQiyB,GAAG9tZ,GAAEmxZ,QAAQ1sZ,GAAE44M,QAAO,GAAI,MAAM,CAAC30M,KAAK2gZ,GAAGY,QAAQxqP,UAAUivP,GAAGpyZ,KAAK4xZ,GAAGluZ,GAAEy/J,WAAWh7J,IAAG0sZ,QAAQt2Z,GAAEmuB,QAAQ,KAAM,IAAA,CAA1hN,GAAiiNonY,GAAExnH,cAAC,SAAAwnH,GAAYpwZ,IAAEwoS,gBAAA4nH,KAAAA,IAAC9zZ,KAAK+gN,OAAOr9M,GAAE1D,KAAKm0Z,WAAW,EAAEn0Z,KAAKo0Z,SAAS,EAAEp0Z,KAAK61Z,kBAAkB,KAAK71Z,KAAKw1Z,aAAa,KAAKx1Z,KAAKg0Z,qBAAqB,KAAKh0Z,KAAK80Z,sBAAsB,KAAK90Z,KAAKm0B,YAAY,EAAEn0B,KAAKi0Z,gBAAgB,IAAIl8Y,IAAI/X,KAAK0sB,QAAQ,KAAK1sB,KAAK81Z,8BAA8B,IAAIl1Y,GAAI,IAAC,SAAS4zY,GAAGzuZ,IAAG,OAAOA,IAAGA,GAAC0+Q,iBAAK1+Q,CAAAA,EAAAA,KAAIknH,SAASlnH,GAAEknH,OAAO,SAAYlnH,IAAG,OAAOA,GAAC0+Q,iBAAA,CAAA,EAAK1+Q,IAAG,IAAI,CAAnC,CAAqCA,GAAEknH,SAASlnH,GAAE,CAAE,EAACA,EAAE,CAAA,SAAS4uZ,GAAG5uZ,GAAErC,GAAEyE,IAAG,MAAM,CAACqnB,SAASzpB,GAAE22D,MAAMh5D,GAAE67X,OAAOp3X,GAAE,CAAC,SAAS4tZ,GAAGhwZ,GAAErC,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAe,MAAM,CAACuG,KAAK,EAAE/L,QAAQ0F,GAAE4mI,UAAUjpI,GAAEsyZ,cAAc7tZ,GAAE8tZ,eAAe13Z,GAAEixB,SAASnoB,GAAEq1D,MAAM72D,GAAE0oZ,UAAUlnZ,GAAExB,GAAE05X,OAAlHv0X,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,KAA0HkrZ,YAApHlrZ,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,IAAA8M,UAAC,IAAkI,IAAMmrZ,GAAE,WAAiC,OAAA7pH,cAAhC,SAAA6pH,KAAajqH,gBAAAlsS,KAAAm2Z,IAACn2Z,KAAKo2Z,KAAK,IAAIr+Y,GAAI,GAAA,CAAA,CAAArW,IAAA,MAAA7B,MAAA,SAAI6D,IAAG,OAAW1D,KAACo2Z,KAAKz2Z,IAAI+D,KAAI,EAAG,GAAA,CAAAhC,IAAA,SAAA7B,MAAA42F,SAAO/yF,GAAEyE,IAAEkuZ,IAAAA,GAAK93Z,GAAEyB,KAAKo2Z,KAAKz2Z,IAAI+D,IAAGnF,IAAGyB,KAAKo2Z,KAAKx2Z,IAAI8D,GAAEnF,GAAE,KAAI83Z,GAAA93Z,IAAEyE,KAAImI,MAAAkrZ,GAAAxpH,mBAAI1kS,OAAGzG,CAAAA,IAAA7B,MAAAA,MAAA2B,SAAIkC,IAAG,OAAW1D,KAACo2Z,KAAK50Z,IAAIkC,GAAE,GAAChC,CAAAA,IAAA7B,QAAAA,MAAAc,WAAQX,KAAKo2Z,KAAKz1Z,WAAS,CAAvM,GAA6M21Z,GAAG,IAAIx/Y,OAAO,SAAS,KAAKy/Y,GAAG,IAAIz/Y,OAAO,SAAS,KAAK,SAAS0/Y,GAAGzwZ,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAA+B,IAA7BxB,GAACmF,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAA,GAAC,IAAI+M,IAAItM,GAACT,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,IAAI+M,IAAInR,GAACoE,UAAA9K,OAAA,EAAA8K,UAAA9M,QAAAA,EAACuF,GAACuH,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAACuI,GAACuE,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,GAAI,OAAW,IAAAyrZ,IAAIC,eAAe3wZ,GAAErC,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,GAAE7E,GAAEnD,GAAEgD,GAAE,CAAC,IAAMgwZ,GAAE,WAAA,OAAAnqH,cAAA,SAAAmqH,KAAAvqH,gBAAAlsS,KAAAy2Z,GAAA,GAAA/0Z,CAAAA,CAAAA,IAAA7B,iBAAAA,MAAC,SAAe6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,GAAE7E,GAAEnD,GAAEgD,IAAE,IAAA+E,GAACR,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,GAAIvE,GAAEA,IAAG,IAAI0vZ,GAAG,IAAMxqZ,GAAE,IAAIgrZ,GAAGjzZ,GAAEyE,GAAE1B,GAAEY,GAAExB,GAAE2F,GAAE,IAAIG,GAAE+gB,QAAQjpB,GAAE,IAAMoI,GAAEpI,GAAEi5D,MAAMszB,GAAGvsF,GAAEi5D,OAAO,EAAE/wD,GAAEirZ,gBAAgBC,cAAchrZ,IAAGF,GAAEirZ,gBAAgBE,UAAU,CAACrrZ,IAAG,KAAKE,GAAEo1M,OAAOt9M,IAAG2uZ,GAAGpyZ,KAAKzB,GAAEoN,IAAG,IAAMjE,GAAEiE,GAAEorZ,UAAUt0Z,QAAO,SAAAiJ,IAAC,OAAEA,GAAEsrZ,uBAAqB,GAAGtvZ,GAAExH,QAAQ0G,GAAEkM,KAAK,CAAO,IAAN,IAAIpH,GAAUwD,GAAExH,GAAExH,OAAO,EAAEgP,IAAG,EAAEA,KAAI,CAAC,IAAMtD,GAAElE,GAAEwH,IAAG,GAAGtD,GAAEvL,UAAU8H,GAAE,CAACuD,GAAEE,GAAE,KAAK,CAAC,CAACF,KAAIA,GAAEurZ,2BAA2BvrZ,GAAEorZ,UAAU,CAAClwZ,IAAG,KAAK+E,GAAEo1M,OAAOt9M,GAAE,CAAC,OAAOiE,GAAExH,OAAOwH,GAAE3E,KAAI,SAAA2I,IAAG,OAAAA,GAAEgrZ,gBAAgB,IAAE,CAACX,GAAG5tZ,GAAE,GAAG,GAAG,GAAG,EAAE0D,GAAE,IAAG,GAAK,GAAA,CAAAnK,IAAA,eAAA7B,MAAA,SAAa6D,GAAEyE,IAAI,GAAAzG,CAAAA,IAAA7B,aAAAA,MAAAyyZ,SAAW5uZ,GAAEyE,IAAE,GAAEzG,CAAAA,IAAA7B,kBAAAA,eAAgB6D,GAAEyE,OAAI,CAAAzG,IAAA7B,oBAAAA,MAAAizZ,SAAkBpvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAE+uZ,gBAAgBv3Z,IAAIwI,GAAE9H,SAAS,GAAG9B,GAAE,CAAC,IAAM8I,GAAEc,GAAEgvZ,iBAAiBzzZ,GAAEgpB,SAAS7mB,GAAEsC,GAAEyuZ,gBAAgBziY,YAAY1oB,GAAEzL,KAAKo3Z,sBAAsB74Z,GAAE8I,GAAEA,GAAEqlB,SAAS7mB,IAAG4F,IAAGtD,GAAEkvZ,yBAAyB5rZ,GAAGtD,CAAAA,GAAEmvZ,aAAa5zZ,EAAC,GAAChC,CAAAA,IAAA7B,kBAAAA,MAAAkzZ,SAAgBrvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAEgvZ,iBAAiBzzZ,GAAEgpB,SAASnuB,GAAE84Z,2BAA2Br3Z,KAAKu3Z,yBAAyB,CAAC7zZ,GAAEgpB,QAAQhpB,GAAEy/J,UAAUz2I,SAASvkB,GAAE5J,IAAGyB,KAAK6yZ,eAAenvZ,GAAEy/J,UAAU5kK,IAAG4J,GAAEkvZ,yBAAyB94Z,GAAEq4Z,gBAAgBziY,aAAahsB,GAAEmvZ,aAAa5zZ,EAAC,GAAChC,CAAAA,IAAA7B,2BAAAA,eAAyB6D,GAAEyE,GAAE5J,IAAE,IAAiBi5Z,GAAjBC,GAAArsH,2BAAgB1nS,IAAf,IAAA,IAAA+zZ,GAAA5xZ,MAAA2xZ,GAAAC,GAAA1xZ,KAAAy3D,MAAiB,CAAA,IAAPn2D,GAACmwZ,GAAA33Z,MAAagG,GAAEwB,cAAAA,EAAAA,GAAGq1D,MAAM,GAAG72D,GAAE,KAAA6xZ,GAAOjsZ,GAAE,iBAAiB5F,GAAEA,GAAEmqF,GAAGgiU,GAAGnsZ,GAAW6xZ,QAAVA,GAACrwZ,cAAAA,EAAAA,GAAG4lH,cAAMyqS,IAAAA,GAAAA,GAAE,CAAE,EAACvvZ,GAAE44M,SAASxiN,GAAEs4Z,cAAcprZ,GAAE,CAAC,CAAC,CAAAgZ,MAAAA,IAAAgzY,GAAA/zZ,EAAA+gB,YAAAgzY,GAAA/rZ,GAAA,CAAA,GAAChK,CAAAA,IAAA7B,wBAAAA,eAAsB6D,GAAEyE,GAAE5J,IAAG,IAAIsH,GAAEsC,GAAEyuZ,gBAAgBziY,YAAkB1oB,GAAE,MAAMlN,GAAEixB,SAASwgE,GAAGzxF,GAAEixB,UAAU,KAAK5oB,GAAE,MAAMrI,GAAEm+D,MAAMszB,GAAGzxF,GAAEm+D,OAAO,KAAK,OAAO,IAAIjxD,IAAG/H,GAAE/B,SAAQ,SAAA8B,IAAI,IAAMgD,GAAE0B,GAAEwvZ,4BAA4Bl0Z,GAAEgI,GAAE7E,IAAGf,GAAEzH,KAAK+wB,IAAItpB,GAAEY,GAAE+oB,SAAS/oB,GAAEi2D,MAAM,IAAG72D,EAAC,IAACnE,IAAA,iBAAA7B,MAAA,SAAe6D,GAAEyE,IAAGA,GAAEyvZ,cAAcl0Z,GAAEgpB,SAAQ,GAAI0lY,GAAGpyZ,KAAK0D,GAAEy/J,UAAUh7J,IAAGA,GAAEmvZ,aAAa5zZ,EAAC,GAAChC,CAAAA,IAAA7B,gBAAAA,MAAA2yZ,SAAc9uZ,GAAEyE,IAAE0vZ,IAAAA,QAAOt5Z,GAAE4J,GAAE2vZ,gBAAoBzwZ,GAAEc,GAAQtC,GAAEnC,GAAEgpB,QAAQ,GAAG7mB,KAAIA,GAAEonH,QAAQpnH,GAAE62D,UAASr1D,GAAEc,GAAEgvZ,iBAAiBtxZ,KAAKwxZ,2BAA2B,MAAMxxZ,GAAE62D,OAAO,CAACr1D,GAAEiwZ,aAAalrZ,MAAM2gZ,GAAGM,QAAQhmZ,GAAEuvZ,gBAAgBmB,wBAAwB1wZ,GAAEiwZ,aAAaU,IAAI,IAAMvsZ,GAAEukF,GAAGnqF,GAAE62D,OAAOr1D,GAAEwvZ,cAAcprZ,GAAG/H,CAAAA,GAAEmuZ,MAAM3xZ,SAASwD,GAAEmuZ,MAAMlwZ,SAAQ,SAAA8J,IAAC,OAAE2mZ,GAAGyF,GAAKpsZ,GAAEpE,GAAG,IAACA,GAAEuvZ,gBAAgBqB,wBAAwB5wZ,GAAEywZ,gBAAgBv5Z,IAAG8I,GAAEgwZ,4BAA4BlvZ,GAAEmvZ,aAAa5zZ,EAAE,GAAA,CAAAhC,IAAA,aAAA7B,MAAA4yZ,SAAW/uZ,GAAEyE,IAAE+vZ,IAAAA,GAACl4Z,KAAMzB,GAAE,GAAO8I,GAAEc,GAAEyuZ,gBAAgBziY,YAAkBtuB,GAAEnC,GAAEgpB,SAAShpB,GAAEgpB,QAAQgwC,MAAMszB,GAAGtsF,GAAEgpB,QAAQgwC,OAAO,EAAEh5D,GAAEmuZ,MAAMlwZ,SAAQ,SAAA8J,IAAI,IAAM7E,GAAEuB,GAAEgvZ,iBAAiBzzZ,GAAEgpB,SAAS7mB,IAAGe,GAAEiwZ,cAAchxZ,IAAGusZ,GAAG8F,GAAKzsZ,GAAE7E,IAAGS,GAAEjJ,KAAK+wB,IAAI9nB,GAAET,GAAEgwZ,gBAAgBziY,aAAa51B,GAAEyE,KAAK4D,GAAEgwZ,gBAAiB,IAAEr4Z,GAAEoD,SAAQ,SAAA8J,IAAG,OAAAtD,GAAEyuZ,gBAAgBuB,6BAA6B1sZ,GAAE,IAAEtD,GAAEkvZ,yBAAyBhwZ,IAAGc,GAAEmvZ,aAAa5zZ,EAAE,GAAA,CAAAhC,IAAA,eAAA7B,MAAA,SAAa6D,GAAEyE,IAAG,GAAGzE,GAAEu8H,QAAQ,CAAC,IAAM1hI,GAAEmF,GAAEkxZ,SAAS,OAAOpD,GAAGrpZ,GAAE8kH,OAAO+kS,GAAGzzZ,GAAE4J,GAAE8kH,OAAO9kH,GAAE44M,QAAQxiN,GAAE4J,GAAE44M,OAAO,CAAC,MAAM,CAACvxL,SAAS9rB,GAAE8rB,SAASktC,MAAMh5D,GAAEg5D,MAAM6iU,OAAO77X,GAAE67X,OAAO,GAAC79X,CAAAA,mBAAA7B,MAAA,SAAa6D,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAE2sZ,sBAAsB90Z,KAAKo4Z,aAAa10Z,GAAEmxZ,QAAQ1sZ,IAAGd,GAAEc,GAAEyuZ,gBAAgBr4Z,GAAEm+D,QAAQv0D,GAAEkwZ,cAAc95Z,GAAEm+D,OAAOr1D,GAAE0wZ,yBAAyB,IAAMlyZ,GAAEnC,GAAE+K,MAAM5I,GAAEuG,MAAM2gZ,GAAGK,UAAUptZ,KAAK2yZ,eAAe9sZ,GAAEsC,KAAIA,GAAEkwZ,cAAc95Z,GAAEixB,UAAUxvB,KAAK4yZ,WAAW/sZ,GAAEsC,IAAGd,GAAE4wZ,yBAAyB9vZ,GAAE2sZ,sBAAsB,KAAK3sZ,GAAEmvZ,aAAa5zZ,EAAC,GAAChC,CAAAA,IAAA7B,aAAAA,MAAA+yZ,SAAWlvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAEyuZ,gBAAgBvvZ,GAAEc,GAAE2sZ,uBAAuBztZ,IAAG9I,GAAE+5Z,6BAA6B/5Z,GAAEg6Z,eAAe,IAAM1yZ,GAAEwB,IAAGA,GAAEk4X,QAAQ77X,GAAE67X,OAAO77X,GAAEqxZ,YAAYx2Z,GAAEi6Z,eAAe3yZ,IAAGtH,GAAEu4Z,UAAUpzZ,GAAE2gM,OAAOx+L,GAAEsC,GAAE44M,OAAO54M,GAAEukB,SAASvkB,GAAEmvZ,aAAa5zZ,EAAE,GAAA,CAAAhC,IAAA,iBAAA7B,MAAA8yZ,SAAejvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAE2sZ,sBAAsBztZ,GAAEc,GAAEyuZ,gBAAgBpnY,SAAS3pB,GAAEtH,GAAEixB,SAAS5oB,GAAEuB,GAAEgvZ,mBAAmBP,gBAAgBhwZ,GAAE24X,OAAOhhY,GAAEghY,OAAO77X,GAAE2gM,OAAO1iM,SAAQ,SAAA8B,IAAImD,GAAE6xZ,aAAah1Z,GAAEsY,QAAQ,GAAGlW,IAAGe,GAAEkwZ,UAAUrzZ,GAAE4gM,OAAO5gM,GAAE87X,OAAOp3X,GAAE44M,OAAO54M,GAAEukB,SAAS9lB,GAAEqxZ,uBAAwB,IAAE9vZ,GAAEyuZ,gBAAgBuB,6BAA6BvxZ,IAAGuB,GAAEkvZ,yBAAyBhwZ,GAAExB,IAAGsC,GAAEmvZ,aAAa5zZ,EAAC,GAAChC,CAAAA,IAAA7B,aAAAA,MAAAmzZ,SAAWtvZ,GAAEyE,IAAEuwZ,IAAAA,GAAC14Z,KAAMzB,GAAE4J,GAAEyuZ,gBAAgBziY,YAAY9sB,GAAE3D,GAAEgpB,SAAS,CAAA,EAAG7mB,GAAEwB,GAAEq1D,MAAMszB,GAAG3oF,GAAEq1D,OAAO,EAAE72D,KAAIsC,GAAEmvZ,aAAalrZ,OAAO2gZ,GAAGM,OAAO,GAAG9uZ,IAAG4J,GAAEyuZ,gBAAgB0B,+BAA+BnwZ,GAAEyuZ,gBAAgBmB,wBAAwB5vZ,GAAEmvZ,aAAaU,IAAI,IAAIvsZ,GAAElN,GAAQqI,GAAEuB,GAAEwwZ,YAAYj1Z,GAAEyiC,SAASziC,GAAEkyZ,iBAAiBlyZ,GAAEsgE,MAAMtgE,GAAEiyZ,cAActuZ,GAAEmpH,SAASroH,GAAE44M,QAAQ54M,GAAEywZ,kBAAkBhyZ,GAAE1G,OAAO,IAAIuD,GAAE,KAAKmD,GAAEjF,SAAQ,SAAC8E,GAAE+E,IAAKrD,GAAE06S,kBAAkBr3S,GAAE,IAAMG,GAAExD,GAAEgvZ,iBAAiBzzZ,GAAEgpB,QAAQjmB,IAAGZ,IAAG8F,GAAEkrZ,cAAchxZ,IAAGY,KAAI0B,GAAE9H,UAAUoD,GAAEkI,GAAEirZ,iBAAiBxE,GAAGsG,GAAKh1Z,GAAEy/J,UAAUx3J,IAAGA,GAAEirZ,gBAAgBqB,wBAAwBxsZ,GAAErN,KAAK+wB,IAAI1jB,GAAEE,GAAEirZ,gBAAgBziY,YAAY,IAAGhsB,GAAE06S,kBAAkB,EAAE16S,GAAEywZ,kBAAkB,EAAEzwZ,GAAEkvZ,yBAAyB5rZ,IAAGhI,KAAI0E,GAAEyuZ,gBAAgBuB,6BAA6B10Z,IAAG0E,GAAEyuZ,gBAAgBmB,yBAAyB5vZ,GAAEmvZ,aAAa5zZ,KAAEhC,CAAAA,IAAA7B,eAAAA,MAAAozZ,SAAavvZ,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAEilM,cAAc/lM,GAAEc,GAAEyuZ,gBAAgB/wZ,GAAEnC,GAAEmxZ,QAAQppZ,GAAErN,KAAK8H,IAAIL,GAAE2pB,UAAU5oB,GAAE6E,IAAGtD,GAAEywZ,kBAAkB,GAAOn1Z,GAAEgI,GAAEtD,GAAE06S,kBAAkB,OAAOh9S,GAAE2pB,SAAS,EAAE,UAAU3pB,GAAE05X,QAAQ,IAAI,UAAU97X,GAAEmD,GAAEnD,GAAE,MAAM,IAAI,OAAOA,GAAElF,GAAEs6Z,mBAAmB,IAAMrtZ,GAAErD,GAAEyuZ,gBAAgBnzZ,IAAG+H,GAAEqrZ,cAAcpzZ,IAAG,IAAMkI,GAAEH,GAAE2oB,YAAYi+X,GAAGpyZ,KAAK0D,GAAEy/J,UAAUh7J,IAAGA,GAAEmvZ,aAAa5zZ,GAAEnF,GAAEs6Z,mBAAmBxxZ,GAAE8sB,YAAYxoB,IAAGtE,GAAEiuZ,UAAU/2Z,GAAEq4Z,gBAAgBtB,UAAU,IAAE,CAApuJ,GAA0uJ0C,GAAG,GAASrB,GAAG,WAAA,SAAAA,GAAYjzZ,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,GAAE7E,GAAEnD,IAAEyoS,qBAAAyqH,IAAC32Z,KAAK6zZ,QAAQnwZ,GAAE1D,KAAKK,QAAQ8H,GAAEnI,KAAKk3Z,gBAAgB34Z,GAAEyB,KAAK84Z,gBAAgBzxZ,GAAErH,KAAK+4Z,gBAAgBlzZ,GAAE7F,KAAK+gN,OAAOt1M,GAAEzL,KAAK+2Z,UAAUnwZ,GAAE5G,KAAKotM,cAAc,KAAKptM,KAAK80Z,sBAAsB,KAAK90Z,KAAKs3Z,aAAaU,GAAGh4Z,KAAK83Z,gBAAgB,EAAE93Z,KAAK0sB,QAAQ,CAAE,EAAC1sB,KAAK6iT,kBAAkB,EAAE7iT,KAAK44Z,kBAAkB,EAAE54Z,KAAK64Z,mBAAmB,EAAE74Z,KAAK42Z,gBAAgBnzZ,IAAG,IAAIu1Z,GAAGh5Z,KAAK6zZ,QAAQ1rZ,GAAE,GAAGvB,GAAE5D,KAAKhD,KAAK42Z,gBAAgB,CAAC,OAAAtqH,aAAAqqH,GAAA,CAAA,CAAAj1Z,IAAA,SAAA/B,IAAA,WAAa,OAAWK,KAAC0sB,QAAQugG,MAAO,GAAA,CAAAvrH,IAAA,gBAAA7B,MAAA,SAAc6D,GAAEyE,IAAE,IAAA8wZ,GAAAj5Z,KAAC,GAAI0D,GAAJ,CAAa,IAAMnF,GAAEmF,GAAM2D,GAAErH,KAAK0sB,QAAQ,MAAMnuB,GAAEixB,WAAWnoB,GAAEmoB,SAASwgE,GAAGzxF,GAAEixB,WAAW,MAAMjxB,GAAEm+D,QAAQr1D,GAAEq1D,MAAMszB,GAAGzxF,GAAEm+D,QAAQ,IAAM72D,GAAEtH,GAAE0uH,OAAO,GAAGpnH,GAAE,CAAC,IAAI4F,GAAEpE,GAAE4lH,OAAOxhH,KAAIA,GAAEzL,KAAK0sB,QAAQugG,OAAO,IAAI1tH,OAAO2W,KAAKrQ,IAAGlE,SAAQ,SAAAiF,MAAMuB,KAAIsD,GAAEjM,eAAeoH,OAAM6E,GAAE7E,IAAGorZ,GAAGnsZ,GAAEe,IAAG6E,GAAEwtZ,GAAKl4M,QAAS,GAAE,CAA3Q,CAA2Q,GAACr/M,CAAAA,IAAA7B,eAAAA,iBAAe,IAAM6D,GAAE,CAAA,EAAG,GAAG1D,KAAK0sB,QAAQ,CAAC,IAAMvkB,GAAEnI,KAAK0sB,QAAQugG,OAAO,GAAG9kH,GAAE,CAAC,IAAM5J,GAAEmF,GAAEupH,OAAO,CAAA,EAAG1tH,OAAO2W,KAAK/N,IAAGxG,SAAQ,SAAA0F,IAAI9I,GAAE8I,IAAGc,GAAEd,GAAG,GAAE,CAAA,CAAC,OAAO3D,EAAE,GAAA,CAAAhC,IAAA,mBAAA7B,MAAA,WAAiB,IAAA6D,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,KAAOzM,GAACyM,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAAQmJ,IAAV2D,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,IAAe8B,KAAKK,QAAQwF,GAAE,IAAI8wZ,GAAG32Z,KAAK6zZ,QAAQxsZ,GAAErH,KAAKk3Z,gBAAgBl3Z,KAAK84Z,gBAAgB94Z,KAAK+4Z,gBAAgB/4Z,KAAK+gN,OAAO/gN,KAAK+2Z,UAAU/2Z,KAAK42Z,gBAAgB3tT,KAAK5hG,GAAE9I,IAAG,IAAI,OAAOsH,GAAEyxZ,aAAat3Z,KAAKs3Z,aAAazxZ,GAAEivZ,sBAAsB90Z,KAAK80Z,sBAAsBjvZ,GAAE6mB,QAAQ1sB,KAAKk5Z,eAAerzZ,GAAE+xZ,cAAcl0Z,IAAGmC,GAAEg9S,kBAAkB7iT,KAAK6iT,kBAAkBh9S,GAAE+yZ,kBAAkB54Z,KAAK44Z,kBAAkB/yZ,GAAEunM,cAAcptM,KAAKA,KAAK83Z,kBAAkBjyZ,EAAE,GAAA,CAAAnE,IAAA,2BAAA7B,MAAA,SAAyB6D,IAAG,OAAW1D,KAACs3Z,aAAaU,GAAGh4Z,KAAK42Z,gBAAgB52Z,KAAK42Z,gBAAgB3tT,KAAKjpG,KAAKK,QAAQqD,IAAG1D,KAAK+2Z,UAAU/zZ,KAAKhD,KAAK42Z,iBAAiB52Z,KAAK42Z,eAAe,GAACl1Z,CAAAA,IAAA7B,8BAAAA,MAAA83Z,SAA4Bj0Z,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAE,CAACmoB,SAASrnB,SAAAA,GAAGzE,GAAE8rB,SAASktC,MAAM18D,KAAK42Z,gBAAgBziY,aAAa51B,SAAAA,GAAG,GAAGmF,GAAEg5D,MAAM6iU,OAAO,IAAI15X,GAAE,IAAIszZ,GAAGn5Z,KAAK6zZ,QAAQnwZ,GAAErD,QAAQqD,GAAEipI,UAAUjpI,GAAEsyZ,cAActyZ,GAAEuyZ,eAAe5uZ,GAAE3D,GAAE01Z,yBAAyB,OAAWp5Z,KAAC+2Z,UAAU/zZ,KAAK6C,IAAGwB,EAAC,GAAC3F,CAAAA,IAAA7B,gBAAAA,MAAAw4Z,SAAc30Z,IAAG1D,KAAK42Z,gBAAgB6B,YAAYz4Z,KAAK42Z,gBAAgBpnY,SAAS9rB,GAAG,GAAA,CAAAhC,IAAA,gBAAA7B,MAAA,SAAc6D,IAAGA,GAAE,GAAG1D,KAAK42Z,gBAAgBC,cAAcnzZ,GAAE,GAAChC,CAAAA,kBAAA7B,MAAA,SAAY6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,IAAG,IAAI7E,GAAE,GAAG,GAAGS,IAAGT,GAAE5D,KAAKhD,KAAKK,SAASqD,GAAExD,OAAO,EAAE,CAACwD,IAAGA,GAAEA,GAAE2G,QAAQisZ,GAAG,IAAIt2Z,KAAK84Z,kBAAkBzuZ,QAAQksZ,GAAG,IAAIv2Z,KAAK+4Z,iBAAiB,IAAItyZ,GAAEzG,KAAK6zZ,QAAQ3kO,MAAMlvL,KAAKK,QAAQqD,GAAE,GAAGnF,IAAG,IAAIA,KAAIkI,GAAElI,GAAE,EAAEkI,GAAER,MAAMQ,GAAEvG,OAAO3B,GAAEkI,GAAEvG,QAAQuG,GAAER,MAAM,EAAE1H,KAAIqI,GAAE5D,KAAImI,MAANvE,GAACimS,mBAASpmS,KAAG,OAAOZ,IAAG,GAAGe,GAAE1G,QAAQuL,GAAEzI,KAA0B,IAAI+4O,GAAG,MAAK,IAAQn1O,EAAC,IAAQ,CAA/xE,GAA+xEoyZ,GAAE,WAAC,SAAAA,GAAYt1Z,GAAEyE,GAAE5J,GAAE8I,IAAE6kS,gBAAA8sH,KAAAA,IAACh5Z,KAAK6zZ,QAAQnwZ,GAAE1D,KAAKK,QAAQ8H,GAAEnI,KAAKs1Z,UAAU/2Z,GAAEyB,KAAKq5Z,6BAA6BhyZ,GAAErH,KAAKwvB,SAAS,EAAExvB,KAAKu/X,OAAO,KAAKv/X,KAAKs5Z,kBAAkB,IAAIvhZ,IAAI/X,KAAKu5Z,iBAAiB,IAAIxhZ,IAAI/X,KAAKw5Z,WAAW,IAAIzhZ,IAAI/X,KAAKy5Z,cAAc,IAAI1hZ,IAAI/X,KAAK05Z,qBAAqB,IAAI3hZ,IAAI/X,KAAK25Z,eAAe,IAAI5hZ,IAAI/X,KAAK45Z,UAAU,IAAI7hZ,IAAI/X,KAAK65Z,0BAA0B,KAAK75Z,KAAKq5Z,+BAA+Br5Z,KAAKq5Z,6BAA6B,IAAIthZ,KAAK/X,KAAK85Z,sBAAsB95Z,KAAKq5Z,6BAA6B15Z,IAAIwI,IAAGnI,KAAK85Z,wBAAwB95Z,KAAK85Z,sBAAsB95Z,KAAK05Z,qBAAqB15Z,KAAKq5Z,6BAA6Bz5Z,IAAIuI,GAAEnI,KAAK05Z,uBAAuB15Z,KAAK+5Z,eAAgB,CAAA,OAAAztH,aAAA0sH,GAAA,CAAA,CAAAt3Z,IAAA,oBAAA7B,MAAA,WAAoB,OAAOG,KAAKw5Z,WAAW1mZ,MAAM,KAAM,EAAC,OAAM,EAAG,KAAK,EAAE,OAAW9S,KAACs4Z,4BAA4B,QAAQ,OAAM,EAAG,GAAC,CAAA52Z,IAAA,4BAAA7B,MAAA,WAA4B,OAAOG,KAAKu5Z,iBAAiBzmZ,KAAK,IAAEpR,CAAAA,IAAA/B,cAAAA,IAAAA,WAAkB,OAAWK,KAACs1Z,UAAUt1Z,KAAKwvB,QAAQ,GAAC9tB,CAAAA,IAAA7B,gBAAAA,MAAAg3Z,SAAcnzZ,IAAG,IAAMyE,GAAE,IAAInI,KAAKw5Z,WAAW1mZ,MAAM9S,KAAK25Z,eAAe7mZ,KAAK9S,KAAKwvB,UAAUrnB,IAAGnI,KAAKy4Z,YAAYz4Z,KAAKm0B,YAAYzwB,IAAGyE,IAAGnI,KAAK+3Z,yBAAyB/3Z,KAAKs1Z,WAAW5xZ,EAAE,GAAA,CAAAhC,IAAA,OAAA7B,MAAAopG,SAAKvlG,GAAEyE,IAAG,OAAWnI,KAACi4Z,wBAAwB,IAAIe,GAAGh5Z,KAAK6zZ,QAAQnwZ,GAAEyE,IAAGnI,KAAKm0B,YAAYn0B,KAAKq5Z,6BAA8B,GAAA,CAAA33Z,IAAA,gBAAA7B,MAAA,WAAgBG,KAAKu5Z,mBAAmBv5Z,KAAKs5Z,kBAAkBt5Z,KAAKu5Z,kBAAkBv5Z,KAAKu5Z,iBAAiBv5Z,KAAKw5Z,WAAW75Z,IAAIK,KAAKwvB,UAAUxvB,KAAKu5Z,mBAAmBv5Z,KAAKu5Z,iBAAiB,IAAIxhZ,IAAI/X,KAAKw5Z,WAAW55Z,IAAII,KAAKwvB,SAASxvB,KAAKu5Z,kBAAkB,GAAC73Z,CAAAA,mBAAA7B,MAAA,WAAeG,KAAKwvB,UAAU,EAAExvB,KAAK+5Z,kBAAgBr4Z,CAAAA,IAAA7B,cAAAA,MAAA44Z,SAAY/0Z,IAAG1D,KAAKi4Z,wBAAwBj4Z,KAAKwvB,SAAS9rB,GAAE1D,KAAK+5Z,eAAgB,GAAA,CAAAr4Z,IAAA,eAAA7B,MAAA,SAAa6D,GAAEyE,IAAGnI,KAAK05Z,qBAAqB95Z,IAAI8D,GAAEyE,IAAGnI,KAAK85Z,sBAAsBl6Z,IAAI8D,GAAEyE,IAAGnI,KAAKy5Z,cAAc75Z,IAAI8D,GAAE,CAACm4D,KAAK77D,KAAKm0B,YAAYt0B,MAAMsI,IAAG,GAACzG,CAAAA,IAAA7B,0BAAAA,MAAAo3Z,WAA0B,OAAWj3Z,KAAC65Z,4BAA4B75Z,KAAKu5Z,gBAAgB,GAAC73Z,CAAAA,IAAA7B,iBAAAA,MAAA24Z,SAAe90Z,IAAGA,IAAG1D,KAAKs5Z,kBAAkB15Z,IAAI,SAAS8D,IAAG,IAAyCs2Z,GAAzCC,GAAA7uH,2BAAeprS,KAAK85Z,uBAAqB,IAAzC,IAAAG,GAAAp0Z,MAAAm0Z,GAAAC,GAAAl0Z,KAAAy3D,MAA0C,CAAA08V,IAAAA,GAAAr1I,eAAAm1I,GAAAn6Z,MAAA,GAAlCsI,GAAC+xZ,GAAA,GAAC37Z,GAAC27Z,GAA+B,GAAAl6Z,KAAK45Z,UAAUh6Z,IAAIuI,GAAE5J,IAAGqvZ,IAAI5tZ,KAAKu5Z,iBAAiB35Z,IAAIuI,GAAEylZ,GAAG,CAAC,CAAAnpY,MAAAA,IAAAw1Y,GAAAv2Z,EAAA+gB,GAAA,CAAA,QAAAw1Y,GAAAvuZ,GAAA,CAAA1L,KAAK65Z,0BAA0B75Z,KAAKu5Z,gBAAiB,GAAA,CAAA73Z,IAAA,YAAA7B,MAAAi3Z,SAAUpzZ,GAAEyE,GAAE5J,GAAE8I,IAAGc,IAAGnI,KAAKs5Z,kBAAkB15Z,IAAI,SAASuI,IAAG,IAA8NgyZ,GAAxNt0Z,GAAEwB,IAAGA,GAAE4lH,QAAQ,CAAA,EAAGxhH,GAAE,SAAY1F,GAAErC,IAAG,IAAoBnF,GAAd4J,GAAE,IAAI4P,IAAU,OAAOhS,GAAEpE,SAAQ,SAAA0F,IAAI,GAAG,MAAMA,GAAE,CAAA,IAAA+yZ,GAAE,QAADA,GAAA77Z,UAAC,IAAA67Z,KAAD77Z,GAAImF,GAAEwS,QAAO,IAAcmkZ,GAAdC,GAAAlvH,2BAAa7sS,IAAb,IAAA,IAAA+7Z,GAAAz0Z,MAAAw0Z,GAAAC,GAAAv0Z,KAAAy3D,MAAe,CAAP,IAAA33D,GAACw0Z,GAAAx6Z,MAAMsI,GAAEvI,IAAIiG,GAAE+nZ,GAAE,CAAC,CAAA,MAAAnpY,IAAA61Y,GAAA52Z,EAAA+gB,GAAA61Y,CAAAA,QAAAA,GAAA5uZ,GAAA,CAAA,KAAC6uZ,CAAAA,IAAqBC,GAArBD,GAAAnvH,2BAAoB/jS,IAAC,IAAhB,IAAAkzZ,GAAA10Z,MAAA20Z,GAAAD,GAAAx0Z,KAAAy3D,MAAiB,CAAA,IAAAi9V,GAAA51I,eAAA21I,GAAA36Z,MAATgG,GAAAA,GAAC40Z,GAAA,GAAChvZ,GAACgvZ,GAAA,GAAMtyZ,GAAEvI,IAAIiG,GAAE4F,GAAC,CAAC,CAAA,MAAAgZ,IAAA81Y,GAAA72Z,EAAA+gB,GAAA,CAAA,QAAA81Y,GAAA7uZ,GAAC,CAAA,CAAA,IAAEvD,EAAE,CAArJ,CAAsJzE,GAAE1D,KAAK85Z,uBAAuBY,GAAAtvH,2BAAe3/R,IAAC,IAAhB,IAAAivZ,GAAA70Z,MAAAs0Z,GAAAO,GAAA30Z,KAAAy3D,MAAiB,CAAAm9V,IAAAA,GAAAC,GAAA/1I,eAAAs1I,GAAAt6Z,MAAT+G,GAAAA,GAACg0Z,MAAen0Z,GAAEurZ,GAAf4I,GAAA,GAAoB/0Z,GAAEtH,IAAGyB,KAAK25Z,eAAe/5Z,IAAIgH,GAAEH,IAAGzG,KAAK05Z,qBAAqBl4Z,IAAIoF,KAAI5G,KAAK45Z,UAAUh6Z,IAAIgH,GAAmC,QAAlC+zZ,GAAC36Z,KAAK85Z,sBAAsBn6Z,IAAIiH,WAAE,IAAA+zZ,GAAAA,GAAE/M,IAAI5tZ,KAAK66Z,aAAaj0Z,GAAEH,GAAE,CAAC,CAAAge,MAAAA,IAAAi2Y,GAAAh3Z,EAAA+gB,GAAAi2Y,CAAAA,QAAAA,GAAAhvZ,GAAC,CAAA,GAAA,CAAAhK,IAAA7B,wBAAAA,MAAAo4Z,WAAuB,IAAA6C,GAAA96Z,KAAC,GAAGA,KAAK25Z,eAAe7mZ,OAAO9S,KAAK25Z,eAAeh4Z,SAAQ,SAAC+B,GAAEyE,IAAK2yZ,GAAKvB,iBAAiB35Z,IAAIuI,GAAEzE,GAAE,IAAG1D,KAAK25Z,eAAeh5Z,QAAQX,KAAK05Z,qBAAqB/3Z,SAAQ,SAAC+B,GAAEyE,IAAK2yZ,GAAKvB,iBAAiB/3Z,IAAI2G,KAAI2yZ,GAAKvB,iBAAiB35Z,IAAIuI,GAAEzE,GAAG,IAAE,GAAChC,CAAAA,4BAAA7B,MAAA,WAAuBk7Z,IAAyCC,GAAzCD,GAAA3vH,2BAAgBprS,KAAK05Z,sBAApB,IAAA,IAAAqB,GAAAl1Z,MAAAm1Z,GAAAD,GAAAh1Z,KAAAy3D,MAAyC,CAAAy9V,IAAAA,GAAAp2I,eAAAm2I,GAAAn7Z,MAAA,GAAjC6D,GAACu3Z,GAAA,GAAC9yZ,GAAC8yZ,GAAA,GAA8Bj7Z,KAAK25Z,eAAe/5Z,IAAI8D,GAAEyE,IAAGnI,KAAK66Z,aAAan3Z,GAAEyE,GAAC,CAAC,CAAA,MAAAsc,IAAAs2Y,GAAAr3Z,EAAA+gB,GAAAs2Y,CAAAA,QAAAA,GAAArvZ,GAAC,CAAA,GAAA,CAAAhK,IAAA,mBAAA7B,MAAA,WAAmB,OAAOG,KAAKw5Z,WAAW75Z,IAAIK,KAAKwvB,SAAS,GAAC9tB,CAAAA,IAAA/B,aAAAA,eAAiB,IAAM+D,GAAE,GAAG,IAAI,IAAIyE,MAASnI,KAACu5Z,iBAAiB71Z,GAAEV,KAAKmF,IAAG,OAAOzE,EAAE,GAAA,CAAAhC,IAAA,+BAAA7B,MAAA,SAA6B6D,IAAEw3Z,IAAAA,GAACx3Z,KAAAA,GAAE+1Z,cAAc93Z,SAAQ,SAACwG,GAAE5J,IAAK,IAAM8I,GAAE6zZ,GAAKzB,cAAc95Z,IAAIpB,MAAK8I,IAAGc,GAAE0zD,KAAKx0D,GAAEw0D,OAAOq/V,GAAKL,aAAat8Z,GAAE4J,GAAEtI,MAAO,GAAE,GAAA,CAAA6B,IAAA,iBAAA7B,MAAA,WAAgB,IAAAs7Z,GAAAn7Z,KAACA,KAAKi4Z,wBAAwB,IAAMv0Z,GAAE,IAAIkd,IAAIzY,GAAE,IAAIyY,IAAIriB,GAAE,IAAIyB,KAAKw5Z,WAAW1mZ,MAAM,IAAI9S,KAAKwvB,SAAanoB,GAAE,GAAGrH,KAAKw5Z,WAAW73Z,SAAQ,SAACiF,GAAEnD,IAAK,IAAMgD,GAAE,IAAIsR,IAAGskB,GAAAA,OAAAwwQ,mBAAKsuH,GAAKvB,WAAS/sH,mBAAIjmS,MAAIH,GAAE9E,SAAQ,SAAC6J,GAAEG,IAAK,MAAMH,GAAE9H,GAAEmF,IAAI8C,IAAGH,KAAIoiZ,IAAIzlZ,GAAEU,IAAI8C,GAAG,IAAEpN,IAAGkI,GAAE7G,IAAI,SAAS6D,GAAE03Z,GAAK3rY,UAAUnoB,GAAErE,KAAKyD,GAAG,IAAE,IAAMZ,GAACgnS,mBAAKnpS,GAAE+V,UAAUhO,GAACohS,mBAAK1kS,GAAEsR,UAAU,GAAGlb,GAAE,CAAC,IAAMqI,GAAES,GAAE,GAAG5D,GAAE,IAAIsU,IAAInR,IAAGA,GAAEhH,IAAI,SAAS,GAAG6D,GAAE7D,IAAI,SAAS,GAAGyH,GAAE,CAACT,GAAEnD,GAAE,CAAC,OAAOsyZ,GAAG/1Z,KAAKK,QAAQgH,GAAExB,GAAE4F,GAAEzL,KAAKwvB,SAASxvB,KAAKs1Z,UAAUt1Z,KAAKu/X,QAAO,EAAI,IAAA,CAA5mH,GAAmnH45B,GAAEiC,SAAAA,IAAY,SAAAjC,GAAYz1Z,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,IAAO4vZ,IAAAA,GAALz0Z,GAACoE,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,IAAA8M,UAAA,GAAoL,OAAjLkhS,gBAAAitH,KAAAA,KAAEkC,GAAA5tH,WAAAztS,KAAAm5Z,GAAA,CAAMz1Z,GAAEyE,GAAEsD,GAAEixD,SAAYiwE,UAAUpuI,GAAE88Z,GAAKrF,cAAc3uZ,GAAEg0Z,GAAKpF,eAAepwZ,GAAEw1Z,GAAKC,yBAAyB10Z,GAAEy0Z,GAAKxG,QAAQ,CAACrlY,SAAS/jB,GAAE+jB,SAASktC,MAAMjxD,GAAEixD,MAAM6iU,OAAO9zX,GAAE8zX,QAAO87B,EAAA,CAAC/uH,OAAAuB,UAAAsrH,GAAAiC,IAAA9uH,aAAA6sH,GAAAz3Z,CAAAA,CAAAA,IAAA7B,oBAAAA,MAAAm3Z,WAAoB,OAAOh3Z,KAAK2sI,UAAUzsI,OAAO,CAAC,GAACwB,CAAAA,IAAA7B,iBAAAA,iBAAqB,IAAA6D,GAAE1D,KAAK2sI,UAAS4uR,GAA+Bv7Z,KAAK60Z,QAA5B1sZ,GAACozZ,GAAP7+V,MAAiBn+D,GAACg9Z,GAAV/rY,SAAkBnoB,GAACk0Z,GAARh8B,OAAuB,GAAGv/X,KAAKs7Z,0BAA0BnzZ,GAAE,CAAC,IAAMtC,GAAE,GAAG4F,GAAElN,GAAE4J,GAAEvB,GAAEuB,GAAEsD,GAAEhI,GAAE,IAAIsU,IAAIrU,GAAE,IAAID,GAAE7D,IAAI,SAAS,GAAGiG,GAAE7C,KAAKS,IAAG,IAAMgD,GAAE,IAAIsR,IAAIrU,GAAE,IAAI+C,GAAE7G,IAAI,SAAS47Z,GAAG50Z,KAAIf,GAAE7C,KAAKyD,IAAsB,IAAnB,IAAM+E,GAAE9H,GAAExD,OAAO,EAAUyL,GAAE,EAAEA,IAAGH,GAAEG,KAAI,CAAC,IAAIE,GAAE,IAAIkM,IAAIrU,GAAEiI,KAAUjE,GAAEmE,GAAElM,IAAI,UAAUkM,GAAEjM,IAAI,SAAS47Z,IAAIrzZ,GAAET,GAAEnJ,IAAGkN,KAAI5F,GAAE7C,KAAK6I,GAAE,CAACtN,GAAEkN,GAAEtD,GAAE,EAAEd,GAAE,GAAG3D,GAAEmC,EAAE,CAAA,OAAOkwZ,GAAG/1Z,KAAKK,QAAQqD,GAAE1D,KAAKg2Z,cAAch2Z,KAAKi2Z,eAAe13Z,GAAE4J,GAAEd,IAAE,EAAI,IAAA,CAAptB+zZ,CAASpC,IAA4sB,SAASwC,GAAGz1Z,IAAM,IAAJrC,GAACsH,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,EAAS7C,GAAE/J,KAAKE,IAAI,GAAGoF,GAAE,GAAG,OAAOtF,KAAK4G,MAAMe,GAAEoC,IAAGA,EAAE,CAAA,SAASszZ,GAAG11Z,GAAErC,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,GAAE7E,GAAEnD,GAAEgD,GAAE+E,GAAEG,GAAEE,IAAG,MAAM,CAACO,KAAK,EAAE/L,QAAQ0F,GAAE8pZ,YAAYnsZ,GAAEg4Z,oBAAoBr0Z,GAAEyoZ,UAAU3nZ,GAAEwzZ,WAAW91Z,GAAEkqZ,QAAQxxZ,GAAEq9Z,SAASnwZ,GAAEsrZ,UAAUnwZ,GAAEi1Z,gBAAgBp4Z,GAAEuyZ,cAAcvvZ,GAAEwvZ,eAAezqZ,GAAE+iZ,UAAU5iZ,GAAEo1M,OAAOl1M,GAAE,CAAC,IAAMiwZ,GAAG,CAAA,EAASC,GAAE,WAAuE,OAAAzvH,cAAtE,SAAAyvH,GAAYr4Z,GAAEyE,GAAE5J,IAAE2tS,gBAAA6vH,KAAAA,IAAC/7Z,KAAKg8Z,aAAat4Z,GAAE1D,KAAK6gL,IAAI14K,GAAEnI,KAAKi8Z,aAAa19Z,KAAEmD,CAAAA,CAAAA,IAAA7B,QAAAA,MAAAgD,SAAMa,GAAEyE,GAAE5J,GAAE8I,IAAG,OAAO,SAAYtB,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAAG,OAAOtB,GAAEnD,MAAK,SAAAiD,IAAG,OAAAA,GAAEnC,GAAEyE,GAAE5J,GAAE8I,GAAE,GAAE,CAApD,CAAqDrH,KAAK6gL,IAAI22F,SAAS9zQ,GAAEyE,GAAE5J,GAAE8I,GAAE,GAAC3F,CAAAA,IAAA7B,cAAAA,MAAAq8Z,SAAYx4Z,GAAEyE,GAAE5J,IAAG,IAAI8I,GAAErH,KAAKi8Z,aAAat8Z,IAAI,KAAK,YAAO,IAAS+D,KAAI2D,GAAErH,KAAKi8Z,aAAat8Z,IAAI+D,cAAAA,EAAAA,GAAG7E,aAAawI,IAAGA,GAAEA,GAAE60Z,YAAY/zZ,GAAE5J,IAAG,IAAIwZ,GAAI,GAAA,CAAArW,IAAA,QAAA7B,MAAA,SAAM6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,GAAE7E,GAAEnD,GAAEgD,GAAE+E,IAAE,IAAA2wZ,GAAOxwZ,GAAE,GAAGE,GAAE7L,KAAK6gL,IAAIn0J,SAAS1sB,KAAK6gL,IAAIn0J,QAAQugG,QAAQ6uS,GAAGpwZ,GAAE1L,KAAKk8Z,YAAY39Z,GAAEqI,IAAGA,GAAEqmH,QAAQ6uS,GAAGnwZ,IAAGuD,GAAEzL,IAAGA,GAAEwpH,QAAQ6uS,GAAGlwZ,GAAE5L,KAAKk8Z,YAAY70Z,GAAE6H,GAAEvD,IAAGwB,GAAE,IAAIyT,IAAI/S,GAAE,IAAIkK,IAAIvJ,GAAE,IAAIuJ,IAAI/J,GAAE,SAAS3G,GAAEw0O,GAAG,CAAC5uH,OAAOmvS,GAAGltZ,GAAErD,IAAG6wD,MAAsBy/V,QAAjBA,GAACn8Z,KAAK6gL,IAAIn0J,eAATyvY,IAAgBA,QAAhBA,EAAAA,GAAkBz/V,OAAOw/K,GAAG1wO,GAAE,GAAGgrZ,GAAG9yZ,GAAEyE,GAAEnI,KAAK6gL,IAAI1d,UAAUt9J,GAAE4F,GAAEC,GAAEE,GAAEiwO,GAAGp1O,GAAEkF,IAAOqwO,GAAG,EAAE,OAAOE,GAAGv6O,SAAQ,SAAAu7O,IAAKlB,GAAG59O,KAAK+wB,IAAI+tN,GAAG1tN,SAAS0tN,GAAGxgL,MAAMs/K,OAAMrwO,GAAEzL,OAAOu7Z,GAAGtzZ,GAAEnI,KAAKg8Z,aAAaz9Z,GAAE8I,GAAE2G,GAAEtC,GAAEE,GAAE,GAAG,GAAGiC,GAAEW,GAAEwtO,GAAGrwO,KAAIuwO,GAAGv6O,SAAQ,SAAAu7O,IAAK,IAAMb,GAAGa,GAAG78O,QAAQi3V,GAAG44D,GAAGriZ,GAAEwuO,GAAG,IAAIz7N,KAAKs8N,GAAG84K,cAAcr0Z,SAAQ,SAAA81V,IAAI,OAAAH,GAAGzuV,IAAI4uV,GAAG,IAAE,IAAMD,GAAG04D,GAAG1hZ,GAAE6tO,GAAG,IAAIz7N,KAAKs8N,GAAG+4K,eAAet0Z,SAAQ,SAAA81V,IAAI,OAAAD,GAAG3uV,IAAI4uV,GAAI,IAACp7G,KAAKl0O,IAAGgF,GAAEtE,IAAIwzO,GAAG,IAAGo/K,GAAGtzZ,GAAEnI,KAAKg8Z,aAAaz9Z,GAAE8I,GAAE2G,GAAEtC,GAAEE,GAAEswO,GAAE2wD,mBAAK1/R,GAAEsM,UAAU5L,GAAEW,GAAEwtO,IAAK,IAAA,CAA9+B,GAA++B,SAASogL,GAAGr2Z,GAAErC,IAAG,IAAMyE,GAACs8Q,iBAAK/gR,CAAAA,EAAAA,IAAG,OAAOnE,OAAO2U,QAAQnO,IAAGpE,SAAQ,SAAA06Z,IAAS,IAAAC,GAAAz3I,eAAAw3I,GAAP99Z,GAAAA,GAAC+9Z,GAACj1Z,GAAAA,GAACi1Z,MAAK,MAAMj1Z,KAAIc,GAAE5J,IAAG8I,GAAG,IAAEc,EAAE,CAAA,IAAMo0Z,GAAG,WAAwE,OAAAjwH,cAAxE,SAAAiwH,GAAY74Z,GAAEyE,GAAE5J,IAAE2tS,gBAAAqwH,KAAAA,IAACv8Z,KAAKqkM,OAAO3gM,GAAE1D,KAAKw8Z,cAAcr0Z,GAAEnI,KAAK0iF,WAAWnkF,EAAC,GAACmD,CAAAA,CAAAA,IAAA7B,cAAAA,eAAY6D,GAAEyE,IAAE,IAAAs0Z,GAAAz8Z,KAAOzB,GAAE,IAAIwZ,IAAI1Q,GAAE+0Z,GAAG14Z,GAAE1D,KAAKw8Z,eAAe,OAAWx8Z,KAACqkM,OAAOA,OAAO1iM,SAAQ,SAAAkE,IAAI,iBAAiBA,IAAGA,GAAElE,SAAQ,SAAC8J,GAAE7E,IAAK6E,KAAIA,GAAEumZ,GAAGvmZ,GAAEpE,GAAEc,KAAI,IAAM1E,GAAEg5Z,GAAK/5U,WAAW6sU,sBAAsB3oZ,GAAEuB,IAAGsD,GAAEgxZ,GAAK/5U,WAAW8sU,oBAAoB5oZ,GAAEnD,GAAEgI,GAAEtD,IAAG5J,GAAEqB,IAAIgH,GAAE6E,GAAE,GAAE,IAAGlN,EAAC,IAAQ,CAA3V,GAA2Vm+Z,GAAG,WAAsiB,OAAApwH,cAAtiB,SAAAowH,GAAYh5Z,GAAEyE,GAAE5J,IAAE,IAAAo+Z,GAAA38Z,KAAAksS,gBAAAlsS,KAAA08Z,IAAC18Z,KAAK4Q,KAAKlN,GAAE1D,KAAK6gL,IAAI14K,GAAEnI,KAAK48Z,YAAYr+Z,GAAEyB,KAAK68Z,oBAAoB,GAAG78Z,KAAKw8G,OAAO,IAAIzkG,IAAI5P,GAAEq0G,OAAO76G,SAAQ,SAAA0F,IAAIs1Z,GAAKngT,OAAO58G,IAAIyH,GAAEuJ,KAAK,IAAI2rZ,GAAGl1Z,GAAEoH,MAAMpH,GAAEqlB,SAASrlB,GAAEqlB,QAAQugG,QAAQ,CAAA,EAAG1uH,IAAG,IAAGu+Z,GAAG98Z,KAAKw8G,OAAO,OAAO,KAAKsgT,GAAG98Z,KAAKw8G,OAAO,QAAQ,KAAKr0G,GAAEmsZ,YAAY3yZ,SAAQ,SAAA0F,IAAIs1Z,GAAKE,oBAAoB75Z,KAAK,IAAI+4Z,GAAGr4Z,GAAE2D,GAAEs1Z,GAAKngT,QAAQ,IAAGx8G,KAAK+8Z,mBAAmB,SAAYh3Z,GAAErC,IAAG,OAAW,IAAAq4Z,GAAGh2Z,GAAE,CAACqG,KAAK2gZ,GAAGE,WAAW9pP,UAAU,CAAC/2J,KAAK2gZ,GAAGG,SAAS2E,MAAM,GAAGnlY,QAAQ,MAAM8qP,SAAS,CAAC,SAAC/rQ,GAAE7E,IAAC,OAAG,CAAG,GAAC8lB,QAAQ,KAAKynY,WAAW,EAAEC,SAAS,GAAG1wZ,GAAG,CAAtK,CAAuKA,GAAE1D,KAAKw8G,OAAO,GAAC,CAAA,CAAA96G,IAAA,kBAAA/B,IAAA,WAAsB,OAAOK,KAAK6gL,IAAIszO,WAAW,CAAE,GAAA,CAAAzyZ,IAAA,kBAAA7B,MAAA,SAAgB6D,GAAEyE,GAAE5J,GAAE8I,IAAG,OAAWrH,KAAC68Z,oBAAoB/5Z,MAAK,SAAA2I,WAAGA,GAAE5I,MAAMa,GAAEyE,GAAE5J,GAAE8I,GAAE,KAAG,OAAK3F,CAAAA,IAAA7B,cAAAA,MAAAm9Z,SAAYt5Z,GAAEyE,GAAE5J,IAAG,OAAOyB,KAAK+8Z,mBAAmBb,YAAYx4Z,GAAEyE,GAAE5J,GAAG,IAAA,CAAvvB,GAAwvB,SAASu+Z,GAAG/2Z,GAAErC,GAAEyE,IAAGpC,GAAEvE,IAAIkC,IAAGqC,GAAEvE,IAAI2G,KAAIpC,GAAEnG,IAAIuI,GAAEpC,GAAEpG,IAAI+D,KAAIqC,GAAEvE,IAAI2G,KAAIpC,GAAEnG,IAAI8D,GAAEqC,GAAEpG,IAAIwI,KAAI,IAAM80Z,GAAG,IAAI9G,GAAS+G,GAAE,WAAyI,OAAA5wH,cAAxI,SAAA4wH,GAAYx5Z,GAAEyE,GAAE5J,IAAE2tS,gBAAAlsS,KAAAk9Z,IAACl9Z,KAAKm9Z,SAASz5Z,GAAE1D,KAAK6zZ,QAAQ1rZ,GAAEnI,KAAK48Z,YAAYr+Z,GAAEyB,KAAKo9Z,YAAY,IAAIrlZ,IAAI/X,KAAKq9Z,aAAa,IAAItlZ,IAAI/X,KAAK+uZ,QAAQ,EAAE,GAACrtZ,CAAAA,CAAAA,IAAA7B,WAAAA,MAAAupO,SAAS1lO,GAAEyE,IAAG,IAAM5J,GAAE,GAAGsH,GAAE8tZ,GAAG3zZ,KAAK6zZ,QAAQ1rZ,GAAE5J,GAAE,IAAI,GAAGA,GAAE2B,OAAO,UAA+B67O,GAAG,MAAK,GAAO/7O,KAAKo9Z,YAAYx9Z,IAAI8D,GAAEmC,GAAG,GAAA,CAAAnE,IAAA,eAAA7B,MAAA,SAAa6D,GAAEyE,GAAE5J,IAAG,IAAM8I,GAAE3D,GAAErD,QAAQwF,GAAEypZ,GAAGtvZ,KAAK48Z,YAAYl5Z,GAAEipI,UAAUxkI,GAAE5J,IAAG,OAAWyB,KAAC6zZ,QAAQrwY,QAAQnc,GAAExB,GAAEnC,GAAE8rB,SAAS9rB,GAAEg5D,MAAMh5D,GAAE67X,OAAO,IAAG,EAAI,GAAA,CAAA79X,IAAA,SAAA7B,MAAA,SAAO6D,GAAEyE,IAAO,IAA0CsD,GAA1C6xZ,GAAAt9Z,KAALzB,GAACyM,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAC,GAAA,GAAU3D,GAAE,GAAGxB,GAAE7F,KAAKo9Z,YAAYz9Z,IAAI+D,IAAekD,GAAE,IAAImR,IAAI,GAAGlS,IAAG4F,GAAE+qZ,GAAGx2Z,KAAK6zZ,QAAQ1rZ,GAAEtC,GAAEorZ,GAAGC,GAAG,IAAIn5Y,IAAI,IAAIA,IAAIxZ,GAAE0+Z,GAAG51Z,KAAK1F,SAAQ,SAAA6J,IAAI,IAAMG,GAAEukZ,GAAGtpZ,GAAE4E,GAAEnL,QAAQ,IAAI0X,KAAKvM,GAAEyqZ,eAAet0Z,SAAQ,SAAAkK,IAAG,OAAAF,GAAE/L,IAAIiM,GAAE,KAAK,GAAE,KAAIxE,GAAErE,KAA0B,IAAI+4O,GAAG,MAAK,IAAQtwO,GAAE,IAAIpE,GAAEnH,OAAO,MAA2B,IAAI67O,GAAG,MAAK,GAAOn1O,GAAEjF,SAAQ,SAAC6J,GAAEG,IAAKH,GAAE7J,SAAQ,SAACkK,GAAEnE,IAAK8D,GAAE5L,IAAI8H,GAAE41Z,GAAKzJ,QAAQhD,aAAallZ,GAAEjE,GAAEkmZ,IAAI,GAAE,IAAG,IAAMnnZ,GAAE4oZ,GAAG5jZ,GAAE1I,KAAI,SAAAyI,IAAI,IAAMG,GAAE/E,GAAEjH,IAAI6L,GAAEnL,SAAS,OAAOi9Z,GAAKC,aAAa/xZ,GAAE,IAAIuM,IAAIpM,GAAG,KAAG,OAAW3L,KAACq9Z,aAAaz9Z,IAAI8D,GAAE+C,IAAGA,GAAE2f,WAAU,kBAAIk3Y,GAAKh8X,QAAQ59B,GAAE,IAAE1D,KAAK+uZ,QAAQ/rZ,KAAKyD,IAAGA,EAAE,GAAA,CAAA/E,IAAA,UAAA7B,MAAA,SAAQ6D,IAAG,IAAMyE,GAAEnI,KAAKw9Z,WAAW95Z,IAAGyE,GAAEm5B,UAAUthC,KAAKq9Z,aAAmB,OAAC35Z,IAAG,IAAMnF,GAAEyB,KAAK+uZ,QAAQ5lZ,QAAQhB,IAAG5J,IAAG,GAAGyB,KAAK+uZ,QAAQt9Y,OAAOlT,GAAE,EAAG,GAAA,CAAAmD,IAAA,aAAA7B,MAAA29Z,SAAW95Z,IAAG,IAAMyE,GAAEnI,KAAKq9Z,aAAa19Z,IAAI+D,IAAG,IAAIyE,GAAE,MAA+B,IAAA4zO,GAAG,MAAK,GAAO,OAAO5zO,EAAE,GAAA,CAAAzG,IAAA,SAAA7B,MAAA,SAAO6D,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAMxB,GAAE+pZ,GAAGznZ,GAAE,GAAG,GAAG,IAAI,OAAOsnZ,GAAGzvZ,KAAKw9Z,WAAW95Z,IAAGnF,GAAEsH,GAAEwB,IAAG,WAAI,CAAG,GAAA,CAAA3F,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,GAAE5J,GAAE8I,IAAG,GAAG,YAAY9I,GAAoC,GAAG,UAAUA,GAAb,CAAqD,IAAMsH,GAAE7F,KAAKw9Z,WAAW95Z,IAAG,OAAOnF,IAAG,IAAI,OAAOsH,GAAEs6X,OAAO,MAAM,IAAI,QAAQt6X,GAAEqhP,QAAQ,MAAM,IAAI,QAAQrhP,GAAEytG,QAAQ,MAAM,IAAI,UAAUztG,GAAE4uG,UAAU,MAAM,IAAI,SAAS5uG,GAAEokI,SAAS,MAAM,IAAI,OAAOpkI,GAAE8/B,OAAO,MAAM,IAAI,cAAc9/B,GAAEgkX,YAAY1+V,WAAW9jB,GAAE,KAAK,MAAM,IAAI,UAAUrH,KAAKshC,QAAQ59B,IAAnS,MAAzB1D,KAAK+oC,OAAOrlC,GAAEyE,GAAEd,GAAE,IAAI,cAAlE+hO,SAAS1lO,GAAE2D,GAAE,GAA8V,IAAC,CAA9tD,GAAquDo2Z,GAAG,oBAAoBC,GAAG,sBAAsBC,GAAG,GAAGC,GAAG,CAACC,YAAY,GAAGC,eAAc,EAAGC,YAAW,EAAGC,cAAa,EAAGC,sBAAqB,GAAIC,GAAG,CAACL,YAAY,GAAGE,YAAW,EAAGD,eAAc,EAAGE,cAAa,EAAGC,sBAAqB,GAAIE,GAAG,eAAqBC,GAA2C,WAAiP,OAAA9xH,cAAjP,SAAA8xH,GAAY16Z,IAAO,IAALyE,GAAC6C,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,GAAEkhS,gBAAAkyH,KAAAA,IAAEp+Z,KAAK69Z,YAAY11Z,GAAE,IAAM5J,GAAEmF,IAAGA,GAAElE,eAAe,SAAS,GAAGQ,KAAKH,MAAM,SAAYkG,IAAG,OAAOA,SAAAA,GAAG,IAAK,CAA9B,CAA+BxH,GAAEmF,GAAE7D,MAAM6D,IAAGnF,GAAE,CAAqBmF,GAAd7D,MAAK,IAAM4L,GAACq9Y,yBAAEplZ,GAACihR,IAAC3kR,KAAK0sB,QAAQjhB,EAAE,MAASzL,KAAC0sB,QAAQ,CAAA,EAAG1sB,KAAK0sB,QAAQugG,SAASjtH,KAAK0sB,QAAQugG,OAAO,CAAA,EAAI,GAAA,CAAA,CAAAvrH,IAAA,SAAA/B,IAAzR,WAAa,OAAWK,KAAC0sB,QAAQugG,MAAM,GAACvrH,CAAAA,IAAA7B,gBAAAA,MAAiP,SAAc6D,IAAG,IAAMyE,GAAEzE,GAAEupH,OAAO,GAAG9kH,GAAE,CAAC,IAAM5J,GAAEyB,KAAK0sB,QAAQugG,OAAO1tH,OAAO2W,KAAK/N,IAAGxG,SAAQ,SAAA0F,IAAI,MAAM9I,GAAE8I,MAAK9I,GAAE8I,IAAGc,GAAEd,IAAG,GAAE,CAAC,IAAC,CAA3W,GAAkXg3Z,GAAG,OAAOC,GAAG,IAAIF,GAAGC,IAAUE,GAAG,WAA8M,OAAAjyH,cAA9M,SAAAiyH,GAAY76Z,GAAEyE,GAAE5J,IAAE2tS,gBAAAqyH,KAAAA,IAACv+Z,KAAKV,GAAGoE,GAAE1D,KAAKw+Z,YAAYr2Z,GAAEnI,KAAKy+Z,QAAQlga,GAAEyB,KAAK+uZ,QAAQ,GAAG/uZ,KAAK0+Z,UAAU,IAAI3mZ,IAAI/X,KAAK2+Z,OAAO,GAAG3+Z,KAAK4+Z,kBAAkB,IAAI7mZ,IAAI/X,KAAK6+Z,eAAe,UAAUn7Z,GAAEo7Z,GAAG32Z,GAAEnI,KAAK6+Z,eAAe,GAACn9Z,CAAAA,CAAAA,IAAA7B,SAAAA,MAAA0kU,SAAO7gU,GAAEyE,GAAE5J,GAAE8I,IAAE,IAAA03Z,GAAA/+Z,KAAC,IAAIA,KAAK0+Z,UAAUl9Z,IAAI2G,IAAG,MAA+B,IAAA4zO,GAAG,MAAK,GAAO,GAAG,MAAMx9O,IAAG,GAAGA,GAAE2B,OAAO,MAA2B,IAAI67O,GAAG,MAAK,GAAO,IAAI,SAAYh2O,IAAG,MAAM,SAASA,IAAG,QAAQA,EAAE,CAA3C,CAA4CxH,IAAG,MAA2B,IAAIw9O,GAAG,MAAK,GAAO,IAAMl2O,GAAEqqZ,GAAGlwZ,KAAK4+Z,kBAAkBl7Z,GAAE,IAAI+H,GAAE,CAACmF,KAAKzI,GAAE62Z,MAAMzga,GAAE60D,SAAS/rD,IAAGxB,GAAE7C,KAAKyI,IAAG,IAAM7E,GAAEspZ,GAAGlwZ,KAAKy+Z,QAAQQ,gBAAgBv7Z,GAAE,IAAIqU,KAAK,OAAOnR,GAAEpF,IAAI2G,MAAK22Z,GAAGp7Z,GAAEytZ,IAAI2N,GAAGp7Z,GAAEytZ,GAAG,IAAIhpZ,IAAGvB,GAAEhH,IAAIuI,GAAEm2Z,KAAK,WAAKS,GAAKN,QAAQS,YAAW,WAAK,IAAMz7Z,GAAEoC,GAAEsD,QAAQsC,IAAGhI,IAAG,GAAGoC,GAAE4L,OAAOhO,GAAE,GAAGs7Z,GAAKL,UAAUl9Z,IAAI2G,KAAIvB,GAAC,OAAQuB,GAAE,GAAG,CAAA,GAACzG,CAAAA,IAAA7B,WAAAA,MAAAupO,SAAS1lO,GAAEyE,IAAG,OAAOnI,KAAK0+Z,UAAUl9Z,IAAIkC,MAAK1D,KAAK0+Z,UAAU9+Z,IAAI8D,GAAEyE,KAAG,EAAI,GAAA,CAAAzG,IAAA,cAAA7B,MAAA,SAAY6D,IAAG,IAAMyE,GAAEnI,KAAK0+Z,UAAU/+Z,IAAI+D,IAAG,IAAIyE,GAAE,MAA+B,IAAA4zO,GAAG,MAAK,GAAO,OAAO5zO,EAAC,GAACzG,CAAAA,IAAA7B,UAAAA,eAAQ6D,GAAEyE,GAAE5J,IAAO,IAAA4ga,GAALn/Z,KAAAqH,KAAC2D,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,KAAAA,UAAA,GAAWnF,GAAE7F,KAAKo/Z,YAAYj3Z,IAAGsD,GAAE,IAAI4zZ,GAAGr/Z,KAAKV,GAAG6I,GAAEzE,IAAOkD,GAAE5G,KAAKy+Z,QAAQQ,gBAAgBt/Z,IAAI+D,IAAGkD,KAAIk4Z,GAAGp7Z,GAAEytZ,IAAI2N,GAAGp7Z,GAAEytZ,GAAG,IAAIhpZ,IAAGnI,KAAKy+Z,QAAQQ,gBAAgBr/Z,IAAI8D,GAAEkD,GAAE,IAAImR,MAAM,IAAItU,GAAEmD,GAAEjH,IAAIwI,IAAS1B,GAAE,IAAI23Z,GAAG7/Z,GAAEyB,KAAKV,IAAI,KAAKf,IAAGA,GAAEiB,eAAe,WAAWiE,IAAGgD,GAAE64Z,cAAc77Z,GAAEipB,SAAS9lB,GAAEhH,IAAIuI,GAAE1B,IAAGhD,KAAIA,GAAE66Z,IAAI73Z,GAAE5G,QAAQw+Z,IAAI56Z,GAAE5D,QAAQ4G,GAAE5G,MAAjH,CAAuf,IAAMgM,GAAEqkZ,GAAGlwZ,KAAKy+Z,QAAQc,iBAAiB77Z,GAAE,IAAImI,GAAElK,SAAQ,SAAAuN,IAAIA,GAAE2uZ,aAAasB,GAAK7/Z,IAAI4P,GAAE2gZ,aAAa1nZ,IAAG+G,GAAEswZ,QAAQtwZ,GAAEoyB,SAAS,IAAG,IAAI55B,GAAE7B,GAAE45Z,gBAAgBh8Z,GAAE5D,MAAM4G,GAAE5G,MAAM6D,GAAE+C,GAAEwmH,QAAQvhH,IAAE,EAAG,IAAIhE,GAAE,CAAC,IAAIL,GAAE,OAAOK,GAAE7B,GAAEk3Z,mBAAmBrxZ,IAAE,CAAG,CAAA,OAAW1L,KAACy+Z,QAAQiB,qBAAqB1/Z,KAAK2+Z,OAAO37Z,KAAK,CAAC3C,QAAQqD,GAAEmsZ,YAAY1nZ,GAAEw3Z,WAAWj4Z,GAAEooZ,UAAUrsZ,GAAEssZ,QAAQtpZ,GAAEm5Z,OAAOn0Z,GAAEo0Z,qBAAqBn0Z,KAAIA,KAAIozZ,GAAGp7Z,GAAE+5Z,IAAIhyZ,GAAEyjZ,SAAQ,WAAK4Q,GAAGp8Z,GAAE+5Z,GAAI,KAAGhyZ,GAAEujZ,QAAO,WAAK,IAAI9/Y,GAAEiwZ,GAAKpQ,QAAQ5lZ,QAAQsC,IAAGyD,IAAG,GAAGiwZ,GAAKpQ,QAAQt9Y,OAAOvC,GAAE,GAAG,IAAMtD,GAAEuzZ,GAAKV,QAAQc,iBAAiB5/Z,IAAI+D,IAAG,GAAGkI,GAAE,CAAC,IAAIuB,GAAEvB,GAAEzC,QAAQsC,IAAG0B,IAAG,GAAGvB,GAAE6F,OAAOtE,GAAE,EAAE,CAAC,IAAGnN,KAAK+uZ,QAAQ/rZ,KAAKyI,IAAGI,GAAE7I,KAAKyI,IAAGA,EAAhnB,CAA9X,IAAI,SAAY1F,GAAErC,IAAG,IAAMyE,GAAE5I,OAAO2W,KAAKnQ,IAAGxH,GAAEgB,OAAO2W,KAAKxS,IAAG,GAAGyE,GAAEjI,QAAQ3B,GAAE2B,OAAO,OAAM,EAAG,IAAI,IAAImH,GAAE,EAAEA,GAAEc,GAAEjI,OAAOmH,KAAI,CAAC,IAAMxB,GAAEsC,GAAEd,IAAG,IAAI3D,GAAElE,eAAeqG,KAAIE,GAAEF,MAAKnC,GAAEmC,IAAG,OAAM,CAAE,CAAC,OAAM,CAAE,CAAvL,CAAyLpC,GAAEwpH,OAAOxmH,GAAEwmH,QAAQ,CAAC,IAAM/9G,GAAE,GAAGtD,GAAE/F,GAAEm3Z,YAAYv5Z,GAAE5D,MAAM4D,GAAEwpH,OAAO/9G,IAAG/B,GAAEtH,GAAEm3Z,YAAYv2Z,GAAE5G,MAAM4G,GAAEwmH,OAAO/9G,IAAGA,GAAEhP,OAAOF,KAAKy+Z,QAAQsB,YAAY7wZ,IAAGlP,KAAKy+Z,QAAQS,YAAW,WAAKvN,GAAGjuZ,GAAEkI,IAAG6lZ,GAAG/tZ,GAAEyJ,GAAE,GAAE,CAAwnB,GAACzL,CAAAA,IAAA7B,aAAAA,MAAAmga,SAAWt8Z,QAAEu8Z,GAAAjga,KAACA,KAAK0+Z,UAAS,OAAQh7Z,IAAG1D,KAAKy+Z,QAAQQ,gBAAgBt9Z,SAAQ,SAAAwG,IAAG,OAAAA,GAAC,OAAQzE,GAAE,IAAE1D,KAAK4+Z,kBAAkBj9Z,SAAQ,SAACwG,GAAE5J,IAAK0ha,GAAKrB,kBAAkBh/Z,IAAIrB,GAAE4J,GAAE1F,QAAO,SAAA4E,IAAG,OAAAA,GAAEuJ,MAAMlN,EAAC,IAAE,GAAE,GAAChC,CAAAA,wBAAA7B,MAAA,SAAkB6D,IAAG1D,KAAKy+Z,QAAQQ,gBAAsB,OAACv7Z,IAAG1D,KAAK4+Z,kBAAiB,OAAQl7Z,IAAG,IAAMyE,GAAEnI,KAAKy+Z,QAAQc,iBAAiB5/Z,IAAI+D,IAAGyE,KAAIA,GAAExG,SAAQ,SAAApD,IAAG,OAAAA,GAAE+iC,SAAU,IAACthC,KAAKy+Z,QAAQc,iBAAgB,OAAQ77Z,IAAI,GAAA,CAAAhC,IAAA7B,iCAAAA,MAAAqga,SAA+Bx8Z,GAAEyE,QAAEg4Z,GAAAnga,KAAOzB,GAAEyB,KAAKy+Z,QAAQ2B,OAAOlxO,MAAMxrL,GAAE0tZ,IAAG,GAAI7yZ,GAAEoD,SAAQ,SAAA0F,IAAI,IAAGA,GAAE82Z,IAAL,CAAgB,IAAMt4Z,GAAEs6Z,GAAK1B,QAAQ4B,yBAAyBh5Z,IAAGxB,GAAEiN,KAAKjN,GAAElE,SAAQ,SAAA8J,WAAGA,GAAE60Z,sBAAsBj5Z,GAAEc,IAAE,GAAG,EAAI,IAACg4Z,GAAKI,kBAAkBl5Z,IAAE,IAAGrH,KAAKy+Z,QAAQ+B,0BAAyB,WAAI,OAAAjia,GAAEoD,SAAQ,SAAA0F,IAAC,OAAE84Z,GAAKI,kBAAkBl5Z,GAAE,GAAE,GAAA,IAAC3F,IAAA,wBAAA7B,MAAA,SAAsB6D,GAAEyE,GAAE5J,GAAE8I,IAAE,IAAAo5Z,GAAAzga,KAAO6F,GAAE7F,KAAKy+Z,QAAQQ,gBAAgBt/Z,IAAI+D,IAAG+H,GAAE,IAAIsM,IAAI,GAAGlS,GAAE,CAAC,IAAMe,GAAE,GAAG,GAAGf,GAAElE,SAAQ,SAAC8B,GAAEgD,IAAK,GAAGgF,GAAE7L,IAAI6G,GAAEhD,GAAE5D,OAAO4ga,GAAK/B,UAAUl9Z,IAAIiF,IAAG,CAAC,IAAM+E,GAAEi1Z,GAAKv0L,QAAQxoO,GAAE+C,GAAE43Z,GAAGh3Z,IAAGmE,IAAG5E,GAAE5D,KAAKwI,GAAG,CAAA,IAAG5E,GAAE1G,OAAO,OAAOF,KAAKy+Z,QAAQiC,qBAAqB1ga,KAAKV,GAAGoE,IAAE,EAAGyE,GAAEsD,IAAGlN,IAAG8wZ,GAAGzoZ,IAAGooZ,QAAO,WAAI,OAAAyR,GAAKhC,QAAQkC,iBAAiBj9Z,QAAI,CAAE,CAAC,OAAM,CAAE,IAAChC,IAAA,iCAAA7B,MAAA,SAA+B6D,IAAE,IAAAk9Z,GAAC5ga,KAAMmI,GAAEnI,KAAK4+Z,kBAAkBj/Z,IAAI+D,IAAGnF,GAAEyB,KAAKy+Z,QAAQQ,gBAAgBt/Z,IAAI+D,IAAG,GAAGyE,IAAG5J,GAAE,CAAC,IAAM8I,GAAE,IAAIuZ,IAAIzY,GAAExG,SAAQ,SAAAkE,IAAI,IAAM4F,GAAE5F,GAAE+K,KAAK,IAAGvJ,GAAE7F,IAAIiK,IAAT,CAAmBpE,GAAEwB,IAAI4C,IAAG,IAAMhI,GAAEm9Z,GAAKlC,UAAU/+Z,IAAI8L,IAAGsxZ,mBAAmBt2Z,GAAElI,GAAEoB,IAAI8L,KAAI6yZ,GAAG9yZ,GAAE,IAAI4yZ,GAAGC,IAAI1yZ,GAAE,IAAI0zZ,GAAGuB,GAAKtha,GAAGmM,GAAE/H,IAAGk9Z,GAAKnC,QAAQiB,qBAAqBkB,GAAKjC,OAAO37Z,KAAK,CAAC3C,QAAQqD,GAAEmsZ,YAAYpkZ,GAAEk0Z,WAAWl8Z,GAAEqsZ,UAAUrpZ,GAAEspZ,QAAQvkZ,GAAEo0Z,OAAOj0Z,GAAEk0Z,sBAAqB,GAAhQ,CAAqQ,GAAE,CAAA,IAACn+Z,IAAA,aAAA7B,MAAA,SAAW6D,GAAEyE,IAAE,IAAA04Z,GAAA7ga,KAAOzB,GAAEyB,KAAKy+Z,QAAQ,GAAG/6Z,GAAEo9Z,mBAAmB9ga,KAAKkga,+BAA+Bx8Z,GAAEyE,KAAGnI,KAAKsga,sBAAsB58Z,GAAEyE,IAAE,GAAhG,CAA2G,IAAId,IAAE,EAAG,GAAG9I,GAAEwia,gBAAgB,CAAC,IAAMl7Z,GAAEtH,GAAEwwZ,QAAQ7uZ,OAAO3B,GAAEyia,wBAAwBrha,IAAI+D,IAAG,GAAG,GAAGmC,IAAGA,GAAE3F,OAAOmH,IAAE,OAAgB,IAAR,IAAIoE,GAAE/H,GAAO+H,GAAEA,GAAEM,YAAY,GAAGxN,GAAE0ga,gBAAgBt/Z,IAAI8L,IAAG,CAACpE,IAAE,EAAG,KAAK,CAAE,CAAC,GAAGrH,KAAKiha,+BAA+Bv9Z,IAAG2D,GAAE9I,GAAEmia,qBAAqB1ga,KAAKV,GAAGoE,IAAE,EAAGyE,QAAO,CAAC,IAAMtC,GAAEnC,GAAEy6Z,MAAMt4Z,IAAGA,KAAI+3Z,MAAMr/Z,GAAE2ga,YAAW,WAAA,OAAI2B,GAAKN,kBAAkB78Z,GAAE,IAAEnF,GAAE2ia,uBAAuBx9Z,IAAGnF,GAAE4ia,mBAAmBz9Z,GAAEyE,IAAI,CAA3Z,CAA2Z,GAACzG,CAAAA,iBAAA7B,MAAA,SAAW6D,GAAEyE,IAAG22Z,GAAGp7Z,GAAE1D,KAAK6+Z,kBAAgBn9Z,CAAAA,IAAA7B,yBAAAA,MAAAuha,SAAuB19Z,QAAE29Z,GAAArha,KAAOmI,GAAE,GAAG,OAAWnI,KAAC2+Z,OAAOh9Z,SAAQ,SAAApD,IAAI,IAAM8I,GAAE9I,GAAEqha,OAAO,IAAGv4Z,GAAE6lK,UAAL,CAAsB,IAAMrnK,GAAEtH,GAAE8B,QAAQoL,GAAE41Z,GAAKzC,kBAAkBj/Z,IAAIkG,IAAG4F,IAAGA,GAAE9J,SAAQ,SAAAiF,IAAI,GAAGA,GAAEgK,MAAMrS,GAAEsxZ,YAAY,CAAC,IAAMpsZ,GAAEmsZ,GAAG/pZ,GAAEtH,GAAEsxZ,YAAYtxZ,GAAEuxZ,UAAUjwZ,MAAMtB,GAAEwxZ,QAAQlwZ,OAAO4D,GAAEwsZ,MAAMvsZ,GAAE+rZ,GAAGlxZ,GAAEqha,OAAOh5Z,GAAEo4Z,MAAMv7Z,GAAEmD,GAAEwsD,SAAU,CAAA,IAAG/rD,GAAEi6Z,iBAAiBD,GAAK5C,QAAQS,YAAW,WAAK73Z,GAAEi6B,SAAS,IAAGn5B,GAAEnF,KAAKzE,GAAtR,CAAwR,IAAGyB,KAAK2+Z,OAAO,GAAGx2Z,GAAEoF,MAAK,SAAChP,GAAE8I,IAAK,IAAMxB,GAAEtH,GAAEoha,WAAW9+O,IAAIuzO,SAAS3oZ,GAAEpE,GAAEs4Z,WAAW9+O,IAAIuzO,SAAS,OAAQ,GAAEvuZ,IAAG,GAAG4F,GAAE5F,GAAE4F,GAAE41Z,GAAK5C,QAAQ2B,OAAOmB,gBAAgBhja,GAAE8B,QAAQgH,GAAEhH,SAAS,GAAG,CAAE,GAAE,GAAA,CAAAqB,IAAA,UAAA7B,MAAA,SAAQ6D,IAAG1D,KAAK+uZ,QAAQptZ,SAAQ,SAAAwG,IAAC,OAAEA,GAAEm5B,aAAWthC,KAAKkga,+BAA+Blga,KAAKw+Z,YAAY96Z,GAAE,IAAQ,CAAz8J,GAAy8J89Z,GAAE,WAA8iB,OAAAl1H,cAAzf,SAAAk1H,GAAY99Z,GAAEyE,GAAE5J,IAAE2tS,gBAAAs1H,KAAAA,IAACxha,KAAKm9Z,SAASz5Z,GAAE1D,KAAKoga,OAAOj4Z,GAAEnI,KAAK48Z,YAAYr+Z,GAAEyB,KAAK+uZ,QAAQ,GAAG/uZ,KAAKyha,gBAAgB,IAAI1pZ,IAAI/X,KAAKu/Z,iBAAiB,IAAIxnZ,IAAI/X,KAAKgha,wBAAwB,IAAIjpZ,IAAI/X,KAAKi/Z,gBAAgB,IAAIlnZ,IAAI/X,KAAK0ha,cAAc,IAAI9gZ,IAAI5gB,KAAK+ga,gBAAgB,EAAE/ga,KAAK0/Z,mBAAmB,EAAE1/Z,KAAK2ha,iBAAiB,CAAE,EAAC3ha,KAAK4ha,eAAe,GAAG5ha,KAAK6ha,UAAU,GAAG7ha,KAAK8ha,cAAc,GAAG9ha,KAAK+ha,wBAAwB,IAAIhqZ,IAAI/X,KAAKgia,uBAAuB,GAAGhia,KAAKiia,uBAAuB,GAAGjia,KAAKkia,kBAAkB,SAAC76Z,GAAExB,IAAM,IAACnE,CAAAA,CAAAA,IAAA7B,qBAAAA,MAA7iB,SAAmB6D,GAAEyE,IAAGnI,KAAKkia,kBAAkBx+Z,GAAEyE,GAAE,IAACzG,IAAA,gBAAA/B,IAAyf,WAAoB,IAAM+D,GAAE,GAAG,OAAW1D,KAAC4ha,eAAejga,SAAQ,SAAAwG,IAAIA,GAAE4mZ,QAAQptZ,SAAQ,SAAApD,IAAIA,GAAEiha,QAAQ97Z,GAAEV,KAAKzE,GAAE,GAAE,IAAGmF,EAAC,GAAChC,CAAAA,IAAA7B,kBAAAA,MAAAsia,SAAgBz+Z,GAAEyE,IAAG,IAAM5J,GAAE,IAAIgga,GAAG76Z,GAAEyE,GAAEnI,MAAM,OAAOA,KAAKm9Z,UAAUn9Z,KAAKoga,OAAOmB,gBAAgBvha,KAAKm9Z,SAASh1Z,IAAGnI,KAAKoia,sBAAsB7ja,GAAE4J,KAAInI,KAAKyha,gBAAgB7ha,IAAIuI,GAAE5J,IAAGyB,KAAKqia,oBAAoBl6Z,KAAInI,KAAK2ha,iBAAiBj+Z,IAAGnF,EAAE,GAAA,CAAAmD,IAAA,wBAAA7B,MAAA,SAAsB6D,GAAEyE,IAAG,IAAM5J,GAAEyB,KAAK4ha,eAAev6Z,GAAErH,KAAK+ha,wBAAwB,GAAGxja,GAAE2B,OAAO,GAAG,EAAE,CAA4C,IAA3C,IAAIuL,IAAE,EAAG7E,GAAE5G,KAAKoga,OAAOxP,iBAAiBzoZ,IAAQvB,IAAG,CAAC,IAAMnD,GAAE4D,GAAE1H,IAAIiH,IAAG,GAAGnD,GAAE,CAAC,IAAMgD,GAAElI,GAAE4K,QAAQ1F,IAAGlF,GAAEkT,OAAOhL,GAAE,EAAE,EAAE/C,IAAG+H,IAAE,EAAG,KAAK,CAAC7E,GAAE5G,KAAKoga,OAAOxP,iBAAiBhqZ,GAAE,CAAC6E,IAAGlN,GAAEiH,QAAQ9B,GAAE,MAAMnF,GAAEyE,KAAKU,IAAG,OAAO2D,GAAEzH,IAAIuI,GAAEzE,IAAGA,KAAEhC,CAAAA,IAAA7B,WAAAA,MAAAupO,SAAS1lO,GAAEyE,IAAG,IAAI5J,GAAEyB,KAAK2ha,iBAAiBj+Z,IAAG,OAAOnF,KAAIA,GAAEyB,KAAKmia,gBAAgBz+Z,GAAEyE,KAAI5J,EAAE,GAAA,CAAAmD,IAAA,kBAAA7B,MAAAyia,SAAgB5+Z,GAAEyE,GAAE5J,IAAG,IAAI8I,GAAErH,KAAK2ha,iBAAiBj+Z,IAAG2D,IAAGA,GAAE+hO,SAASjhO,GAAE5J,KAAIyB,KAAK+ga,iBAAiB,GAACr/Z,CAAAA,IAAA7B,UAAAA,MAAAyhC,SAAQ59B,GAAEyE,IAAEo6Z,IAAAA,GAAC7+Z,KAAAA,KAAI1D,KAAKk/Z,YAAW,WAAI,IAAIl/Z,KAAKwga,0BAAyB,WAAK,IAAMjia,GAAEgka,GAAKC,gBAAgB9+Z,IAAG6+Z,GAAKR,wBAAuB,OAAQxja,GAAEiga,aAAa,IAAMn3Z,GAAEk7Z,GAAKX,eAAez4Z,QAAQ5K,IAAG8I,IAAG,GAAGk7Z,GAAKX,eAAenwZ,OAAOpK,GAAE,GAAG9I,GAAE+iC,QAAQn5B,WAAUo6Z,GAAKZ,iBAAiBj+Z,GAAG,IAAE,GAAChC,CAAAA,IAAA7B,kBAAAA,eAAgB6D,IAAG,OAAO1D,KAAK2ha,iBAAiBj+Z,GAAE,GAAChC,CAAAA,IAAA7B,2BAAAA,eAAyB6D,IAAG,IAAMyE,GAAE,IAAIyY,IAAIriB,GAAEyB,KAAKi/Z,gBAAgBt/Z,IAAI+D,IAAG,GAAGnF,GAACkka,CAAAA,IAAwBC,GAAxBD,GAAAr3H,2BAAc7sS,GAAEkb,UAAQ,IAAvB,IAAAgpZ,GAAA58Z,MAAA68Z,GAAAD,GAAA18Z,KAAAy3D,MAAwB,CAAA,IAAhBn2D,GAACq7Z,GAAA7ia,MAAe,GAAGwH,GAAEw2Z,YAAY,CAAC,IAAMh4Z,GAAE7F,KAAKwia,gBAAgBn7Z,GAAEw2Z,aAAah4Z,IAAGsC,GAAEU,IAAIhD,GAAE,CAAA,CAAC,CAAA4e,MAAAA,IAAAg+Y,GAAA/+Z,EAAA+gB,GAAAg+Y,CAAAA,QAAAA,GAAA/2Z,GAAO,CAAA,CAAA,OAAAvD,EAAE,GAAA,CAAAzG,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,GAAE5J,GAAE8I,IAAG,GAAGs7Z,GAAGx6Z,IAAG,CAAC,IAAMtC,GAAE7F,KAAKwia,gBAAgB9+Z,IAAG,GAAGmC,GAAE,OAAOA,GAAEqmO,QAAQ/jO,GAAE5J,GAAE8I,KAAG,CAAG,CAAA,OAAM,CAAG,GAAA,CAAA3F,IAAA,aAAA7B,MAAA,SAAW6D,GAAEyE,GAAE5J,GAAE8I,IAAG,GAAIs7Z,GAAGx6Z,IAAP,CAAiB,IAAMtC,GAAEsC,GAAEg2Z,IAAI,GAAGt4Z,IAAGA,GAAEi4Z,cAAc,CAACj4Z,GAAEi4Z,eAAc,EAAGj4Z,GAAEk4Z,YAAW,EAAG,IAAMtyZ,GAAEzL,KAAKiia,uBAAuB94Z,QAAQhB,IAAGsD,IAAG,GAAGzL,KAAKiia,uBAAuBxwZ,OAAOhG,GAAE,GAAG,GAAG/H,GAAE,CAAC,IAAM+H,GAAEzL,KAAKwia,gBAAgB9+Z,IAAG+H,IAAGA,GAAEm3Z,WAAWz6Z,GAAE5J,GAAE,CAAC8I,IAAGrH,KAAKqia,oBAAoBl6Z,GAA5P,IAA+PzG,CAAAA,IAAA7B,sBAAAA,MAAAwia,SAAoB3+Z,IAAG1D,KAAKgia,uBAAuBh/Z,KAAKU,GAAG,GAAA,CAAAhC,IAAA,wBAAA7B,MAAA,SAAsB6D,GAAEyE,IAAGA,GAAEnI,KAAK0ha,cAAclga,IAAIkC,MAAK1D,KAAK0ha,cAAc74Z,IAAInF,IAAGo7Z,GAAGp7Z,GAAEg6Z,KAAK19Z,KAAK0ha,cAAclga,IAAIkC,MAAK1D,KAAK0ha,cAAoB,OAACh+Z,IAAGo8Z,GAAGp8Z,GAAEg6Z,IAAI,GAACh8Z,CAAAA,IAAA7B,aAAAA,eAAW6D,GAAEyE,GAAE5J,IAAG,GAAGoka,GAAGx6Z,IAAG,CAAC,IAAMd,GAAE3D,GAAE1D,KAAKwia,gBAAgB9+Z,IAAG,KAAK2D,GAAEA,GAAEw7Z,WAAW16Z,GAAE5J,IAAGyB,KAAK0ga,qBAAqBh9Z,GAAEyE,IAAE,EAAG5J,IAAG,IAAMsH,GAAE7F,KAAK+ha,wBAAwBpia,IAAIwI,IAAGtC,IAAGA,GAAEvG,KAAKoE,IAAGmC,GAAEg9Z,WAAW16Z,GAAE5J,GAAE,MAAUyB,KAACmha,mBAAmBh5Z,GAAE5J,MAAGmD,CAAAA,IAAA7B,uBAAAA,MAAA6ga,SAAqBh9Z,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG7F,KAAKiia,uBAAuBj/Z,KAAKmF,IAAGA,GAAEg2Z,IAAI,CAACN,YAAYn6Z,GAAEo6Z,cAAcz2Z,GAAE22Z,aAAaz/Z,GAAE0/Z,sBAAqB,EAAG6E,uBAAuBj9Z,GAAE,GAACnE,CAAAA,IAAA7B,SAAAA,MAAA0kU,SAAO7gU,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG,OAAO88Z,GAAGx6Z,IAAGnI,KAAKwia,gBAAgB9+Z,IAAG6gU,OAAOp8T,GAAE5J,GAAE8I,GAAExB,IAAG,WAAM,CAAA,GAACnE,CAAAA,IAAA7B,oBAAAA,MAAAkja,SAAkBr/Z,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG,OAAOnC,GAAEi8Z,WAAW16X,MAAMjlC,KAAKoga,OAAO18Z,GAAErD,QAAQqD,GAAEosZ,UAAUjwZ,MAAM6D,GAAEqsZ,QAAQlwZ,MAAMtB,GAAE8I,GAAE3D,GAAEosZ,UAAUpjY,QAAQhpB,GAAEqsZ,QAAQrjY,QAAQvkB,GAAEtC,GAAG,GAAA,CAAAnE,IAAA,yBAAA7B,MAAA,SAAuB6D,IAAEs/Z,IAAAA,GAAChja,KAAImI,GAAEnI,KAAKoga,OAAOlxO,MAAMxrL,GAAE0tZ,IAAG,GAAIjpZ,GAAExG,SAAQ,SAAApD,IAAC,OAAEyka,GAAKC,kCAAkC1ka,GAAG,IAAC,GAAGyB,KAAKgha,wBAAwBluZ,OAAO3K,GAAEnI,KAAKoga,OAAOlxO,MAAMxrL,GAAE4tZ,IAAG,IAAM3vZ,SAAQ,SAAApD,IAAG,OAAAyka,GAAKE,sCAAsC3ka,GAAG,MAAEmD,CAAAA,IAAA7B,oCAAAA,MAAAoja,SAAkCv/Z,IAAG,IAAMyE,GAAEnI,KAAKu/Z,iBAAiB5/Z,IAAI+D,IAAGyE,IAAGA,GAAExG,SAAQ,SAAApD,IAAIA,GAAEiha,OAAOjha,GAAE+ia,kBAAiB,EAAG/ia,GAAE+iC,SAAS,GAAE,IAAC5/B,IAAA,wCAAA7B,MAAA,SAAsC6D,IAAG,IAAMyE,GAAEnI,KAAKgha,wBAAwBrha,IAAI+D,IAAGyE,IAAGA,GAAExG,SAAQ,SAAApD,IAAC,OAAEA,GAAE0rI,QAAQ,GAAE,GAAA,CAAAvoI,IAAA,oBAAA7B,MAAA,WAAmB,IAAAsja,GAAAnja,KAAC,OAAO,IAAI8R,SAAQ,SAAApO,IAAI,GAAGy/Z,GAAKpU,QAAQ7uZ,OAAO,OAAOmvZ,GAAG8T,GAAKpU,SAASC,QAAO,WAAA,OAAItrZ,IAAI,IAACA,IAAG,GAAG,GAAA,CAAAhC,IAAA,mBAAA7B,MAAA,SAAiB6D,IAAE,IAAA0/Z,GAAAC,GAAArja,KAAOmI,GAAEzE,GAAEy6Z,IAAI,GAAGh2Z,IAAGA,GAAE21Z,cAAc,CAAC,GAAGp6Z,GAAEy6Z,IAAIP,GAAGz1Z,GAAE01Z,YAAY,CAAC79Z,KAAKkha,uBAAuBx9Z,IAAG,IAAMnF,GAAEyB,KAAKwia,gBAAgBr6Z,GAAE01Z,aAAat/Z,IAAGA,GAAEgia,kBAAkB78Z,GAAG,CAAA1D,KAAKmha,mBAAmBz9Z,GAAEyE,GAAE21Z,cAAc,CAAY,QAAXsF,GAAA1/Z,GAAE2lB,iBAAS,IAAA+5Y,IAAXA,GAAa9tY,SAASooY,KAAK19Z,KAAKsja,sBAAsB5/Z,IAAE,GAAI1D,KAAKoga,OAAOlxO,MAAMxrL,GAAE,wBAAuB,GAAI/B,SAAQ,SAAApD,IAAI8ka,GAAKC,sBAAsB/ka,IAAE,EAAI,GAAE,GAAA,CAAAmD,IAAA,QAAA7B,MAAA,WAAW0ja,IAAAA,GAALvja,KAAA0D,GAACsH,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,cAAE,EAAO7C,GAAE,GAAG,GAAGnI,KAAKyha,gBAAgB3uZ,OAAO9S,KAAKyha,gBAAgB9/Z,SAAQ,SAACpD,GAAE8I,IAAI,OAAAk8Z,GAAKnB,sBAAsB7ja,GAAE8I,GAAE,IAAErH,KAAKyha,gBAAgB9ga,SAASX,KAAK+ga,iBAAiB/ga,KAAKgia,uBAAuB9ha,OAAO,IAAI,IAAI3B,GAAE,EAAEA,GAAEyB,KAAKgia,uBAAuB9ha,OAAO3B,KAAIuga,GAAG9+Z,KAAKgia,uBAAuBzja,IAAG,oBAAoB,GAAGyB,KAAK4ha,eAAe1ha,SAASF,KAAK0/Z,oBAAoB1/Z,KAAKiia,uBAAuB/ha,QAAQ,CAAC,IAAM3B,GAAE,GAAG,IAAI4J,GAAEnI,KAAKwja,iBAAiBjla,GAAEmF,GAAE,CAAC,QAAQ,IAAI,IAAI2D,GAAE,EAAEA,GAAE9I,GAAE2B,OAAOmH,KAAI9I,GAAE8I,KAAI,CAAC,MAAU,IAAA,IAAI9I,GAAE,EAAEA,GAAEyB,KAAKiia,uBAAuB/ha,OAAO3B,KAAIyB,KAAK2ga,iBAAiB3ga,KAAKiia,uBAAuB1ja,KAAI,GAAGyB,KAAK0/Z,mBAAmB,EAAE1/Z,KAAKgia,uBAAuB9ha,OAAO,EAAEF,KAAKiia,uBAAuB/ha,OAAO,EAAEF,KAAK6ha,UAAUlga,SAAQ,SAAApD,IAAG,OAAAA,IAAI,IAACyB,KAAK6ha,UAAU,GAAG7ha,KAAK8ha,cAAc5ha,OAAO,CAAC,IAAM3B,GAAEyB,KAAK8ha,cAAc9ha,KAAK8ha,cAAc,GAAG35Z,GAAEjI,OAAOmvZ,GAAGlnZ,IAAG6mZ,QAAO,WAAKzwZ,GAAEoD,SAAQ,SAAA0F,IAAG,OAAAA,IAAI,GAAA,IAAG9I,GAAEoD,SAAQ,SAAA0F,IAAC,OAAEA,OAAK,CAAA,GAAC3F,CAAAA,IAAA7B,cAAAA,MAAAkga,SAAYr8Z,IAAG,MAA+B,IAAAq4O,GAAG,MAAK,EAAM,GAACr6O,CAAAA,uBAAA7B,MAAA,SAAiB6D,GAAEyE,IAAE,IAAAs7Z,GAAAzja,KAAOzB,GAAE,IAAI43Z,GAAG9uZ,GAAE,GAAGxB,GAAE,IAAIkS,IAAItM,GAAE,GAAG7E,GAAE,IAAImR,IAAItU,GAAE,IAAIsU,IAAItR,GAAE,IAAIsR,IAAIvM,GAAE,IAAIoV,IAAI5gB,KAAK0ha,cAAc//Z,SAAQ,SAAAs6O,IAAKzwO,GAAE3C,IAAIozO,IAA2D,IAAvD,IAAMwB,GAAGgmL,GAAKrD,OAAOlxO,MAAM+sD,GAAG,sBAAqB,GAAYqB,GAAG,EAAEA,GAAGG,GAAGv9O,OAAOo9O,KAAK9xO,GAAE3C,IAAI40O,GAAGH,IAAI,IAAG,IAAM3xO,GAAE3L,KAAKm9Z,SAAStxZ,GAAExC,MAAM4xB,KAAKj7B,KAAKi/Z,gBAAgB/oZ,QAAQxO,GAAEg8Z,GAAG73Z,GAAE7L,KAAKgia,wBAAwBt2Z,GAAE,IAAIqM,IAAQ7I,GAAE,EAAExH,GAAE/F,SAAQ,SAACs6O,GAAGwB,IAAM,IAAMH,GAAG2zK,GAAG/hZ,KAAIxD,GAAE9L,IAAI69O,GAAGH,IAAIrB,GAAGt6O,SAAQ,SAAAyiF,IAAE,OAAE06U,GAAG16U,GAAGk5J,GAAG,GAAE,IAAiC,IAA/B,IAAM1xO,GAAE,GAAGuB,GAAE,IAAIyT,IAAI/S,GAAE,IAAI+S,IAAYq7N,GAAG,EAAEA,GAAGj8O,KAAKiia,uBAAuB/ha,OAAO+7O,KAAK,CAAC,IAAMwB,GAAGz9O,KAAKiia,uBAAuBhmL,IAAIqB,GAAGG,GAAG0gL,IAAI7gL,IAAIA,GAAGwgL,gBAAgBlyZ,GAAE5I,KAAKy6O,IAAItwO,GAAEtE,IAAI40O,IAAIH,GAAG0gL,aAAah+Z,KAAKoga,OAAOlxO,MAAMuuD,GAAG,qBAAoB,GAAI97O,SAAQ,SAAAyiF,IAAE,OAAEj3E,GAAEtE,IAAIu7E,GAAI,IAACv2E,GAAEhF,IAAI40O,IAAI,CAAC,IAAMjvO,GAAE,IAAIuJ,IAAI/J,GAAE01Z,GAAG73Z,GAAExC,MAAM4xB,KAAK9tB,KAAIa,GAAErM,SAAQ,SAACs6O,GAAGwB,IAAM,IAAMH,GAAG4zK,GAAGhiZ,KAAIV,GAAE5O,IAAI69O,GAAGH,IAAIrB,GAAGt6O,SAAQ,SAAAyiF,IAAE,OAAE06U,GAAG16U,GAAGk5J,GAAI,GAAA,IAAG55O,GAAEV,MAAK,WAAK0E,GAAE/F,SAAQ,SAACs6O,GAAGwB,IAAM,IAAMH,GAAG5xO,GAAE/L,IAAI89O,IAAIxB,GAAGt6O,SAAQ,SAAAyiF,IAAI,OAAA07U,GAAG17U,GAAGk5J,GAAG,GAAE,IAAEtvO,GAAErM,SAAQ,SAACs6O,GAAGwB,IAAM,IAAMH,GAAG9uO,GAAE7O,IAAI89O,IAAIxB,GAAGt6O,SAAQ,SAAAyiF,IAAI,OAAA07U,GAAG17U,GAAGk5J,GAAI,GAAA,IAAG1xO,GAAEjK,SAAQ,SAAAs6O,IAAKwnL,GAAK9C,iBAAiB1kL,GAAI,GAAE,IAAoB,IAAlB,IAAMJ,GAAG,GAAGK,GAAG,GAAWD,GAAGj8O,KAAK4ha,eAAe1ha,OAAO,EAAE+7O,IAAI,EAAEA,KAAKj8O,KAAK4ha,eAAe3lL,IAAImlL,uBAAuBj5Z,IAAGxG,SAAQ,SAAA27O,IAAK,IAAMl5J,GAAGk5J,GAAGsiL,OAAO15B,GAAG5oJ,GAAGj9O,QAAQ,GAAGw7O,GAAG74O,KAAKohF,IAAIq/U,GAAKzB,uBAAuB9ha,OAAO,CAAC,IAAMyja,GAAGz9B,GAAGi4B,IAAI,GAAGwF,IAAIA,GAAG5F,WAAW,CAAC,GAAG4F,GAAGb,wBAAwBa,GAAGb,uBAAuBtha,IAAI87O,GAAGuyK,aAAa,CAAC,IAAM+T,GAAGD,GAAGb,uBAAuBnja,IAAI29O,GAAGuyK,aAAagU,GAAGJ,GAAKxE,gBAAgBt/Z,IAAI29O,GAAGj9O,SAAS,GAAGwja,IAAIA,GAAGria,IAAI87O,GAAGuyK,aAAa,CAAC,IAAMiU,GAAGD,GAAGlka,IAAI29O,GAAGuyK,aAAaiU,GAAGjka,MAAM+ja,GAAGC,GAAGjka,IAAI09O,GAAGuyK,YAAYiU,GAAG,CAAC,CAAC,YAAY1/U,GAAG9iD,SAAS,CAAC,CAAC,IAAMz5B,IAAI8D,KAAI83Z,GAAKrD,OAAOmB,gBAAgB51Z,GAAEu6X,IAAIyG,GAAGn+X,GAAE7O,IAAIumY,IAAI0G,GAAGlhY,GAAE/L,IAAIumY,IAAI2G,GAAG42B,GAAKV,kBAAkBzlL,GAAG/+O,GAAEquY,GAAGD,GAAG9kY,IAAI,GAAGglY,GAAG9rL,QAAQ8rL,GAAG9rL,OAAO7gN,OAAmBg8O,GAAGl5O,KAAK6pY,QAAnD,CAAuD,GAAGhlY,GAAG,OAAOu8E,GAAG8qU,SAAQ,WAAI,OAAAyC,GAAGzrB,GAAG2G,GAAG8uB,WAAW,IAAEv3U,GAAGh+D,WAAU,WAAA,OAAIqrY,GAAGvrB,GAAG2G,GAAG+uB,SAAU,SAAMv0Z,GAAErE,KAAKohF,IAAI,GAAGk5J,GAAGuiL,qBAAqB,OAAOz7U,GAAG8qU,SAAQ,WAAI,OAAAyC,GAAGzrB,GAAG2G,GAAG8uB,WAAW,IAAEv3U,GAAGh+D,WAAU,WAAA,OAAIqrY,GAAGvrB,GAAG2G,GAAG+uB,kBAAgBv0Z,GAAErE,KAAKohF,IAAI,IAAM2/U,GAAG,GAAGl3B,GAAGkqB,UAAUp1Z,SAAQ,SAAAgia,IAAKA,GAAGvK,yBAAwB,EAAGqK,GAAK/B,cAAclga,IAAImia,GAAGtja,UAAU0ja,GAAG/ga,KAAK2ga,OAAM92B,GAAGkqB,UAAUgN,GAAGxla,GAAEk4F,OAAOyvS,GAAG2G,GAAGkqB,WAAWtrZ,GAAEzI,KAAK,CAACgha,YAAYn3B,GAAG+yB,OAAOx7U,GAAG/jF,QAAQ6lY,KAAK2G,GAAGgvB,gBAAgBl6Z,SAAQ,SAAAgia,IAAI,OAAAzT,GAAGtpZ,GAAE+8Z,GAAG,IAAI3ga,KAAKohF,GAAI,IAACyoT,GAAGmpB,cAAcr0Z,SAAQ,SAACgia,GAAGC,IAAM,GAAGD,GAAG7wZ,KAAK,CAAC,IAAI+wZ,GAAGpga,GAAE9D,IAAIika,IAAIC,IAAIpga,GAAE7D,IAAIgka,GAAGC,GAAG,IAAIjjZ,KAAK+iZ,GAAGhia,SAAQ,SAACmia,GAAGG,IAAK,OAAAJ,GAAGh7Z,IAAIo7Z,GAAG,GAAE,CAAA,IAAGp3B,GAAGopB,eAAet0Z,SAAQ,SAACgia,GAAGC,IAAM,IAAIC,GAAGp9Z,GAAE9G,IAAIika,IAAIC,IAAIp9Z,GAAE7G,IAAIgka,GAAGC,GAAG,IAAIjjZ,KAAK+iZ,GAAGhia,SAAQ,SAACmia,GAAGG,IAAK,OAAAJ,GAAGh7Z,IAAIo7Z,GAAG,GAAE,GAAjtB,CAAmtB,IAAE,GAAG/nL,GAAGh8O,OAAO,CAAC,IAAM+7O,GAAG,GAAGC,GAAGv6O,SAAQ,SAAA87O,IAAKxB,GAAGj5O,KAA0B,IAAI+4O,GAAG,MAAK,GAAO,IAAGF,GAAGl6O,SAAQ,SAAA87O,IAAE,OAAEA,GAAGn8M,SAAU,IAACthC,KAAK+/Z,YAAY9jL,IAAI,IAAMD,GAAG,IAAIjkO,IAAImlO,GAAG,IAAInlO,IAAItM,GAAE9J,SAAQ,SAAAs6O,IAAK,IAAMwB,GAAGxB,GAAG57O,QAAQ9B,GAAEiD,IAAIi8O,MAAMP,GAAGt9O,IAAI69O,GAAGA,IAAIgmL,GAAKS,sBAAsBjoL,GAAG2jL,OAAO/B,YAAY5hL,GAAG+nL,YAAYhoL,IAAK,IAAE30O,GAAE1F,SAAQ,SAAAs6O,IAAK,IAAMwB,GAAGxB,GAAG57O,QAAQoja,GAAKU,oBAAoB1mL,IAAG,EAAGxB,GAAG4hL,YAAY5hL,GAAG4zK,YAAY,MAAMluZ,SAAQ,SAAAyiF,IAAK8rU,GAAGl0K,GAAGyB,GAAG,IAAIz6O,KAAKohF,IAAIA,GAAG9iD,SAAS,GAAE,IAAG,IAAM+6M,GAAGzwO,GAAEnJ,QAAO,SAAAw5O,IAAE,OAAEmoL,GAAGnoL,GAAGx4O,GAAEgD,GAAG,IAAC6wV,GAAG,IAAIv/U,IAAIssZ,GAAG/sE,GAAGt3V,KAAKoga,OAAOvyZ,GAAEpH,GAAEmnZ,IAAIjsZ,SAAQ,SAAAs6O,IAAKmoL,GAAGnoL,GAAGx4O,GAAEgD,KAAI41O,GAAGr5O,KAAKi5O,GAAI,IAAE,IAAMw7G,GAAG,IAAI1/U,IAAIrQ,GAAE/F,SAAQ,SAACs6O,GAAGwB,IAAM4mL,GAAG5sE,GAAGgsE,GAAKrD,OAAO,IAAIx/Y,IAAIq7N,IAAIx4O,GAAE,IAAK,IAAE44O,GAAG16O,SAAQ,SAAAs6O,IAAIqoL,IAAAA,GAAAC,GAAO9mL,GAAG65G,GAAG33V,IAAIs8O,IAAIqB,GAAGm6G,GAAG93V,IAAIs8O,IAAIq7G,GAAG13V,IAAIq8O,GAAG,IAAIlkO,IAAGskB,GAAAA,OAAAwwQ,mBAAkBy3H,QAAlBA,GAAK7mL,cAAE,EAAFA,GAAIvpO,iBAASowZ,IAAAA,GAAAA,GAAE,IAAEz3H,mBAAiB,QAAjB03H,GAAIjnL,cAAE,EAAFA,GAAIppO,iBAAS,IAAAqwZ,GAAAA,GAAE,MAAK,IAAG,IAAM7sE,GAAG,GAAGC,GAAG,GAAGJ,GAAG,CAAE,EAAC9rV,GAAE9J,SAAQ,SAAAs6O,IAAK,IAAcwB,GAA6BxB,GAArC57O,QAAkBi9O,GAAmBrB,GAA1B2jL,OAAsBx7U,GAAI63J,GAAhB+nL,YAAmB,GAAGzla,GAAEiD,IAAIi8O,IAAI,CAAC,GAAGjyO,GAAEhK,IAAIi8O,IAAI,OAAOH,GAAGl3N,WAAU,WAAI,OAAAqrY,GAAGh0K,GAAGr5J,GAAGw3U,SAAU,IAACt+K,GAAGlkN,UAAS,EAAGkkN,GAAGknL,kBAAkBpgV,GAAGmqU,gBAAgBlnZ,GAAErE,KAAKs6O,IAAI,IAAI4oJ,GAAG3uC,GAAG,GAAGr6G,GAAGpqO,KAAK,EAAE,CAAuB,IAAtB,IAAI65X,GAAGlvJ,GAASmvJ,GAAG,GAAQD,GAAGA,GAAG5gY,YAAY,CAAC,IAAM8gY,GAAG3vJ,GAAGv9O,IAAIgtY,IAAI,GAAGE,GAAG,CAAC3G,GAAG2G,GAAG,KAAK,CAACD,GAAG5pY,KAAK2pY,GAAG,CAACC,GAAGjrY,SAAQ,SAAAkrY,IAAE,OAAE3vJ,GAAGt9O,IAAIitY,GAAG3G,GAAI,GAAA,CAAC,IAAMr+X,GAAG47Z,GAAKgB,gBAAgBnnL,GAAGugL,YAAYz5U,GAAG43J,GAAGn2O,GAAE4xV,GAAGH,IAAI,GAAGh6G,GAAGonL,cAAc78Z,IAAIq+X,KAAK3uC,GAAGG,GAAG10V,KAAKs6O,QAAQ,CAAC,IAAMqvJ,GAAG82B,GAAKlE,iBAAiB5/Z,IAAIumY,IAAIyG,IAAIA,GAAGzsY,SAASo9O,GAAGgxK,aAAae,GAAG1iB,KAAKtlY,GAAErE,KAAKs6O,GAAG,CAAC,MAAMq0K,GAAGl0K,GAAGr5J,GAAGu3U,YAAYr+K,GAAGl3N,WAAU,WAAA,OAAIqrY,GAAGh0K,GAAGr5J,GAAGw3U,aAAWjkE,GAAG30V,KAAKs6O,IAAI9xO,GAAEhK,IAAIi8O,KAAKp2O,GAAErE,KAAKs6O,GAAI,IAAEq6G,GAAGh2V,SAAQ,SAAAs6O,IAAK,IAAMwB,GAAG53O,GAAElG,IAAIs8O,GAAG57O,SAAS,GAAGo9O,IAAIA,GAAGv9O,OAAO,CAAC,IAAMo9O,GAAG+xK,GAAG5xK,IAAIxB,GAAGyoL,cAAcpnL,IAAI,IAAGj2O,GAAE1F,SAAQ,SAAAs6O,IAAKA,GAAGqyK,aAAaryK,GAAG0oL,iBAAiB1oL,GAAGqyK,cAAcryK,GAAG36M,SAAS,IAAG,IAAI,IAAI26M,GAAG,EAAEA,GAAGrwO,GAAE1L,OAAO+7O,KAAK,CAAC,IAAMwB,GAAG7xO,GAAEqwO,IAAIqB,GAAGG,GAAG0gL,IAAI,GAAG2B,GAAGriL,GAAGyzK,KAAI5zK,KAAIA,GAAG0gL,aAApB,CAA0C,IAAI55U,GAAG,GAAG,GAAGx9E,GAAEkM,KAAK,CAAC,IAAIjL,GAAGjB,GAAEjH,IAAI89O,IAAI51O,IAAIA,GAAG3H,QAAQkkF,GAAGphF,KAAImI,MAAPi5E,GAAEyoN,mBAAShlS,KAAuC,IAAnC,IAAI8kY,GAAG3sY,KAAKoga,OAAOlxO,MAAMuuD,GAAG6zK,IAAG,GAAY1kB,GAAG,EAAEA,GAAGD,GAAGzsY,OAAO0sY,KAAK,CAAC,IAAIC,GAAGjmY,GAAEjH,IAAIgtY,GAAGC,KAAKC,IAAIA,GAAG3sY,QAAQkkF,GAAGphF,KAAImI,MAAPi5E,GAAEyoN,mBAASggG,IAAG,CAAC,CAAC,IAAM3G,GAAG9hT,GAAG3hF,QAAO,SAAAoF,IAAE,OAAGA,GAAGqlK,SAAU,IAACg5N,GAAGhmY,OAAO0ka,GAAG5ka,KAAKy9O,GAAGyoJ,IAAIlmY,KAAK2ga,iBAAiBljL,GAAzR,CAA4R,CAAC,OAAO7xO,GAAE1L,OAAO,EAAEw3V,GAAG/1V,SAAQ,SAAAs6O,IAAKwnL,GAAK1U,QAAQ/rZ,KAAKi5O,IAAIA,GAAG+yK,QAAO,WAAK/yK,GAAG36M,UAAU,IAAMm8M,GAAGgmL,GAAK1U,QAAQ5lZ,QAAQ8yO,IAAIwnL,GAAK1U,QAAQt9Y,OAAOgsO,GAAG,EAAG,IAAExB,GAAGkkJ,MAAM,IAAGzoC,EAAE,GAACh2V,CAAAA,iBAAA7B,MAAA,SAAW6D,IAAG1D,KAAK6ha,UAAU7+Z,KAAKU,GAAE,GAAChC,CAAAA,IAAA7B,2BAAAA,MAAA2ga,SAAyB98Z,IAAG1D,KAAK8ha,cAAc9+Z,KAAKU,GAAG,GAAA,CAAAhC,IAAA7B,sBAAAA,MAAAska,SAAoBzga,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG,IAAI4F,GAAE,GAAG,GAAGtD,GAAE,CAAC,IAAMvB,GAAE5G,KAAKgha,wBAAwBrha,IAAI+D,IAAGkD,KAAI6E,GAAE7E,GAAG,KAAI,CAAC,IAAMA,GAAE5G,KAAKu/Z,iBAAiB5/Z,IAAI+D,IAAG,GAAGkD,GAAE,CAAC,IAAMnD,IAAGoC,IAAGA,IAAGw4Z,GAAGz3Z,GAAEjF,SAAQ,SAAA8E,IAAIA,GAAE+4Z,SAAS/7Z,IAAGgD,GAAEopZ,aAAaxoZ,IAAGoE,GAAEzI,KAAKyD,GAAE,GAAG,CAAA,CAAC,OAAOlI,IAAG8I,MAAKoE,GAAEA,GAAEhJ,QAAO,SAAAmE,IAAC,QAAIrI,IAAGA,IAAGqI,GAAEi3Z,aAAax2Z,IAAGA,IAAGT,GAAEipZ,iBAAepkZ,EAAC,GAAC/J,CAAAA,IAAA7B,wBAAAA,eAAsB6D,GAAEyE,GAAE5J,IAAE,IAA2Hsma,GAA3HC,GAAA9ka,KAAO6F,GAAEsC,GAAE9H,QAAQoL,GAAEtD,GAAEuzZ,yBAAoB,EAAOh4Z,GAAEkD,GAAEuB,GAAEuzZ,yBAAoB,EAAOvzZ,GAAE0nZ,YAAYkV,GAAA35H,2BAAejjS,GAAE4uZ,WAASiO,IAAAA,IAAAA,QAAAA,WAAC,IAAOv+Z,GAAvBo+Z,GAAAhla,MAA2BQ,QAAQmL,GAAE/E,KAAIZ,GAAE8F,GAAEukZ,GAAG3xZ,GAAEkI,GAAE,IAAIq+Z,GAAKX,oBAAoB19Z,GAAE+E,GAAEC,GAAE7E,GAAEuB,GAAE4nZ,SAASpuZ,SAAQ,SAAA+F,IAAI,IAAMgE,GAAEhE,GAAEu9Z,gBAAgBv5Z,GAAEyjZ,eAAezjZ,GAAEyjZ,gBAAgBznZ,GAAE45B,UAAU31B,GAAE3I,KAAK0E,GAAG,GAAE,EAAhN,IAAAq9Z,GAAAl/Z,MAAAg/Z,GAAAE,GAAAh/Z,KAAAy3D,MAAAwnW,SAAgN,OAAAvgZ,IAAAsgZ,GAAArha,EAAA+gB,GAAA,CAAA,QAAAsgZ,GAAAr5Z,GAAAimZ,CAAAA,GAAG9rZ,GAAEsC,GAAEwzZ,WAAW,GAACj6Z,CAAAA,IAAA7B,kBAAAA,eAAgB6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,GAAE4F,IAAE,IAAAy5Z,GAAAlla,KAAO4G,GAAEuB,GAAE0nZ,YAAYpsZ,GAAE0E,GAAE9H,QAAQoG,GAAE,GAAG+E,GAAE,IAAIoV,IAAIjV,GAAE,IAAIiV,IAAI/U,GAAE1D,GAAE4uZ,UAAUh0Z,KAAI,SAAA2I,IAAI,IAAMwD,GAAExD,GAAErL,QAAQmL,GAAE3C,IAAIqG,IAAG,IAAMtD,GAAEsD,GAAEivZ,IAAI,GAAGvyZ,IAAGA,GAAEqyZ,qBAAqB,OAAO,IAAInQ,GAAGpiZ,GAAE8jB,SAAS9jB,GAAEgxD,OAAO,IAAMvvD,GAAE+B,KAAIzL,GAAEoK,GAAE,SAAY9H,IAAG,IAAMrC,GAAE,GAAG,OAAOyha,GAAGp/Z,GAAErC,IAAGA,EAAC,CAA1C,EAA6CnF,GAAEoB,IAAIuP,KAAIyuZ,IAAI56Z,KAAI,SAAAi5O,IAAI,OAAAA,GAAGipL,eAAe,KAAGxia,QAAO,SAAAu5O,IAAI,QAAEA,GAAG37O,SAAS27O,GAAG37O,UAAU6O,EAAE,IAACV,GAAE3I,GAAElG,IAAIuP,IAAGlB,GAAEvC,GAAE9L,IAAIuP,IAAG2sO,GAAGyzK,GAAG4V,GAAKtI,YAAYlxZ,GAAEihI,UAAUn+H,GAAER,IAAGkuO,GAAGgpL,GAAK3H,aAAa7xZ,GAAEmwO,GAAGhuO,IAAG,GAAGnC,GAAEwqZ,aAAa7uZ,IAAGsE,GAAE9C,IAAIqG,IAAG/B,GAAE,CAAC,IAAM6uO,GAAG,IAAIqjL,GAAG37Z,GAAEkD,GAAEsI,IAAG8sO,GAAG0oL,cAAcxoL,IAAIz1O,GAAEzD,KAAKg5O,IAAI,OAAOE,EAAE,IAAGz1O,GAAE9E,SAAQ,SAAA+J,IAAIwkZ,GAAGgV,GAAKlE,wBAAwBt1Z,GAAErL,QAAQ,IAAI2C,KAAK0I,IAAGA,GAAEsjZ,QAAO,WAAI,OAAA,SAAYjpZ,GAAErC,GAAEyE,IAAG,IAAI5J,GAAEwH,GAAEpG,IAAI+D,IAAG,GAAGnF,GAAE,CAAC,GAAGA,GAAE2B,OAAO,CAAC,IAAMmH,GAAE9I,GAAE4K,QAAQhB,IAAG5J,GAAEkT,OAAOpK,GAAE,EAAE,CAAC,GAAG9I,GAAE2B,QAAQ6F,GAAC,OAAQrC,GAAE,CAAC,OAAOnF,EAAE,CAA1H,CAA2H2ma,GAAKlE,wBAAwBt1Z,GAAErL,QAAQqL,GAAE,GAAE,IAAEF,GAAE7J,SAAQ,SAAA+J,IAAG,OAAAozZ,GAAGpzZ,GAAE2lZ,GAAI,IAAC,IAAM3pZ,GAAE2nZ,GAAGxjZ,IAAG,OAAOnE,GAAE0e,WAAU,WAAK5a,GAAE7J,SAAQ,SAAA+J,IAAC,OAAEo0Z,GAAGp0Z,GAAE2lZ,GAAG,IAAEI,GAAGhuZ,GAAE0E,GAAEyzZ,SAAU,IAAEjwZ,GAAEhK,SAAQ,SAAA+J,IAAIwkZ,GAAG7oZ,GAAEqE,GAAE,IAAI1I,KAAK0E,GAAG,IAAEA,EAAE,GAAA,CAAAhG,IAAA7B,eAAAA,MAAA09Z,SAAa75Z,GAAEyE,GAAE5J,IAAG,OAAO4J,GAAEjI,OAAO,EAAEF,KAAKoga,OAAO58Y,QAAQ9f,GAAErD,QAAQ8H,GAAEzE,GAAE8rB,SAAS9rB,GAAEg5D,MAAMh5D,GAAE67X,OAAOhhY,IAAG,IAAIuvZ,GAAGpqZ,GAAE8rB,SAAS9rB,GAAEg5D,MAAM,IAAQ,CAA3yW,GAA2yW2iW,GAAE,WAA0Q,OAAA/yH,cAAzQ,SAAA+yH,GAAY37Z,GAAEyE,GAAE5J,IAAE2tS,gBAAAlsS,KAAAq/Z,IAACr/Z,KAAK69Z,YAAYn6Z,GAAE1D,KAAK6vZ,YAAY1nZ,GAAEnI,KAAKK,QAAQ9B,GAAEyB,KAAKola,QAAQ,IAAItX,GAAG9tZ,KAAKqla,qBAAoB,EAAGrla,KAAKsla,iBAAiB,IAAIvtZ,IAAI/X,KAAKktK,WAAU,EAAGltK,KAAKsuZ,aAAa,KAAKtuZ,KAAKsha,kBAAiB,EAAGtha,KAAKo5B,UAAS,EAAGp5B,KAAKw/Z,QAAO,EAAGx/Z,KAAKuuZ,UAAU,CAAC,GAAC7sZ,CAAAA,CAAAA,IAAA7B,gBAAAA,MAAA6ka,SAAchha,IAAG1D,KAAKqla,sBAAsBrla,KAAKola,QAAQ1ha,GAAE1D,KAAKsla,iBAAiB3ja,SAAQ,SAACwG,GAAE5J,IAAK4J,GAAExG,SAAQ,SAAA0F,IAAG,OAAAooZ,GAAG/rZ,GAAEnF,QAAE,EAAO8I,GAAG,GAAA,IAAGrH,KAAKsla,iBAAiB3ka,QAAQX,KAAKqla,qBAAoB,EAAGrla,KAAKwka,kBAAkB9ga,GAAE6qZ,WAAWvuZ,KAAKw/Z,QAAO,EAAG,IAAC99Z,IAAA,gBAAA7B,MAAA,WAAgB,YAAYula,OAAQ,GAAA,CAAA1ja,IAAA,oBAAA7B,MAAA,SAAkB6D,IAAG1D,KAAKuuZ,UAAU7qZ,EAAE,GAAA,CAAAhC,IAAA,mBAAA7B,MAAA,SAAiB6D,IAAE6ha,IAAAA,GAACvla,KAAMmI,GAAEnI,KAAKola,QAAQj9Z,GAAEinZ,iBAAiB1rZ,GAAEwrZ,SAAQ,WAAI,OAAA/mZ,GAAEinZ,gBAAgB,QAAQ,IAAE1rZ,GAAEsrZ,QAAO,WAAA,OAAIuW,GAAKt7R,QAAQ,IAAEvmI,GAAE0iB,WAAU,WAAI,OAAAm/Y,GAAKjkY,SAAS,GAAE,GAAA,CAAA5/B,IAAA,cAAA7B,MAAA,SAAY6D,GAAEyE,IAAG+nZ,GAAGlwZ,KAAKsla,iBAAiB5ha,GAAE,IAAIV,KAAKmF,GAAE,GAACzG,CAAAA,IAAA7B,SAAAA,MAAAmvZ,SAAOtrZ,IAAG1D,KAAKw/Z,QAAQx/Z,KAAKwla,YAAY,OAAO9ha,IAAG1D,KAAKola,QAAQpW,OAAOtrZ,MAAGhC,CAAAA,IAAA7B,UAAAA,MAAAqvZ,SAAQxrZ,IAAG1D,KAAKw/Z,QAAQx/Z,KAAKwla,YAAY,QAAQ9ha,IAAG1D,KAAKola,QAAQlW,QAAQxrZ,GAAG,GAAA,CAAAhC,IAAA,YAAA7B,MAAAumB,SAAU1iB,IAAG1D,KAAKw/Z,QAAQx/Z,KAAKwla,YAAY,UAAU9ha,IAAG1D,KAAKola,QAAQh/Y,UAAU1iB,GAAG,GAAA,CAAAhC,IAAA,OAAA7B,MAAA,WAAOG,KAAKola,QAAQz/X,MAAM,GAACjkC,CAAAA,IAAA7B,aAAAA,MAAA4uZ,WAAa,OAAOzuZ,KAAKw/Z,QAAQx/Z,KAAKola,QAAQ3W,YAAa,GAAA,CAAA/sZ,IAAA,OAAA7B,MAAAsgY,YAAQngY,KAAKw/Z,QAAQx/Z,KAAKola,QAAQjlC,SAAOz+X,CAAAA,IAAA7B,QAAAA,MAAAqnP,YAASlnP,KAAKw/Z,QAAQx/Z,KAAKola,QAAQl+K,OAAQ,GAAA,CAAAxlP,IAAA,UAAA7B,MAAA,YAAWG,KAAKw/Z,QAAQx/Z,KAAKola,QAAQ3wT,SAAU,GAAA,CAAA/yG,IAAA7B,SAAAA,MAAAoqI,WAASjqI,KAAKola,QAAQn7R,QAAS,GAAA,CAAAvoI,IAAA,UAAA7B,MAAA,WAAUG,KAAKktK,WAAU,EAAGltK,KAAKola,QAAQ9jY,SAAS,GAAC5/B,CAAAA,IAAA7B,QAAAA,MAAAyzG,YAAStzG,KAAKw/Z,QAAQx/Z,KAAKola,QAAQ9xT,OAAO,GAAC5xG,CAAAA,kBAAA7B,MAAA,SAAY6D,IAAG1D,KAAKw/Z,QAAQx/Z,KAAKola,QAAQv7C,YAAYnmX,GAAE,GAAChC,CAAAA,IAAA7B,cAAAA,MAAAugY,WAAc,OAAOpgY,KAAKw/Z,OAAO,EAAEx/Z,KAAKola,QAAQhlC,aAAa,IAAC1+X,IAAA,kBAAA7B,MAAA,SAAgB6D,IAAG,IAAMyE,GAAEnI,KAAKola,QAAQj9Z,GAAEinZ,iBAAiBjnZ,GAAEinZ,gBAAgB1rZ,GAAG,IAAA,CAAjiD,GAAkiD,SAASi/Z,GAAG58Z,IAAG,OAAOA,IAAG,IAAIA,GAAEqI,QAAS,CAAA,SAASq3Z,GAAG1/Z,GAAErC,IAAG,IAAMyE,GAAEpC,GAAE0I,MAAM+iB,QAAQ,OAAOzrB,GAAE0I,MAAM+iB,QAAQ9tB,SAAAA,GAAG,OAAOyE,EAAE,CAAA,SAASk8Z,GAAGt+Z,GAAErC,GAAEyE,GAAE5J,GAAE8I,IAAG,IAAMxB,GAAE,GAAGsC,GAAExG,SAAQ,SAAA8B,IAAC,OAAEoC,GAAE7C,KAAKyia,GAAGhia,IAAG,IAAE,IAAMgI,GAAE,GAAGlN,GAAEoD,SAAQ,SAAC8B,GAAEgD,IAAK,IAAM+E,GAAE,IAAIuM,IAAItU,GAAE9B,SAAQ,SAAAgK,IAAI,IAAME,GAAEnI,GAAEmtZ,aAAapqZ,GAAEkF,GAAEtE,IAAGmE,GAAE5L,IAAI+L,GAAEE,MAAKA,IAAG,GAAGA,GAAE3L,UAAUuG,GAAE03Z,IAAID,GAAGzyZ,GAAEzI,KAAKyD,IAAI,IAAEV,GAAEnG,IAAI6G,GAAE+E,GAAG,IAAE,IAAI5E,GAAE,EAAE,OAAOuB,GAAExG,SAAQ,SAAA8B,IAAG,OAAAgia,GAAGhia,GAAEoC,GAAEe,MAAK,IAAE6E,EAAE,CAAA,SAASi4Z,GAAG39Z,GAAErC,IAAG,IAAMyE,GAAE,IAAI4P,IAAI,GAAGhS,GAAEpE,SAAQ,SAAAiF,IAAC,OAAEuB,GAAEvI,IAAIgH,GAAE,GAAI,IAAC,GAAGlD,GAAExD,OAAO,OAAOiI,GAAE,IAAMd,GAAE,IAAIuZ,IAAIld,IAAGmC,GAAE,IAAIkS,IAAI,SAAStM,EAAE7E,IAAG,IAAIA,GAAE,OAAO,EAAE,IAAInD,GAAEoC,GAAElG,IAAIiH,IAAG,GAAGnD,GAAE,OAAOA,GAAE,IAAMgD,GAAEG,GAAEmF,WAAW,OAAOtI,GAAE0E,GAAE3G,IAAIiF,IAAGA,GAAEY,GAAE7F,IAAIiF,IAAG,EAAEgF,EAAEhF,IAAGZ,GAAEjG,IAAIgH,GAAEnD,IAAGA,EAAC,CAAC,OAAOC,GAAE/B,SAAQ,SAAAiF,IAAI,IAAMnD,GAAEgI,EAAE7E,IAAG,IAAInD,IAAG0E,GAAExI,IAAI8D,IAAGT,KAAK4D,GAAE,IAAGuB,EAAC,CAAC,SAAS22Z,GAAG/4Z,GAAErC,IAAEgia,IAAAA,GAAYA,QAAXA,GAAA3/Z,GAAEsjB,qBAASq8Y,IAAXA,GAAa78Z,IAAInF,GAAG,CAAA,SAASo8Z,GAAG/5Z,GAAErC,IAAEiia,IAAAA,GAAY,QAAXA,GAAA5/Z,GAAEsjB,iBAAFs8Y,IAAWA,IAAXA,GAAar8Y,OAAO5lB,GAAE,CAAC,SAASkha,GAAG7+Z,GAAErC,GAAEyE,IAAGknZ,GAAGlnZ,IAAG6mZ,QAAO,WAAI,OAAAjpZ,GAAE46Z,iBAAiBj9Z,MAAI,CAAA,SAASyha,GAAGp/Z,GAAErC,IAAG,IAAI,IAAIyE,GAAE,EAAEA,GAAEpC,GAAE7F,OAAOiI,KAAI,CAAC,IAAM5J,GAAEwH,GAAEoC,IAAG5J,cAAaswZ,GAAGsW,GAAG5ma,GAAEwwZ,QAAQrrZ,IAAGA,GAAEV,KAAKzE,GAAG,CAAA,CAAC,SAAS6la,GAAGr+Z,GAAErC,GAAEyE,IAAG,IAAM5J,GAAE4J,GAAExI,IAAIoG,IAAG,IAAIxH,GAAE,OAAM,EAAG,IAAI8I,GAAE3D,GAAE/D,IAAIoG,IAAG,OAAOsB,GAAE9I,GAAEoD,SAAQ,SAAAkE,IAAC,OAAEwB,GAAEwB,IAAIhD,GAAG,IAACnC,GAAE9D,IAAImG,GAAExH,IAAG4J,GAAC,OAAQpC,KAAG,CAAG,CAAA,IAAM6/Z,GAAE,WAA2Q,OAAAt5H,cAA1Q,SAAAs5H,GAAYlia,GAAEyE,GAAE5J,IAAEsna,IAAAA,GAAA35H,KAAAA,gBAAA05H,KAAAA,IAAC5la,KAAK6zZ,QAAQ1rZ,GAAEnI,KAAK48Z,YAAYr+Z,GAAEyB,KAAK8la,cAAc,GAAG9la,KAAKkia,kBAAkB,SAAC76Z,GAAExB,IAAI,EAAG7F,KAAK+la,kBAAkB,IAAIvE,GAAG99Z,GAAEwzB,KAAK/uB,GAAE5J,IAAGyB,KAAKgma,gBAAgB,IAAI9I,GAAGx5Z,GAAEwzB,KAAK/uB,GAAE5J,IAAGyB,KAAK+la,kBAAkB7D,kBAAkB,SAAC76Z,GAAExB,IAAC,OAAGgga,GAAK3D,kBAAkB76Z,GAAExB,GAAE,CAAA,GAAC,CAAA,CAAAnE,IAAA,kBAAA7B,MAAA,SAAgB6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG,IAAM4F,GAAE/H,GAAE,IAAI2D,GAAMT,GAAE5G,KAAK8la,cAAcr6Z,IAAG,IAAI7E,GAAE,CAAC,IAAMnD,GAAE,GAAG+H,GAAEmoZ,GAAG3zZ,KAAK6zZ,QAAQhuZ,GAAEpC,GAAE,IAAI,GAAGA,GAAEvD,OAAO,MAA+B,IAAA67O,GAAG,MAAK,GAAOn1O,GAAE,SAAYb,GAAErC,GAAEyE,IAAG,OAAO,IAAIu0Z,GAAG32Z,GAAErC,GAAEyE,GAAG,CAAxC,CAAyCd,GAAEmE,GAAExL,KAAK48Z,aAAa58Z,KAAK8la,cAAcr6Z,IAAG7E,EAAE,CAAA5G,KAAK+la,kBAAkBzD,gBAAgBn6Z,GAAEd,GAAET,GAAE,GAAClF,CAAAA,IAAA7B,WAAAA,MAAAupO,SAAS1lO,GAAEyE,IAAGnI,KAAK+la,kBAAkB38L,SAAS1lO,GAAEyE,GAAG,GAAA,CAAAzG,IAAA7B,UAAAA,MAAAyhC,SAAQ59B,GAAEyE,IAAGnI,KAAK+la,kBAAkBzkY,QAAQ59B,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,GAAE5J,GAAE8I,IAAGrH,KAAK+la,kBAAkBnD,WAAWl/Z,GAAEyE,GAAE5J,GAAE8I,GAAG,GAAA,CAAA3F,IAAA7B,WAAAA,MAAAoma,SAASvia,GAAEyE,GAAE5J,IAAGyB,KAAK+la,kBAAkBlD,WAAWn/Z,GAAEyE,GAAE5J,GAAG,GAAA,CAAAmD,IAAA7B,oBAAAA,MAAAqma,SAAkBxia,GAAEyE,IAAGnI,KAAK+la,kBAAkBzC,sBAAsB5/Z,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,GAAE5J,GAAE8I,IAAG,GAAG,KAAK9I,GAAEyH,OAAO,GAAG,CAAC,IAAgBmga,GAAAthJ,eAALsrI,GAAG5xZ,IAAE,GAAVsH,GAACsga,GAAC16Z,GAAAA,GAAC06Z,GAAQ,GAAAnma,KAAKgma,gBAAgBnzP,QAAQhtK,GAAEsC,GAAEsD,GAAEpE,GAAG,MAASrH,KAAC+la,kBAAkB75L,QAAQxoO,GAAEyE,GAAE5J,GAAE8I,GAAE,GAAC3F,CAAAA,IAAA7B,SAAAA,eAAO6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAG,GAAG,KAAKtH,GAAEyH,OAAO,GAAG,CAAC,IAAgBoga,GAAAvhJ,eAALsrI,GAAG5xZ,IAAE,GAAVkN,GAAC26Z,GAAA,GAACx/Z,GAACw/Z,GAAQ,GAAA,OAAWpma,KAACgma,gBAAgBzhG,OAAO94T,GAAEtD,GAAEvB,GAAEf,IAAG,OAAO7F,KAAK+la,kBAAkBxhG,OAAO7gU,GAAEyE,GAAE5J,GAAE8I,GAAExB,MAAGnE,CAAAA,IAAA7B,QAAAA,MAAA28D,WAAW,IAAL94D,GAACsH,UAAA9K,OAAA8K,QAAA9M,IAAA8M,aAAAA,UAAA,IAAE,EAAGhL,KAAK+la,kBAAkBvpW,MAAM94D,GAAE,IAAChC,IAAA,UAAA/B,IAAA,WAAc,MAAA,GAAA08B,OAAAwwQ,mBAAU7sS,KAAK+la,kBAAkBhX,SAAOliH,mBAAI7sS,KAAKgma,gBAAgBjX,SAAQ,GAAC,CAAArtZ,IAAA,oBAAA7B,MAAA,WAAoB,OAAOG,KAAK+la,kBAAkBM,mBAAoB,GAAA,CAAA3ka,IAAA,2BAAA7B,MAAA,SAAyB6D,IAAG1D,KAAK+la,kBAAkBvF,yBAAyB98Z,GAAG,IAAA,CAAz5C,GAAg6C4ia,GAAkD,WAAA,SAAAA,GAAY5ia,GAAEyE,GAAE5J,IAAE2tS,gBAAAo6H,KAAAA,IAACtma,KAAKuma,SAAS7ia,GAAE1D,KAAKwma,aAAar+Z,GAAEnI,KAAKyma,WAAWloa,GAAEyB,KAAKsjI,OAAO,EAAE,IAAIj8H,GAAEi/Z,GAAGI,uBAAuB/ma,IAAI+D,IAAG2D,IAAGi/Z,GAAGI,uBAAuB9ma,IAAI8D,GAAE2D,GAAE,IAAI0Q,KAAK/X,KAAK2ma,eAAet/Z,EAAC,CAAC,OAAAilS,aAAAg6H,GAAA5ka,CAAAA,CAAAA,IAAA7B,QAAAA,MAAAouD,WAAQjuD,KAAKsjI,OAAO,IAAItjI,KAAKwma,cAAc/U,GAAGzxZ,KAAKuma,SAASvma,KAAKwma,aAAaxma,KAAK2ma,gBAAgB3ma,KAAKsjI,OAAO,EAAG,GAAA,CAAA5hI,IAAA,SAAA7B,MAAA,WAASG,KAAKiuD,QAAQjuD,KAAKsjI,OAAO,IAAImuR,GAAGzxZ,KAAKuma,SAASvma,KAAK2ma,gBAAgB3ma,KAAKyma,aAAahV,GAAGzxZ,KAAKuma,SAASvma,KAAKyma,YAAYzma,KAAKyma,WAAW,MAAMzma,KAAKsjI,OAAO,EAAG,GAAA,CAAA5hI,IAAA,UAAA7B,MAAA,WAAUG,KAAKiqI,SAASjqI,KAAKsjI,OAAO,IAAIgjS,GAAGI,uBAAsB,OAAQ1ma,KAAKuma,UAAUvma,KAAKwma,eAAe7U,GAAG3xZ,KAAKuma,SAASvma,KAAKwma,cAAcxma,KAAKyma,WAAW,MAAMzma,KAAKyma,aAAa9U,GAAG3xZ,KAAKuma,SAASvma,KAAKyma,YAAYzma,KAAKyma,WAAW,MAAMhV,GAAGzxZ,KAAKuma,SAASvma,KAAK2ma,gBAAgB3ma,KAAKsjI,OAAO,EAAG,IAAA,CAA9vB,GAA+vB,SAASsjS,GAAG7ga,IAAG,IAAIrC,GAAE,KAAK,OAAOqC,GAAEpE,SAAQ,SAACwG,GAAE5J,KAAK,SAAawH,IAAG,MAAM,YAAYA,IAAG,aAAaA,EAAE,EAApD,CAAsDxH,MAAKmF,GAAEA,IAAG,IAAIqU,KAAMnY,IAAIrB,GAAE4J,GAAI,IAAEzE,EAAE,CAA57B4ia,GAAeI,uBAAuB,IAAI7lZ,QAAk5B,IAAMgmZ,GAAG,WAA+a,OAAAv6H,cAA/a,SAAAu6H,GAAYnja,GAAEyE,GAAE5J,GAAE8I,IAAE6kS,gBAAA26H,KAAAA,IAAC7ma,KAAKK,QAAQqD,GAAE1D,KAAK2sI,UAAUxkI,GAAEnI,KAAK0sB,QAAQnuB,GAAEyB,KAAK8ma,eAAez/Z,GAAErH,KAAK+tZ,WAAW,GAAG/tZ,KAAKguZ,YAAY,GAAGhuZ,KAAKiuZ,cAAc,GAAGjuZ,KAAK+ma,cAAa,EAAG/ma,KAAKquZ,WAAU,EAAGruZ,KAAKouZ,UAAS,EAAGpuZ,KAAKw7S,YAAW,EAAGx7S,KAAKkuZ,mBAAmB,GAAGluZ,KAAKmuZ,oBAAoB,GAAGnuZ,KAAK67D,KAAK,EAAE77D,KAAKsuZ,aAAa,KAAKtuZ,KAAKgna,gBAAgB,IAAIjvZ,IAAI/X,KAAKina,UAAU1oa,GAAEixB,SAASxvB,KAAKkna,OAAO3oa,GAAEm+D,OAAO,EAAE18D,KAAK67D,KAAK77D,KAAKina,UAAUjna,KAAKkna,MAAM,GAACxla,CAAAA,CAAAA,gBAAA7B,MAAA,WAAYG,KAAKquZ,YAAYruZ,KAAKquZ,WAAU,EAAGruZ,KAAK+tZ,WAAWpsZ,SAAQ,SAAA+B,IAAC,OAAEA,IAAG,IAAE1D,KAAK+tZ,WAAW,GAAI,GAAA,CAAArsZ,IAAA,OAAA7B,MAAA,WAAOG,KAAKu9Z,eAAev9Z,KAAKmna,2BAA2B,GAACzla,CAAAA,mBAAA7B,MAAA,WAAcuna,IAAAA,GAACpna,KAAA,IAAGA,KAAK+ma,aAAR,CAA4B/ma,KAAK+ma,cAAa,EAAG,IAAMrja,GAAE1D,KAAK2sI,UAAU3sI,KAAKqna,UAAUrna,KAAKsna,qBAAqBtna,KAAKK,QAAQqD,GAAE1D,KAAK0sB,SAAS1sB,KAAKuna,eAAe7ja,GAAExD,OAAOwD,GAAEA,GAAExD,OAAO,GAAG,IAAI6X,IAAI,IAAM5P,EAAE,WAAI,OAAAi/Z,GAAK5Y,WAAW,EAACxuZ,KAAKqna,UAAUz4Z,iBAAiB,SAASzG,GAAGnI,KAAKomB,WAAU,WAAKghZ,GAAKC,UAAUx4Z,oBAAoB,SAAS1G,EAAG,GAAxT,CAA0T,GAAA,CAAAzG,IAAA,4BAAA7B,MAAA,WAA4BG,KAAKkna,OAAOlna,KAAKwna,uBAAuBxna,KAAKqna,UAAUngL,OAAQ,GAAA,CAAAxlP,IAAA,4BAAA7B,MAAA,SAA0B6D,IAAG,IAAMyE,GAAE,GAAG,OAAOzE,GAAE/B,SAAQ,SAAApD,IAAI4J,GAAEnF,KAAKzD,OAAOkoa,YAAYlpa,IAAI,IAAE4J,EAAE,GAAA,CAAAzG,IAAA,uBAAA7B,MAAA,SAAqB6D,GAAEyE,GAAE5J,IAAG,OAAOmF,GAAE8f,QAAQxjB,KAAK0na,0BAA0Bv/Z,IAAG5J,GAAE,GAACmD,CAAAA,IAAA7B,UAAAA,eAAQ6D,IAAG1D,KAAKmuZ,oBAAoBnrZ,KAAKU,IAAG1D,KAAKguZ,YAAYhrZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,SAAA7B,MAAAmvZ,SAAOtrZ,IAAG1D,KAAKkuZ,mBAAmBlrZ,KAAKU,IAAG1D,KAAK+tZ,WAAW/qZ,KAAKU,GAAG,GAAA,CAAAhC,IAAA,YAAA7B,MAAA,SAAU6D,IAAG1D,KAAKiuZ,cAAcjrZ,KAAKU,GAAE,GAAChC,CAAAA,WAAA7B,MAAA,WAAOG,KAAKu9Z,eAAev9Z,KAAKyuZ,eAAezuZ,KAAKguZ,YAAYrsZ,SAAQ,SAAA+B,WAAGA,IAAI,IAAC1D,KAAKguZ,YAAY,GAAGhuZ,KAAKouZ,UAAS,EAAGpuZ,KAAK8ma,gBAAgB9ma,KAAK8ma,eAAe74W,SAASjuD,KAAKqna,UAAUlnC,MAAM,GAACz+X,CAAAA,YAAA7B,MAAA,WAAQG,KAAK2lC,OAAO3lC,KAAKqna,UAAUngL,OAAO,GAACxlP,CAAAA,IAAA7B,SAAAA,MAAAoqI,WAASjqI,KAAK2lC,OAAO3lC,KAAK8ma,gBAAgB9ma,KAAK8ma,eAAe78R,SAASjqI,KAAKwuZ,YAAYxuZ,KAAKqna,UAAUp9R,QAAS,GAAA,CAAAvoI,IAAA7B,QAAAA,MAAAyzG,WAAQtzG,KAAKwna,uBAAuBxna,KAAKw7S,YAAW,EAAGx7S,KAAKquZ,WAAU,EAAGruZ,KAAKouZ,UAAS,EAAGpuZ,KAAKguZ,YAAYhuZ,KAAKmuZ,oBAAoBnuZ,KAAK+tZ,WAAW/tZ,KAAKkuZ,kBAAkB,GAACxsZ,CAAAA,2BAAA7B,MAAA,WAAuBG,KAAKqna,WAAWrna,KAAKqna,UAAU9qW,WAAS76D,CAAAA,IAAA7B,UAAAA,MAAA40G,WAAUz0G,KAAKszG,QAAQtzG,KAAKmgY,MAAM,GAACz+X,CAAAA,IAAA7B,aAAAA,MAAA4uZ,WAAa,OAAOzuZ,KAAKouZ,QAAS,GAAA,CAAA1sZ,IAAA7B,UAAAA,MAAAyhC,WAAUthC,KAAKw7S,aAAax7S,KAAKw7S,YAAW,EAAGx7S,KAAKwna,uBAAuBxna,KAAKwuZ,YAAYxuZ,KAAK8ma,gBAAgB9ma,KAAK8ma,eAAexlY,UAAUthC,KAAKiuZ,cAActsZ,SAAQ,SAAA+B,IAAC,OAAEA,IAAG,IAAE1D,KAAKiuZ,cAAc,GAAG,GAACvsZ,CAAAA,IAAA7B,cAAAA,MAAAgqX,SAAYnmX,SAAG,IAAS1D,KAAKqna,WAAWrna,KAAK2lC,OAAO3lC,KAAKqna,UAAUlzY,YAAYzwB,GAAE1D,KAAK67D,IAAI,GAACn6D,CAAAA,IAAA7B,cAAAA,MAAAugY,WAAaunC,IAAAA,GAAC,QAAkC,QAA5BA,GAAE3na,KAAKqna,UAAUlzY,mBAAW,IAAAwzY,GAAAA,GAAE,GAAG3na,KAAK67D,IAAI,GAACn6D,CAAAA,IAAA/B,YAAAA,IAAAA,WAAgB,OAAOK,KAAKkna,OAAOlna,KAAKina,SAAS,GAACvla,CAAAA,oBAAA7B,MAAA,WAAe+na,IAAAA,GAAC5na,KAAM0D,GAAE,IAAIqU,IAAI/X,KAAKyuZ,cAAczuZ,KAAKuna,eAAe5la,SAAQ,SAACpD,GAAE8I,IAAK,WAAWA,IAAG3D,GAAE9D,IAAIyH,GAAEuga,GAAKvZ,UAAU9vZ,GAAE20Z,GAAG0U,GAAKvna,QAAQgH,QAAMrH,KAAKgna,gBAAgBtja,EAAC,GAAChC,CAAAA,IAAA7B,kBAAAA,MAAAuvZ,SAAgB1rZ,IAAG,IAAMyE,GAAE,UAAUzE,GAAE1D,KAAKguZ,YAAYhuZ,KAAK+tZ,WAAW5lZ,GAAExG,SAAQ,SAAApD,IAAC,OAAEA,IAAG,IAAE4J,GAAEjI,OAAO,KAAS,CAA3pF,GAA2pF2na,GAAE,WAAA,OAAAv7H,cAAA,SAAAu7H,KAAA37H,gBAAAlsS,KAAA6na,GAAA,GAAA,CAAA,CAAAnma,IAAA,wBAAA7B,MAAC,SAAsB6D,IAAG,OAAM,CAAG,GAAA,CAAAhC,IAAA,kCAAA7B,MAAA,SAAgC6D,IAAG,OAAM,CAAG,GAAA,CAAAhC,IAAA,kBAAA7B,MAAA,SAAgB6D,GAAEyE,IAAG,OAAOqoZ,GAAG9sZ,GAAEyE,GAAE,IAACzG,IAAA,mBAAA7B,MAAA,SAAiB6D,IAAG,OAAO2sZ,GAAG3sZ,GAAE,GAAChC,CAAAA,IAAA7B,QAAAA,MAAAqvL,SAAMxrL,GAAEyE,GAAE5J,IAAG,OAAOkyZ,GAAG/sZ,GAAEyE,GAAE5J,GAAG,GAAA,CAAAmD,IAAA,eAAA7B,MAAAgxZ,SAAantZ,GAAEyE,GAAE5J,IAAG,OAAO20Z,GAAGxvZ,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,UAAA7B,MAAA,SAAQ6D,GAAEyE,GAAE5J,GAAE8I,GAAExB,QAAE4F,GAACT,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,GAAUvH,GAAE,CAAC+rB,SAASjxB,GAAEm+D,MAAMr1D,GAAE86D,KAAK,GAAG96D,GAAE,OAAO,YAAYxB,KAAIpC,GAAE87X,OAAO15X,IAAG,IAAMY,GAAE,IAAIsR,IAAIvM,GAAEC,GAAEhJ,QAAO,SAAAiF,IAAC,OAAEA,cAAam/Z,EAAG,KAAC,SAAa9ga,GAAErC,IAAG,OAAO,IAAIqC,IAAG,IAAIrC,EAAE,EAAtC,CAAwCnF,GAAE8I,KAAImE,GAAE7J,SAAQ,SAAA+F,IAAIA,GAAEs/Z,gBAAgBrla,SAAQ,SAAC+J,GAAEwD,IAAC,OAAGzI,GAAE7G,IAAIsP,GAAExD,GAAG,GAAA,IAAG,IAAIC,GAAE,SAAY5F,IAAG,OAAOA,GAAE7F,OAAO6F,GAAE,aAAagS,IAAIhS,GAAEA,GAAEhD,KAAI,SAAAW,WAAO,IAAAqU,IAAIxY,OAAO2U,QAAQxQ,IAAI,IAAC,EAAE,CAA3F,CAA6FyE,IAAGpF,KAAI,SAAA2E,IAAG,OAAA,IAAIqQ,IAAIrQ,GAAG,IAACiE,GAAE,SAAY5F,GAAErC,GAAEyE,IAAG,GAAGA,GAAE2K,MAAMpP,GAAExD,OAAO,CAAC,IAAI3B,GAAEmF,GAAE,GAAG2D,GAAE,GAAG,GAAGc,GAAExG,SAAQ,SAACkE,GAAE4F,IAAKlN,GAAEiD,IAAIiK,KAAIpE,GAAErE,KAAKyI,IAAGlN,GAAEqB,IAAI6L,GAAE5F,GAAG,IAAEwB,GAAEnH,OAAO,IAAD,IAAA4na,QAAA,WAA6B,IAAIr8Z,GAAE/H,GAAEmC,IAAGwB,GAAE1F,SAAQ,SAAAiF,IAAC,OAAE6E,GAAE7L,IAAIgH,GAAEssZ,GAAGntZ,GAAEa,IAAI,GAAA,EAA7Df,GAAE,EAAEA,GAAEnC,GAAExD,OAAO2F,KAAGiia,UAA6C,OAAOpka,EAAC,CAAtM,CAAwMA,GAAEiI,GAAElF,IAAG,IAAMoF,GAAE,SAAY9F,GAAErC,IAAG,IAAIyE,GAAE,KAAK5J,GAAE,KAAK,OAAO8K,MAAMnI,QAAQwC,KAAIA,GAAExD,QAAQiI,GAAEy+Z,GAAGlja,GAAE,IAAIA,GAAExD,OAAO,IAAI3B,GAAEqoa,GAAGlja,GAAEA,GAAExD,OAAO,MAAMwD,cAAaqU,MAAM5P,GAAEy+Z,GAAGlja,KAAIyE,IAAG5J,GAAE,IAAI+na,GAAGvga,GAAEoC,GAAE5J,IAAG,IAAK,CAAxK,CAAyKmF,GAAEiI,IAAG,OAAO,IAAIk7Z,GAAGnja,GAAEiI,GAAElI,GAAEoI,GAAG,IAAA,CAAv+B,GAA8+Bk8Z,GAAG,aAAmBC,GAAG,WAA0G,OAAA17H,cAA1G,SAAA07H,GAAYtka,GAAEyE,GAAE5J,GAAE8I,IAAE6kS,gBAAA87H,KAAAA,IAAChoa,KAAK69Z,YAAYn6Z,GAAE1D,KAAKotS,SAASjlS,GAAEnI,KAAKioa,OAAO1pa,GAAEyB,KAAKivZ,WAAW5nZ,GAAErH,KAAKkoa,MAAW,CAAE,GAAA,CAAA,CAAAxma,IAAA/B,OAAAA,IAAAA,WAAW,OAAOK,KAAKotS,SAASjuS,IAAK,GAAA,CAAAuC,IAAA,cAAA7B,MAAA2xT,SAAY9tT,IAAEyka,IAAAA,GAAAC,GAA0BD,QAAzBA,IAAAC,GAAIpoa,KAACotS,UAASokB,mBAAd22G,IAAyBA,IAAzBA,GAAA1oa,KAAA2oa,GAA4B1ka,GAAE,GAAChC,CAAAA,IAAA7B,UAAAA,iBAASwoa,IAAAC,GAAAD,GAAAC,KAACtoa,KAAKioa,OAAO3mY,QAAQthC,KAAK69Z,YAAY79Z,KAAKotS,UAAUptS,KAAKioa,OAAOzH,0BAAyB,WAAKr1G,gBAAe,WAAKk9G,GAAKj7H,SAAS9rQ,SAAU,OAAmB,QAAhBgnY,GAACtoa,KAAKivZ,kBAALqZ,IAAeA,IAAfA,GAAA7oa,KAAkBO,KAAE,GAAA,CAAA0B,IAAA,gBAAA7B,MAAA,SAAc6D,GAAEyE,IAAG,OAAWnI,KAACotS,SAAS58R,cAAc9M,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,gBAAA7B,MAAA++T,SAAcl7T,IAAG,OAAW1D,KAACotS,SAASwxB,cAAcl7T,GAAG,GAAA,CAAAhC,IAAA7B,aAAAA,MAAAq4U,SAAWx0U,IAAG,YAAY0pS,SAAS8qC,WAAWx0U,GAAE,IAAChC,IAAA,cAAA7B,MAAA,SAAY6D,GAAEyE,IAAGnI,KAAKotS,SAAS/iR,YAAY3mB,GAAEyE,IAAGnI,KAAKioa,OAAOM,SAASvoa,KAAK69Z,YAAY11Z,GAAEzE,IAAE,EAAG,GAAChC,CAAAA,IAAA7B,eAAAA,MAAAsO,SAAazK,GAAEyE,GAAE5J,QAAE8I,KAAC2D,UAAA9K,OAAA8K,QAAA9M,IAAA8M,eAAAA,UAAA,GAAKhL,KAAKotS,SAASj/R,aAAazK,GAAEyE,GAAE5J,IAAGyB,KAAKioa,OAAOM,SAASvoa,KAAK69Z,YAAY11Z,GAAEzE,GAAE2D,GAAG,GAAA,CAAA3F,IAAA,cAAA7B,MAAA,SAAY6D,GAAEyE,GAAE5J,IAAGyB,KAAK+L,WAAW5D,KAAInI,KAAKioa,OAAOhC,SAASjma,KAAK69Z,YAAY11Z,GAAEnI,KAAKotS,SAAU,GAAA,CAAA1rS,IAAA,oBAAA7B,MAAAy8T,SAAkB54T,GAAEyE,IAAG,OAAWnI,KAACotS,SAASkvB,kBAAkB54T,GAAEyE,GAAE,GAACzG,CAAAA,IAAA7B,aAAAA,MAAAkM,SAAWrI,IAAG,OAAO1D,KAAKotS,SAASrhS,WAAWrI,GAAG,GAAA,CAAAhC,IAAA,cAAA7B,MAAA,SAAY6D,IAAG,OAAO1D,KAAKotS,SAASn/R,YAAYvK,GAAG,GAAA,CAAAhC,IAAA,eAAA7B,MAAAkP,SAAarL,GAAEyE,GAAE5J,GAAE8I,IAAGrH,KAAKotS,SAASr+R,aAAarL,GAAEyE,GAAE5J,GAAE8I,MAAG3F,CAAAA,IAAA7B,kBAAAA,MAAAiP,SAAgBpL,GAAEyE,GAAE5J,IAAGyB,KAAKotS,SAASt+R,gBAAgBpL,GAAEyE,GAAE5J,GAAG,GAAA,CAAAmD,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,IAAGnI,KAAKotS,SAASgkC,SAAS1tU,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,cAAA7B,MAAAwxU,SAAY3tU,GAAEyE,IAAGnI,KAAKotS,SAASikC,YAAY3tU,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,GAAE5J,GAAE8I,IAAGrH,KAAKotS,SAASirC,SAAS30U,GAAEyE,GAAE5J,GAAE8I,GAAG,GAAA,CAAA3F,IAAA,cAAA7B,MAAA2oa,SAAY9ka,GAAEyE,GAAE5J,IAAGyB,KAAKotS,SAASo7H,YAAY9ka,GAAEyE,GAAE5J,GAAE,GAACmD,CAAAA,IAAA7B,cAAAA,MAAA0O,SAAY7K,GAAEyE,GAAE5J,IAAG,KAAK4J,GAAEnC,OAAO,IAAImC,IAAG4/Z,GAAG/na,KAAKkma,kBAAkBxia,KAAInF,IAAGyB,KAAKotS,SAAS7+R,YAAY7K,GAAEyE,GAAE5J,GAAG,GAAA,CAAAmD,IAAA,WAAA7B,MAAA,SAAS6D,GAAEyE,IAAGnI,KAAKotS,SAASr9F,SAASrsM,GAAEyE,GAAG,GAAA,CAAAzG,IAAA,SAAA7B,MAAA,SAAO6D,GAAEyE,GAAE5J,IAAG,OAAWyB,KAACotS,SAASm3B,OAAO7gU,GAAEyE,GAAE5J,GAAE,IAACmD,IAAA,oBAAA7B,MAAA,SAAkB6D,GAAEyE,IAAGnI,KAAKioa,OAAO/B,kBAAkBxia,GAAEyE,GAAE,IAAQ,CAAnhD,GAAmhDsga,GAAE,SAAAC,IAAY,SAAAD,GAAY/ka,GAAEyE,GAAE5J,GAAE8I,GAAExB,IAAE8ia,IAAAA,GAAiDA,OAAjDz8H,gBAAAu8H,KAAAA,KAACE,GAAAl7H,WAAAg7H,KAAAA,IAAMtga,GAAE5J,GAAE8I,GAAExB,MAAQqyC,QAAQx0C,GAAEila,GAAK9K,YAAY11Z,GAACwga,EAAC96H,CAAAvB,OAAAuB,UAAA46H,GAAAC,IAAAp8H,aAAAm8H,GAAA/ma,CAAAA,CAAAA,kBAAA7B,MAAA,SAAY6D,GAAEyE,GAAE5J,IAAG,KAAK4J,GAAEnC,OAAO,GAAG,KAAKmC,GAAEnC,OAAO,IAAImC,IAAG4/Z,GAAG/na,KAAKkma,kBAAkBxia,GAAEnF,QAAE,IAASA,MAAKA,IAAGyB,KAAKioa,OAAO9pZ,QAAQne,KAAK69Z,YAAYn6Z,GAAEyE,GAAElC,MAAM,GAAG1H,IAAGyB,KAAKotS,SAAS7+R,YAAY7K,GAAEyE,GAAE5J,GAAE,GAACmD,CAAAA,aAAA7B,MAAA,SAAO6D,GAAEyE,GAAE5J,IAAE,IAAAqqa,GAAA5oa,KAAC,GAAG,KAAKmI,GAAEnC,OAAO,GAAG,CAAA,IAAA6ia,GAAAC,GAAOzha,GAAE,SAAYtB,IAAG,OAAOA,IAAG,IAAI,OAAO,OAAOsK,SAAS6mB,KAAK,IAAI,WAAW,OAAO7mB,SAAS,IAAI,SAAS,OAAO9E,OAAO,QAAQ,OAAOxF,GAAE,CAApI,CAAsIrC,IAAOmC,GAAEsC,GAAElC,MAAM,GAAGwF,GAAE,GAAG,MAAM,KAAK5F,GAAEG,OAAO,KAAE6ia,GAAS,SAAY9ia,IAAG,IAAMrC,GAAEqC,GAAEoD,QAAQ,KAAK,MAAM,CAACpD,GAAEwE,UAAU,EAAE7G,IAAGqC,GAAEE,MAAMvC,GAAE,GAAI,CAA5E,CAA6EmC,IAAlFA,IAAoFija,GAAAjkJ,eAAAgkJ,GAApFhja,IAAE4F,GAAAA,GAACq9Z,GAAA,IAAmF9oa,KAAKioa,OAAO1jG,OAAOvkU,KAAK69Z,YAAYx2Z,GAAExB,GAAE4F,IAAE,SAAA7E,IAAIgia,GAAK1wX,QAAQ6wX,yBAAyBnia,GAAEqpZ,QAAQ,EAAE1xZ,GAAEqI,MAAI,CAAC,OAAO5G,KAAKotS,SAASm3B,OAAO7gU,GAAEyE,GAAE5J,GAAG,IAAA,CAAttB,CAASypa,IAAotBgB,GAAG,WAA2O,OAAA18H,cAA3O,SAAA08H,GAAYtla,GAAEyE,GAAE5J,IAAE2tS,gBAAA88H,KAAAA,IAAChpa,KAAKotS,SAAS1pS,GAAE1D,KAAKioa,OAAO9/Z,GAAEnI,KAAKk9F,MAAM3+F,GAAEyB,KAAKipa,WAAW,EAAEjpa,KAAKkpa,aAAa,EAAElpa,KAAKmpa,0BAA0B,GAAGnpa,KAAKopa,eAAe,IAAIrxZ,IAAI/X,KAAKqpa,cAAc,EAAElha,GAAE+5Z,kBAAkB,SAAC76Z,GAAExB,IAAKA,UAAAA,GAAGmG,YAAY,KAAK3E,GAAE,CAAE,GAAA3F,CAAAA,CAAAA,IAAA7B,iBAAAA,MAAA60T,SAAehxT,GAAEyE,IAAEmha,IAAAA,GAAAC,QAAOlia,GAAErH,KAAKotS,SAASsnB,eAAehxT,GAAEyE,IAAG,IAAIzE,IAAIyE,UAAO,QAANmha,GAADnha,GAAGhJ,YAAI,IAAAmqa,KAAPA,GAASnmQ,UAAU,CAAC,IAAM18J,GAAEzG,KAAKopa,eAAmB59Z,GAAE/E,GAAE9G,IAAI0H,IAAG,OAAOmE,KAAIA,GAAE,IAAIw8Z,GAAG,GAAG3ga,GAAErH,KAAKioa,QAAO,WAAI,OAAAxha,GAAC,OAAQY,GAAG,IAACZ,GAAE7G,IAAIyH,GAAEmE,KAAIA,EAAE,CAAA,IAAM3F,GAAEsC,GAAE7I,GAAGmM,GAAEtD,GAAE7I,GAAG,IAAIU,KAAKipa,WAAWjpa,KAAKipa,aAAajpa,KAAKioa,OAAO7+L,SAAS39N,GAAE/H,IAA0F,OAAOyE,GAAEhJ,KAAKgkK,UAAUxhK,SAAvG,SAAFiF,EAAEH,IAAI4C,MAAMnI,QAAQuF,IAAGA,GAAE9E,QAAQiF,GAAG2ia,GAAKtB,OAAO3F,gBAAgBz8Z,GAAE4F,GAAE/H,GAAE+C,GAAEmK,KAAKnK,GAAG,IAAoC,IAAIgia,GAAGzoa,KAAKyL,GAAEpE,GAAErH,KAAKioa,OAAO,GAACvma,CAAAA,IAAA7B,QAAAA,iBAAQG,KAAKqpa,gBAAgBrpa,KAAKotS,SAAS0qB,OAAO93T,KAAKotS,SAAS0qB,OAAO,GAACp2T,CAAAA,IAAA7B,qBAAAA,MAAA2pa,WAAoB,IAAAC,GAAAzpa,KAACmrT,gBAAe,WAAKs+G,GAAKP,cAAc,GAAE,GAACxna,CAAAA,IAAA7B,2BAAAA,MAAAkpa,SAAyBrla,GAAEyE,GAAE5J,IAAE,IAAAmra,GAAA1pa,KAAC,GAAG0D,IAAG,GAAGA,GAAE1D,KAAKkpa,aAA6Blpa,KAACk9F,MAAM6gD,KAAI,kBAAI51I,GAAE5J,GAAE,QAAhE,CAAkE,IAAM8I,GAAErH,KAAKmpa,0BAA0B,GAAG9ha,GAAEnH,QAAQirT,gBAAe,WAAKu+G,GAAKxsU,MAAM6gD,KAAI,WAAK12I,GAAE1F,SAAQ,SAAAkE,IAAI,IAAA8ja,GAAA9kJ,eAAWh/Q,GAAC,IAAC4F,EAANk+Z,GAAA,IAAEA,GAAA,OAAWD,GAAKP,0BAA0B,EAAE,GAAG,IAAE9ha,GAAErE,KAAK,CAACmF,GAAE5J,IAA/K,CAAmL,GAAA,CAAAmD,IAAA,MAAA7B,MAAA,WAAK+pa,IAAAA,GAAC5pa,KAAAA,KAAKqpa,gBAAgB,GAAGrpa,KAAKqpa,eAAerpa,KAAKk9F,MAAMywN,mBAAkB,WAAKi8G,GAAKJ,qBAAqBI,GAAK3B,OAAOzrW,MAAMotW,GAAKV,iBAAgBlpa,KAAKotS,SAASx+O,KAAK5uD,KAAKotS,SAASx+O,KAAM,GAAA,CAAAltD,IAAA7B,oBAAAA,MAAAwma,WAAoB,OAAOrma,KAAKioa,OAAO5B,mBAAoB,IAAA,CAAjzC,GAAwzCwD,GAAG,CAAC,CAAClpS,QAAQowR,GAAGz2G,WAAW,WAAc,OAAW,IAAA84G,EAAE,GAAG,CAACzyR,QAAQilS,GAAG7oH,SAAU,SAAA+sH,IAAI,IAAO/ja,GAACgka,SAAAA,IAAY,SAAAhka,EAAYoC,GAAE5J,GAAE8I,IAAE,OAAA6kS,qBAAAnmS,GAAA0nS,WAAAztS,KAAA+F,EAAA,CAAOoC,GAAE5J,GAAE8I,IAAE,CAAC,OAAAwmS,UAAA9nS,EAAAgka,IAAAz9H,aAAAvmS,EAAA,CAAA,CAAArE,IAAA,cAAA7B,MAAA,WAAcG,KAAKw8D,OAAO,IAA7DopW,CAATmE,CAASnE,IAAkM,OAAhMkE,GAAZ/ja,IAAoFgtS,KAAU,SAASx0S,IAAG,OAAO,IAAIA,IAAGwH,IAAG01O,GAAGs0F,IAAIt0F,GAAGq1K,IAAIr1K,GAAGs1K,IAAI,EAAS+Y,GAAK/3H,MAAWV,GAAG,CAAC7iR,MAAMzoB,GAAEmyC,QAAQnyC,GAAEgtS,OAAoBhtS,EAAC,CAA/N,IAAqO,CAAC46H,QAAQq6L,GAAG1gB,WAAW,SAAYv0S,GAAErC,GAAEyE,IAAG,WAAW6ga,GAAGjja,GAAErC,GAAEyE,GAAG,EAACm2H,KAAK,CAAC64M,GAAGyuF,GAAGr6G,MAAMy+G,GAAI,CAAA,CAACrpS,QAAQmwR,GAAGx2G,WAAW,kBAAQ,IAAAutH,EAAE,GAAE,CAAClnS,QAAQ+vL,GAAGnW,SAAS,sBAAoBl+Q,OAAIwtY,IAAII,GAAI,CAAA,CAACtpS,QAAQmwR,GAAG/zG,SAAS2zG,IAAI,CAAC/vR,QAAQ+vL,GAAGnW,SAAS,mBAAiBl+Q,OAAIwtY,IAAQK,GAAI,SAAAC,IAAW,IAAApka,GAAC,WAAA,SAAAA,IAAAmmS,gBAAAlsS,KAAA+F,EAAA,CAAA,OAAAumS,aAAAvmS,EAAArE,KAAAA,CAAAA,CAAAA,IAAA7B,aAAAA,MAAC,SAAkBsI,IAAG,MAAM,CAAC+xS,SAASn0S,EAAE4mE,UAAUxkE,GAAE+9Z,kBAAkB+D,GAAGD,GAAI,IAAA,CAA7E,GAA2N,OAA9IG,GAA9Epka,IAA0FgtS,KAAU,SAASx0S,IAAG,OAAWA,IAAAA,IAAGwH,GAAG,EAAQoka,GAAKr8F,KAAUx1B,GAAG,CAAClsS,KAAKrG,KAAWoka,GAAKn4H,KAAUT,GAAG,CAAC5kO,UAAUq9V,GAAG9gX,QAAQ,CAACmzR,MAAct2U,EAAC,CAA/O,IAAoP,SAAaA,IAAG,OAA9qkY,SAAYA,IAAG,IAAI,IAAoBrC,GAAsCqC,GAApDqka,cAA6Bjia,GAAuBpC,GAApCska,aAAsChja,GAAE,WAAkB,GAAGmmU,GAAG,OAAOA,GAAG,IAAM9pU,GAAE,eAAYqC,GAACiF,UAAA9K,OAAA8K,QAAA9M,IAAA8M,UAAA9M,GAAA8M,UAAC,GAAA,GAAGtH,GAACsH,UAAA9K,OAAA8K,EAAAA,UAAA9M,QAAAA,EAAE,OAAO0qT,GAAG7/Q,OAAO,CAACn4B,KAAKlN,GAAEipE,UAAS,CAAE,CAACg0D,QAAQm6K,GAAGP,SAAS,YAAY,CAAC55K,QAAQ0sM,GAAG9yB,SAAS,IAAI35R,IAAI,CAAC,WAAI,OAAA4sT,GAAG,IAAI,MAAGnxS,OAAAwwQ,mBAAI9mS,MAAK,CAA9I,CAA7BiF,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,GAAAA,UAAA,GAAC,IAA8K,OAAOwiU,GAAG9pU,GAAiB,SAAWqC,IAAG8hC,EAAE9hC,EAAC,CAAjB,EAAmB,WAAK,MAAU,IAAAg2O,GAAG,KAAI,EAAI,IAAK,SAAYh2O,GAACuka,IAAgB,QAAdA,GAAAvka,GAAEpG,IAAI6wT,GAAG,aAAK,IAAA85G,IAAdA,GAAgB3oa,SAAQ,SAAAwG,IAAG,OAAAA,IAAI,GAAA,CAA9C,CAAgDzE,IAAGA,EAAE,CAA9T,CAAJqC,GAArBwka,mBAA2V1ka,GAAGmlU,CAAAA,GAAG,CAAE,GAAE,CAACrqM,QAAQ45L,GAAGzd,YAAYgvB,KAAGzvS,OAAAwwQ,mBAAI1kS,IAAG,KAAI,OAAgB,SAAGpC,IAAG,IAAMrC,GAAE4pU,GAAGvnU,IAAGA,GAAEyka,WAAWzka,GAAE0ka,UAAU39V,SAAS3kE,GAAEzE,GAAE/D,IAAI4rT,IAAI,OAAOpjT,GAAE41I,KAAI,WAAKuvL,GAAGvnU,IAAGA,GAAEyka,WAAW/tH,8BAA8B12S,GAAE0ka,UAAUhuH,8BAA8B,IAA2Bp1S,GAArB9I,GAAEmF,GAAE/D,IAAI2uT,GAAG,MAAY,GAAGnmT,GAAEwlT,mBAAkB,WAAKtmT,GAAEc,GAAEm0M,QAAQwyF,UAAU,CAAC1uS,KAAK,SAAAyF,IAAItH,GAAEm1O,YAAY7tO,GAAG,GAAE,IAAGynU,GAAGvnU,IAAG,CAAC,IAAMF,KAAE,WAAD,OAAKnC,GAAE49B,SAAS,EAAC71B,GAAE1F,GAAEwnU,iBAAiB5tU,IAAI0tU,IAAI5hU,GAAE5C,IAAIhD,MAAGnC,GAAE0iB,WAAU,WAAK/e,GAAEklS,cAAc9gS,GAAQ,OAAC5F,KAAG,GAAE,MAAKE,GAAE0ka,UAAUrkZ,WAAU,WAAKijT,GAAGtjU,GAAE2ka,mBAAmB3ka,GAAE0ka,WAAWpja,GAAEklS,aAAc,IAAE,OAAO,SAAYxmS,GAAErC,GAAEyE,IAAG,IAAI,IAAM5J,GAAE4J,KAAI,OAAOi/T,GAAG7oU,IAAGA,GAAO,OAAC,SAAA8I,IAAI,MAAM3D,GAAEiqT,mBAAkB,WAAA,OAAI5nT,GAAE2tO,YAAYrsO,GAAG,IAACA,EAAE,IAAE9I,EAAE,CAAA,MAAMA,IAAG,MAAMmF,GAAEiqT,mBAAkB,WAAA,OAAI5nT,GAAE2tO,YAAYn1O,GAAG,IAACA,EAAE,CAAA,CAA7K,CAA+KA,GAAE4J,IAAE,WAAK,IAAMtC,GAAEnC,GAAE/D,IAAI2nU,IAAI,OAAOzhU,GAAE+hU,kBAAkB/hU,GAAE6hU,YAAY31T,MAAK,WAAK,GAAG,SAAYhM,IAAG,iBAAiBA,IAAOA,GAAE4I,cAActE,QAAQ,KAAK,IAAK,CAAzE,CAA2E3G,GAAE/D,IAAIwtU,GAAGjJ,KAAKA,IAAIoJ,GAAGvnU,IAAG,CAAC,IAAMa,GAAElD,GAAE/D,IAAIuoU,IAAI,YAAY,IAAIniU,GAAEqka,eAAexja,GAAE4oE,UAAUzpE,GAAEqka,eAAexja,GAAE,OAAO,SAAYb,GAAErC,IAAG,IAAMyE,GAAEpC,GAAE+mE,SAASntE,IAAIuoU,IAAI,GAAGniU,GAAE4ka,qBAAqBzqa,OAAO,EAAE6F,GAAE4ka,qBAAqBhpa,SAAQ,SAAApD,IAAC,OAAE4J,GAAEqnE,UAAUjxE,GAAE,QAAM,CAAC,IAAIwH,GAAE2sE,SAASk4V,cAAc,MAAU,IAAA7uL,IAAI,KAAI,GAAIh2O,GAAE2sE,SAASk4V,cAAczia,GAAE,CAACzE,GAAEV,KAAK+C,IAA5N,CAAgOA,GAAE0ka,UAAU1ka,GAAE2ka,oBAAoB3ka,GAAE0ka,SAAU,GAAE,MAAG,CAAhsC,CAAksC,CAACD,WAAW,IAAIppG,GAAG,CAACz0P,UAAU9mE,GAAE+tC,OAAOvsC,GAAEm6T,UAAU,GAAGC,4BAA2B,IAAK30P,SAASygQ,iBAAiBlmU,GAAE+ia,cAAc1ma,IAAI,CAAA,MAAMA,IAAG,OAAOoO,QAAQ2xD,OAAO//D,GAAG,CAAA,CAA03gYmna,CAAG,SAAY9ka,GAAC+ka,IAAE,MAAM,CAACT,aAAY,GAAAhuY,OAAK8/S,GAAEtvC,mBAAgB,QAAhBi+H,GAAI/ka,cAAC,EAADA,GAAG4mE,iBAAS,IAAAm+V,GAAAA,GAAE,KAAIP,kBAAkBjvF,GAAI,CAArF,CAAsFv1U,IAAI,EAApH,CAAsH,CAAC4mE,UAAU,EAAsB8zP,GAAG,cAAc,SAAY16T,IAAG,MAAM,CAACwsS,aAAgBxsS,GAAG,CAAzC,CAA0C,CAAC,CAAC46H,QAAQ45L,GAAGzd,YAAYgvB,IAAI,CAACnrM,QAAQ4qL,GAAGxO,SAASqR,IAAI,CAACztL,QAAQ65L,GAAGjgB,UAAS,GAAI,CAAC55K,QAAQ+5L,GAAGngB,UAAS,GAAI,MAAQhB,GAAG2wH,GAAG33F,GAAG2xB,GAAGO,GAAGoE,GAAG/C,OAAO/zV,MAAK,SAAAhM,IAAIgla,eAAexmU,OAAO,yBAAyB,SAAYx+F,GAAErC,GAACsna,IAAE,IAAM7ia,GAAE,SAAYpC,GAAErC,IAAG,OAAOA,GAAE/D,IAAIo7T,IAAIqO,wBAAwBrjU,IAAG0wK,MAAM,CAAnE,CAAqE1wK,GAAErC,GAAEopE,UAAUvuE,GAAEmF,GAAEuna,iBAAiB,IAAInrF,GAAG/5U,GAAErC,GAAEopE,UAAUzlE,GAAE,SAAYtB,IAAG,IAAMrC,GAAE,CAAA,EAAG,OAAOqC,GAAEpE,SAAQ,SAAAupa,IAAW,IAAA/ia,GAAC+ia,GAAVvvG,SAAwBp9T,GAAC2sa,GAAdtvG,aAAyBv0T,GAAC6ja,GAAXxrZ,UAAgBhc,GAAE,SAAYqC,IAAG,OAAOA,GAAEsE,QAAQ,UAAS,SAAA3G,IAAC,MAAA,IAAA24B,OAAM34B,GAAEiL,cAAe,GAAE,CAAnE,CAAoEpQ,KAAI,CAAC4J,GAAEd,GAAG,IAAE3D,EAAE,CAA3K,CAA4KyE,IAAStC,GAAC,SAAAsla,IAAmV,SAAAtla,EAAYe,IAAE,IAAAwka,GAAwBA,OAAxBl/H,gBAAAlsS,KAAA6F,IAACula,GAAA39H,WAAA5nS,KAAAA,IAAainE,SAASlmE,GAACwka,EAACv9H,CAAA,OAAAA,UAAAhoS,EAAAsla,IAAA7+H,aAAAzmS,EAAA,CAAA,CAAAnE,IAAA,oBAAA/B,IAAhU,WAAuB0ra,IAAAA,GAACrra,KAAA,IAAIA,KAAKsra,mBAAmB,CAAC,IAAM1ka,GAAE5G,KAAKsra,mBAAmB/sa,GAAEwqC,OAAO/oC,KAAK8sE,UAAUppE,GAAEopE,UAAU3kE,GAAExG,SAAQ,SAAA4pa,QAAW9na,GAAC8na,GAAV5vG,SAAqBl1T,GAAC8ka,GAAX7rZ,UAAgB,GAAI2rZ,GAAK7ra,eAAeiE,IAAxB,CAAkC,IAAM+H,GAAE6/Z,GAAK5na,WAAU4na,GAAK5na,IAAGmD,GAAEm7U,cAAct+U,GAAE+H,GAAE/E,GAAnD,CAAsD,IAAE,OAAOzG,KAAKsra,kBAAmB,GAAA,CAAA5pa,IAAA,2BAAA7B,MAAuC,SAAyB+G,GAAEnD,GAAEgD,GAAE+E,IAAG,IAAAgga,GAAA3mJ,eAAWx9Q,GAAET,IAAP+E,GAAAA,GAAC6/Z,MAAC3/Z,GAAC2/Z,GAAA,GAAOxra,KAAKyra,kBAAkB1pF,cAAcp2U,GAAElF,GAAEoF,GAAE,IAACnK,IAAA,oBAAA7B,MAAA,WAAoB,IAAI+G,IAAE,EAAG5G,KAAKyra,kBAAkB34L,SAAS9yO,KAAK0ra,oBAAoB9ka,IAAE,GAAI5G,KAAKyra,kBAAkBE,QAAQ3ra,MAAM4G,IAAG5G,KAAK0ra,mBAAoB,GAAA,CAAAhqa,IAAA7B,uBAAAA,MAAA+ra,WAAuB5ra,KAAKsra,oBAAoBtra,KAAKsra,mBAAmB7hQ,aAAazpK,KAAKwiV,8BAA8BxiV,KAAKwiV,4BAA4Bj2C,cAAcvsS,KAAKwiV,4BAA4B,KAAK,GAAC9gV,CAAAA,IAAA7B,oBAAAA,MAAA6ra,WAAmBG,IAAAA,GAAC7ra,KAAAA,KAAKwiV,4BAA4BxiV,KAAKyra,kBAAkB34L,OAAOg8D,WAAU,SAAAloS,IAAI,IAAMnD,GAAE,IAAIqoa,YAAYlla,GAAEgK,KAAK,CAACgkJ,OAAOhuJ,GAAE/G,QAAQgsa,GAAKp2Y,cAAchyB,GAAG,GAAE,IAAA,CAA7+B,CAAS4+U,IAAq+B,OAA/+Bx8U,GAAyBkma,mBAAmBxsa,OAAO2W,KAAK7O,IAA87Bc,GAAExG,SAAQ,SAAAqqa,IAAW,IAAAvga,GAACuga,GAAVrwG,SAAqB/0T,GAACola,GAAXtsZ,UAAgBngB,OAAOwjC,eAAel9B,GAAE1F,UAAUsL,GAAE,CAAC9L,IAAGA,WAAG,OAAWK,KAACyra,kBAAkBrqF,cAAc31U,GAAE,EAAE7L,IAAGA,SAAC6D,IAAGzD,KAAKyra,kBAAkB1pF,cAAct2U,GAAEhI,GAAEmD,GAAG,EAAC6gC,cAAa,EAAGW,YAAW,OAAOviC,EAAC,CAA5hD,CAA8hDulZ,GAAG,CAACt+U,SAAS/mE,GAAE+mE,cAAa,GAAG,SAAAk4M,IAAKA,GAAGA,GAAGn/Q,EAAE,IAAI,ICKvvqoB,IAAMoma,GAAc,UAEpB,SAASC,gBAAgB7/Z,IAE9B,IACQ8/Z,GADU9/Z,GAAV8vE,MACAgwV,QAGR,GAAIA,SAA2C,CAC7C,IAAMrf,GAwBV,SAAmBjtZ,IACjB,GAAa,MAATA,GAEF,OADA6kB,QAAQC,KAAK,8BACN,KAGT,IACE,IAAM5iB,GAAS+7B,KAAKtzB,MAAM3K,IAC1B,MAAyB,WAAlB4lR,QAAO1jR,KAAkC,OAAXA,GAAkBA,GAAS,IACjE,CAAC,MAAOyoB,IAEP,OADA9F,QAAQC,KAAK,gBAAiB6F,GAAM7O,SAC7B,IACT,CACF,CArCkBywZ,CAAUD,GAAQrf,OAClB,OAAVA,GAEF76Y,YAAW,WACT5B,SAASstB,cAAc,0BAA0B5uB,aAAa,QAAS+uB,KAAKp4B,UAAUonZ,IACvF,GAAE,KAEHpoY,QAAQC,KAAK,yBAA0BwnZ,GAAQrf,MAEnD,CAMA,OAAOrhX,GAAI24O,KAAAA,GAAAC,uBAAA,CAAA,cAAA,UAAA,wEAJI,CACbr1I,OAAM,SASDlkI,GAAW,kBAHpB,CAqBAoha,gBAAgBj/Y,OAAMw3P,iBAAAA,iBAAA,CAAA,EACjBnuD,OAAOrpM,QAAM,GAAA,CAChB3pB,MAAO,YACP8I,KAAM6/Z,GACN5kP,MAAO,UAEPw6F,uBAAwB,CACtB,MACA,QACA,cACA,WACA,cC/DqD,IAEnDwqJ,WAAU//H,cACd,SAAA+/H,WAAYxgN,YAAYqgF,qBAAAmgI,YACtBxgN,WAAWud,SAAS46C,GAAWC,cACjC,IAGIqoJ,GAAYhgI,cAChB,SAAAggI,aAAYzgN,YAAYqgF,qBAAAogI,cACtBzgN,WAAWud,SAAS6iM,GAAaC,gBACnC,IAGWK,GAAkB,CAC7B79V,SAAU,CAAC,aAAc,gBACzB89V,WAAY,CAAC,OAAQH,YACrBI,aAAc,CAAC,OAAQH,KCoCrBnoK,SAAW,SAAkB93P,IAC/B,OAAOg+M,IAAK,MAAO,IACdh+M,GACHH,SAAU,CAAC01M,IAAI,OAAQ,CACrBz/I,KAAM,OACN1zD,MAAO,CACLqgP,aAAc,YAEhBjjP,EAAG,kBACD+1M,IAAI,OAAQ,CACdz/I,KAAM,OACN1zD,MAAO,CACLqgP,aAAc,YAEhBjjP,EAAG,kBACD+1M,IAAI,OAAQ,CACd/1M,EAAG,oFACHs2D,KAAM,cAGZ,EACAgiM,SAASh4P,aAAe,CACtB0lB,MAAO,KACPm9G,OAAQ,KACR7sE,KAAM,OACNmtJ,MAAO,8BAmBT,IAAI+0C,WAAa,SAAkBh4P,IACjC,OAAOu1M,IAAI,MAAO,IACbv1M,GACHH,SAAU01M,IAAI,OAAQ,CACpB/1M,EAAG,oZACHs2D,KAAM,kBAGZ,EACAkiM,WAAWl4P,aAAe,CACxB0lB,MAAO,KACPm9G,OAAQ,KACR7sE,KAAM,OACNmtJ,MAAO,8BAyBT,IAAIk1C,UAAY,SAAmBn4P,IACjC,OAAOg+M,IAAK,MAAO,IACdh+M,GACHH,SAAU,CAAC01M,IAAI,OAAQ,CACrBz/I,KAAM,eACNt2D,EAAG,4HACD+1M,IAAI,OAAQ,CACdz/I,KAAM,eACNt2D,EAAG,wGAGT,EACA24P,UAAUr4P,aAAe,CACvBmjN,MAAO,6BACPz9L,MAAO,KACPm9G,OAAQ,KACRugF,QAAS,aAEX,IAAIk1C,UAAY,SAAmBp4P,IACjC,OAAOu1M,IAAI,MAAO,IACbv1M,GACHH,SAAU01M,IAAI,OAAQ,CACpB4N,SAAU,UACV3jN,EAAG,qFACHs2D,KAAM,kBAGZ,EACAsiM,UAAUt4P,aAAe,CACvBmjN,MAAO,6BACPz9L,MAAO,KACPm9G,OAAQ,MAoDV,MAAMk2H,GAAqB1jD,IAAc,CACvCuI,YAAa,CAAE,EACfo7C,oBAAqB,SAGjBC,GAAgB5jD,IAAc,CAClCT,OAAQ,CAAE,IAkBNskD,GAAe7jD,IAAc,CACjCzD,SAAU,OAGNunD,GAAgB9jD,IAAc,CAClCL,OAAQ,CAAE,EACVokD,UAAW,OACXC,gBAAiB,OACjBC,gBAAiB,SAGbC,GAAiBlkD,IAAc,CACnCpsC,QAAS,CAAE,EACXuwF,gBAAiB,SAyBnB,SAASC,eAAev5P,IACtB,MAAMw5P,MACJA,GAAKxlQ,QACLA,IACEgM,GACEy5P,GAZR,SAA2BxmQ,GAAIe,IAC7B,MAAMslQ,gBACJA,IACEtjD,IAAWqjD,IACf,OAAOC,GAAgBrmQ,GAAIe,GAC7B,CAO6B0lQ,CAAkBF,GAAOxlQ,IAC9CR,GAAQwM,GAAMxM,OAASimQ,GAC7B,OAAKjmQ,GAGE+hN,IAAIokD,QAAS,IACf35P,GACHxM,MAAOA,GACPgmQ,MAAOI,WAAWJ,MALXx5P,GAAMH,QAOjB,CACA,SAAS85P,QAAQ35P,IACf,MAAMw5P,MACJA,GAAKhmQ,MACLA,GAAK+zC,OACLA,GAAMuhF,UACNA,GAAY,QAAOruG,SACnBA,IACEza,IACG65P,GAASC,IAAW/5C,GAAS,IAC7Bg6C,GAAoBC,IAAyBj6C,GAAS,GAC7D,IAAIntC,GAAU,KACd,MAAMqnF,GAAapiD,IAAO,MACpBqiD,GAAariD,IAAO,MACpBpvC,YAAc26B,WAClB,MAAM+2D,KAAO,IAAML,IAAQ,GACtBD,IAAYjnF,KACXhwK,cAAiBw3P,WACnBxnF,GAAUhtK,WAAWu0P,KAAM,MAE3BA,OACAH,IAAsB,IAEzB,EAEGK,YAAc,KAClBP,IAAQ,GACRE,IAAsB,EAAM,EAa9BpgD,GAAU,KACR,MAAMh1M,QACJA,IACEq1P,GACJ,IAAKr1P,GACH,OAEF,MAAM01P,mBAAqBjjQ,KACzB,MAAMkjQ,GAAYv2P,SAAS+gB,gBAAkBk1O,GAAWr1P,SAAWZ,SAAS+gB,cAAc65H,QAAQ,kCAC9Fi7G,IAjBiB,GACvBjhQ,KACAmB,SAEA,MAAMgvK,GAAUmxF,GAAWt1P,QACrB+Y,GAAUs8O,GAAWr1P,QAC3B,OAAOmkK,KAAYyxF,SAAS5hQ,GAAGmB,GAAG4jB,GAAQ4U,0BAA4BioO,SAAS5hQ,GAAGmB,GAAGgvK,GAAQx2I,yBAAyB,EAWpGkoO,CAAiB,CAC/B7hQ,EAAGvB,GAAEuB,EACLmB,EAAG1C,GAAE0C,KACCwgQ,IAAaR,IACnBM,aACD,EAEGK,mBAAqBrjQ,KACzB,MAAM82B,cACJA,IACE92B,GAEAwiQ,KAAsBI,GAAWr1P,QA8D1BsjC,QAAQ,WA9D8B/Z,KAAiCA,GADhDywH,QAAQ,kCAExCy7G,aACD,EAKH,OAHAr2P,SAASzB,iBAAiB,QAAS+3P,oBACnCt2P,SAASzB,iBAAiB,WAAYm4P,oBACtC12P,SAASzB,iBAAiB,YAAa+3P,oBAChC,KACLt2P,SAASxB,oBAAoB,QAAS83P,oBACtCt2P,SAASxB,oBAAoB,YAAa83P,oBAC1Ct2P,SAASxB,oBAAoB,WAAYk4P,mBAAmB,CAC7D,GACA,CAACT,GAAWr1P,QAASi1P,GAASE,KACjC,MAAMY,cAAgB,IACb38C,IAAK,MAAO,CACjBhiL,MAAO,gCAAgC8sF,KACvCm6C,KAAM,UACNhwK,GAAI,+BACJ,kBAAmBumQ,GACnBp3P,MAAOqY,IAAYmgP,mBAAmBX,GAAWr1P,SACjD3E,IAAKi6P,GACLj7C,QAAS5nN,IAAKA,GAAEw4B,kBAChBhwB,SAAU,CAAC01M,IAAI,MAAO,CACpBv5K,MAAO,uCACPn8B,SAAUrM,KACR+hN,IAAI,MAAO,CACbv5K,MAAO,0CAIb,OAAOgiL,IAAK,MAAO,CACjBhiL,MAAO,uCACPpS,SAAU,IACV3pB,IAAKg6P,GACLnzC,aAAcr+C,YACdoyF,aAAc,KACZx0P,aAAausK,IACbA,GAAU,IAAI,EAEhB2qC,QAAS90C,YACTzuJ,UAxE2B3iB,KAChB,WAAXA,GAAEqzF,MAAqB2vK,aAAa,EAwEpCx6P,SAAU,CAACG,GAAMH,SAAUg6P,GAAUtyN,GAASw0L,EAAa4+B,gBAAiBpzN,GAAO3iC,SAAW+1P,gBAAkB,OAEpH,CAGA,SAASH,SAAS5hQ,GAAGmB,GAAGo/J,IACtB,MAAMvmI,IACJA,GAAGM,MACHA,GAAKR,OACLA,GAAMI,KACNA,IACEqmI,GACJ,OAAOvgK,IAAKk6B,IAAQl6B,IAAKs6B,IAASn5B,IAAK64B,IAAO74B,IAAK24B,EACrD,CACA,SAASkoO,mBAAmBE,IAC1B,MAAMC,GAAcD,GAAWvoO,wBAG/B,MAAO,UAFO,eAAewoO,GAAYniQ,gBAC1BmiQ,GAAYnoO,IAAM,GAArB,OAEd,CAIA,SAASgnO,WAAW3mQ,IAClB,MAAO,wBAAwBA,IACjC,CAwBA,SAAS+nQ,SAAS/nQ,IAChB,MAAMyhN,OACJA,IACEsB,IAAW+iD,IACf,OAAOrkD,GAAOzhN,GAChB,CAcA,SAASioQ,SAASt4P,GAAOmkD,GAAU2qJ,IACjC,MAAMypD,GAAenlD,IAAWgjD,IAC3BtnD,MAEDA,aACEypD,IAEN,MAAMC,GAAWvjD,KAAO,GAGpBnG,KAAa0pD,GAASx2P,SACxB8sM,GAASqP,GAAGn+M,GAAOmkD,IAIrB6yJ,GAAU,KACJlI,IAAY0pD,GAASx2P,SACvB8sM,GAASqP,GAAGn+M,GAAOmkD,IAErBq0M,GAASx2P,SAAU,EACZ,KACD8sM,IACFA,GAASrwG,IAAIz+F,GAAOmkD,GACrB,IAEF,CAACA,GAAUnkD,GAAO8uM,IACvB,CAqFA,SAAS4pD,kBAAkBroQ,IACzB,MAAMsoQ,OACJA,IACEvlD,IAAWijD,IACTh5P,GAAM43M,MACN1tL,GAAQ0tL,KAAO,GACf2jD,GAActiD,KAAYt2M,KAC1BA,GAAM3P,KAAOA,KACfsoQ,KACKpxO,GAAMvlB,UACTulB,GAAMvlB,SAAU,GAEnB,GACA,CAAC3R,KAaJ,OAZA2mN,GAAU,KACJzvL,GAAMvlB,SAAW3E,GAAI2E,UACnB5P,aAAWiL,GAAI2E,QAAQulB,QACzBlqB,GAAI2E,QAAQulB,QAEVn1B,aAAWiL,GAAI2E,QAAQ0wB,SACzBr1B,GAAI2E,QAAQ0wB,SAEdnL,GAAMvlB,SAAU,EACjB,IAEHs2P,SAAS,4BAA6BM,IAC/Bv7P,EACT,CAmFA,SAASg8P,kBAAkBl1M,IACzB,MAAMm1M,GAAcrkD,IAAO9wJ,IAE3B,OADAm1M,GAAYt3P,QAAUmiD,GACfmyJ,KAAY,IAAIv8L,KAASu/O,GAAYt3P,WAAW+X,KAAO,GAChE,CAkJA,SAAS8gM,YAAYz9M,IACnB,MAAMhM,QACJA,GAAOwlQ,MACPA,GAAKhmQ,MACLA,IACEwM,GACEy5P,GAnZR,SAA+BxmQ,GAAIe,IACjC,MAAM8kQ,oBACJA,IACE9iD,IAAW6iD,IACf,OAAOC,GAAoB7lQ,GAAIe,GACjC,CA8Y6BgpQ,CAAsBxD,GAAOxlQ,IAClD0pN,GAAclqN,IAASimQ,GAC7B,GAAI/7C,GACF,OAAOnI,IAAI,MAAO,CAChBv5K,MAAO,mCACPn8B,SAAU69M,IAGhB,CAEA,MAAMu/C,OAAS,OA2BTC,GAAeC,GAAW,CAACn9P,GAAOC,MACtC,MAAMilN,QACJA,GAAOn4L,SACPA,GAAQm1K,iBACRA,GAAgBE,cAChBA,GAAa5uM,MACbA,GAAK2uM,OACLA,GAAS86D,OAAMG,YACfA,GAAcH,OAAMI,UACpBA,GAAS7nH,kBACTA,GAAoB,CAAE,EAAAgsD,aACtBA,GAAe,KAAIa,WACnBA,IAAa,GACXriM,GACEyjN,GAAW5L,OACV1uC,GAAQm0F,IAAav9C,KACrBw9C,GAAYC,IAAiBz9C,EAASvsN,IAAS,KArC7B,SAAU21K,GAAQlpK,IAC3C,MAAOoP,GAAQouP,IAAa19C,OAASluN,GACrCoO,GAAI2E,QAAU+yM,GAAQ,KAAO,CAC3BxtL,MAAOza,KACDy5J,GACFA,GAAOh/I,MAAMza,UAES,IAAXA,KACTA,GAASvd,KAEXsrQ,GAAU/tP,IACX,KAED,CAACy5J,KACLywC,GAAU,UACc,IAAXvqM,IAA0B85J,KACnCA,GAAOh/I,MAAM9a,IACbouP,IAAU,GACX,GACA,CAACt0F,GAAQ95J,IACd,CAkBEquP,CAAmBv0F,GAAQlpK,IAC3B,MAAMonP,GAAc4U,mBAAkBx1O,KACpCy+L,GAAQz+L,IACR+2O,GAAc/2O,GAAS,IAEzBmzL,GAAU,KACR,IAAIzwC,GAcJ,OAbAA,GAAS,IAAI84B,cAAc,CACzBz1K,UAAWi3L,GAAS7+M,QACpBgV,SAAUytO,GACV7zP,MAAO+pQ,GACPp7D,UACA3sD,qBACA0sD,oBACAE,iBACAZ,gBACAa,cACAC,UAAU,IAEZg7D,GAAUn0F,IACH,KACLg5B,GAAO,IACPshB,GAAS7+M,QAAQH,UAAY,GAC7B64P,GAAU,KAAK,CAChB,GACA,IACH1jD,GAAU,KACHzwC,IAGD31K,KAAU+pQ,KAGdp0F,GAAOu6B,SAASlwM,IAChBgqQ,GAAchqQ,IAAM,GACnB,CAACA,KAIJ,OAAOwqN,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,gDAAiDqb,GAAY,YAAc,MAC7Fx9P,SAAU,CAAC01M,IAAI,MAAO,CACpBv5K,MAAO,8DACPn8B,SAAU,qBACR01M,IAAI,MAAO,CACbhxM,KAAMvE,GAAMuE,KACZy3B,MAAOgmN,GAAW,iEAAkEub,GAAa,SAAW,KAAMxwO,GAAW,WAAa,MAC1I9sB,IAAKwjN,GACLxE,QAZgB,KAClBh/M,GAAI2E,QAAQulB,OAAO,IAYforL,IAAI,SAAU,CAChBx1M,KAAM,SACNy4B,MAAO,qBACPwD,MAAO,uCACPijL,QAAS,IAAMm+C,GAAY,WAC3Bv9P,SAAU01M,IAAI4iD,UAAW,QAE3B,IAGEwF,OAAS,OA2BTC,GAAaT,GAAW,CAACn9P,GAAOC,MACpC,MAAMu1I,kBACJA,GAAiB4sD,cACjBA,GAAa5uM,MACbA,GAAK0xN,QACLA,GAAO24C,aACPA,GAAeF,OAAMx7D,OACrBA,GAASw7D,OAAMP,YACfA,GAAcO,OAAMnmO,YACpBA,GAAW6lO,UACXA,GAAStwO,SACTA,GAAQm1K,iBACRA,GAAgBxmF,UAChBA,IACE17G,GACEyjN,GAAW5L,OACV1uC,GAAQm0F,IAAav9C,KACrBw9C,GAAYC,IAAiBz9C,EAASvsN,IAAS,KAtC/B,SAAU21K,GAAQlpK,IACzC,MAAOoP,GAAQouP,IAAa19C,OAASluN,GACrCoO,GAAI2E,QAAU+yM,GAAQ,KAAO,CAC3BxtL,MAAOza,KACDy5J,GACFA,GAAOh/I,MAAMza,UAES,IAAXA,KACTA,GAASvd,KAEXsrQ,GAAU/tP,IACX,KAED,CAACy5J,KACLywC,GAAU,UACc,IAAXvqM,IAA0B85J,KACnCA,GAAOh/I,MAAM9a,IACbouP,IAAU,GACX,GACA,CAACt0F,GAAQ95J,IACd,CAmBEyuP,CAAiB30F,GAAQlpK,IACzB,MAAMonP,GAAc4U,mBAAkBx1O,KACpCy+L,GAAQz+L,IACR+2O,GAAc/2O,GAAS,IAEzBmzL,GAAU,KACR,IAAIzwC,GA8BJ,OAbAA,GAAS,IAAIgsE,WAAW,CACtB3oN,UAAWi3L,GAAS7+M,QACpBgV,SAAUytO,GACVrtO,UAbgB3iB,KAChB,GAAc,cAAVA,GAAEhC,MAAwB8zK,GAC5B,OAEF,MAAM93C,GAAY83C,GAAO7nC,eACnB/sG,GAAQ88F,GAAUrvB,OAAOqvB,GAAUL,WACtB,IAAfz8F,GAAM3F,MAA2B,IAAb2F,GAAM1F,IAC5BgvO,IACD,EAMD17D,OAAQA,GACR3qK,YAAaA,GACb0qK,iBAAkBA,GAClB1uM,MAAO+pQ,GACP7hJ,UAAWA,GACXmW,WAAY,IAAKuwE,GAAgB,CAACjyB,eAAiB,GAAK5P,WAAWvf,cACnExL,uBAEF8nH,GAAUn0F,IACH,KACLg5B,GAAO,IACPshB,GAAS7+M,QAAQH,UAAY,GAC7B64P,GAAU,KAAK,CAChB,GACA,IACH1jD,GAAU,KACHzwC,IAGD31K,KAAU+pQ,KAGdp0F,GAAOu6B,SAASlwM,IAChBgqQ,GAAchqQ,IAAM,GACnB,CAACA,KACJomN,GAAU,KACHzwC,IAGLA,GAAOmsE,aAAa55H,GAAU,GAC7B,CAACA,KACJk+F,GAAU,KACHzwC,IAGLA,GAAOosE,eAAe/9M,GAAY,GACjC,CAACA,KAIJ,OAAOwmL,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,6CAA8Cj1N,GAAW,WAAa,KAAMswO,GAAY,YAAc,MACxHx9P,SAAU,CAAC01M,IAAI,MAAO,CACpBv5K,MAAO,2DACPn8B,SAAU,qBACR01M,IAAI,MAAO,CACbhxM,KAAMvE,GAAMuE,KACZy3B,MAAOgmN,GAAW,6BAA8Bub,GAAa,SAAW,MACxEt9P,IAAKwjN,GACLxE,QAZgB,KAClBh/M,GAAI2E,QAAQulB,OAAO,IAYforL,IAAI,SAAU,CAChBx1M,KAAM,SACNy4B,MAAO,qBACPwD,MAAO,uCACPijL,QAAS,IAAMm+C,KACfv9P,SAAU01M,IAAI4iD,UAAW,QAE3B,IAGJ,SAAS4F,cAAc/9P,IACrB,MAAMo9H,OACJA,IACEp9H,GACJ,OAAKo9H,GAGEm4E,IAAI,OAAQ,CACjBv5K,MAAO,sCACPn8B,SAAU,MAJH,IAMX,CAEA,MAAMm+P,OAAS,OAOf,SAASC,SAASj+P,IAChB,MAAMm/L,KACJA,IAAO,EAAK/hE,OACZA,GAAMrwG,SACNA,IAAW,EAAKkyL,QAChBA,GAAU++C,QACRh+P,GAEEk+P,GAAoB,YAAY9gI,GAAS,SAAW,6CAS1D,OAAOm4E,IAAI,SAAU,CACnBx1M,KAAM,SACNi8B,MAAOgmN,GAAW,iCAAkC5kH,GAAS,SAAW,KAAe,aAAT+hE,GAAsB,WAAa,YACjH8f,QAXkB5nN,KAClB4nN,GAAQ5nN,IAGHA,GAAE8mQ,aACL9mQ,GAAEw4B,iBACH,EAMD9C,SAAmB,aAAToyK,IAAuBpyK,GACjCyL,MAAgB,aAAT2mK,GAfiB,+BAeyB++D,GACjDr+P,SAAU01M,IAAIyiD,WAAY,KAE9B,CAEA,MAAMoG,GAAmBjpD,IAAc,CACrC5lL,KAAM,OACNjB,MAAO,OACPvK,OAAQ,OAoBV,SAASs6O,cAAc/sQ,GAAIgtQ,IACzB,IAAI91P,GACAsjP,GAAQ9nF,GAwBZ,SAAS+nF,OAAOnpP,IACd,MAAM2jB,GAAQ,CACZ3tB,EAAGgK,GAAMkjJ,QAAUgmG,GACnB/xP,EAAG6I,GAAMmjJ,QAAUie,IAIrB,OAAO1yK,GAAG8B,KAAKoV,GAAM5F,GAAO2jB,GAC7B,CACD,SAASylO,QACPhoP,SAASxB,oBAAoB,WAAYupP,QAAQ,GACjD/nP,SAASxB,oBAAoB,YAAawjB,gBAAgB,GAC1DhiB,SAASxB,oBAAoB,UAAWwpP,OACxChoP,SAASxB,oBAAoB,OAAQwjB,eACtC,CACD,OApCA,SAAqBpjB,IACnB4F,GAAO7U,KACPm4P,GAASlpP,GAAMkjJ,QACfke,GAASphK,GAAMmjJ,QAGXnjJ,GAAMmmJ,cACRnmJ,GAAMmmJ,aAAakjG,aAAaqS,IAoC7BrsB,GAAO,mCApCoD,EAAG,GASnEjuO,SAASzB,iBAAiB,WAAYwpP,QAAQ,GAC9C/nP,SAASzB,iBAAiB,YAAayjB,gBAAgB,GACvDhiB,SAASzB,iBAAiB,UAAWypP,OACrChoP,SAASzB,iBAAiB,OAAQyjB,eACnC,CAiBH,CACA,SAASA,eAAepjB,IACtBA,GAAMojB,iBACNpjB,GAAMitB,iBACR,CAKA,MAAM0uO,OAAS,OAqGf,MAAMC,GAAQrB,GAjFd,SAAwBn9P,GAAOy+P,IAC7B,MAAMjyO,UACJA,GAASzP,UACTA,GAAS2+N,kBACTA,GAAiBjhO,SACjBA,GAAQ+K,MACRA,GAAKm9G,OACLA,GAAM9oH,QACNA,GAAOomO,eACPA,GAAiBse,OAAMje,iBACvBA,GAAmBie,OAAMzf,YACzBA,IAAc,EAAI4f,cAClBA,IAAgB,EAAIlmO,MACpBA,IACEx4B,GACE2+P,GAAe9mD,IAAO,MACtB+mD,GAAW/mD,IAAO,MAClBgnD,GAAWJ,IAAaG,GACxBE,GAAgBnnD,GAAQ,IA6LhC,SAA0Bt6L,IACxB,GAAoB,iBAATA,GACT,OAAOwlK,MAAMxlK,IAEf,OAAOA,EACT,CAlMsC0hP,CAAiBvyO,KAAY,CAACA,KAU5DwyO,YAAc,KACdL,GAAa/5P,SACf+5P,GAAa/5P,QAAQk7O,UACtB,EAEH,IAAI19O,GAAQ,CAAA,EAqCZ,OApCIqY,KACFrY,GAAQ,IACHA,GACHwwB,IAAKnY,GAASmY,IAAM,KACpBE,KAAMrY,GAASqY,KAAO,OAGtBtN,KACFpjB,GAAMojB,MAAQA,GAAQ,MAEpBm9G,KACFvgI,GAAMugI,OAASA,GAAS,MAE1Bi3E,GAAU,KACJilD,GAASj6P,SACXi6P,GAASj6P,QAAQrC,iBAAiB,UAAWy8P,aAExC,KACLH,GAASj6P,QAAQpC,oBAAoB,UAAWw8P,YAAY,IAE7D,CAACH,KACJjlD,GAAU,KACJilD,GAASj6P,UACX+5P,GAAa/5P,QAAUq6P,gBAA0BJ,GAASj6P,QAAS,CACjEi6O,yBAAyB,EACzBnD,qBACAwjB,cAAeL,GAASj6P,QACxBq7O,kBACAK,oBACA9E,wBAAyBsD,KAE3B6f,GAAa/5P,QAAQk7O,YAEhB,IAAM6e,GAAa/5P,SAAW+5P,GAAa/5P,QAAQ0wI,eACzD,CAACupH,KACJ3D,SAAS,yBAA0BrhP,IAC5BkiN,EAAaxmB,IAAI,MAAO,CAC7B,aAAc/8K,GACd5O,UAAW,EACX3pB,IAAK4+P,GACL7kP,UAvDoBpX,KAEpBA,GAAMitB,kBACF6uO,IAA+B,WAAd97P,GAAMvN,KACzBwkB,IACD,EAmDDopJ,KAAM,SACNjnI,MAAOgmN,GAAW,6BAA8BjlO,IAChD3a,MAAOA,GACPvC,SAAUG,GAAMH,WACdi/P,IAAiB96P,SAAS6mB,KAChC,IAwHA,SAASs0O,eAAe9hP,IACtB,OAAOA,GAAKuhI,QAAQ,8BACtB,CAxHA4/G,GAAMY,MAGN,SAAep/P,IACb,MAAMH,SACJA,GAAQkd,UACRA,GAAS+rI,UACTA,GAASy3E,KACTA,GAAO,SAAQ/nM,MACfA,GAAK6mO,gBACLA,IAAkB,EAAKC,mBACvBA,GAAqB,cAAazlP,QAClCA,MACGw9C,IACDr3D,GAIEa,GAAUg3M,IAAO,CACrB0nD,cAAe,KACfC,YAAa,OAETC,GAAiB5nD,MACjB6nD,GAAW7nD,MACX8nD,OAAS,CAAC/8P,GAAO2jB,OAiGzB,SAAgB3jB,IACdA,GAAMojB,iBACNpjB,GAAMitB,iBACR,CAnGIqgC,CAAOttD,IACP,MACEhK,EAAGymJ,GACHtlJ,EAAGulJ,IACD/4H,GACEi5O,GAAc,CAClB5mQ,EAAGiI,GAAQ+D,QAAQ26P,cAAc3mQ,EAAIymJ,GACrCtlJ,EAAG8G,GAAQ+D,QAAQ26P,cAAcxlQ,EAAIulJ,IAEjCsgH,GAAcT,eAAeO,GAAS96P,SAC5Cg7P,GAAYx9P,MAAMwwB,IAAM4sO,GAAYzlQ,EAAI,KACxC6lQ,GAAYx9P,MAAM0wB,KAAO0sO,GAAY5mQ,EAAI,KAGzC2nO,GAAK,WAAY,CACfi/B,eACAj5O,UACA,EAuBJ,OAAOy3L,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,qCAAsCl5F,IAAa,YAAa/rI,IAClF9c,IAAKy/P,GACL52G,UAAWA,GACX8iG,YAzBkBhpP,KAEEy7P,cAAcsB,OAAQF,GAAe76P,QACzDgnP,CAAYhpP,IACZA,GAAMitB,kBACN,MACMspI,GADcgmG,eAAeO,GAAS96P,SACjB2tB,wBAC3B1xB,GAAQ+D,QAAQ26P,cAAgB,CAC9B3mQ,EAAGugK,GAAOrmI,KACV/4B,EAAGo/J,GAAOvmI,KAIZ2tM,GAAK,YAAY,EAajB8rB,UAXgB,KAChBxrP,GAAQ+D,QAAQ46P,YAAc,KAG9Bj/B,GAAK,UAAU,KAQZlpK,GACHx3D,SAAU,CAACipJ,IAAak1D,IAAKkE,IAAU,CACrCriN,SAAU,CAAC01M,IAAI,MAAO,CACpBt1M,IAAKw/P,GACLzjO,MAAO,6CACLu5K,IAAI,MAAO,CACbv5K,MAAO,0CACPn8B,SAAU01M,IAAIuiD,SAAU,SAExBviD,IAAI,MAAO,CACbv5K,MAAO,oCACPn8B,SAAU24B,KACR34B,GAAUw/P,IAAmB9pD,IAAI,SAAU,CAC7C/8K,MAAO8mO,GACPtjO,MAAO,oCACPijL,QAASplM,GACTha,SAAU01M,IAAI6iD,UAAW,QAG/B,EAzFAoG,GAAMqB,KA0FN,SAAc7/P,IACZ,MAAMH,SACJA,GAAQkd,UACRA,MACGs6C,IACDr3D,GACJ,OAAOu1M,IAAI,MAAO,CAChBv5K,MAAOgmN,GAAW,mCAAoCjlO,OACnDs6C,GACHx3D,SAAUA,IAEd,EApGA2+P,GAAMsB,OAqGN,SAAgB9/P,IACd,MAAMH,SACJA,GAAQkd,UACRA,MACGs6C,IACDr3D,GACJ,OAAOu1M,IAAI,MAAO,CAChBv5K,MAAOgmN,GAAW,qCAAsCjlO,OACrDs6C,GACHx3D,SAAUG,GAAMH,UAEpB,EAkBA,MAAMkgQ,GAAmB,IAwPzB,SAASsB,aAAarhQ,IACpB,MAAM/M,GACJA,GAAE+nL,MACFA,GAAKkqC,QACLA,GAAO1xN,MACPA,GAAK8tQ,cACLA,GAAaloP,OACbA,GAAMmkM,QACNA,GAAOzuL,OACPA,GAAM20L,SACNA,GAAQ16C,QACRA,IACE/oK,IACGu9P,GAAYC,IAAiBz9C,EAASvsN,IAc7C,OANAomN,GAAU,KACJpmN,KAAU+pQ,IAGdC,GAAchqQ,GAAM,GACnB,CAACA,KACGwqN,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,qCAAsC,CACtD5oO,YAEFvZ,SAAU,CAAC01M,IAAI,QAAS,CACtBv5K,MAAO,6BACP7+B,IAAKokQ,WAAWtuQ,IAChB4M,SAAU01M,IAAIgkD,eAAgB,CAC5B/lQ,MAAOu1K,GACPywF,MAAOvmQ,GACPe,QAASgM,GAAMhM,QACf6L,SAAUm7K,OAEVgjC,IAAK,MAAO,CACdhiL,MAAO,qCACPn8B,SAAU,CAACm+M,IAAK,QAAS,CACvBhiL,MAAO,+CACPn8B,SAAU,CAAC01M,IAAI,QAAS,CACtBt1M,IAAKwjN,GACLxwN,GAAIsuQ,WAAWtuQ,IACf+oC,MAAO,6BACPj8B,KAAM,WACNw9M,QAASA,GACTzuL,OAAQA,GACRvqB,KAAMtR,GACNiyN,QAnCY7tN,KAHQ+rM,WAC1B8hB,IAAS1xN,GAAM,EAGfguQ,GACAhE,GAAcnmQ,GAAEjC,OAAO5B,MAAM,EAkCvBm0M,UAAW41D,KACThoD,IAAI,OAAQ,CACdv5K,MAAO,kDAEPslO,IAAiB/rD,IAAI,IAAK,CAC5Bv5K,MAAO,4CACPn8B,SAAUyhQ,UAIlB,CA0DA,SAASC,WAAWtuQ,IAClB,MAAO,wBAAwBA,IACjC,CAEA,SAAS0uQ,YAAY3hQ,IACnB,MAAMwc,SACJA,GAAQuQ,SACRA,GAAQuyJ,aACRA,IAAe,EAAIrsL,GACnBA,GAAEwwN,SACFA,GAAQzoC,MACRA,GAAKl4J,IACLA,GAAGD,IACHA,GAAGqiM,QACHA,GAAO7+L,KACPA,GAAI7yB,MACJA,GAAQ,GAAE+pN,QACVA,GAAOzuL,OACPA,IACE9uB,IACGu9P,GAAYC,IAAiBz9C,EAASvsN,IACvCguQ,GAAsB7pD,GAAQ,IAC3Bn7L,IAASpnB,KACVA,GAAOwsQ,SAASt6L,OAClB49I,GAAQ9vN,GAAO5B,MAAQsrB,WAAW1pB,GAAO5B,YAAS3B,EACnD,KAEF,CAACqzN,GAAS1oM,KAWb,OANAo9L,GAAU,KACJpmN,KAAU+pQ,IAGdC,GAAchqQ,GAAM,GACnB,CAACA,KACGwqN,IAAK,MAAO,CACjBhiL,MAAO,mCACPn8B,SAAU,CAACy/K,IAAgBi2B,IAAI,QAAS,CACtCp4M,IAAK0kQ,WAAW5uQ,IAChB+oC,MAAO,6BACPn8B,SAAUm7K,KACRu6B,IAAI,QAAS,CACftiN,GAAI4uQ,WAAW5uQ,IACfgN,IAAKwjN,GACL1jN,KAAM,SACNwE,KAAMtR,GACN6uQ,WAAY,QACZ98C,aAAc,MACdj4L,SAAUA,GACViP,MAAO,6BACPlZ,IAAKA,GACLD,IAAKA,GACLqiM,QA3BgB7tN,KAClBmqQ,GAAoBnqQ,GAAEjC,QACtBooQ,GAAcnmQ,GAAEjC,OAAO5B,MAAM,EA0B3B+pN,QAASA,GACTzuL,OAAQA,GACRzI,KAAMA,GACN7yB,MAAO+pQ,OAGb,CAmBA,SAASwE,iBAAiB/hQ,IACxB,MAAMwc,SACJA,GAAQkhM,YACRA,GAAW3wL,SACXA,GAAQ/4B,QACRA,GAAO2W,SACPA,GAAQ1X,GACRA,GAAE+nL,MACFA,GAAKl4J,IACLA,GAAGD,IACHA,GAAG6gL,SACHA,GAAQr9K,KACRA,GAAIk3L,QACJA,GAAOzuL,OACPA,GAAMuvL,SACNA,IACEr+M,GACEgiQ,GAAchH,SAAS/nQ,KACtBgvQ,GAAYC,IAAiBniD,EAAS,MAC7C,IAAIvsN,GAAQmX,GAAS3W,IACrB4lN,GAAU,KACR,GAAI5kN,aAAWqpN,IAAW,CACxB,MAAM8jD,GAAqB9jD,GAAS7qN,KAAU,KAC9C0uQ,GAAcC,GACf,IACA,CAAC3uQ,GAAO6qN,KACX,MAQMlgM,GAAQ6jP,IAAeC,GAC7B,OAAOjkD,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,6BAA8B7jO,GAAQ,YAAc,IACtE,gBAAiBlrB,GACjB4M,SAAU,CAAC01M,IAAIosD,YAAa,CAC1BnlP,SAAUA,GACVuQ,SAAUA,GACV95B,GAAIA,GACJ+nL,MAAOA,GACPuiC,QAASA,GACTzuL,OAAQA,GACRo2L,QAnBYz+L,KACd,IAAI07O,GAAqB,KACrBntQ,aAAWqpN,MACb8jD,GAAqB9jD,GAAS53L,KAAa,MAE7Ci9K,GAASj9K,GAAU07O,IACnBD,GAAcC,GAAmB,EAc/Br/O,IAAKA,GACLD,IAAKA,GACLwD,KAAMA,GACN7yB,MAAOA,IACNQ,IAAUmqB,IAASo3L,IAAI,MAAO,CAC/Bv5K,MAAO,6BACPn8B,SAAUse,KACRo3L,IAAIkI,YAAa,CACnB+7C,MAAOvmQ,GACPe,QAASA,GACTR,MAAOkqN,OAGb,CACA,SAAS0kD,WAAW/kP,IAClB,OAAOA,MAAUA,GAAK7pB,KACxB,CAIA,SAASquQ,WAAW5uQ,IAClB,MAAO,wBAAwBA,IACjC,CAEA,MAAMovQ,OAAS,OA8Mf,MAAMC,GAueN,SAA4BxF,IAC1B,OAAO,SAAU98P,IACf,MAAM/M,GACJA,IACE+M,IACEsuB,MACJA,IACE0nL,IAAWooD,IACTwF,GAAa3H,kBAAkB3tO,IAQrC,OAPAsrL,GAAU,IACD,KACLgqD,GAAW,CACT3wQ,OACA,GAEH,IACIsiN,IAAIunD,GAAW,IACjB98P,IAET,CACA,CA3fsBqga,EA7MtB,SAAgCrga,IAC9B,MAAMwc,SACJA,GAAQvpB,GACRA,GAAEe,QACFA,GAAOgnL,MACPA,GAAKwmB,aACLA,GAAY0jB,QACZA,GAAOjV,QACPA,GAAOz4K,YACPA,GAAW2nK,KACXA,GAAI3rM,MACJA,GAAQ,GAAEu5B,SACVA,IAAW,EAAK2uF,UAChBA,GAAS2mF,WACTA,GAAUH,iBACVA,GAAgBqgE,kBAChBA,GAAoBC,GAAiBz5F,QACrCA,IACE/oK,IACGu9P,GAAYkF,IAAkB1iD,EAASvsN,IACxCwtQ,GAAY1F,kBAAkBroQ,IAC9ByvQ,GAAe7qD,MACf8qD,GAAaztQ,WAASqoQ,KAAeA,GAAW/gM,WAAW,MAAiB,aAAT2iI,GACnEyjE,GAAgB1tQ,WAASqoQ,KAAeA,GAAW/gM,WAAW,KAAO+gM,GAAWr/P,UAAU,GAAKq/P,IAC9FpzO,GAAO04O,IAAa9iD,OAASluN,IAElC09B,KAAMuzO,GACN/+O,OAAQg/O,IACN/sD,IAAWooD,IACT4E,GAAWD,KAAgB9vQ,GAC3BgwQ,SAAW,CAACvzP,GAAS,KACzB,MAGM+K,GAHWioP,GAAa99P,QAAQqkB,SAASjlB,SAAS+gB,eAG5B/gB,SAAS+gB,cAAc8kI,eAAiB13J,IACpE0wQ,GAAUpoP,GAAW/K,GAAO,EAExB8xP,GAAsB7pD,GAAQ,IAC3Bn7L,IAASiK,KACdy+L,GAAQz+L,GAAS,KAElB,CAACy+L,GAAS1oM,KACPghP,cAAgB/2O,KACpBg8O,GAAeh8O,IAEb+6O,QADsB,IAAb/6O,IAAyC,KAAbA,IAAgC,MAAbA,QACpC50B,EAEA40B,GACrB,EAEGy8O,GAAmBjH,mBAAkB,KAC5B,aAAT98D,IAMFq+D,cAHGmF,GAGWC,GAFA,IAAMrF,GAGrB,IAEG4F,iBAAmB18O,KACnBk8O,KACFl8O,GAAW,IAAMA,IAEfA,KAAa82O,KAGjBC,cAAc/2O,KACTk8O,IAAcztQ,WAASuxB,KAAaA,GAAS+1C,WAAW,MAE3DymM,UAAU,GACX,EAEGG,GAAanH,mBAAkBp6D,KAC7BA,IAAQA,GAAKhuM,OAInBo8M,GAAQ,+BAHNA,QAAQp+M,EAG4B,IAElCwxQ,gBAAkB,CAACtjQ,GAAO,UAC9B,MAAMujQ,GAAe,CACnBrwQ,MACAuuM,gBACA0jB,QAASi+C,iBACT1oP,SAAU8oP,uBAAuBb,GAAa99P,SAC9Cy9L,cACA7pK,MAAOgrO,cAAcxvQ,GAASgnL,IAC9BknB,oBACAniM,QACAvM,MAAOovQ,GACPlnJ,cAEFonJ,GAAU7vQ,GAAIqwQ,GAActC,GAAUp8P,QAAQ,EAkDhD,OAhDAg1M,GAAU,UACa,IAAVzvL,KACT62O,GAAUp8P,QAAQulB,MAAMA,IACxB04O,QAAUhxQ,GACX,GACA,CAACs4B,KACJyvL,GAAU,KACJpmN,KAAU+pQ,IASdC,cAJKhqQ,KACWmvQ,GAAa,IAAM,IAGf,GACnB,CAACnvQ,KAGJomN,GAAU,KACR,MAAM6pD,YAAc7gQ,KACb+/P,IAGL//P,GAAM4mJ,cAAct/F,QAAQ,mBAAoBtnD,GAAM4mJ,cAAc3hG,QAAQ,QAAQ,EAEhF67M,aAAe9gQ,KACnB,GAAI+/P,IAAcK,GAChB,OAEWpgQ,GAAM4mJ,cAAc3hG,QAAQ,qBAEvCjiD,YAAW,KACTs9P,KACAD,UAAU,GAEb,EAKH,OAHAP,GAAa99P,QAAQrC,iBAAiB,OAAQkhQ,aAC9Cf,GAAa99P,QAAQrC,iBAAiB,MAAOkhQ,aAC7Cf,GAAa99P,QAAQrC,iBAAiB,QAASmhQ,cACxC,KACLhB,GAAa99P,QAAQpC,oBAAoB,OAAQihQ,aACjDf,GAAa99P,QAAQpC,oBAAoB,MAAOihQ,aAChDf,GAAa99P,QAAQpC,oBAAoB,QAASkhQ,aAAa,CAChE,GACA,CAAChB,GAAcC,GAAYO,GAAkBD,WACzCjlD,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,kCAAmC,CACnD,cAAe2gB,KAEjB9iQ,SAAU,CAACm+M,IAAK,QAAS,CACvB7gN,IAAKwmQ,WAAW1wQ,IAChB+oC,MAAO,6BACPijL,QAAS,IAAMgkD,WACfpjQ,SAAU,CAAC01M,IAAIgkD,eAAgB,CAC7B/lQ,MAAOu1K,GACPywF,MAAOvmQ,GACPe,QAASgM,GAAMhM,QACf6L,SAAUm7K,KACRu6B,IAAI0oD,SAAU,CAChBjjF,MAAOA,GACPmkB,KAAMA,GACN8f,QAASikD,GACT9lI,OAAQulI,QAER3kD,IAAK,MAAO,CACdhiL,MAAO,sCACP/7B,IAAKyiQ,GACL7iQ,SAAU,CAAC01M,IAAIwoD,cAAe,CAC5B3gI,OAAQulI,GACR51O,SAAmB,aAAToyK,IAAuBpyK,GACjCkyL,QAASikD,KACPP,GAAaptD,IAAIqoD,GAAY,CAC/Br5P,KAAMtR,GACNiyN,QAASi+C,iBACT3tH,kBAAmB,CACjBviJ,GAAM0wQ,WAAW1wQ,IACjB,aAAc+nL,IAEhBjuJ,SAAUA,GACVswO,UAAW2F,GACXnF,aAAc,KACZqF,KACAD,UAAS,EAAK,EAEhB9gE,OAAQihE,GACRhG,YAAaiG,gBACb7rO,YAAaA,GACbhkC,MAAOovQ,GACPlnJ,UAAWA,GACXz7G,IAAK+gQ,GACL9+D,iBAAkBA,KACfqT,IAAIgtD,GAAmB,IACvBviQ,GACHq9P,UAAW2F,GACX99C,QAASi+C,iBACT3tH,kBAAmB,CACjBviJ,GAAM0wQ,WAAW1wQ,IACjB,aAAc+nL,IAEhBxnL,MAAO+pQ,GACPt9P,IAAK+gQ,GACL5D,YAAaiG,gBACbX,aAAcA,UAItB,IAEMF,GAAoBrF,GAAW,CAACn9P,GAAOC,MAC3C,MAAMhN,GACJA,GAAE85B,SACFA,GAAQm4L,QACRA,GAAO1xN,MACPA,GAAK+pN,QACLA,GAAOzuL,OACPA,GAAM0I,YACNA,IACEx3B,GACEyjN,GAAW5L,MAmBjB,OAfA53M,GAAI2E,QAAU,CACZulB,MAAO1P,KACL,MAAM0L,GAAQs9L,GAAS7+M,QAClBuhB,KAGLA,GAAMgE,QACkB,iBAAb1P,KACLA,GAAWjnB,GAAMK,SACnB4mB,GAAWjnB,GAAMK,QAEnBsyB,GAAMm1H,kBAAkB7gI,GAAUA,KACnC,GAGE86L,IAAI,QAAS,CAClBtiN,GAAI0wQ,WAAW1wQ,IACf8M,KAAM,OACNE,IAAKwjN,GACLl/M,KAAMtR,GACN6uQ,WAAY,QACZ98C,aAAc,MACdj4L,SAAUA,GACViP,MAAO,6BACPkpL,QAAS7tN,IAAK6tN,GAAQ7tN,GAAEjC,OAAO5B,OAC/B+pN,QAASA,GACTzuL,OAAQA,GACR0I,YAAaA,GACbhkC,MAAOA,IAAS,IAChB,IAwLJ,SAASuwQ,UAAU/jQ,IACjB,MAAMhM,QACJA,GAAOf,GACPA,GAAEyqN,YACFA,GAAWlhM,SACXA,GAAQuQ,SACRA,GAAQoyK,KACRA,GAAInkB,MACJA,GAAKrwK,SACLA,GAAQ+4L,SACRA,GAAQxB,iBACRA,GAAgBV,aAChBA,GAAYa,WACZA,GAAUgc,SACVA,GAAQ87C,KACRA,GAAOkI,OAAM2B,QACbA,GAAOtoJ,UACPA,GAAS6hG,QACTA,GAAOzuL,OACPA,GAAM0I,YACNA,GAAWuxI,QACXA,IACE/oK,IACGikQ,GAAiBC,IAAsBnkD,EAAS,OAChDkiD,GAAYC,IAAiBniD,EAAS,MAC7C,IAAIvsN,GAAQmX,GAAS3W,IACrB4lN,GAAU,KACR,GAAI5kN,aAAWqpN,IAAW,CACxB,MAAM8jD,GAAqB9jD,GAAS7qN,KAAU,KAC9C0wQ,GAAmB/B,GACpB,IACA,CAAC3uQ,GAAO6qN,KACX,MAAM6G,GAAU+2C,mBAAkBx1O,KAChC,IAAI07O,GAAqB,KACrBntQ,aAAWqpN,MACb8jD,GAAqB9jD,GAAS53L,KAAa,MAIzCA,KAAajzB,IACfkwM,GAASj9K,GAAU07O,IAErB+B,GAAmB/B,GAAmB,IAElClyD,GAAUiJ,KAAY9gM,KAC1B8pP,GAAc9pP,GAAI,GACjB,IAEG+F,GADiB68O,SAAS/nQ,KACAgvQ,IAAcgC,GAC9C,OAAOjmD,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAWhiP,GAAMg8B,MAAO,6BAA8B7d,GAAQ,YAAc,IACnF,gBAAiBlrB,GACjB4M,SAAU,CAACsE,EAAcm+P,GAAe,IACnCtiQ,GACHwc,SAAUA,GACVuQ,SAAUA,GACVoyK,KAAMA,GACNlsM,GAAIA,GACJoC,IAAKrB,GACLgnL,MAAOA,GACPkqC,QAASA,GACTjV,QAASA,GACTsN,QAASA,GACTzuL,OAAQA,GACR0I,YAAaA,GACbwsO,QAASA,GACTxiE,aAAcA,GACda,WAAYA,GACZ83D,KAAMA,GACN3mQ,MAAOA,GACPkoH,UAAWA,GACXwmF,iBAAkBA,GAClBqgE,kBAAmBviQ,GAAMuiQ,kBACzBx5F,QAASA,KACP5qJ,IAASo3L,IAAI,MAAO,CACtBv5K,MAAO,6BACPn8B,SAAUse,KACRo3L,IAAIkI,YAAa,CACnB+7C,MAAOvmQ,GACPe,QAASA,GACTR,MAAOkqN,OAGb,CAuIA,SAAS0mD,oBAAoBpkQ,IAC3B,OAAOu1M,IAAIwuD,UAAW,CACpB/nO,MAAO,uCACPumO,kBAAmBrF,MAChBl9P,IAEP,CAaA,SAAS2jQ,WAAW1wQ,IAClB,MAAO,wBAAwBA,IACjC,CACA,SAASswQ,uBAAuBvvQ,IAC9B,MAAM4+B,IACJA,GAAGE,KACHA,IACE9+B,GAAQu+B,wBACZ,MAAO,CACLO,KAAMA,GAAOitO,GAAmB,GAChCntO,IAAKA,GAET,CAGA,SAAS4wO,cAAcxvQ,GAASgnL,IAC9B,IAAIspF,GAAa,GAIjB,OAHItwQ,IAAWA,GAAQ+L,OACrBukQ,GAAa,GAAGtwQ,GAAQ+L,WAEnB,GAAGukQ,KAAatpF,IACzB,CAslCA,SAAS+5C,OAAO/0N,IACd,MAAM/M,GACJA,GAAE+nL,MACFA,GAAKphK,SACLA,GAAQyG,QACRA,GAAU,GAAE7sB,MACZA,GAAQ,GAAEu5B,SACVA,GAAQwwL,QACRA,GAAOzuL,OACPA,GAAMi6I,QACNA,IACE/oK,GACEC,GAAMq7P,kBAAkBroQ,KACvBsqQ,GAAYC,IAAiBz9C,EAASvsN,IAgB7C,OANAomN,GAAU,KACJpmN,KAAU+pQ,IAGdC,GAAchqQ,GAAM,GACnB,CAACA,KACGwqN,IAAK,MAAO,CACjBhiL,MAAO,8BACPn8B,SAAU,CAAC01M,IAAI,QAAS,CACtBp4M,IAAKmqQ,WAAWr0Q,IAChB+oC,MAAO,6BACPn8B,SAAU01M,IAAIgkD,eAAgB,CAC5B/lQ,MAAOu1K,GACPywF,MAAOvmQ,GACPe,QAASgM,GAAMhM,QACf6L,SAAUm7K,OAEVu6B,IAAI,SAAU,CAChBt1M,IAAKA,GACLhN,GAAIq0Q,WAAWr0Q,IACfsR,KAAMtR,GACN+oC,MAAO,6BACPkpL,QA1BiB7tN,KALQ,GAC3BjC,cAEAwkB,GAASxkB,GAAO5B,MAAM,EAGtB2zQ,CAAqB9vQ,IACrBmmQ,GAAcnmQ,GAAEjC,OAAO5B,MAAM,EAyB3B+pN,QAASA,GACTzuL,OAAQA,GACRt7B,MAAO+pQ,GACPxwO,SAAUA,GACVltB,SAAUwgB,GAAQ3pB,KAAI,CAAC6+B,GAAQj/B,KACzBi/B,GAAO11B,SACF01M,IAAI,WAAY,CACrBv6B,MAAOzlJ,GAAOylJ,MACdn7K,SAAU01B,GAAO11B,SAASnJ,KAAI,CAACs7B,GAAO17B,KAAQi/M,IAAI,SAAU,CAC1D/hN,MAAOw+B,GAAMx+B,MACbu5B,SAAUiF,GAAMjF,SAChBltB,SAAUmyB,GAAMgpJ,OACf1kL,OACFA,IAEEi/M,IAAI,SAAU,CACnB/hN,MAAO+hC,GAAO/hC,MACdu5B,SAAUwI,GAAOxI,SACjBltB,SAAU01B,GAAOylJ,OAChB1kL,UAIX,CAiBA,SAASixQ,YAAYvnQ,IACnB,MAAMhM,QACJA,GAAOf,GACPA,GAAEyqN,YACFA,GAAW1iC,MACXA,GAAKrwK,SACLA,GAAQ+4L,SACRA,GAAQ8jE,WACRA,GAAUz6O,SACVA,GAAQwwL,QACRA,GAAOzuL,OACPA,GAAMuvL,SACNA,GAAQt1C,QACRA,IACE/oK,GACEqgB,GAAUmnP,GAAWxzQ,IACrBguQ,GAAchH,SAAS/nQ,KACtBgvQ,GAAYC,IAAiBniD,EAAS,MAC7C,IAAIvsN,GAAQmX,GAAS3W,IACrB4lN,GAAU,KACR,GAAI5kN,aAAWqpN,IAAW,CACxB,MAAM8jD,GAAqB9jD,GAAS7qN,KAAU,KAC9C0uQ,GAAcC,GACf,IACA,CAAC3uQ,GAAO6qN,KACX,MAQMlgM,GAAQ6jP,IAAeC,GAC7B,OAAOjkD,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,6BAA8B7jO,GAAQ,YAAc,IACtE,gBAAiBlrB,GACjB4M,SAAU,CAAC01M,IAAIwf,OAAQ,CACrB9hO,GAAIA,GACJ+nL,MAAOA,GACPxnL,MAAOA,GACPomB,SAhBa6M,KACf,IAAI07O,GAAqB,KACrBntQ,aAAWqpN,MACb8jD,GAAqB9jD,GAAS53L,KAAa,MAE7Ci9K,GAASj9K,GAAU07O,IACnBD,GAAcC,GAAmB,EAW/B5kD,QAASA,GACTzuL,OAAQA,GACRzO,QAASA,GACT0M,SAAUA,GACVg8I,QAASA,GACT/0K,QAASA,IACRA,IAAUmqB,IAASo3L,IAAI,MAAO,CAC/Bv5K,MAAO,6BACPn8B,SAAUse,KACRo3L,IAAIkI,YAAa,CACnB+7C,MAAOvmQ,GACPe,QAASA,GACTR,MAAOkqN,OAGb,CAOA,SAAS4pD,WAAWr0Q,IAClB,MAAO,wBAAwBA,IACjC,CA0NA,SAAS2lO,UAAU54N,IACjB,MAAMwc,SACJA,GAAQuQ,SACRA,IAAW,EAAK95B,GAChBA,GAAE+nL,MACFA,GAAKkqC,QACLA,GAAO3H,QACPA,GAAOzuL,OACPA,GAAM0I,YACNA,GAAWhkC,MACXA,GAAQ,GAAEu1K,QACVA,IACE/oK,IACGu9P,GAAYC,IAAiBz9C,EAASvsN,IAAS,IAChDyM,GAAMq7P,kBAAkBroQ,IACxBuuQ,GAAsB7pD,GAAQ,IAC3Bn7L,IAASpnB,IAAU8vN,GAAQ9vN,GAAO5B,MAAMK,OAASuB,GAAO5B,WAAQ3B,MACtE,CAACqzN,GAAS1oM,KAWb,OANAo9L,GAAU,KACJpmN,KAAU+pQ,IAGdC,GAAchqQ,GAAM,GACnB,CAACA,KACGwqN,IAAK,MAAO,CACjBhiL,MAAO,iCACPn8B,SAAU,CAAC01M,IAAI,QAAS,CACtBp4M,IAAK63M,SAAS/hN,IACd+oC,MAAO,6BACPn8B,SAAU01M,IAAIgkD,eAAgB,CAC5B/lQ,MAAOu1K,GACPywF,MAAOvmQ,GACPe,QAASgM,GAAMhM,QACf6L,SAAUm7K,OAEVu6B,IAAI,QAAS,CACft1M,IAAKA,GACLhN,GAAI+hN,SAAS/hN,IACb8M,KAAM,OACNwE,KAAMtR,GACN6uQ,WAAY,QACZ98C,aAAc,MACdj4L,SAAUA,GACViP,MAAO,6BACPkpL,QA9BgB7tN,KAClBmqQ,GAAoBnqQ,GAAEjC,QACtBooQ,GAAcnmQ,GAAEjC,OAAO5B,MAAM,EA6B3B+pN,QAASA,GACTzuL,OAAQA,GACR0I,YAAaA,GACbhkC,MAAO+pQ,OAGb,CAiBA,SAASwK,eAAe/nQ,IACtB,MAAMhM,QACJA,GAAOf,GACPA,GAAEyqN,YACFA,GAAWlhM,SACXA,GAAQuQ,SACRA,GAAQiuJ,MACRA,GAAKrwK,SACLA,GAAQ+4L,SACRA,GAAQ2a,SACRA,GAAQd,QACRA,GAAOzuL,OACPA,GAAM0I,YACNA,GAAWuxI,QACXA,IACE/oK,GACEgiQ,GAAchH,SAAS/nQ,KACtBgvQ,GAAYC,IAAiBniD,EAAS,MAC7C,IAAIvsN,GAAQmX,GAAS3W,IACrB4lN,GAAU,KACR,GAAI5kN,aAAWqpN,IAAW,CACxB,MAAM8jD,GAAqB9jD,GAAS7qN,KAAU,KAC9C0uQ,GAAcC,GACf,IACA,CAAC3uQ,GAAO6qN,KACX,MAQMlgM,GAAQ6jP,IAAeC,GAC7B,OAAOjkD,IAAK,MAAO,CACjBhiL,MAAOgmN,GAAW,6BAA8B7jO,GAAQ,YAAc,IACtE,gBAAiBlrB,GACjB4M,SAAU,CAAC01M,IAAIqjB,UAAW,CACxBp8M,SAAUA,GACVuQ,SAAUA,GACV95B,GAAIA,GACJ+nL,MAAOA,GACPkqC,QAjBYz+L,KACd,IAAI07O,GAAqB,KACrBntQ,aAAWqpN,MACb8jD,GAAqB9jD,GAAS53L,KAAa,MAE7Ci9K,GAASj9K,GAAU07O,IACnBD,GAAcC,GAAmB,EAY/B5kD,QAASA,GACTzuL,OAAQA,GACR0I,YAAaA,GACbhkC,MAAOA,GACPu1K,QAASA,GACT/0K,QAASA,IACRA,IAAUmqB,IAASo3L,IAAI,MAAO,CAC/Bv5K,MAAO,6BACPn8B,SAAUse,KACRo3L,IAAIkI,YAAa,CACnB+7C,MAAOvmQ,GACPe,QAASA,GACTR,MAAOkqN,OAGb,CAOA,SAAS1I,SAAS/hN,IAChB,MAAO,wBAAwBA,IACjC,cA3gEgCkqQ,GAAW,CAACn9P,GAAOC,MACjD,MAAMhN,GACJA,GAAEupB,SACFA,GAAQuQ,SACRA,GAAQm4L,QACRA,GAAO1xN,MACPA,GAAKqvB,IACLA,GAAGC,IACHA,GAAGuD,KACHA,GAAIk3L,QACJA,GAAOzuL,OACPA,IACE9uB,GACEyjN,GAAW5L,MAmBjB,OAfA53M,GAAI2E,QAAU,CACZulB,MAAO1P,KACL,MAAM0L,GAAQs9L,GAAS7+M,QAClBuhB,KAGLA,GAAMgE,QACkB,iBAAb1P,IAAyBA,KAAatoB,MAC3CsoB,GAAWjnB,GAAMK,SACnB4mB,GAAWjnB,GAAMK,QAEnBsyB,GAAMm1H,kBAAkB7gI,GAAUA,KACnC,GAGE86L,IAAIosD,YAAa,CACtB1uQ,GAAIA,GACJupB,SAAUA,GACVuQ,SAAUA,GACVuyJ,cAAc,EACdmkC,SAAUA,GACV3gM,IAAKA,GACLD,IAAKA,GACLqiM,QAASA,GACT7+L,KAAMA,GACN7yB,MAAOA,GACP+pN,QAASA,GACTzuL,OAAQA,IACR,IAEyBquO,GAAW,CAACn9P,GAAOC,MAC9C,MAAMhN,GACJA,GAAE85B,SACFA,GAAQm4L,QACRA,GAAO1xN,MACPA,GAAK+pN,QACLA,GAAOzuL,OACPA,GAAM0I,YACNA,IACEx3B,GACEyjN,GAAW5L,MAcjB,OAVA53M,GAAI2E,QAAU,CACZulB,MAAO,KACL,MAAMhE,GAAQs9L,GAAS7+M,QAClBuhB,KAGLA,GAAMgE,QACNhE,GAAMm1H,kBAAkB,EAAG,GAAE,GAG1Bi6D,IAAI,WAAY,CACrBtiN,GAAI0wQ,WAAW1wQ,IACf8M,KAAM,OACNE,IAAKwjN,GACLl/M,KAAMtR,GACN6uQ,WAAY,QACZ98C,aAAc,MACdj4L,SAAUA,GACViP,MAAO,6BACPkpL,QAAS7tN,IAAK6tN,GAAQ7tN,GAAEjC,OAAO5B,OAC/B+pN,QAASA,GACTzuL,OAAQA,GACR0I,YAAaA,GACbhkC,MAAOA,IAAS,GAChB,aAAc,SACd,IAE6B2pQ,GAAW,CAACn9P,GAAOC,MAClD,MAAMhN,GACJA,GAAEiyN,QACFA,GAAO1xN,MACPA,GAAK+pN,QACLA,GAAOzuL,OACPA,GAAMwyO,cACNA,IACEthQ,GACEyjN,GAAW5L,MAajB,OATA53M,GAAI2E,QAAU,CACZulB,MAAO,KACL,MAAMhE,GAAQs9L,GAAS7+M,QAClBuhB,IAGLA,GAAMgE,OAAO,GAGVorL,IAAI8rD,aAAc,CACvBpuQ,GAAIA,GACJO,MAAOA,GACPiwN,SAAUA,GACVyB,QAASA,GACT3H,QAASA,GACTzuL,OAAQA,GACRwyO,cAAeA,IACf,IAEyBnE,GAAW,CAACn9P,GAAOC,MAC9C,MAAMhN,GACJA,GAAE85B,SACFA,GAAQm4L,QACRA,GAAO1xN,MACPA,GAAK+pN,QACLA,GAAOzuL,OACPA,IACE9uB,GACEyjN,GAAW5L,MAkBjB,OATA53M,GAAI2E,QAAU,CACZulB,MAAO,KACL,MAAMhE,GAAQs9L,GAAS7+M,QAClBuhB,IAGLA,GAAMgE,OAAO,GAGVorL,IAAI,QAAS,CAClBt1M,IAAKwjN,GACLxwN,GAAI0wQ,WAAW1wQ,IACfsR,KAAMtR,GACNsqN,QAASA,GACTzuL,OAAQA,GACR/uB,KAAM,WACNi8B,MAAO,6BACPpiB,SAzBmB,EACnBxkB,cAEA8vN,GAAQ9vN,GAAOuyM,QAAQ,EAuBvBA,QAASn0M,GACTu5B,SAAUA,IACV,IC1zEJ,OAAauzY,GAAuB,WAMlC,OAAArgI,cALA,SAAAqgI,wBAAY7yK,IAAiBoyC,qBAAAygI,yBAC3B7yK,GAAgBoc,iBAAiBl2Q,KAAM,IACzC,GAGA,CAAA,CAAA0B,IAAA,YAAA7B,MAQA,SAAUs8E,GAAOo5L,IASf,OAAO,SAAC/9K,IACN,GAAmB,UAAfrb,GAAM/vE,KACR,OAAOorF,GAGT,IAAMo1U,GA4GZ,SAAsBp1U,GAAQl4F,IAC5B,OAAOk4F,GAAOp+B,WAAU,SAACntD,IAAC,OAAKA,GAAE3M,KAAOA,KAC1C,CA9GyButa,CAAar1U,GAAQ,WASxC,OANAA,GAAO/lF,OAAOm7Z,GAAa,EAAG,EAAG,CAC/Btta,GAAI,QACJ+nL,MAAO,QACPnzK,QAAS44Z,aAAa3wV,GAAOo5L,MAGxB/9K,GAEX,IAAC,CAvCiC,GA+CpC,SAASs1U,aAAa3wV,GAAOo5L,IAC3B,IAAMtvP,SAAW,SAACvkB,IAChB,OAAO,SAAC7B,IACN,IAAM+gC,GAAQjhC,IAAIw8E,GAAO,CAAC,SAAU,CAAA,GAEpCo5L,GAAUp5L,GAAO,CAAC,SAAUv8E,MAAIghC,GAAO,CAACl/B,IAAM7B,OAI5CmX,SAAW,SAACtV,IAChB,OAAO,WACL,OAAO/B,IAAIw8E,GAAO,CAAC,QAASz6E,OAIhC,MAAO,CACL,CACEpC,GAAI,YACJmjN,UAAWi/D,IACX1qQ,SAAAA,SACAmlE,MAAAA,GACA4sL,SAAUgkK,WACV9mZ,SAAAA,UAEF,CACE3mB,GAAI,YACJmjN,UAAWk/D,IACX3qQ,SAAAA,SACAmlE,MAAAA,GACA4sL,SAAUgkK,WACV9mZ,SAAAA,UAEF,CACE3mB,GAAI,aACJmjN,UAAWuqN,KACXh2Z,SAAAA,SACAmlE,MAAAA,GACA4sL,SAAUgkK,WACV9mZ,SAAAA,UAGN,CAEA,SAASy7P,IAAIr1Q,IACX,IAAQ8vE,GAAkC9vE,GAAlC8vE,MAAOnlE,GAA2B3K,GAA3B2K,SAAU1X,GAAiB+M,GAAjB/M,GAAI2mB,GAAa5Z,GAAb4Z,SAI7B,OAAOwlB,GAAI24O,KAAAA,GAAAC,uBAAA,CAAA,IAAA,YAAA,iBAAA,kBAAA,uCAAA,kBAAA,YAAIjW,iBACR9uQ,GACK68E,GACCnlE,GAAS,OAETiP,GAAS,QAPL,SAACtoB,IAAE,OAAKA,EAAE,GAU7B,CAEA,SAASgkR,IAAIt1Q,IACX,IAAQ8vE,GAAkC9vE,GAAlC8vE,MAAOnlE,GAA2B3K,GAA3B2K,SAAU1X,GAAiB+M,GAAjB/M,GAAI2mB,GAAa5Z,GAAb4Z,SAI7B,OAAOwlB,GAAIwhY,KAAAA,GAAA5oJ,uBAAA,CAAA,IAAA,YAAA,iBAAA,kBAAA,uCAAA,kBAAA,YAAIjW,iBACR9uQ,GACK68E,GACCnlE,GAAS,OAETiP,GAAS,QAPL,SAACtoB,IAAE,OAAKA,EAAE,GAU7B,CAEA,SAASqva,KAAK3ga,IACZ,IAAQ8vE,GAAkC9vE,GAAlC8vE,MAAOnlE,GAA2B3K,GAA3B2K,SAAU1X,GAAiB+M,GAAjB/M,GAAI2mB,GAAa5Z,GAAb4Z,SAI7B,OAAOwlB,GAAIyhY,KAAAA,GAAA7oJ,uBAAIjW,CAAAA,IAAAA,YAAAA,iBAAAA,kBAAAA,aAAAA,oCAAAA,kBAAAA,YAAAA,iBACR9uQ,GACK68E,GACCnlE,GAAS,QACd,EAEKiP,GAAS,SARL,SAACtoB,IAAE,OAAKA,EAAE,GAW7B,CA5FAgva,GAAwB3gW,QAAU,CAAC,mBC7CnC,gBAAamhW,GAAyB,WAKpC,OAAA7gI,cAJA,SAAA6gI,0BAAYrzK,IAAiBoyC,qBAAAihI,2BAC3BrzK,GAAgBoc,iBAAiBl2Q,KAAM,IACzC,GAEA,CAAA,CAAA0B,IAAA,YAAA7B,MACA,SAAUs8E,GAAOo5L,IACf,OAAO,SAAC/9K,IACN,GAAmB,YAAfrb,GAAM/vE,KACR,OAAOorF,GAGT,IAAM41U,GAAc51U,GAAO10F,MAAK,SAACmwF,IAAI,MAAiB,WAAZA,GAAK3zF,MAQ/C,OAPI8ta,KACFA,GAAYl5Z,QAAO,GAAAmoB,OAAAwwQ,mBACdugI,GAAYl5Z,SAAO24R,mBAchC,SAAwB1wN,GAAOo5L,IAC7B,IAAMtvP,SAAW,SAACvkB,IAChB,OAAO,SAAC7B,IACN,IAAMssa,GAAUxsa,IAAIw8E,GAAO,CAAC,WAAY,CAAA,GAExCo5L,GAAUp5L,GAAO,CAAC,WAAYv8E,MAAIusa,GAAS,CAACzqa,IAAM7B,OAIhDmX,SAAW,SAACtV,IAChB,OAAO,WACL,OAAO/B,IAAIw8E,GAAO,CAAC,UAAWz6E,OAIlC,MAAO,CASL,CACEpC,GAAI,oBACJmjN,UAAW4qN,SACXr2Z,SAAAA,SACAmlE,MAAAA,GACAl2D,SAAAA,UAGN,CA7CaqnZ,CAAenxV,GAAOo5L,OAItB/9K,GAEX,IACA,CAvBoC,GAgFtC,SAAS61U,SAAShha,IAChB,IAAQ8vE,GAAwC9vE,GAAxC8vE,MAAO78E,GAAiC+M,GAAjC/M,GAAI0X,GAA6B3K,GAA7B2K,SAAUiP,GAAmB5Z,GAAnB4Z,SAAmB5Z,GAATm6P,KAIvC,OAAO/6N,GAAIwhY,KAAAA,GAAA5oJ,uBAAA,CAAA,IAAA,iBAAA,YAAA,yCAAA,kBAAA,kBAAA,YAAI5T,oBACHt0L,GACL78E,IAJU,SAAC3B,IAAE,OAAKA,EAAE,GAOdqZ,GAAS,SACTiP,GAAS,SAExB,CAnEAknZ,GAA0BnhW,QAAU,CAAC,mBC9BrC,IAAauhW,GAAsC,WAM/C,OAAAjhI,cALA,SAAAihI,uCAAYzzK,IAAiBoyC,qBAAAqhI,wCACzBzzK,GAAgBoc,iBAAiBl2Q,KAAM,IAC3C,GAGA,CAAA,CAAA0B,IAAA,YAAA7B,MAQA,SAAUs8E,GAAOo5L,IASb,OAAO,SAAC/9K,IAEJ,GAAmB,UAAfrb,GAAM/vE,KACN,OAAOorF,GAGX,QAAuCt5F,IAAnCi+E,GAAMqxV,yBAAwC,CAC9C,IAAMpha,GAAOzM,IAAIw8E,GAAO,CAAC,SACnBywV,GAkRtB,SAAsBp1U,GAAQl4F,IAC1B,OAAOk4F,GAAOp+B,WAAU,SAAAntD,IAAC,OAAIA,GAAE3M,KAAOA,KAC1C,CApRmCuta,CAAar1U,GAAQ,WAClCi2U,GAAc,CAChBn1Z,OAAU,CAAC,YAAa,YACxBoQ,OAAU,CAAC,UACXglZ,QAAW,CAAC,YACZ3oZ,KAAQ,CAAC,YACTzY,IAAO,CAAC,WAgBZ,OATkB,IALD3M,IAAIw8E,GAAO,CAAC,2BAA2B/iB,WAAU,SAAA/4D,IAG9D,OADgBota,GAAYpta,GAAQ+L,MAAMhB,SAASgB,GAEvD,KAGIorF,GAAO/lF,OAAOm7Z,GAAa,EAAG,EAAG,CAC7Btta,GAAI,YACJ+nL,MAAO,aACPnzK,QAASy5Z,4BAA4BxxV,GAAOo5L,MAI7C/9K,EACX,CACI,OAAOA,GAInB,IAAC,CA3D8C,GAgEnD,SAASm2U,4BAA4BxxV,GAAOo5L,IACxC,IAAIq4J,GAAgB,GAChBC,GAAqB,GACrBC,GAAsB,GAGpB92Z,SAAW,SAACtV,IACd,OAAO,WACH,IAAMqsa,GAAYpua,IAAIw8E,GAAO,CAAC,wBAE9B,IAAkB,IADDx8E,IAAIw8E,GAAO,CAACz6E,KAAM03D,WAAU,SAAA/4D,IAAO,OAAIA,GAAQR,QAAUkua,MAMtE,YAJ4C7va,IAAxCyB,IAAIw8E,GAAO,CAAC,yBAA6Dx8E,IAAIw8E,GAAO,CAAC,6BACnDj+E,IAAlCyB,IAAIw8E,GAAO,CAAC,oBAAiCyxV,GAAgBjua,IAAIw8E,GAAO,CAAC,wBAClCj+E,IAAvCyB,IAAIw8E,GAAO,CAAC,yBAAsC0xV,GAAqBlua,IAAIw8E,GAAO,CAAC,6BAC3Cj+E,IAAxCyB,IAAIw8E,GAAO,CAAC,0BAAuC2xV,GAAsBnua,IAAIw8E,GAAO,CAAC,yBAClF4xV,KAKbl6J,WAAa,SAACnyQ,IAChB,IAAM2c,GAAQ1e,IAAIw8E,GAAO,CAAC,SACtB6xV,GAAa,GACXP,GAAc,CAChBn1Z,OAAU,CAAC,YAAa,YACxBoQ,OAAU,CAAC,UACXglZ,QAAW,CAAC,YACZ3oZ,KAAQ,CAAC,YACTzY,IAAO,CAAC,WAKZ,OAHA3M,IAAIw8E,GAAO,CAAC,2BAA2Bp5E,KAAI,SAAA1C,IACvCota,GAAYpta,GAAQ+L,MAAMhB,SAASiT,KAAS2vZ,GAAWhra,KAAK,CAAEnD,MAAOQ,GAAQuQ,KAAMy2K,MAAOhnL,GAAQuQ,MACtG,IACO,WACH,OAAOo9Z,KAITj+N,SAAW,SAACruM,IACd,OAAO,SAAC7B,IACJ01Q,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAACz6E,IAAM7B,KACnC01Q,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,uBAAwBt8E,KACrD,IAAMkua,GAAYpua,IAAIw8E,GAAO,CAAC,wBACxB99D,GAAQ1e,IAAIw8E,GAAO,CAAC,UAER,IADDx8E,IAAIw8E,GAAO,CAAC,2BAA2B/iB,WAAU,SAAA/4D,IAAO,OAAIA,GAAQuQ,OAASm9Z,SAG9D,IADDpua,IAAIw8E,GAAO,CAAC,2BAA2B/iB,WAAU,SAAA/4D,IAAO,YAAoBnC,IAAhBmC,GAAQiM,KAAqBjM,GAAQuQ,OAASm9Z,IAAuB,WAAV1vZ,OAG9IwvZ,GAAqB,GACrBt4J,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,iBAF7ByxV,GAAgB,KAGhBr4J,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,sBAAuB0xV,MAEpDlua,IAAIw8E,GAAO,CAAC,2BAA2Bp5E,KAAI,SAAAL,SACxBxE,IAAXwE,GAAG4J,UAAgCpO,IAAXwE,GAAG4J,KAAqB5J,GAAGkO,OAASm9Z,KAC5DH,GAAgBlra,GAAG4J,IACnBuha,GAAqBnra,GAAGy5E,MACxBo5L,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,iBAAkByxV,KAC/Cr4J,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,sBAAuB0xV,KAE5D,IAEJlua,IAAIw8E,GAAO,CAAC,2BAA2Bp5E,KAAI,SAAAomB,IACnCA,GAAKvY,OAASm9Z,KACdD,GAAsB3kZ,GAAK/c,KAC3BmpQ,GAAUp5L,GAAOv8E,MAAIu8E,GAAO,CAAC,uBAAwB2xV,KAE7D,OAKNG,uBAAyB,SAACvsa,IAC5B,OAAO,WACH,OAAOosa,KAITI,gBAAkB,SAACxsa,IACrB,OAAO,WACH,OAAOksa,KAITO,qBAAuB,SAACzsa,IAC1B,OAAO,WACH,OAAOmsa,KA0Df,MApDkB,WADAlua,IAAIw8E,GAAO,CAAC,SAEf,CAAC,CACJ78E,GAAI,0BACJmjN,UAAW2rN,+BACXjyV,MAAAA,GACAkrG,MAAO,oBACPwsF,WAAAA,WACA78P,SAAAA,SACA+4L,SAAAA,UACD,CACCzwM,GAAI,4BACJmjN,UAAW4rN,oBACXlyV,MAAAA,GACAkrG,MAAO,wBACP4mP,uBAAAA,uBACA70Y,SAAU,QACX,CACC95B,GAAI,2BACJmjN,UAAW6rN,cACXnyV,MAAAA,GACAkrG,MAAO,sBACP6mP,gBAAAA,gBACA90Y,SAAU,QACX,CACC95B,GAAI,iCACJmjN,UAAW8rN,mBACXpyV,MAAAA,GACAkrG,MAAO,uBACP8mP,qBAAAA,qBACA/0Y,SAAU,SAGP,CAAC,CACJ95B,GAAI,0BACJmjN,UAAW2rN,+BACXjyV,MAAAA,GACAkrG,MAAO,oBACPwsF,WAAAA,WACA78P,SAAAA,SACA+4L,SAAAA,UACD,CACCzwM,GAAI,4BACJmjN,UAAW4rN,oBACXlyV,MAAAA,GACAkrG,MAAO,wBACP4mP,uBAAAA,uBACA70Y,SAAU,QAO1B,CAEA,SAASg1Y,+BAA+B/ha,IACpC,IACI/M,GAOA+M,GAPA/M,GACA68E,GAMA9vE,GANA8vE,MACAkrG,GAKAh7K,GALAg7K,MAKAh7K,GAJAhM,YACAwzQ,GAGAxnQ,GAHAwnQ,WACA78P,GAEA3K,GAFA2K,SACA+4L,GACA1jM,GADA0jM,SAGJ,OAAOtkK,GAAI24O,KAAAA,GAAAC,uBAAA,CAAA,IAAA,YAAA,iBAAA,eAAA,sCAAA,kBAAA,kBAAA,cAAKzQ,YACXt0Q,GACK68E,GACFkrG,GAEKwsF,GAAW,0BACb78P,GAAS,0BACT+4L,GAAS,SAGxB,CAEA,SAASs+N,oBAAoBhia,IACzB,IACI/M,GAMA+M,GANA/M,GACA+nL,GAKAh7K,GALAg7K,MACAlrG,GAIA9vE,GAJA8vE,MACA/iD,GAGA/sB,GAHA+sB,SAGA/sB,GAFAhM,YACA4ta,GACA5ha,GADA4ha,uBAKJ,OAAOxiY,GAAIwhY,KAAAA,GAAA5oJ,uBAAKmqJ,CAAAA,IAAAA,YAAAA,eAAAA,iBAAAA,kBAAAA,kBAAAA,kBAAAA,cAAAA,eACXlva,GACG+nL,GACGlrG,GACA8xV,GAAuB,QACvB70Y,IAPM,SAACz7B,IAAE,OAAKA,EAAE,GAU/B,CAEA,SAAS2wa,cAAcjia,IACnB,IACI/M,GAMA+M,GANA/M,GACA+nL,GAKAh7K,GALAg7K,MACAlrG,GAIA9vE,GAJA8vE,MACA/iD,GAGA/sB,GAHA+sB,SAGA/sB,GAFAhM,YACA6ta,GACA7ha,GADA6ha,gBAKJ,OAAOziY,GAAIyhY,KAAAA,GAAA7oJ,uBAAKmqJ,CAAAA,IAAAA,YAAAA,eAAAA,iBAAAA,kBAAAA,kBAAAA,kBAAAA,cAAAA,eACXlva,GACG+nL,GACGlrG,GACA+xV,GAAgB,OAChB90Y,IAPM,SAACz7B,IAAE,OAAKA,EAAE,GAU/B,CAEA,SAAS4wa,mBAAmBlia,IACxB,IACI/M,GAMA+M,GANA/M,GACA+nL,GAKAh7K,GALAg7K,MACAlrG,GAIA9vE,GAJA8vE,MACA/iD,GAGA/sB,GAHA+sB,SAGA/sB,GAFAhM,YACA8ta,GACA9ha,GADA8ha,qBAKJ,OAAO1iY,GAAIgjY,KAAAA,GAAApqJ,uBAAKmqJ,CAAAA,IAAAA,YAAAA,eAAAA,iBAAAA,kBAAAA,kBAAAA,kBAAAA,cAAAA,eACXlva,GACG+nL,GACGlrG,GACAgyV,GAAqB,SACrB/0Y,IAPM,SAACz7B,IAAE,OAAKA,EAAE,GAU/B,CA5OA4va,GAAuCvhW,QAAU,CAAC,mBC9D3C,IAAM0iW,GAA2B,CACtChgW,SAAU,CACR,0BACA,yCACA,6BAEFigW,wBAAyB,CAAC,OAAQhC,IAClCiC,uCAAwC,CACtC,OACArB,IAEFsB,0BAA2B,CAAC,OAAQ1B,KCbhC2B,GAAQ,WAYX,OAAAxiI,cAXD,SAAAwiI,SAAYC,GAAWriZ,GAAStgB,IAAkC,IAA5B4ia,KAAmBhka,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,KAAAA,UAAA,GAAOkhS,qBAAA4iI,UAC1DE,KACFtiZ,GAAQ8tN,kBAAiBn+M,GAAAA,OAAAwwQ,mBACnBngR,GAAQ8tN,mBAAqB,IAAE,CACnC+xL,KAEW,SAATnga,IACFsgB,GAAQ8tN,kBAAkBx3O,KAAK0ra,KAGnC1ua,KAAKiva,WAAa,IAAIF,GAAUriZ,GAClC,GAAC,CAAA,CAAAhrB,IAAA,eAAA7B,MAED,SAAa6oO,GAAQvpO,IACnB,OAAOa,KAAKiva,WAAWl5L,aAAarN,GAAQvpO,GAC9C,GAAC,CAAAuC,IAAA,aAAA7B,MAED,WACE6kB,QAAQ84F,KAAK,oBAEb,IAAMz7G,GAAS/B,KAAKiva,WAAWtrJ,WAC3B3jR,KAAKiva,WAAWtrJ,aAChB,KAEJ,OADAj/P,QAAQ84F,KAAK,gBAAiBz7G,IACvBA,EACT,GAAC,CAAAL,IAAA,KAAA7B,MAED,SAAGoP,IAEsB,mBAAnBjE,UAAA9K,QAAA,OAAAhC,EAAA8M,UAAA,IACFhL,KAAKiva,WAAW7hN,GAAGn+M,GAAKjE,UAAA9K,eAAAhC,EAAA8M,UAAS,IAEjChL,KAAKiva,WAAW7hN,GAAGn+M,GAAKjE,UAAA9K,QAAAhC,OAAAA,EAAA8M,UAAA,GAAAA,UAAA9K,QAAA,OAAAhC,EAAA8M,UAAA,GAE5B,IAAC,CAnCW,GCCDy4Q,YAAUyrJ,IACrB,SAAAzrJ,WAAY/2P,IAAqC,IAA5BsiZ,KAAmBhka,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,KAAAA,UAAA,GAAO,OAAAkhS,qBAAAzoB,YAAAgqB,WAAAhqB,KAAAA,WACvC0rJ,CAAAA,aAAIziZ,GAAS,aAAcsiZ,IACnC,CAAC,OAAAnhI,UAAApqB,WAH6BqrJ,IAG7BxiI,aAAA7oB,WAAA,ICHU5pC,YAAIq1L,IACf,SAAAr1L,KAAYntN,IAAqC,IAA5BsiZ,KAAmBhka,UAAA9K,OAAA,QAAAhC,IAAA8M,UAAA,KAAAA,UAAA,GAAO,OAAAkhS,qBAAAryD,MAAA4zD,WAAA5zD,KAAAA,KACvCvrO,CAAAA,OAAGoe,GAAS,OAAQsiZ,IAC5B,CAAC,OAAAnhI,UAAAh0D,KAHuBi1L,IAGvBxiI,aAAAzyD,KAAA"}